From d8444dcf3ccd5d6c23e9e9d41b1ded6c2d3e0dfb Mon Sep 17 00:00:00 2001 From: jeffrey s hill md Date: Thu, 16 Apr 2020 14:59:41 -0500 Subject: [PATCH 01/89] Added placeholders --- app/views/spree/admin/variants/_form.html.haml | 4 ++-- config/locales/en.yml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/spree/admin/variants/_form.html.haml b/app/views/spree/admin/variants/_form.html.haml index 6da99b7ffc..b0b2ae5683 100644 --- a/app/views/spree/admin/variants/_form.html.haml +++ b/app/views/spree/admin/variants/_form.html.haml @@ -1,10 +1,10 @@ .label-block.left.six.columns.alpha{'ng-app' => 'admin.products'} .field = f.label :display_name, t('.display_name') - = f.text_field :display_name, class: "fullwidth" + = f.text_field :display_name, class: "fullwidth", placeholder: t('admin.products.display_name_placeholder') .field = f.label :display_as, t('.display_as') - = f.text_field :display_as, class: "fullwidth" + = f.text_field :display_as, class: "fullwidth", placeholder: t('admin.products.display_as_placeholder') - if product_has_variant_unit_option_type?(@product) - if @product.variant_unit != 'items' diff --git a/config/locales/en.yml b/config/locales/en.yml index 21d9ab39cf..9cad56cf95 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -476,6 +476,8 @@ en: products: unit_name_placeholder: 'eg. bunches' + display_as_placeholder: 'eg. 2 kg' + display_name_placeholder: 'eg. Tomatoes' index: unit: Unit display_as: Display As From ed91c179cddd0bdccb715b33ebc0126e97cb1fff Mon Sep 17 00:00:00 2001 From: jeffrey s hill md Date: Fri, 17 Apr 2020 12:04:27 -0500 Subject: [PATCH 02/89] Changed translation paths --- app/views/spree/admin/variants/_form.html.haml | 4 ++-- config/locales/en.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/spree/admin/variants/_form.html.haml b/app/views/spree/admin/variants/_form.html.haml index b0b2ae5683..0123c7de18 100644 --- a/app/views/spree/admin/variants/_form.html.haml +++ b/app/views/spree/admin/variants/_form.html.haml @@ -1,10 +1,10 @@ .label-block.left.six.columns.alpha{'ng-app' => 'admin.products'} .field = f.label :display_name, t('.display_name') - = f.text_field :display_name, class: "fullwidth", placeholder: t('admin.products.display_name_placeholder') + = f.text_field :display_name, class: "fullwidth", placeholder: t('.display_name_placeholder') .field = f.label :display_as, t('.display_as') - = f.text_field :display_as, class: "fullwidth", placeholder: t('admin.products.display_as_placeholder') + = f.text_field :display_as, class: "fullwidth", placeholder: t('.display_as_placeholder') - if product_has_variant_unit_option_type?(@product) - if @product.variant_unit != 'items' diff --git a/config/locales/en.yml b/config/locales/en.yml index 9cad56cf95..5a8ac51bc6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -476,8 +476,6 @@ en: products: unit_name_placeholder: 'eg. bunches' - display_as_placeholder: 'eg. 2 kg' - display_name_placeholder: 'eg. Tomatoes' index: unit: Unit display_as: Display As @@ -3382,6 +3380,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using price: "Price" display_as: "Display As" display_name: "Display Name" + display_as_placeholder: 'eg. 2 kg' + display_name_placeholder: 'eg. Tomatoes' autocomplete: producer_name: "Producer" unit: "Unit" From 41c0204cfa77ce39233eb7ed6066eae5a9c57e34 Mon Sep 17 00:00:00 2001 From: Lucas Hiago Date: Fri, 17 Apr 2020 22:09:31 -0300 Subject: [PATCH 03/89] Update instagram and linkedin links --- app/models/content_configuration.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/content_configuration.rb b/app/models/content_configuration.rb index 971cea658c..9c29a70576 100644 --- a/app/models/content_configuration.rb +++ b/app/models/content_configuration.rb @@ -57,8 +57,8 @@ class ContentConfiguration < Spree::Preferences::FileConfiguration # Other preference :footer_facebook_url, :string, default: "https://www.facebook.com/OpenFoodNet" preference :footer_twitter_url, :string, default: "https://twitter.com/OpenFoodNet" - preference :footer_instagram_url, :string, default: "" - preference :footer_linkedin_url, :string, default: "http://www.linkedin.com/groups/Open-Food-Foundation-4743336" + preference :footer_instagram_url, :string, default: "https://www.instagram.com/openfoodnetworkuk/" + preference :footer_linkedin_url, :string, default: "https://www.linkedin.com/company/openfoodnetwork/" preference :footer_googleplus_url, :string, default: "" preference :footer_pinterest_url, :string, default: "" preference :footer_email, :string, default: "hello@openfoodnetwork.org" From ac2ab34e11383138a08bb8197cef226a839562bc Mon Sep 17 00:00:00 2001 From: Lucas Hiago Date: Sat, 18 Apr 2020 09:52:02 -0300 Subject: [PATCH 04/89] Add connect with us footer to customer order confirmation email --- .../spree/order_mailer/confirm_email_for_customer.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/spree/order_mailer/confirm_email_for_customer.html.haml b/app/views/spree/order_mailer/confirm_email_for_customer.html.haml index f91692fdb6..cfad3c42b5 100644 --- a/app/views/spree/order_mailer/confirm_email_for_customer.html.haml +++ b/app/views/spree/order_mailer/confirm_email_for_customer.html.haml @@ -25,3 +25,4 @@ = render 'shipping' = render 'special_instructions' = render 'signoff' += render 'shared/mailers/social_and_contact' From acfe0c540a6cf1825859f3e8085673cf5713f324 Mon Sep 17 00:00:00 2001 From: Lucas Hiago Date: Sat, 18 Apr 2020 10:02:09 -0300 Subject: [PATCH 05/89] Create instagram css property and apply --- app/assets/stylesheets/mail/email.css.scss | 4 ++++ app/views/shared/mailers/_social_and_contact.html.haml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/mail/email.css.scss b/app/assets/stylesheets/mail/email.css.scss index e6eabf665f..bb1006c9ea 100644 --- a/app/assets/stylesheets/mail/email.css.scss +++ b/app/assets/stylesheets/mail/email.css.scss @@ -138,6 +138,10 @@ a { &.ms { background-color: #000 !important; } + + &.ig { + background-color: #fb3958 !important; + } } .sidebar .soc-btn { diff --git a/app/views/shared/mailers/_social_and_contact.html.haml b/app/views/shared/mailers/_social_and_contact.html.haml index 49c44781df..7d8a74a457 100644 --- a/app/views/shared/mailers/_social_and_contact.html.haml +++ b/app/views/shared/mailers/_social_and_contact.html.haml @@ -18,7 +18,7 @@ %a.soc-btn.li{href: ContentConfig.footer_linkedin_url} LinkedIn -if ContentConfig.footer_instagram_url.present? - %a.soc-btn.tw{href: ContentConfig.footer_instagram_url} + %a.soc-btn.ig{href: ContentConfig.footer_instagram_url} Instagram %table.column{:align => "left"} %tr From 53183b8598092092d86b1fc20fc4494d1c9a53b3 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 15 Apr 2020 23:09:29 +0200 Subject: [PATCH 06/89] Eager-load properties in inject_enterprise_and_relatives --- app/helpers/injection_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/injection_helper.rb b/app/helpers/injection_helper.rb index 965959df8f..508a984920 100644 --- a/app/helpers/injection_helper.rb +++ b/app/helpers/injection_helper.rb @@ -47,7 +47,7 @@ module InjectionHelper enterprises_and_relatives = current_distributor. relatives_including_self. activated. - includes(address: [:state, :country]). + includes(:properties, address: [:state, :country], supplied_products: :properties). all inject_json_ams "enterprises", From de8d8e658c439bba0417ee1484fd19b7ec88ef4d Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 3 Apr 2020 16:49:28 +0200 Subject: [PATCH 07/89] Add PROFILE var to set production-like settings I took this from a recent newsletter I read. Sometimes replication performance issues locally is actually slower than production due to dev mode settings (code reloading, etc.), heavy de-only gems and the asset pipeline. The PROFILE env var switches these settings all at the same time, giving us an environment closer to production, essential for reliable profiling. Then, rack-mini-profiler is going to be more accurate. Apparently it's something [RubyGems](https://github.com/rubygems/rubygems.org/blob/b026df86ae9df0e4d4c7dae2f220fe2219d52350/config/environments/development.rb#L72-L92) and [CodeTriage](https://github.com/codetriage/CodeTriage/commit/a3c957647dc039d73036c565620643cf216e30c7) both use. --- .gitignore | 1 + config/environments/development.rb | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 82f0380039..f6c29f53ff 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ public/system public/stylesheets public/images public/spree +public/assets config/abr.yml config/initializers/feature_toggle.rb NERD_tree* diff --git a/config/environments/development.rb b/config/environments/development.rb index 20310726cb..8782f1b635 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,10 +1,14 @@ Openfoodnetwork::Application.configure do # Settings specified here will take precedence over those in config/application.rb + # + # PROFILE switches several settings to a more "production-like" value + # for profiling and benchmarking the application locally. All changes you + # make to the app will require restart. # In the development environment your application's code is reloaded on # every request. This slows down response time but is perfect for development # since you don't have to restart the web server when you make code changes. - config.cache_classes = false + config.cache_classes = !!ENV["PROFILE"] # :file_store is used by default when no cache store is specifically configured. # config.cache_store = :file_store @@ -14,7 +18,7 @@ Openfoodnetwork::Application.configure do # Show full error reports and disable caching config.consider_all_requests_local = true - config.action_controller.perform_caching = false + config.action_controller.perform_caching = !!ENV["PROFILE"] # Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = false @@ -28,8 +32,25 @@ Openfoodnetwork::Application.configure do # Do not compress assets config.assets.compress = false + # Generate digests for assets URLs. + # + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = !!ENV["PROFILE"] + # Expands the lines which load the assets - config.assets.debug = false + # + # Setting this to false makes Rails bundle assets into all.js and all.css. + # + # Disabling asset debugging still requires that assets be compiled for each + # request. You can avoid that by precompiling the assets as in production: + # + # $ bundle exec rake assets:precompile:primary assets:precompile:nondigest + # + # You can remove them by simply running: + # + # $ bundle exec rake assets:clean + config.assets.debug = !ENV["PROFILE"] # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. From 2d9b41729e6227de0585f5cfb839a7fb7e00db78 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 10 Apr 2020 12:47:47 +0200 Subject: [PATCH 08/89] Use memory cache-store when profiling Or you want see any change when playing fragment-caching or other caching strategies. --- config/environments/development.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index 8782f1b635..b0e6ceafd1 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -11,7 +11,7 @@ Openfoodnetwork::Application.configure do config.cache_classes = !!ENV["PROFILE"] # :file_store is used by default when no cache store is specifically configured. - # config.cache_store = :file_store + config.cache_store = :memory_store if !!ENV["PROFILE"] # Log error messages when you accidentally call methods on nil. config.whiny_nils = true From 5f51b21fe96d4c9c74548d7ce49e133eb8e6fb66 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Fri, 24 Apr 2020 04:29:52 +1000 Subject: [PATCH 09/89] Updating translations for config/locales/fr.yml --- config/locales/fr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 528c35b883..89c66d1135 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -323,6 +323,7 @@ fr: show_n_more: Montrer + %{num} choose: "Choisir..." please_select: Veuillez choisir... + column_save_as_default: Par défaut columns: Colonnes actions: Actions viewing: "Vous regardez: %{current_view_name}" From 8bcc9456d8d06483ca62fed24abfa0443313c870 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Fri, 24 Apr 2020 04:30:04 +1000 Subject: [PATCH 10/89] Updating translations for config/locales/en_FR.yml --- config/locales/en_FR.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index c242e06622..0087781995 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -323,6 +323,7 @@ en_FR: show_n_more: Show %{num} more choose: "Choose..." please_select: Please select... + column_save_as_default: Save As Default columns: Columns actions: Actions viewing: "Viewing: %{current_view_name}" From cebba4dd4368e9d632a705108af974cf826c827d Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Fri, 24 Apr 2020 18:22:49 +1000 Subject: [PATCH 11/89] Updating translations for config/locales/en_GB.yml --- config/locales/en_GB.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 3f69dae27f..978681afdb 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -323,6 +323,7 @@ en_GB: show_n_more: Show %{num} more choose: "Choose..." please_select: Please select... + column_save_as_default: Save As Default columns: Columns actions: Actions viewing: "Viewing: %{current_view_name}" @@ -1919,6 +1920,7 @@ en_GB: admin_enterprise_relationships_permits: "permits" admin_enterprise_relationships_seach_placeholder: "Search" admin_enterprise_relationships_button_create: "Create" + admin_enterprise_relationships_to: "to" admin_enterprise_groups: "Enterprise Groups" admin_enterprise_groups_name: "Name" admin_enterprise_groups_owner: "Owner" From c224df9b6acfb2e95cb265fac65e72aafcefcdd1 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 7 Apr 2020 09:18:21 +0200 Subject: [PATCH 12/89] Do not trigger an orderChanged with null quantity When loading the page $watchGroup calls the listener function for every listed line item but with a set variant and null quantity and max_quantity. There's no point on computing an order change when there was none. This saves an empty request on the second most used endpoint of the app, specially busy when users are placing orders. --- .../darkswarm/directives/shop_variant.js.coffee | 6 +++++- .../unit/darkswarm/services/cart_spec.js.coffee | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/directives/shop_variant.js.coffee b/app/assets/javascripts/darkswarm/directives/shop_variant.js.coffee index d679e6c3f0..84615e3125 100644 --- a/app/assets/javascripts/darkswarm/directives/shop_variant.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/shop_variant.js.coffee @@ -5,5 +5,9 @@ Darkswarm.directive "shopVariant", -> scope: variant: '=' controller: ($scope, Cart) -> - $scope.$watchGroup ['variant.line_item.quantity', 'variant.line_item.max_quantity'], -> + $scope.$watchGroup [ + 'variant.line_item.quantity', + 'variant.line_item.max_quantity' + ], (new_value, old_value) -> + return if old_value[0] == null && new_value[0] == null Cart.adjust($scope.variant.line_item) diff --git a/spec/javascripts/unit/darkswarm/services/cart_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/cart_spec.js.coffee index f8d124c110..0b9c398a85 100644 --- a/spec/javascripts/unit/darkswarm/services/cart_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/cart_spec.js.coffee @@ -45,6 +45,13 @@ describe 'Cart service', -> Cart.adjust(order.line_items[0]) expect(Cart.line_items.length).toEqual 0 + it "does not add an item in the cart without quantity", -> + Cart.line_items = [] + + spyOn(Cart, 'orderChanged') + order.line_items[0].max_quantity = 0 + expect(Cart.orderChanged).not.toHaveBeenCalled() + it "sums the quantity of each line item for cart total", -> order.line_items[0].quantity = 2 expect(Cart.total_item_count()).toEqual 2 From ba32e2d676028b520e6201775d73291b08511a04 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Mon, 27 Apr 2020 18:08:38 +1000 Subject: [PATCH 13/89] Updating translations for config/locales/fil_PH.yml --- config/locales/fil_PH.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/locales/fil_PH.yml b/config/locales/fil_PH.yml index 0b3c2d1ce3..6629b04da0 100644 --- a/config/locales/fil_PH.yml +++ b/config/locales/fil_PH.yml @@ -323,6 +323,7 @@ fil_PH: show_n_more: Ipakita%{num}pa choose: "pumili..." please_select: pumili + column_save_as_default: i-save bilang default columns: hanay actions: mga kilos viewing: "Tinitignan: %{current_view_name}" @@ -1921,6 +1922,7 @@ fil_PH: admin_enterprise_relationships_permits: "mga permit" admin_enterprise_relationships_seach_placeholder: "hanapin" admin_enterprise_relationships_button_create: "gumawa" + admin_enterprise_relationships_to: "sa" admin_enterprise_groups: "mga grupo ng enterprise" admin_enterprise_groups_name: "pangalan" admin_enterprise_groups_owner: "may-ari" From 3b7ad0ef4ef91595d3b73e2f7d63646899cecd57 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Mon, 27 Apr 2020 23:49:48 +1000 Subject: [PATCH 14/89] Updating translations for config/locales/ca.yml --- config/locales/ca.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 2ffb83cecc..f1fcc6ccf5 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -323,6 +323,7 @@ ca: show_n_more: Mostra %{num} més choose: "Tria ..." please_select: Seleccioneu ... + column_save_as_default: Per defecte columns: Columnes actions: Accions viewing: "Veient: %{current_view_name}" @@ -1464,9 +1465,9 @@ ca: email_so_edit_false_html: "Pots veure detalls d'aquesta comanda en qualsevol moment." email_so_contact_distributor_html: "Si tens alguna pregunta pots contactar amb %{distributor} a través d'%{email}." email_so_contact_distributor_to_change_order_html: "Aquesta comanda s'ha creat automàticament per a vostè. Podeu fer canvis fins que les comandes es tanquin a %{orders_close_at} contactant a %{distributor} a través d'%{email}." - email_so_confirmation_intro_html: "La teva comanda amb %{distributor} ja està confirmada" + email_so_confirmation_intro_html: "La teva comanda amb %{distributor} ja està confirmada" email_so_confirmation_explainer_html: "Vas realitzar aquesta comanda automàticament i ara s'ha finalitzat." - email_so_confirmation_details_html: "A continuació trobareu tot el que necessiteu saber sobre la comanda de %{distributor} :" + email_so_confirmation_details_html: "A continuació trobareu tot el que necessiteu saber sobre la comanda de %{distributor} :" email_so_empty_intro_html: "Hem intentat fer una nova comanda amb %{distributor} , però hem tingut alguns problemes..." email_so_empty_explainer_html: "Malauradament, cap dels productes que heu demanat estava disponible, de manera que no s'ha realitzat cap comanda. Les quantitats originals que heu sol·licitat apareixen ratllades a sota." email_so_empty_details_html: "Aquests són els detalls de la comanda sense confirmar per %{distributor} :" @@ -1922,6 +1923,7 @@ ca: admin_enterprise_relationships_permits: "Permet" admin_enterprise_relationships_seach_placeholder: "Cerca" admin_enterprise_relationships_button_create: "Crear" + admin_enterprise_relationships_to: "a" admin_enterprise_groups: "Grups d'organització" admin_enterprise_groups_name: "Nom" admin_enterprise_groups_owner: "Propietària" From 340f669506ab8c66cc4f01bc627e90505ef3d88b Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 01:37:36 +1000 Subject: [PATCH 15/89] Updating translations for config/locales/en_GB.yml --- config/locales/en_GB.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 978681afdb..dd814710bd 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -3223,7 +3223,9 @@ en_GB: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" From 4332734f271af06503e0a1ec4602a5787f23eddd Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 01:37:44 +1000 Subject: [PATCH 16/89] Updating translations for config/locales/ca.yml --- config/locales/ca.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index f1fcc6ccf5..6f4dc90bb9 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -664,7 +664,7 @@ ca: primary_details: name: Nom name_placeholder: p. ex. Horta Josep Ribes - groups: Grups + groups: Xarxes/Grups groups_tip: Seleccioneu grups o xarxes de la quals sou membres. Això ajudarà les consumidores a trobar la vostra organització o empresa. groups_placeholder: Comenceu a escriure per cercar xarxes disponibles... primary_producer: Productora principal? @@ -1207,7 +1207,7 @@ ca: menu_2_url: "/map" menu_3_title: "Productors" menu_3_url: "/producers" - menu_4_title: "Grups" + menu_4_title: "Xarxes/Grups" menu_4_url: "/groups" menu_5_title: "Sobre" menu_5_url: "http://katuma.org/" @@ -1263,7 +1263,7 @@ ca: label_map: "Mapa" label_producer: "Productora" label_producers: "Productors" - label_groups: "Grups" + label_groups: "Xarxes/Grups" label_about: "Sobre" label_connect: "Connecta" label_learn: "Aprèn" @@ -1557,8 +1557,8 @@ ca: components_profiles_show: "Mostra els perfils" components_filters_nofilters: "Sense filtres" components_filters_clearfilters: "Esborra tots els filtres" - groups_title: Grups - groups_headline: Xarxes / regions + groups_title: Xarxes/Grups + groups_headline: Xarxes /Grups groups_text: "Cada productora és única. Tots els negocis tenen alguna cosa diferent per oferir. Els nostres grups són col·lectius o xarxes de productores, grups de consum o distribuïdores que comparteixen alguna cosa comú com la ubicació, la parada en un mercat de pagès o la filosofia. Això fa que la teva experiència de compra sigui més fàcil. Explora els nostres grups." groups_search: "Cerca nom o paraula clau" groups_no_groups: "No s'ha trobat cap xarxa" @@ -1594,7 +1594,7 @@ ca: modal_hubs_abstract: Els nostres grups són el punt de contacte entre tu i les persones que fan els teus aliments. modal_hubs_content1: Pots cercar un grup convenient per ubicació o nom. Alguns grups tenen diversos punts on pots recollir les vostres comandes i alguns també proporcionen opcions de lliurament. Cada grup és un punt de venda amb operacions comercials i logística independents, per la qual cosa és normal que existeixin variacions d'un grup a un altre. modal_hubs_content2: Només pots comprar en un grup de consum a la vegada. - modal_groups: "Xarxes / regions" + modal_groups: "Xarxes /Grups" modal_groups_content1: Aquestes són les organitzacions i les relacions entre els grups que conformen l'OFN modal_groups_content2: Alguns grups estan agrupats per localització o Ajuntament, altres per similituds no geogràfiques. modal_how: "Com funciona" @@ -3223,7 +3223,9 @@ ca: autocomplete: producer_name: "Productor" unit: "Unitat" - general_settings: + shared: + sortable_header: + name: "Nom" edit: legal_settings: "Paràmetres legals" cookies_consent_banner_toggle: "Mostra banner de consentiment de cookies" From 65c9c287e8fc6f4e93151f42c9a55dcee526a087 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 01:37:49 +1000 Subject: [PATCH 17/89] Updating translations for config/locales/en_FR.yml --- config/locales/en_FR.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index 0087781995..37759490e5 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -3217,7 +3217,9 @@ en_FR: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" From 171ba096633d3bd630657b8c0b92e08e6ce658c5 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 01:40:44 +1000 Subject: [PATCH 18/89] Updating translations for config/locales/fr.yml --- config/locales/fr.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 89c66d1135..eeacebe003 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -3247,7 +3247,9 @@ fr: autocomplete: producer_name: "Producteur" unit: "Unité" - general_settings: + shared: + sortable_header: + name: "Produit/Variante" edit: legal_settings: "Configuration légales" cookies_consent_banner_toggle: "Afficher la bannière de consentement à l'utilisation des cookies" From 670fff9d36968f07b5aca5835c69feacf6b9a35b Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 02:38:07 +1000 Subject: [PATCH 19/89] Updating translations for config/locales/es_CR.yml --- config/locales/es_CR.yml | 45 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/config/locales/es_CR.yml b/config/locales/es_CR.yml index 151ed7be42..f04841c2da 100644 --- a/config/locales/es_CR.yml +++ b/config/locales/es_CR.yml @@ -323,6 +323,7 @@ es_CR: show_n_more: Mostrar %{num} más choose: "Escoger..." please_select: Por favor selecciona ... + column_save_as_default: Guardar por defecto columns: Columnas actions: Acciones viewing: "Viendo: %{current_view_name}" @@ -2084,12 +2085,12 @@ es_CR: report_tax_rates: Porcentajes de los Impuestos report_tax_types: Tipos de Impuestos report_header_order_cycle: Ciclo de Pedido - report_header_user: Usuaria - report_header_email: Email + report_header_user: Usuario + report_header_email: Correo electrónico report_header_status: Estado report_header_comments: Comentarios report_header_first_name: Nombre - report_header_last_name: Apellido + report_header_last_name: Apellidos report_header_phone: Teléfono report_header_suburb: Barrio report_header_address: Dirección @@ -2106,14 +2107,14 @@ es_CR: report_header_shipping_method: Método de envío report_header_shipping_instructions: Instrucciones de envío report_header_ship_street: Calle de envío - report_header_ship_street_2: Calle de envío 2 + report_header_ship_street_2: 'Calle 2 de envío ' report_header_ship_city: Ciudad de envío report_header_ship_postcode: Código postal de envío report_header_ship_state: Provincia de envío report_header_billing_street: Calle de facturación - report_header_billing_street_2: Calle de facturación 2 - report_header_billing_street_3: Calle de facturación 3 - report_header_billing_street_4: Calle de facturación 4 + report_header_billing_street_2: 'Calle 2 de facturación ' + report_header_billing_street_3: 'Calle 3 de facturación ' + report_header_billing_street_4: 'Calle 4 de facturación ' report_header_billing_city: Ciudad de facturación report_header_billing_postcode: Código postal de facturación report_header_billing_state: Provincia de facturación @@ -2122,12 +2123,12 @@ es_CR: report_header_order_number: Número de pedido report_header_date: Fecha report_header_confirmation_date: Fecha de confirmación - report_header_tags: Tags + report_header_tags: Etiquetas report_header_items: Artículos report_header_items_total: "Artículos en total %{currency_symbol}" - report_header_taxable_items_total: "Artículos con Impuestos en Total (%{currency_symbol})" - report_header_sales_tax: "Impuesto sobre las Ventas (%{currency_symbol})" - report_header_delivery_charge: "Gastos de Envío (%{currency_symbol})" + report_header_taxable_items_total: "Total en artículos con impuestos (%{currency_symbol})" + report_header_sales_tax: "Impuesto sobre las ventas (%{currency_symbol})" + report_header_delivery_charge: "Cobros de Envío (%{currency_symbol})" report_header_tax_on_delivery: "Impuestos sobre la entrega (%{currency_symbol})" report_header_tax_on_fees: "Impuesto sobre las comisiones (%{currency_symbol})" report_header_total_tax: "Total Impuestos (%{currency_symbol})" @@ -2144,22 +2145,22 @@ es_CR: report_header_total_available: Total disponible report_header_unallocated: Sin asignar report_header_max_quantity_excess: Cantidad máxima - report_header_taxons: Clasificación + report_header_taxons: Clasificaciones report_header_supplier: Proveedor - report_header_producer: Productora + report_header_producer: Productor report_header_producer_suburb: Barrio Productora report_header_unit: Unidad report_header_group_buy_unit_quantity: Agrupar por cantidad unidad - report_header_cost: Coste - report_header_shipping_cost: Coste del envío - report_header_curr_cost_per_unit: Coste por unidad actual - report_header_total_shipping_cost: Coste total del envío + report_header_cost: Costo + report_header_shipping_cost: Costo del envío + report_header_curr_cost_per_unit: Costo por unidad actual + report_header_total_shipping_cost: Costo total del envío report_header_payment_method: Método de pago report_header_sells: Vende report_header_visible: Visible report_header_price: Precio - report_header_unit_size: Unidad de medida - report_header_distributor: Distribuidora + report_header_unit_size: Tamaño de la unidad + report_header_distributor: Distribuidor report_header_distributor_address: Dirección del distribuidor report_header_distributor_city: Ciudad del distribuidor report_header_distributor_postcode: Código postal del distribuidor @@ -2174,7 +2175,7 @@ es_CR: report_header_units_required: Unidades requeridas report_header_remainder: Recordatorio report_header_order_date: Fecha de pedido - report_header_order_id: ID de Pedido + report_header_order_id: ID de pedido report_header_item_name: Nombre del artículo report_header_temp_controlled_items: ¿Artículos de temperatura controlada? report_header_customer_name: Nombre del cliente @@ -3222,7 +3223,9 @@ es_CR: autocomplete: producer_name: "Productor" unit: "Unidad" - general_settings: + shared: + sortable_header: + name: "Nombre" edit: legal_settings: "Configuraciones legales" cookies_consent_banner_toggle: "Mostrar el banner de consentimiento de cookies" From 3ce7e967772946728422d3e4e68fde1efd7ab778 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 21:22:18 +0200 Subject: [PATCH 20/89] Add some debounce and an onwheel hack to product add to basket field Debounce ensures we don't get a million requests if the up/down buttons are clicked rapidly. The onwheel hack adds some protection against scrolling triggering the quantity up/down. See: https://stackoverflow.com/a/51076231 --- .../partials/shop_variant_no_group_buy.html.haml | 2 ++ .../shop_variant_with_group_buy.html.haml | 4 ++++ spec/features/consumer/shopping/shopping_spec.rb | 15 +++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/templates/partials/shop_variant_no_group_buy.html.haml b/app/assets/javascripts/templates/partials/shop_variant_no_group_buy.html.haml index 2e7e49a0ca..8ba787f20b 100644 --- a/app/assets/javascripts/templates/partials/shop_variant_no_group_buy.html.haml +++ b/app/assets/javascripts/templates/partials/shop_variant_no_group_buy.html.haml @@ -6,6 +6,8 @@ min: 0, placeholder: "0", "ofn-disable-scroll" => true, + "ng-debounce" => "500", + onwheel: "this.blur()", "ng-model" => "variant.line_item.quantity", "ofn-on-hand" => "{{variant.on_demand && 9999 || variant.on_hand }}", "ng-disabled" => "!variant.on_demand && variant.on_hand == 0", diff --git a/app/assets/javascripts/templates/partials/shop_variant_with_group_buy.html.haml b/app/assets/javascripts/templates/partials/shop_variant_with_group_buy.html.haml index 169b33391c..c0cc46ac13 100644 --- a/app/assets/javascripts/templates/partials/shop_variant_with_group_buy.html.haml +++ b/app/assets/javascripts/templates/partials/shop_variant_with_group_buy.html.haml @@ -9,6 +9,8 @@ "ng-model" => "variant.line_item.quantity", placeholder: "{{::'shop_variant_quantity_min' | t}}", "ofn-disable-scroll" => true, + "ng-debounce" => "500", + onwheel: "this.blur()", "ofn-on-hand" => "{{variant.on_demand && 9999 || variant.on_hand }}", name: "variants[{{::variant.id}}]", id: "variants_{{::variant.id}}"} %span.bulk-input @@ -19,6 +21,8 @@ "ng-model" => "variant.line_item.max_quantity", placeholder: "{{::'shop_variant_quantity_max' | t}}", "ofn-disable-scroll" => true, + "ng-debounce" => "500", + onwheel: "this.blur()", min: "{{variant.line_item.quantity}}", name: "variant_attributes[{{::variant.id}}][max_quantity]", id: "variants_{{::variant.id}}_max"} diff --git a/spec/features/consumer/shopping/shopping_spec.rb b/spec/features/consumer/shopping/shopping_spec.rb index b8a6727727..432f750f17 100644 --- a/spec/features/consumer/shopping/shopping_spec.rb +++ b/spec/features/consumer/shopping/shopping_spec.rb @@ -246,24 +246,25 @@ feature "As a consumer I want to shop with a distributor", js: true do before do add_variant_to_order_cycle(exchange, variant) set_order_cycle(order, oc1) + set_order(order) visit shop_path end it "should save group buy data to the cart and display it on shopfront reload" do # -- Quantity fill_in "variants[#{variant.id}]", with: 6 + wait_for_debounce expect(page).to have_in_cart product.name wait_until { !cart_dirty } - li = Spree::Order.order(:created_at).last.line_items.order(:created_at).last - expect(li.quantity).to eq(6) + expect(order.reload.line_items.first.quantity).to eq(6) # -- Max quantity fill_in "variant_attributes[#{variant.id}][max_quantity]", with: 7 + wait_for_debounce wait_until { !cart_dirty } - li = Spree::Order.order(:created_at).last.line_items.order(:created_at).last - expect(li.max_quantity).to eq(7) + expect(order.reload.line_items.first.max_quantity).to eq(7) # -- Reload visit shop_path @@ -536,4 +537,10 @@ feature "As a consumer I want to shop with a distributor", js: true do expect(page).to have_no_content "This shop is for customers only." expect(page).to have_content product.name end + + def wait_for_debounce + # The auto-submit on these specific form elements (add to cart) now has a small built-in + # waiting period before submitting the data... + sleep 0.6 + end end From 11af5dffdc27f048d147825059303df7f6b8c805 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 22:51:59 +0200 Subject: [PATCH 21/89] Memoize scoper in cart_service Avoids fetching all of the hub's variant overrides from the db every time it's initialized. --- app/services/cart_service.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 49d157a836..8bb161a98f 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -34,7 +34,7 @@ class CartService quantity = quantity.to_i max_quantity = max_quantity.to_i if max_quantity variant = Spree::Variant.find(variant_id) - OpenFoodNetwork::ScopeVariantToHub.new(@distributor).scope(variant) + scoper.scope(variant) return unless quantity > 0 && valid_variant?(variant) @@ -68,6 +68,10 @@ class CartService private + def scoper + @scoper ||= OpenFoodNetwork::ScopeVariantToHub.new(@distributor) + end + def read_variants(data) @variants_h = read_products_hash(data) + read_variants_hash(data) From 2334ab6d00e7b5a5ba509cdb38a6a58cc855d5a8 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 23:13:23 +0200 Subject: [PATCH 22/89] Delete some dead code in cart_service This Bugsnag error was added a year ago and hasn't been seen --- app/services/cart_service.rb | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 8bb161a98f..a7a48123d5 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -73,22 +73,7 @@ class CartService end def read_variants(data) - @variants_h = read_products_hash(data) + - read_variants_hash(data) - end - - def read_products_hash(data) - # This is most probably dead code, this bugsnag notification will confirm it - notify_bugsnag(data) if data[:products].present? - - (data[:products] || []).map do |_product_id, variant_id| - { variant_id: variant_id, quantity: data[:quantity] } - end - end - - def notify_bugsnag(data) - Bugsnag.notify(RuntimeError.new("CartService.populate called with products hash"), - data: data.as_json) + @variants_h = read_variants_hash(data) end def read_variants_hash(data) From 106bb7a27f9b09f6c61363ce4891c9c77bed8474 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 23:00:50 +0200 Subject: [PATCH 23/89] Rename some variables and add comments for clarity in cart_service --- app/services/cart_service.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index a7a48123d5..f47f27ccba 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -15,17 +15,17 @@ class CartService @distributor, @order_cycle = distributor_and_order_cycle @order.with_lock do - variants = read_variants from_hash - attempt_cart_add_variants variants - overwrite_variants variants unless !overwrite + variants_data = read_variants from_hash + attempt_cart_add_variants variants_data + overwrite_variants variants_data if overwrite end valid? end - def attempt_cart_add_variants(variants) - variants.each do |v| - if varies_from_cart(v) - attempt_cart_add(v[:variant_id], v[:quantity], v[:max_quantity]) + def attempt_cart_add_variants(variants_data) + variants_data.each do |variant_data| + if varies_from_cart(variant_data) + attempt_cart_add(variant_data[:variant_id], variant_data[:quantity], variant_data[:max_quantity]) end end end @@ -99,6 +99,7 @@ class CartService [@order.distributor, @order.order_cycle] end + # Returns true if the saved cart differs from what's in the posted data, otherwise false def varies_from_cart(variant_data) li = line_item_for_variant_id variant_data[:variant_id] From b3242041e5f93f1ff9ef54e7a06a56eadbffb3d2 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 01:25:41 +0200 Subject: [PATCH 24/89] Return earlier (before scoping process, if possible) --- app/services/cart_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index f47f27ccba..dcd4c23138 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -33,10 +33,12 @@ class CartService def attempt_cart_add(variant_id, quantity, max_quantity = nil) quantity = quantity.to_i max_quantity = max_quantity.to_i if max_quantity + return unless quantity > 0 + variant = Spree::Variant.find(variant_id) scoper.scope(variant) - return unless quantity > 0 && valid_variant?(variant) + return unless valid_variant?(variant) cart_add(variant, quantity, max_quantity) end From a759d8c7c72391a5b472f3cdfd1eff983f0701b4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 01:29:21 +0200 Subject: [PATCH 25/89] Avoid N+1s for variants and for line_items of variants --- app/services/cart_service.rb | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index dcd4c23138..c1736f60d6 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -23,21 +23,25 @@ class CartService end def attempt_cart_add_variants(variants_data) + loaded_variants = indexed_variants(variants_data) + variants_data.each do |variant_data| - if varies_from_cart(variant_data) - attempt_cart_add(variant_data[:variant_id], variant_data[:quantity], variant_data[:max_quantity]) + loaded_variant = loaded_variants[variant_data[:variant_id].to_i] + + if varies_from_cart(variant_data, loaded_variant) + attempt_cart_add( + loaded_variant, variant_data[:quantity], variant_data[:max_quantity] + ) end end end - def attempt_cart_add(variant_id, quantity, max_quantity = nil) + def attempt_cart_add(variant, quantity, max_quantity = nil) quantity = quantity.to_i max_quantity = max_quantity.to_i if max_quantity return unless quantity > 0 - variant = Spree::Variant.find(variant_id) scoper.scope(variant) - return unless valid_variant?(variant) cart_add(variant, quantity, max_quantity) @@ -102,8 +106,8 @@ class CartService end # Returns true if the saved cart differs from what's in the posted data, otherwise false - def varies_from_cart(variant_data) - li = line_item_for_variant_id variant_data[:variant_id] + def varies_from_cart(variant_data, loaded_variant) + li = line_item_for_variant loaded_variant li_added = li.nil? && (variant_data[:quantity].to_i > 0 || variant_data[:max_quantity].to_i > 0) li_quantity_changed = li.present? && li.quantity.to_i != variant_data[:quantity].to_i @@ -135,11 +139,22 @@ class CartService false end - def line_item_for_variant_id(variant_id) - order.find_line_item_by_variant Spree::Variant.find(variant_id) + def line_item_for_variant(variant) + order.find_line_item_by_variant variant end def variant_ids_in_cart @order.line_items.pluck :variant_id end + + def indexed_variants(variants_data) + @indexed_variants ||= begin + variant_ids_in_data = variants_data.map{ |v| v[:variant_id] } + + Spree::Variant.where(id: variant_ids_in_data). + includes(:stock_items, :product). + all. + index_by(&:id) + end + end end From 25525d4f75aff5cddc0859f9722198e8b18b239c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 01:31:55 +0200 Subject: [PATCH 26/89] Use guard clause in each block --- app/services/cart_service.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index c1736f60d6..cf6ffc40b4 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -27,12 +27,11 @@ class CartService variants_data.each do |variant_data| loaded_variant = loaded_variants[variant_data[:variant_id].to_i] + next unless varies_from_cart(variant_data, loaded_variant) - if varies_from_cart(variant_data, loaded_variant) - attempt_cart_add( - loaded_variant, variant_data[:quantity], variant_data[:max_quantity] - ) - end + attempt_cart_add( + loaded_variant, variant_data[:quantity], variant_data[:max_quantity] + ) end end From 1152f307e2903c1a0a8ba3d4f6094e8a155e6829 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 01:33:59 +0200 Subject: [PATCH 27/89] Eager-load associated line_items data in #update_distribution_charge! --- app/models/spree/order_decorator.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 85b86c4169..c202130632 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -237,7 +237,10 @@ Spree::Order.class_eval do with_lock do EnterpriseFee.clear_all_adjustments_on_order self - line_items.each do |line_item| + loaded_line_items = + line_items.includes(variant: :product, order: [:distributor, :order_cycle]).all + + loaded_line_items.each do |line_item| if provided_by_order_cycle? line_item OpenFoodNetwork::EnterpriseFeeCalculator.new.create_line_item_adjustments_for line_item end From 468cb3f57e12e7006d7c0f92615b79f2575ffbd4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 24 Apr 2020 15:08:42 +0200 Subject: [PATCH 28/89] Remove obviously private methods from the public interface in CartService These methods are not called from anywhere in the app, only in a couple of tests in cart_service_spec. --- app/services/cart_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index cf6ffc40b4..5bb54c6dbb 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -22,6 +22,8 @@ class CartService valid? end + private + def attempt_cart_add_variants(variants_data) loaded_variants = indexed_variants(variants_data) @@ -71,8 +73,6 @@ class CartService end end - private - def scoper @scoper ||= OpenFoodNetwork::ScopeVariantToHub.new(@distributor) end From e33de8a20e0c0167e2c33b8f2ebbf9de9321bf68 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 24 Apr 2020 15:59:10 +0200 Subject: [PATCH 29/89] Update specs and refactor a bit --- spec/models/spree/order_spec.rb | 5 +-- spec/services/cart_service_spec.rb | 72 +++++++++++++++++------------- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 893e450eff..1b5d6cdb35 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -33,7 +33,6 @@ describe Spree::Order do it "skips order cycle per-order adjustments for orders that don't have an order cycle" do allow(EnterpriseFee).to receive(:clear_all_adjustments_on_order) - allow(subject).to receive(:line_items) { [] } allow(subject).to receive(:order_cycle) { nil } @@ -42,8 +41,7 @@ describe Spree::Order do it "ensures the correct adjustment(s) are created for order cycles" do allow(EnterpriseFee).to receive(:clear_all_adjustments_on_order) - line_item = double(:line_item) - allow(subject).to receive(:line_items) { [line_item] } + line_item = create(:line_item, order: subject) allow(subject).to receive(:provided_by_order_cycle?) { true } order_cycle = double(:order_cycle) @@ -58,7 +56,6 @@ describe Spree::Order do it "ensures the correct per-order adjustment(s) are created for order cycles" do allow(EnterpriseFee).to receive(:clear_all_adjustments_on_order) - allow(subject).to receive(:line_items) { [] } order_cycle = double(:order_cycle) expect_any_instance_of(OpenFoodNetwork::EnterpriseFeeCalculator). diff --git a/spec/services/cart_service_spec.rb b/spec/services/cart_service_spec.rb index 1f6b03949d..0baa3abe26 100644 --- a/spec/services/cart_service_spec.rb +++ b/spec/services/cart_service_spec.rb @@ -52,49 +52,59 @@ describe CartService do end describe "varies_from_cart" do - let(:variant) { double(:variant, id: 123) } + let!(:variant) { create(:variant) } it "returns true when item is not in cart and a quantity is specified" do - expect(cart_service).to receive(:line_item_for_variant_id).with(variant.id).and_return(nil) - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '2')).to be true + variant_data = { variant_id: variant.id, quantity: '2'} + + expect(cart_service).to receive(:line_item_for_variant).with(variant).and_return(nil) + expect(cart_service.send(:varies_from_cart, variant_data, variant )).to be true end it "returns true when item is not in cart and a max_quantity is specified" do - expect(cart_service).to receive(:line_item_for_variant_id).with(variant.id).and_return(nil) - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '0', max_quantity: '2')).to be true + variant_data = { variant_id: variant.id, quantity: '0', max_quantity: '2' } + + expect(cart_service).to receive(:line_item_for_variant).with(variant).and_return(nil) + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be true end it "returns false when item is not in cart and no quantity or max_quantity are specified" do - expect(cart_service).to receive(:line_item_for_variant_id).with(variant.id).and_return(nil) - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '0')).to be false + variant_data = { variant_id: variant.id, quantity: '0' } + + expect(cart_service).to receive(:line_item_for_variant).with(variant).and_return(nil) + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be false end it "returns true when quantity varies" do - li = double(:line_item, quantity: 1, max_quantity: nil) - allow(cart_service).to receive(:line_item_for_variant_id) { li } + variant_data = { variant_id: variant.id, quantity: '2' } + line_item = double(:line_item, quantity: 1, max_quantity: nil) + allow(cart_service).to receive(:line_item_for_variant) { line_item } - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '2')).to be true + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be true end it "returns true when max_quantity varies" do - li = double(:line_item, quantity: 1, max_quantity: nil) - allow(cart_service).to receive(:line_item_for_variant_id) { li } + variant_data = { variant_id: variant.id, quantity: '1', max_quantity: '3' } + line_item = double(:line_item, quantity: 1, max_quantity: nil) + allow(cart_service).to receive(:line_item_for_variant) { line_item } - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '1', max_quantity: '3')).to be true + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be true end it "returns false when max_quantity varies only in nil vs 0" do - li = double(:line_item, quantity: 1, max_quantity: nil) - allow(cart_service).to receive(:line_item_for_variant_id) { li } + variant_data = { variant_id: variant.id, quantity: '1' } + line_item = double(:line_item, quantity: 1, max_quantity: nil) + allow(cart_service).to receive(:line_item_for_variant) { line_item } - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '1')).to be false + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be false end it "returns false when both are specified and neither varies" do - li = double(:line_item, quantity: 1, max_quantity: 2) - allow(cart_service).to receive(:line_item_for_variant_id) { li } + variant_data = { variant_id: variant.id, quantity: '1', max_quantity: '2' } + line_item = double(:line_item, quantity: 1, max_quantity: 2) + allow(cart_service).to receive(:line_item_for_variant) { line_item } - expect(cart_service.send(:varies_from_cart, variant_id: variant.id, quantity: '1', max_quantity: '2')).to be false + expect(cart_service.send(:varies_from_cart, variant_data, variant)).to be false end end @@ -111,7 +121,9 @@ describe CartService do it "returns nothing when items are added to cart" do allow(cart_service).to receive(:variant_ids_in_cart) { [123] } - expect(cart_service.send(:variants_removed, [{ variant_id: '123' }, { variant_id: '456' }])).to eq([]) + expect( + cart_service.send(:variants_removed, [{ variant_id: '123' }, { variant_id: '456' }]) + ).to eq([]) end it "does not return duplicates" do @@ -121,7 +133,7 @@ describe CartService do end describe "attempt_cart_add" do - let(:variant) { double(:variant, on_hand: 250) } + let!(:variant) { create(:variant, on_hand: 250) } let(:quantity) { 123 } before do @@ -136,7 +148,7 @@ describe CartService do expect(variant).to receive(:on_demand).and_return(false) expect(order).to receive(:add_variant).with(variant, quantity, nil, currency) - cart_service.attempt_cart_add(333, quantity.to_s) + cart_service.send(:attempt_cart_add, variant, quantity.to_s) end it "filters quantities through #quantities_to_add" do @@ -148,7 +160,7 @@ describe CartService do expect(order).to receive(:add_variant).with(variant, 5, 5, currency) - cart_service.attempt_cart_add(333, quantity.to_s, quantity.to_s) + cart_service.send(:attempt_cart_add, variant, quantity.to_s, quantity.to_s) end it "removes variants which have become out of stock" do @@ -161,7 +173,7 @@ describe CartService do expect(order).to receive(:remove_variant).with(variant) expect(order).to receive(:add_variant).never - cart_service.attempt_cart_add(333, quantity.to_s, quantity.to_s) + cart_service.send(:attempt_cart_add, variant, quantity.to_s, quantity.to_s) end end @@ -175,21 +187,21 @@ describe CartService do context "when max_quantity is not provided" do it "returns full amount when available" do - expect(cart_service.quantities_to_add(v, 5, nil)).to eq([5, nil]) + expect(cart_service.send(:quantities_to_add, v, 5, nil)).to eq([5, nil]) end it "returns a limited amount when not entirely available" do - expect(cart_service.quantities_to_add(v, 15, nil)).to eq([10, nil]) + expect(cart_service.send(:quantities_to_add, v, 15, nil)).to eq([10, nil]) end end context "when max_quantity is provided" do it "returns full amount when available" do - expect(cart_service.quantities_to_add(v, 5, 6)).to eq([5, 6]) + expect(cart_service.send(:quantities_to_add, v, 5, 6)).to eq([5, 6]) end it "also returns the full amount when not entirely available" do - expect(cart_service.quantities_to_add(v, 15, 16)).to eq([10, 16]) + expect(cart_service.send(:quantities_to_add, v, 15, 16)).to eq([10, 16]) end end end @@ -200,11 +212,11 @@ describe CartService do end it "does not limit quantity" do - expect(cart_service.quantities_to_add(v, 15, nil)).to eq([15, nil]) + expect(cart_service.send(:quantities_to_add, v, 15, nil)).to eq([15, nil]) end it "does not limit max_quantity" do - expect(cart_service.quantities_to_add(v, 15, 16)).to eq([15, 16]) + expect(cart_service.send(:quantities_to_add, v, 15, 16)).to eq([15, 16]) end end end From d8d6bad11cc607f00221c961ac80146d552bf4b9 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 4 Apr 2020 09:57:12 +0100 Subject: [PATCH 30/89] Remove config and sections related to google analytics in the cookies banner and cookies page --- .../spree/app_configuration_decorator.rb | 1 - .../admin/general_settings/edit.html.haml | 3 --- config/locales/en.yml | 7 ----- .../cookies_policy.html.haml | 26 +++++-------------- 4 files changed, 7 insertions(+), 30 deletions(-) diff --git a/app/models/spree/app_configuration_decorator.rb b/app/models/spree/app_configuration_decorator.rb index 6d0b48f666..5b11a0ee61 100644 --- a/app/models/spree/app_configuration_decorator.rb +++ b/app/models/spree/app_configuration_decorator.rb @@ -14,7 +14,6 @@ Spree::AppConfiguration.class_eval do preference :privacy_policy_url, :string, default: nil preference :cookies_consent_banner_toggle, :boolean, default: false preference :cookies_policy_matomo_section, :boolean, default: false - preference :cookies_policy_ga_section, :boolean, default: false # Tax Preferences preference :products_require_tax_category, :boolean, default: false diff --git a/app/views/spree/admin/general_settings/edit.html.haml b/app/views/spree/admin/general_settings/edit.html.haml index 04536bbf96..dc1993a08b 100644 --- a/app/views/spree/admin/general_settings/edit.html.haml +++ b/app/views/spree/admin/general_settings/edit.html.haml @@ -38,9 +38,6 @@ .field = preference_field_tag(:cookies_policy_matomo_section, Spree::Config[:cookies_policy_matomo_section], :type => Spree::Config.preference_type(:cookies_policy_matomo_section)) = label_tag(:cookies_policy_matomo_section, t('.cookies_policy_matomo_section')) + tag(:br) - .field - = preference_field_tag(:cookies_policy_ga_section, Spree::Config[:cookies_policy_ga_section], :type => Spree::Config.preference_type(:cookies_policy_ga_section)) - = label_tag(:cookies_policy_ga_section, t('.cookies_policy_ga_section')) + tag(:br) .field = label_tag(:privacy_policy_url, t('.privacy_policy_url')) + tag(:br) = preference_field_tag(:privacy_policy_url, Spree::Config[:privacy_policy_url], type: Spree::Config.preference_type(:privacy_policy_url)) diff --git a/config/locales/en.yml b/config/locales/en.yml index d349b72ff6..81a542820b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1404,14 +1404,8 @@ en: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -3397,7 +3391,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/engines/web/app/views/web/angular_templates/cookies_policy.html.haml b/engines/web/app/views/web/angular_templates/cookies_policy.html.haml index 982ba89d53..4b00ac32f1 100644 --- a/engines/web/app/views/web/angular_templates/cookies_policy.html.haml +++ b/engines/web/app/views/web/angular_templates/cookies_policy.html.haml @@ -44,32 +44,20 @@ %p = t 'legal.cookies_policy.essential_cookies_note' -- if Spree::Config.cookies_policy_matomo_section || Spree::Config.cookies_policy_ga_section +- if Spree::Config.cookies_policy_matomo_section %h2 = t 'legal.cookies_policy.statistics_cookies' %p = t 'legal.cookies_policy.statistics_cookies_desc' - - - if Spree::Config.cookies_policy_ga_section - %p - = t 'legal.cookies_policy.statistics_cookies_analytics_desc_html' - - if Spree::Config.cookies_policy_matomo_section - %p - = t 'legal.cookies_policy.statistics_cookies_matomo_desc_html' + %p + = t 'legal.cookies_policy.statistics_cookies_matomo_desc_html' %table{ng: { controller:"CookiesPolicyModalCtrl"}} - - if Spree::Config.cookies_policy_ga_section - = render_cookie_entry( "__utma", t( "legal.cookies_policy.cookie_analytics_utma_desc" ) ) - = render_cookie_entry( "__utmt", t( "legal.cookies_policy.cookie_analytics_utmt_desc" ) ) - = render_cookie_entry( "__utmb", t( "legal.cookies_policy.cookie_analytics_utmb_desc" ) ) - = render_cookie_entry( "__utmc", t( "legal.cookies_policy.cookie_analytics_utmc_desc" ) ) - = render_cookie_entry( "__utmz", t( "legal.cookies_policy.cookie_analytics_utmz_desc" ) ) - - if Spree::Config.cookies_policy_matomo_section - = render_cookie_entry( "_pk_ref, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_basics_desc" ) ) - = render_cookie_entry( "_pk_hsr, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_heatmap_desc" ) ) - = render_cookie_entry( "piwik_ignore, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_ignore_desc" ) ) + = render_cookie_entry( "_pk_ref, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_basics_desc" ) ) + = render_cookie_entry( "_pk_hsr, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_heatmap_desc" ) ) + = render_cookie_entry( "piwik_ignore, _pk_cvar, _pk_id and _pk_ses", t( "legal.cookies_policy.cookie_matomo_ignore_desc" ) ) - - if Spree::Config.cookies_policy_matomo_section && Spree::Config.matomo_url.present? + - if Spree::Config.matomo_url.present? %p = t 'legal.cookies_policy.statistics_cookies_matomo_optout' %p From 248b0016d4a591022bca406e8ed7bd70aa98d3b3 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 4 Apr 2020 09:40:54 +0100 Subject: [PATCH 31/89] Remove trackers and google analytics --- app/views/layouts/darkswarm.html.haml | 1 - .../shared/_configuration_menu.html.haml | 1 - app/views/spree/admin/shared/_tabs.html.haml | 2 +- app/views/spree/layouts/_admin_body.html.haml | 2 - .../spree/shared/_google_analytics.html.erb | 39 ------------------- config/locales/en.yml | 7 ---- config/routes/spree.rb | 1 - .../20200404083008_drop_trackers_table.rb | 14 +++++++ db/schema.rb | 9 ----- 9 files changed, 15 insertions(+), 61 deletions(-) delete mode 100644 app/views/spree/shared/_google_analytics.html.erb create mode 100644 db/migrate/20200404083008_drop_trackers_table.rb diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index fa42b8f745..1f92137e9e 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -56,4 +56,3 @@ = render "layouts/bugherd_script" = render "layouts/matomo_tag" - = render 'spree/shared/google_analytics' diff --git a/app/views/spree/admin/shared/_configuration_menu.html.haml b/app/views/spree/admin/shared/_configuration_menu.html.haml index 7ec62c516e..5810cc97b2 100644 --- a/app/views/spree/admin/shared/_configuration_menu.html.haml +++ b/app/views/spree/admin/shared/_configuration_menu.html.haml @@ -20,7 +20,6 @@ = configurations_sidebar_menu_item Spree.t(:shipping_methods), admin_shipping_methods_path = configurations_sidebar_menu_item Spree.t(:shipping_categories), admin_shipping_categories_path = configurations_sidebar_menu_item t(:enterprise_fees), main_app.admin_enterprise_fees_path - = configurations_sidebar_menu_item Spree.t(:analytics_trackers), admin_trackers_path = configurations_sidebar_menu_item t('admin.contents.edit.title'), main_app.edit_admin_contents_path = configurations_sidebar_menu_item t('admin.invoice_settings.edit.title'), main_app.edit_admin_invoice_settings_path = configurations_sidebar_menu_item t('admin.matomo_settings.edit.title'), main_app.edit_admin_matomo_settings_path diff --git a/app/views/spree/admin/shared/_tabs.html.haml b/app/views/spree/admin/shared/_tabs.html.haml index 219305ca40..920480fc8b 100644 --- a/app/views/spree/admin/shared/_tabs.html.haml +++ b/app/views/spree/admin/shared/_tabs.html.haml @@ -3,7 +3,7 @@ = tab :order_cycles, url: main_app.admin_order_cycles_path, icon: 'icon-refresh' = tab :orders, :subscriptions, :customer_details, :adjustments, :payments, :return_authorizations, url: admin_orders_path('q[s]' => 'completed_at desc'), icon: 'icon-shopping-cart' = tab :reports, icon: 'icon-file' -= tab :general_settings, :mail_method, :image_settings, :tax_categories, :tax_rates, :tax_settings, :zones, :countries, :states, :payment_methods, :taxonomies, :shipping_methods, :shipping_categories, :enterprise_fees, :trackers, :contents, :invoice_settings, :matomo_settings, :stripe_connect_settings, label: 'configuration', icon: 'icon-wrench', url: edit_admin_general_settings_path += tab :general_settings, :mail_method, :image_settings, :tax_categories, :tax_rates, :tax_settings, :zones, :countries, :states, :payment_methods, :taxonomies, :shipping_methods, :shipping_categories, :enterprise_fees, :contents, :invoice_settings, :matomo_settings, :stripe_connect_settings, label: 'configuration', icon: 'icon-wrench', url: edit_admin_general_settings_path = tab :enterprises, :enterprise_relationships, url: main_app.admin_enterprises_path = tab :customers, url: main_app.admin_customers_path = tab :enterprise_groups, url: main_app.admin_enterprise_groups_path, label: 'groups' diff --git a/app/views/spree/layouts/_admin_body.html.haml b/app/views/spree/layouts/_admin_body.html.haml index 0d7c17c5ba..6fb035c825 100644 --- a/app/views/spree/layouts/_admin_body.html.haml +++ b/app/views/spree/layouts/_admin_body.html.haml @@ -70,7 +70,5 @@ %div{"data-hook" => "admin_footer_scripts"} -= render 'spree/shared/google_analytics' - %script = raw "Spree.api_key = \"#{try_spree_current_user.try(:spree_api_key).to_s}\";" diff --git a/app/views/spree/shared/_google_analytics.html.erb b/app/views/spree/shared/_google_analytics.html.erb deleted file mode 100644 index 3098059e9c..0000000000 --- a/app/views/spree/shared/_google_analytics.html.erb +++ /dev/null @@ -1,39 +0,0 @@ -<% if tracker = Spree::Tracker.current %> - - <%= javascript_tag do %> - var _gaq = _gaq || []; - _gaq.push(['_setAccount', '<%= tracker.analytics_id %>']); - _gaq.push(['_trackPageview']); - - <% if flash[:commerce_tracking] && @order.present? %> - <%# more info: https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce %> - _gaq.push(['_addTrans', - "<%= j @order.number %>", - "", - "<%= @order.total %>", - "<%= @order.adjustments.tax.sum(:amount) %>", - "<%= @order.adjustments.shipping.sum(:amount) %>", - "<%= j @order.bill_address.city %>", - "<%= j @order.bill_address.state_text %>", - "<%= j @order.bill_address.country.name %>" - ]); - <% @order.line_items.each do |line_item| %> - _gaq.push(['_addItem', - "<%= j @order.number %>", - "<%= j line_item.variant.sku %>", - "<%= j line_item.variant.product.name %>", - "", - "<%= line_item.price %>", - "<%= line_item.quantity %>" - ]); - <% end %> - _gaq.push(['_trackTrans']); - <% end %> - - (function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = '//google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); - <% end %> -<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 81a542820b..ee29d4522a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3035,13 +3035,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" - name: "Name" description: "Description" type: "Type" diff --git a/config/routes/spree.rb b/config/routes/spree.rb index 1fb8d9c1d0..fc0de19a10 100644 --- a/config/routes/spree.rb +++ b/config/routes/spree.rb @@ -136,7 +136,6 @@ Spree::Core::Engine.routes.draw do end resource :image_settings - resources :trackers resources :zones resources :countries do diff --git a/db/migrate/20200404083008_drop_trackers_table.rb b/db/migrate/20200404083008_drop_trackers_table.rb new file mode 100644 index 0000000000..4dca8c7cfc --- /dev/null +++ b/db/migrate/20200404083008_drop_trackers_table.rb @@ -0,0 +1,14 @@ +class DropTrackersTable < ActiveRecord::Migration + def up + drop_table :spree_trackers + end + + def down + create_table :spree_trackers do |t| + t.string :environment + t.string :analytics_id + t.boolean :active, :default => true + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2d1980fcca..b00e0bf89e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,7 +12,6 @@ # It's strongly recommended to check this file into your version control system. ActiveRecord::Schema.define(:version => 20200406085833) do - create_table "adjustment_metadata", :force => true do |t| t.integer "adjustment_id" t.integer "enterprise_id" @@ -1011,14 +1010,6 @@ ActiveRecord::Schema.define(:version => 20200406085833) do add_index "spree_tokenized_permissions", ["permissable_id", "permissable_type"], :name => "index_tokenized_name_and_type" - create_table "spree_trackers", :force => true do |t| - t.string "environment" - t.string "analytics_id" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "spree_users", :force => true do |t| t.string "encrypted_password" t.string "password_salt" From c5b972717790803c2f1fcd32c8e1f437f798a79b Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 4 Apr 2020 10:07:35 +0100 Subject: [PATCH 32/89] Remove ga_cookies_preference from DB --- .../20200404090436_remove_ga_cookies_preference.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 db/migrate/20200404090436_remove_ga_cookies_preference.rb diff --git a/db/migrate/20200404090436_remove_ga_cookies_preference.rb b/db/migrate/20200404090436_remove_ga_cookies_preference.rb new file mode 100644 index 0000000000..7ead37d132 --- /dev/null +++ b/db/migrate/20200404090436_remove_ga_cookies_preference.rb @@ -0,0 +1,11 @@ +class RemoveGaCookiesPreference < ActiveRecord::Migration + def up + Spree::Preference + .where( key: 'spree/app_configuration/cookies_policy_ga_section') + .destroy_all + end + + def down + # If this preference is re-added to the code, the DB entry will be regenerated + end +end From d851aa5106707b2840a04465033e07f96b63e29a Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Tue, 7 Apr 2020 10:08:10 +0100 Subject: [PATCH 33/89] Add model definition to migration to make migration more resilient --- db/migrate/20200404090436_remove_ga_cookies_preference.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/db/migrate/20200404090436_remove_ga_cookies_preference.rb b/db/migrate/20200404090436_remove_ga_cookies_preference.rb index 7ead37d132..c509b11e5e 100644 --- a/db/migrate/20200404090436_remove_ga_cookies_preference.rb +++ b/db/migrate/20200404090436_remove_ga_cookies_preference.rb @@ -1,4 +1,6 @@ class RemoveGaCookiesPreference < ActiveRecord::Migration + class Spree::Preference < ActiveRecord::Base; end + def up Spree::Preference .where( key: 'spree/app_configuration/cookies_policy_ga_section') From 02775d033d37c070d734c6cf40545484a5766a3f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2020 20:50:56 +0000 Subject: [PATCH 34/89] Bump unicorn from 5.5.4 to 5.5.5 Bumps [unicorn](https://yhbt.net/unicorn/) from 5.5.4 to 5.5.5. Signed-off-by: dependabot-preview[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d56477f603..a3b6ad6e41 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -647,7 +647,7 @@ GEM uglifier (4.2.0) execjs (>= 0.3.0, < 3) unicode-display_width (1.7.0) - unicorn (5.5.4) + unicorn (5.5.5) kgio (~> 2.6) raindrops (~> 0.7) unicorn-rails (2.2.1) From a5c4364f929dd06b0bec70de6ad153b9c9471cb4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 00:52:09 +0200 Subject: [PATCH 35/89] Fetch (or create) current_order only once --- app/controllers/cart_controller.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/cart_controller.rb b/app/controllers/cart_controller.rb index d452228299..52c8c3caac 100644 --- a/app/controllers/cart_controller.rb +++ b/app/controllers/cart_controller.rb @@ -4,24 +4,26 @@ class CartController < BaseController before_filter :check_authorization def populate + order = current_order(true) + # Without intervention, the Spree::Adjustment#update_adjustable callback is called many times # during cart population, for both taxation and enterprise fees. This operation triggers a # costly Spree::Order#update!, which only needs to be run once. We avoid this by disabling # callbacks on Spree::Adjustment and then manually invoke Spree::Order#update! on success. Spree::Adjustment.without_callbacks do - cart_service = CartService.new(current_order(true)) + cart_service = CartService.new(order) if cart_service.populate(params.slice(:products, :variants, :quantity), true) fire_event('spree.cart.add') fire_event('spree.order.contents_changed') - current_order.cap_quantity_at_stock! - current_order.update! + order.cap_quantity_at_stock! + order.update! variant_ids = variant_ids_in(cart_service.variants_h) render json: { error: false, - stock_levels: VariantsStockLevels.new.call(current_order, variant_ids) }, + stock_levels: VariantsStockLevels.new.call(order, variant_ids) }, status: :ok else render json: { error: true }, status: :precondition_failed From 43869fc140b3adabc03f40209997a413d873170d Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 00:56:18 +0200 Subject: [PATCH 36/89] Replace fired events with clearer method call The 'spree.cart.add' event has no listeners in spree_core on in ofn. The 'spree.order.contents_changed' just has a single listener that calls `order.update_distribution_charge`. --- app/controllers/cart_controller.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/cart_controller.rb b/app/controllers/cart_controller.rb index 52c8c3caac..c1a77b433b 100644 --- a/app/controllers/cart_controller.rb +++ b/app/controllers/cart_controller.rb @@ -14,9 +14,7 @@ class CartController < BaseController cart_service = CartService.new(order) if cart_service.populate(params.slice(:products, :variants, :quantity), true) - fire_event('spree.cart.add') - fire_event('spree.order.contents_changed') - + order.update_distribution_charge! order.cap_quantity_at_stock! order.update! From eb858159ce44b520218f5affac35e619f78fb803 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 01:04:22 +0200 Subject: [PATCH 37/89] Eager-load :default_price on variants --- app/services/cart_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 5bb54c6dbb..8d837d9eb8 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -151,7 +151,7 @@ class CartService variant_ids_in_data = variants_data.map{ |v| v[:variant_id] } Spree::Variant.where(id: variant_ids_in_data). - includes(:stock_items, :product). + includes(:default_price, :stock_items, :product). all. index_by(&:id) end From fe2bf8d53194b903b4b7c1779668b613172491a4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 01:05:42 +0200 Subject: [PATCH 38/89] Eager-load variants and stock items when doing stock checks on multiple variants --- app/services/variants_stock_levels.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/variants_stock_levels.rb b/app/services/variants_stock_levels.rb index f06002db19..0d778b9a0d 100644 --- a/app/services/variants_stock_levels.rb +++ b/app/services/variants_stock_levels.rb @@ -5,7 +5,7 @@ require 'open_food_network/scope_variant_to_hub' class VariantsStockLevels def call(order, requested_variant_ids) - variant_stock_levels = variant_stock_levels(order.line_items) + variant_stock_levels = variant_stock_levels(order.line_items.includes(variant: :stock_items)) order_variant_ids = variant_stock_levels.keys missing_variants = Spree::Variant.includes(:stock_items). From 3fa2b3161fb69bdd6a7eb1410bb1e8a7b5e3d223 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 01:07:15 +0200 Subject: [PATCH 39/89] Avoid N+1s when using OrderCycle#exchanges_supplying --- app/models/order_cycle.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index c4b0bbcda3..9c7837c4c4 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -240,7 +240,8 @@ class OrderCycle < ActiveRecord::Base end def exchanges_supplying(order) - exchanges.supplying_to(order.distributor).with_any_variant(order.variants.map(&:id)) + variants_relation = Spree::Variant.joins(:line_items).merge(Spree::LineItem.in_orders(order)) + exchanges.supplying_to(order.distributor).with_any_variant(variants_relation) end def coordinated_by?(user) From 74e81b078f6fbf115d302074c8ac888f5b3f6eea Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 01:11:28 +0200 Subject: [PATCH 40/89] Avoid N+1s in Order#cap_quantity_at_stock! --- app/models/spree/order_decorator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index c202130632..8c2bc9496c 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -210,7 +210,7 @@ Spree::Order.class_eval do end def cap_quantity_at_stock! - line_items.each(&:cap_quantity_at_stock!) + line_items.includes(variant: :stock_items).all.each(&:cap_quantity_at_stock!) end def set_distributor!(distributor) From 7c985f39aba3d110c58b2c49f48ad0ddcd8db7cb Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Tue, 28 Apr 2020 13:22:48 +0800 Subject: [PATCH 41/89] Fix script for syncing public/ in AWS bucket to local --- script/mirror_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/mirror_db.sh b/script/mirror_db.sh index c69db3490d..cd8f51d364 100755 --- a/script/mirror_db.sh +++ b/script/mirror_db.sh @@ -54,7 +54,7 @@ $RAILS_RUN script/prepare_imported_db.rb if [ -n "$BUCKET" ]; then if hash aws 2>/dev/null; then echo "Mirroring images..." - aws s3 sync "s3://$BUCKET/public public/" + aws s3 sync "s3://$BUCKET/public" public/ else echo "Please install the AWS CLI tools so that I can copy the images from $BUCKET for you." echo "eg. sudo easy_install awscli" From f072e9d9c204db540c8adc41df6a14998f3caf85 Mon Sep 17 00:00:00 2001 From: Robin Klaus Date: Tue, 28 Apr 2020 14:58:51 +1000 Subject: [PATCH 42/89] Add missing translations on order list page --- config/locales/en.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/locales/en.yml b/config/locales/en.yml index 465a664fce..1d38b45737 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3386,6 +3386,14 @@ See the %{link} to find out more about %{sitename}'s features and to start using autocomplete: producer_name: "Producer" unit: "Unit" + shared: + sortable_header: + number: "Number" + state: "State" + payment_state: "Payment State" + shipment_state: "Shipment State" + email: "Email" + total: "Total" general_settings: edit: legal_settings: "Legal Settings" From 8e6d53f6c6f03bef93501d8789e5d592f2db9724 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Tue, 28 Apr 2020 17:59:10 +1000 Subject: [PATCH 43/89] Updating translations for config/locales/nb.yml --- config/locales/nb.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 9371908c59..3fde559047 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -31,6 +31,10 @@ nb: taken: "Det finnes allerede en konto for denne eposten. Vennligst logg inn eller tilbakestill passordet ditt." spree/order: no_card: Det er ingen gyldige kredittkort tilgjengelig for å trekke + spree/credit_card: + attributes: + base: + card_expired: "har utgått" order_cycle: attributes: orders_close_at: @@ -319,6 +323,7 @@ nb: show_n_more: Vis %{num} flere choose: "Velg..." please_select: Vennligst velg... + column_save_as_default: Lagre som Standard columns: Kolonner actions: Handlinger viewing: "Viser: %{current_view_name}" @@ -867,6 +872,7 @@ nb: distributor: "Distributør" products: "Produkter" tags: "Merkelapper" + delivery_details: "Leveringsdetaljer" fees: "Avgifter" previous: "Tidligere" save: "Lagre" @@ -1914,6 +1920,7 @@ nb: admin_enterprise_relationships_permits: "tillater" admin_enterprise_relationships_seach_placeholder: "Søk" admin_enterprise_relationships_button_create: "Opprett" + admin_enterprise_relationships_to: "til" admin_enterprise_groups: "Bedriftsgrupper" admin_enterprise_groups_name: "Navn" admin_enterprise_groups_owner: "Eier" @@ -3027,6 +3034,8 @@ nb: tax_invoice: "AVGIFTSFAKTURA" code: "Kode" from: "Fra" + to: "Fakturér til" + shipping: "Levering" form: distribution_fields: title: "Distribusjon" @@ -3207,7 +3216,9 @@ nb: autocomplete: producer_name: "Produsent" unit: "Enhet" - general_settings: + shared: + sortable_header: + name: "Navn" edit: legal_settings: "Juridiske innstillinger" cookies_consent_banner_toggle: "Vis informasjonskapsler samtykkebanner" From 67a714064298941b6f061554f479c1f28d18b781 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 13:48:07 +0200 Subject: [PATCH 44/89] Memoize distributor and order_cycle in Api::OrderCyclesController --- app/controllers/api/order_cycles_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/order_cycles_controller.rb b/app/controllers/api/order_cycles_controller.rb index 0ac5223ea1..d4ce2cdc7b 100644 --- a/app/controllers/api/order_cycles_controller.rb +++ b/app/controllers/api/order_cycles_controller.rb @@ -70,11 +70,11 @@ module Api end def distributor - Enterprise.find_by_id(params[:distributor]) + @distributor ||= Enterprise.find_by_id(params[:distributor]) end def order_cycle - OrderCycle.find_by_id(params[:id]) + @order_cycle ||= OrderCycle.find_by_id(params[:id]) end def customer From eb7de1829869b11bd64a5ca0cb5d90230f1a0f62 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 13:51:25 +0200 Subject: [PATCH 45/89] Return early (before hitting the DB) in complex product list rendering if we already know the order cycle is closed --- app/controllers/api/order_cycles_controller.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/order_cycles_controller.rb b/app/controllers/api/order_cycles_controller.rb index d4ce2cdc7b..b06f302169 100644 --- a/app/controllers/api/order_cycles_controller.rb +++ b/app/controllers/api/order_cycles_controller.rb @@ -6,6 +6,8 @@ module Api skip_authorization_check def products + render_no_products unless order_cycle.open? + products = ProductsRenderer.new( distributor, order_cycle, @@ -15,7 +17,7 @@ module Api render json: products rescue ProductsRenderer::NoProducts - render status: :not_found, json: '' + render_no_products end def taxons @@ -35,6 +37,10 @@ module Api private + def render_no_products + render status: :not_found, json: '' + end + def product_properties Spree::Property. joins(:products). From e4985a9d51d70f5bb9301fe95c9b4d2a8ccf2533 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 22 Apr 2020 12:38:13 +0200 Subject: [PATCH 46/89] Avoid needlessly fetching the current user records (for authentication and API key checks) These endpoints are absolutely public, and don't need the current user at any point. --- app/controllers/api/order_cycles_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/api/order_cycles_controller.rb b/app/controllers/api/order_cycles_controller.rb index b06f302169..5404db76c4 100644 --- a/app/controllers/api/order_cycles_controller.rb +++ b/app/controllers/api/order_cycles_controller.rb @@ -4,6 +4,7 @@ module Api respond_to :json skip_authorization_check + skip_before_filter :authenticate_user, :ensure_api_key, only: [:taxons, :properties] def products render_no_products unless order_cycle.open? From 5590671c2390203440bb4e9a96ded9ad4a85b49a Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:19 +1000 Subject: [PATCH 47/89] Updating translations for config/locales/fr.yml --- config/locales/fr.yml | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index eeacebe003..19fca72388 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1323,14 +1323,8 @@ fr: cookie_stripe_desc: "Utilisé par le terminal de payement en ligne Stripe (proposé aux utilisateurs d'Open Food France) https://stripe.com/fr/cookies-policy/legal. Même si toutes les boutiques n'utilisent pas Stripe, c'est une bonne pratique en matière de sécurité d'appliquer ce cookie sur toutes les pages vues. Stripe construit probablement une image des pages qui ont un quelconque lien avec l'API connectant Open Food France à leur système de paiement pour détecter les comportements anormaux pouvant suggérer un risque de fraude. Donc ce cookie a un rôle qui va au-delà de la simple fourniture d'un système de paiement. Le supprimer pourrait affecter la sécurité du service. Pour en savoir plus sur la politique de confidentialité de Stripe: https://stripe.com/fr/privacy." statistics_cookies: "Cookies d'analyse de navigation" statistics_cookies_desc: "Ces cookies ne sont pas obligatoires, mais nous permettent de mieux comprendre votre usage de la plateforme, les endroits où vous bloquez, les fonctionnalités qui semblent vous manquer, ou que vous n'utilisez jamais, afin de fournir le service le plus adapté possible aux besoins des utilisateurs." - statistics_cookies_analytics_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Google Analytics, pas vraiment par choix, mais simplement parce que c'était l'outil d'analyse connecté par défaut via Spree, le logiciel e-commerce open source sur lequel nous avons construit. Mais nous espérons pouvoir rapidement migrer vers Matomo (anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Matomo(anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_optout: "Vous ne voulez pas que vos données soient analysées par Matomo ? Nous ne collectons aucune donnée personnelle, et Matomo nous aide à améliorer le service que nous vous offrons, mais nous respectons votre choix :-)" - cookie_analytics_utma_desc: "Utilisé pour distinguer les utilisateurs et les sessions. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utma n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics." - cookie_analytics_utmt_desc: "Utilisé pour limiter le taux de requêtes." - cookie_analytics_utmb_desc: "Utilisé pour distinguer les nouvelles sessions/visites. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utmb n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics. " - cookie_analytics_utmc_desc: "Non utilisé dans ga.js. Utilisé pour l'interopérabilité avec urchin.js. Historiquement, ce cookie fonctionnait en conjonction avec le cookie __utmb pour déterminer si l'utilisateur était dans une nouvelle session/visite ou pas." - cookie_analytics_utmz_desc: "Ce cookie stocke les sources de trafic qui expliquent comment l'utilisateur est arrivé sur le site (via une campagne, une recherche sur un moteur de recherche, etc.). Ce cookie est installé quand la librairie Javascript s'exécute et mis à jour à chaque fois que des données sont envoyées à Google Analytics. " cookie_matomo_basics_desc: "Cookies déposés par Matomo pour collecter les statistiques de trafic." cookie_matomo_heatmap_desc: "Utilisé par Matomo pour enregistrer les sessions et \"cartes thermiques\" (représentations graphiques des données)" cookie_matomo_ignore_desc: "Cookie utilisé pour se souvenir qu'un utilisateur a souhaité explicitement que sa navigation ne soit pas analysée par Matomo, et exclure cet utilisateur du suivi du site." @@ -2715,6 +2709,14 @@ fr: start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Période" + report_format_csv: "Télécharger le CSV" + generate_report: "Générer le rapport" + report: + none: "Aucun" + select_and_search: "Sélectionnez les filtres et cliquez sur \"générer le rapport\" pour accéder aux données." enterprise_fee_summary: date_end_before_start_error: "doit être après date début" parameter_not_allowed_error: "Vous n'êtes pas authorisé.e à utiliser un ou plusieurs des filtres sélectionnés pour ce rapport." @@ -2908,12 +2910,6 @@ fr: shipping_categories: "Conditions de transport" new_shipping_category: "Nouvelle condition de transport" back_to_shipping_categories: "Retour aux conditions de transport" - analytics_trackers: "Traqueurs analyse navigation" - no_trackers_found: "Pas de traqueur trouvé" - new_tracker: "Nouveau traqueur" - add_one: "En ajouter un" - google_analytics_id: "ID analytique" - back_to_trackers_list: "Retour à la liste des traqueurs" name: "Produit/Variante" description: "Description" type: "Catégorie" @@ -3195,14 +3191,6 @@ fr: bulk_coop_allocation: 'Achats groupés - Allocation' bulk_coop_packing_sheets: 'Achats groupés - Feuilles de préparation des paniers' bulk_coop_customer_payments: 'Achats groupés - Paiement des acheteurs' - enterprise_fee_summaries: - filters: - date_range: "Période" - report_format_csv: "Télécharger le CSV" - generate_report: "Générer le rapport" - report: - none: "Aucun" - select_and_search: "Sélectionnez les filtres et cliquez sur \"générer le rapport\" pour accéder aux données." users: index: listing_users: "Liste des utilisateurs" @@ -3256,7 +3244,6 @@ fr: privacy_policy_url: "URL de la politique de confidentialité" enterprises_require_tos: "Les entreprises doivent accepter les Conditions Générales d'Utilisation" cookies_policy_matomo_section: "Afficher la section Matomo sur la politique de cookies" - cookies_policy_ga_section: "Afficher la section Google Analytics sur la politique de cookies" footer_tos_url: "Conditions d'utilisation URL" checkout: payment: From 8365c66addb3142ea8eefecd3f61afa20f422441 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:22 +1000 Subject: [PATCH 48/89] Updating translations for config/locales/fil_PH.yml --- config/locales/fil_PH.yml | 119 +++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 65 deletions(-) diff --git a/config/locales/fil_PH.yml b/config/locales/fil_PH.yml index 6629b04da0..58985e59a1 100644 --- a/config/locales/fil_PH.yml +++ b/config/locales/fil_PH.yml @@ -63,7 +63,7 @@ fil_PH: attributes: subscription_line_items: at_least_one_product: "^Magdagdag ng kahit isang produkto" - not_available: "^%{name} ay hindi magagamit mula sa napiling iskedyul" + not_available: "^%{name} ay hindi available sa napiling iskedyul" ends_at: after_begins_at: "ay dapat pagkatapos ng nagsisimula sa" customer: @@ -92,20 +92,20 @@ fil_PH: user_registrations: spree_user: signed_up_but_unconfirmed: "ang mensahe na may nakalakip na confirmation link ay napadala na sa inyong email address. Maaari lamang na buksan ang link para ma-activate ang inyong account." - unknown_error: "may maling nangyari habang ginagawa ang inyong account. I-check ang email address at subukang muli." + unknown_error: "may problemang kinaharap habang ginagawa ang inyong account. I-check ang inyong email address at subukang muli." failure: invalid: | hindi valid ang email o password. - isa ka bang Guest dati? marahil ay kailangang gumawa ng account o i-reset ang inyong password. + ikaw ba ay Guest noong bumisita dati? marahil ay kailangang gumawa ng sariling account o i-reset ang inyong password. unconfirmed: "Kailangang kumpirmahin ang inyong account bago magpatuloy." already_registered: "Ang email address na ito ay nakarehistro na. Maglog-in upang makapagpatuloy o bumalik at gumamit ng ibang email address." success: logged_in_succesfully: "Matagumpay na nakapaglog-in." user_passwords: spree_user: - updated_not_active: "ang inyong password ay na-reset na ngunit ang inyong email ay hindi pa nakumpirma." + updated_not_active: "ang inyong password ay na-reset na, ngunit ang inyong email ay hindi pa nakumpirma." updated: "Ang password ay matagumpay na napalitan. Ikaw ay nakasign-in na." - send_instructions: "Kayo ay makakatanggap ng email na may panuto kung paano kumpirmahin ang inyong account sa loob ng ilang minuto." + send_instructions: "Ikaw ay makakatanggap ng email na may panuto kung paano kumpirmahin ang inyong account, sa loob ng ilang minuto." models: order_cycle: cloned_order_cycle_name: "KOPYA NG%{order_cycle}" @@ -118,14 +118,14 @@ fil_PH: invalid_element_error: "ay dapat naglalaman lamang ng valid na integers" enterprise_mailer: confirmation_instructions: - subject: "Pakikumpirma ang email address para sa %{enterprise}" + subject: "Kumpirmahin ang email address para sa %{enterprise}" welcome: subject: "%{enterprise}ay nasa %{sitename}na ngayon" - email_welcome: "Maligayang pagdating" + email_welcome: "Maligayang Pagdating" email_registered: "ay miyembro na ng" email_userguide_html: "Narito ang Gabay sa Paggamit na may detalyadong suporta para sa pagset-up ng iyong Producer o Hub: %{link}" userguide: "Gabay sa Paggamit ng Open Food Network" - email_admin_html: "maaaring pamahalaan ang iyong account sa pamamagitan ng paglog-in sa%{link}o sa pagpindot sa cog sa pinakataas na kanang bahagi ng homepage at pagpili sa Administration." + email_admin_html: "maaaring pamahalaan ang iyong account sa pamamagitan ng paglog-in sa%{link}o sa pagpindot sa cog sa pinakataas na kanang bahagi ng homepage, at piliin ang Administration." admin_panel: "Admin Panel" email_community_html: "Kami ay mayroon ding online forum para sa talakayang pangkomunidad na may kinalaman sa OFN software at sa mga natatanging hamon sa pagpapatakbo ng enterprise ng pagkain. Kayo ay hinihikayat namin na sumali rito. Kami ay patuloy na nagbabago para makapagbigay ng mas mabuting serbisyo, at ang inyong suhestiyon sa forum ay makakatulong para mga susunod na pagbabago.%{link}" join_community: "Sumali sa Komunidad" @@ -177,17 +177,17 @@ fil_PH: explainer: ang awtomatikong pagproseso ng bayad para sa mga order na ito ay hindi nagtagumpay dahil sa isang error. ang error ay nailista upang mabusisi kung saan posibleng nagsimula. other: title: Iba Pang Dahilan ng Error (%{count}na order) - explainer: Hindi naging matagumpay ang awtomatikong pagproseso ng mga order na ito dahil sa hindi maipaliwanag na kadahilanan. Makipag-uganayan sa amin kung nakita ang mensaheng ito. + explainer: Hindi naging matagumpay ang awtomatikong pagproseso ng mga order na ito dahil sa hindi maipaliwanag na kadahilanan. Makipag-uganayan sa amin kung nakikita ang mensaheng ito. home: "OFN" title: Open Food Network welcome_to: 'Maligayang Pagdating sa' site_meta_description: "Kami ay nagsimula sa pinakaibaba pataas. Kasama ang mga magsasaka at tagatanim na handang ibahagi at ipagmalaki ang kanilang mga kuwento. May mga tapat at patas na Distributors na handang makipag-usap sa mga gumagawa ng produkto. At mga mamimili na naniniwala na ang mabusising lingguhang pamimili ay..." search_by_name: Hanapin gamit ang pangalan o lungsod... producers_join: Ang mga Pilipinong producers ay inaanyayahang naming sumali sa Open Food Network. - charges_sales_tax: Charges GST? + charges_sales_tax: naniningil ng GST? print_invoice: "i-print ang invoice" print_ticket: "i-print ang ticket" - select_ticket_printer: "pumili ng printer para sa tickets" + select_ticket_printer: "pumili ng printer para sa mga ticket" send_invoice: "ipadala ang invoice" resend_confirmation: "ipadala muli ang kumpirmasyon" view_order: "tignan ang order" @@ -196,17 +196,17 @@ fil_PH: cancel_order: "i-cancel ang order" confirm_send_invoice: "ang invoice para sa order na ito ay ipapadala sa customer. nais mo bang magpatuloy?" confirm_resend_order_confirmation: "nais mo bang ipadala muli ang order confirmation email?" - must_have_valid_business_number: "%{enterprise_name}ay dapat may valid na ABN bago makapagpadala ng mga invoice" + must_have_valid_business_number: "%{enterprise_name}ay dapat may valid na TIN bago makapagpadala ng mga invoice" invoice: "invoice" more: "Karagdagang Impormasyon" say_no: "Hindi" say_yes: "Oo" ongoing: Nagaganap bill_address: Billing Address - ship_address: Address kung saan ipapadala + ship_address: Shipping Address sort_order_cycles_on_shopfront_by: "Uriin ang mga order cycle sa shopfront gamit ang" - required_fields: ang mga kailangang may sagot ay may nakalagay na asterisk - select_continue: pumili at magpatuloy + required_fields: ang mga kailangang sagutan ay may nakalagay na asterisk + select_continue: Pumili at Magpatuloy remove: Tanggalin or: o collapse_all: Itago lahat @@ -217,14 +217,14 @@ fil_PH: show_all_with_more: "Ipakita lahat (%{num}pa)" cancel: i-cancel edit: i-edit - clone: Clone + clone: Gayahin distributors: Mga Distributor bulk_order_management: Pamamahala sa pangmaramihang order enterprises: Mga Enterprise enterprise_groups: Mga grupo - reports: mga ulat + reports: Mga Ulat variant_overrides: Imbentaryo - import: i-import + import: ilipat spree_products: mga produktong Spree all: Lahat current: kasalukuyan @@ -256,14 +256,14 @@ fil_PH: invalid_payment_state: "hindi valid na status ng pagbabayad" filter_results: I-filter ang mga resulta quantity: Dami - pick_up: kunin + pick_up: Pick up copy: Kopyahin change_my_password: "Palitan ang aking password" update_password: "i-update ang password" password_confirmation: Kumpirmasyon ng password reset_password_token: i-reset ang password token expired: ay expired na, magrequest ng bago - back_to_payments_list: "ibalik sa listahan ng mga bayad" + back_to_payments_list: "bumalik sa listahan ng mga bayad" maestro_or_solo_cards: "Maestro/Solo cards" backordered: "na-backorder" on hand: "on hand" @@ -309,7 +309,7 @@ fil_PH: volume: dami items: mga item select_all: piliin ang lahat - quick_search: mabilis na paghahanap + quick_search: madaliang paghahanap clear_all: alisin lahat start_date: "Petsa na nagsimula" end_date: "Petsa na natapos" @@ -343,7 +343,7 @@ fil_PH: enable_localized_number: "gamitin ang international thousand/decimal separator logic" invoice_settings: edit: - title: "settings para sa invoice" + title: "settings ng invoice" enable_invoices?: "paganahin ang mga invoice?" invoice_style2?: "gamitin ang alternatibong modelo ng invoice na kinabibilangan ng kabuuang breakdown ng tax bawat rate at impormasyon ng rate ng tax kada item (hindi pa akma para sa mga bansang nagpapakita na presyo na hindi kasama ang tax)" enable_receipt_printing?: "ipakita ang mga pagpipilian sa pag-print ng mga resibo gamit ang thermal printers sa dropdown ng order." @@ -376,14 +376,14 @@ fil_PH: code: Code duplicate_code: "ang code na ito ay nagamit na" bill_address: "Billing Address" - ship_address: "Address kung saan ipapadala" + ship_address: "Shipping Address" update_address_success: 'matagumpay na na-update ang address' update_address_error: 'pakisagutan lahat ng kailangang impormasyon' edit_bill_address: 'i-edit ang Billing Address' - edit_ship_address: 'i-edit ang address kung saan ipapadala' + edit_ship_address: 'i-edit ang shipping address' required_fileds: 'ang mga kailangang may sagot ay may nakalagay na asterisk' select_country: 'Piliin ang bansa' - select_state: 'pumili ng status' + select_state: 'pumili ng Lalawigan' edit: 'i-edit' update_address: 'i-update ang address' confirm_delete: 'siguradong tatanggalin?' @@ -433,7 +433,7 @@ fil_PH: available_on: Magagamit Nakabukas av_on: "Av On" import_date: na-import - upload_an_image: maglagay ng larawan + upload_an_image: mag-upload ng larawan seo: product_search_keywords: "mga keyword sa paghahanap ng produkto" product_search_tip: "isulat ang mga salita para mahanap ang inyong produkto sa mga shop. gumamit ng laktaw upang paghiwalayin ang bawat keyword." @@ -446,12 +446,12 @@ fil_PH: variants: infinity: "walang hanggan" to_order_tip: "ang mga item na made to order ay walang paraan ng pag-set ng lebel ng stock, tulad ng mga tinapay na ginagawa lamang kapag may order." - back_to_products_list: "bumalik sa listahan ng produkto" + back_to_products_list: "bumalik sa listahan ng mga produkto" editing_product: "ine-edit ang mga produkto" tabs: - product_details: "Detalye ng produkto" + product_details: "mga detalye ng produkto" group_buy_options: "pagpipilian para sa Grupong pagbili" - images: "larawan" + images: "mga larawan" variants: "mga uri" product_properties: "mga katangian ng produkto" product_import: @@ -615,9 +615,9 @@ fil_PH: desc_long: tungkol sa amin desc_long_placeholder: magkuwento sa Customer tungkol sa inyong sarili. Ang impormasyon na ito ay makikita at lalabas sa inyong profile. business_details: - abn: ABN + abn: 'TIN:' abn_placeholder: hal. 99 123 456 789 - acn: ACN + acn: Branch TIN acn_placeholder: hal. 123 456 789 display_invoice_logo: ipakita ang Logo sa mga invoice invoice_text: magdagdag ng sariling mensahe sa dulo ng bawat invoice @@ -1191,8 +1191,8 @@ fil_PH: tax_total: "Kabuuang Tax (%{rate}):" total_excl_tax: "Kabuuan (Hindi kasama ang tax):" total_incl_tax: "Kabuuan (Kasama ang tax):" - abn: "ABN:" - acn: "ACN:" + abn: "TIN:" + acn: "Branch TIN:" invoice_issued_on: "inilabas ang invoice noong:" order_number: "numero ng invoice" date_of_transaction: "Petsa ng Transaksiyon:" @@ -1323,14 +1323,8 @@ fil_PH: cookie_stripe_desc: "Mga data na nakolekta ng Stripe, ang tagaproseso para sa bayad, upang magamit sa pag-detect ng fraud https://stripe.com/cookies-policy/legal. hindi lahat ng shop ay gumagamit ng Stripe bilang paraan ng pagbabayad ngunit iminumungkahi namin itong gamitin sa lahat ng pahina upang maiwasan ang fraud at ilegal na pagkuha ng iyong impormasyon." statistics_cookies: "katayuan ng cookies" statistics_cookies_desc: "ang mga sumusunod ay hindi mahigpit na kinakailangan, ngunit nakakatulong upang mabigyan namin kayo ng mga pinakamagandang serbisyo sa pamamagitan ng pagpayag na suriin namin ang kilos ng mga gumagamit, alamin ang mga features na madalas gamitin o hindi ginagamit, intindihin ang mga problemang kinaharap ng gumagamit, at iba pa." - statistics_cookies_analytics_desc_html: "upang kolektahin at suriin ang data sa paggamit ng platform, ginagamit namin ang Google Analytics, bilang ito ang default na serbisyo na ginagamit ng Spree (ang e-commerce open source software kung saan kami nagsimula) ngunit ang aming layunin ay makalipat sa Matomo(halimbawa ay Piwik, open source analytics tool na sumusunod sa GDPR at pinangangalagaan ang inyong privacy) sa lalong madaling panahon." statistics_cookies_matomo_desc_html: "para makolekta at masuri ang mga data na ginagamit, gumagamit kami ngMatomo(halimbawa ay Piwik), isang open source analytics na tool na sumusunod sa GDPR at pinangangalagaan ang inyong privacy." statistics_cookies_matomo_optout: "nais mo bang gamitin ang Matomo Analytics? hindi kami kumukolekta ng kahit anong personal na impormasyon, at tinutulungan kami ng Matomo na pag-igihin ang aming serbisyo, ngunit mas pinapahalagahan namin ang inyong desisyon :-)" - cookie_analytics_utma_desc: "ginagamit upang pag-ibahin ang mga gumagamit at mga sesyon. Ang cookie ay nabubuo kapag ang javascript library ay naisagawa at walang __utma cookies. ang cookie na ito ay ina-update sa tuwing may ipinapadala na data sa Google Analytics." - cookie_analytics_utmt_desc: "ginagamit upang makontrol ang bilis ng pagpasok ng mga request." - cookie_analytics_utmb_desc: "ginagamit upang matukoy ang mga bagong sesyon/bisita. ang cookie ay nabubuo kapag ang javascript library ay naisagawa at walang __utma cookies. ang cookie na ito ay ina-update sa tuwing may ipinapadala na data sa Google Analytics." - cookie_analytics_utmc_desc: "hindi ginagamit sa ga.js. i-set para sa interoperability sa urchin.js. Kahit sa nakaraan, ang cookie na ito ay ginagamit kasama ang the __utmb cookie para matukoy kung ang gumagamit ay nasa bagong sesyon/bisita." - cookie_analytics_utmz_desc: "sine-save ang traffic source o campaign na nagpapaliwanag kung paano napunta ang gumagamit sa inyong site. ang cookie ay nagagawa kapag ang javascript library ay nagamit at na-update sa tuwing may ipinapadalang data sa Google Analytics." cookie_matomo_basics_desc: "mga cookies ng Matomo first party para mangolekta ng istatistika." cookie_matomo_heatmap_desc: "cookies para sa Matomo Heatmap & Session Recording." cookie_matomo_ignore_desc: "Cookie na ginagamit upang hindi maisama ang gumagamit sa pag-track." @@ -1791,8 +1785,8 @@ fil_PH: postcode_field: "Postcode:" postcode_field_placeholder: "hal. 3070" postcode_field_error: "kailangang ilagay ang postcode" - state_field: "Probinsiya:" - state_field_error: "Kailangang ang probinsiya" + state_field: "Lalawigan:" + state_field_error: "Kailangang isaad ang lalawigan" country_field: "Bansa:" country_field_error: "pumili ng bansa" contact: @@ -1824,9 +1818,9 @@ fil_PH: enterprise_long_desc: "mahabang paglalarawan" enterprise_long_desc_placeholder: "ito ang inyong pagkakataon upang ipakilala ang iyong enterprise-kung ano ang kaibahan mo sa iba at paano ka nakahihigit? iminumungkahi namin na gumamit ng 600 na letra o mas mababa pa o 150 salita sa pagbibigay ng paglalarawan." enterprise_long_desc_length: "%{num}na mga letra/ hanggang 600 ang iminumungkahi" - enterprise_abn: "ABN" + enterprise_abn: "TIN" enterprise_abn_placeholder: "hal. 99 123 456 789" - enterprise_acn: "ACN" + enterprise_acn: "Branch TIN" enterprise_acn_placeholder: "hal. 123 456 789" enterprise_tax_required: "kailangang gumawa ng pagpipilian." images: @@ -1938,7 +1932,7 @@ fil_PH: admin_enterprise_groups_contact_city_placeholder: "hal. Northcote" admin_enterprise_groups_contact_zipcode: "Postcode" admin_enterprise_groups_contact_zipcode_placeholder: "hal. 3070" - admin_enterprise_groups_contact_state_id: "Probinsiya" + admin_enterprise_groups_contact_state_id: "Lalawigan" admin_enterprise_groups_contact_country_id: "Bansa" admin_enterprise_groups_web: "mga pinagkukuhanan ng Web" admin_enterprise_groups_web_twitter: "hal. @the_prof" @@ -2008,7 +2002,7 @@ fil_PH: spree_admin_enterprises_create_new_product: "GUMAWA NG BAGONG PRODUKTO" spree_admin_single_enterprise_alert_mail_confirmation: "kumpirmahin ang email address para sa/kay" spree_admin_single_enterprise_alert_mail_sent: "naipadala na ang email sa" - spree_admin_overview_action_required: "kinakailangan ng aksyon" + spree_admin_overview_action_required: "kailangan ng aksyon" spree_admin_overview_check_your_inbox: "tignan ang iyong inbox para sa karagdagang panuto. maraming salamat!" spree_admin_unit_value: halaga kada yunit spree_admin_unit_description: paglalarawan sa bawat yunit @@ -2697,6 +2691,14 @@ fil_PH: start_free_profile: "Magsimula sa libreng profile at palawakin kapag handa ka na!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "saklaw na petsa" + report_format_csv: "i-download bilang CSV" + generate_report: "Bumuo ng ulat" + report: + none: "wala" + select_and_search: "pumili ng mga filter at pindutin ang GUMAWA NG REPORT para ma-access ang inyong data." enterprise_fee_summary: date_end_before_start_error: "ay dapat pagkatapos magsimula" parameter_not_allowed_error: "ikaw ay hindi awtorisadong gumamit ng isa o higit pa na mga filter para sa ulat na ito." @@ -2870,16 +2872,16 @@ fil_PH: default_tax: "default na tax" default_tax_zone: "default na sona ng tax" country_based: "Country Based" - state_based: "Nakabase sa probinsiya" + state_based: "Nakabase sa Lalawigan" countries: "Mga Bansa" listing_countries: "Listahan ng mga Bansa" iso_name: "pangalan ng ISO" - states_required: "Kailangang may mga probinsiya" + states_required: "Kailangang nakasaad ang mga Lalawigan" editing_country: "pag-edit ng bansa" back_to_countries_list: "bumalik sa listahan ng mga bansa" - states: "Mga probinsiya" + states: "Mga Lalawigan" abbreviation: "Pinaikli" - new_state: "Bagong Probinsiya" + new_state: "Bagong Status" payment_methods: "Mga Paraan ng Pagbabayad" new_payment_method: "Bagong Paraan ng pagbabayad" provider: "tagapagbigay ng serbisyo" @@ -2890,12 +2892,6 @@ fil_PH: shipping_categories: "mga kategorya ng pagpapadala" new_shipping_category: "bagong kategorya ng pagpapadala" back_to_shipping_categories: "bumalik sa kategorya ng pagpapadala" - analytics_trackers: "mga tracker ng analytic" - no_trackers_found: "walang natagpuang tracker" - new_tracker: "bagong tracker" - add_one: "Magdagdag ng isa" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "bumalik sa listahan ng tracker" name: "pangalan" description: "paglalarawan" type: "uri" @@ -3177,14 +3173,6 @@ fil_PH: bulk_coop_allocation: 'bultuhang Co-Op - Alokasyon' bulk_coop_packing_sheets: 'bultuhang Co-Op - piraso ng pagbabalot' bulk_coop_customer_payments: 'bultuhang Co-Op - mga bayad ng customer' - enterprise_fee_summaries: - filters: - date_range: "saklaw na petsa" - report_format_csv: "i-download bilang CSV" - generate_report: "Bumuo ng ulat" - report: - none: "wala" - select_and_search: "pumili ng mga filter at pindutin ang GUMAWA NG REPORT para ma-access ang inyong data." users: index: listing_users: "Nililista ang mga User" @@ -3229,14 +3217,15 @@ fil_PH: autocomplete: producer_name: "Producer" unit: "yunit" - general_settings: + shared: + sortable_header: + name: "Pangalan" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "ipakita ang banner ng pagpayag sa cookies" privacy_policy_url: "Patakaran sa privacy URL" enterprises_require_tos: "ang mga enterprise ay dapat tanggapin ang Termino ng serbisyo." cookies_policy_matomo_section: "ipakita ang seksyon ng Matomo sa pahina ng patakaran sa cookies" - cookies_policy_ga_section: "ipakita ang seksyon ng Google Analytics sa pahina ng patakaran sa cookies" footer_tos_url: "URL ng Termino ng Serbisyo" checkout: payment: From b54c6fcb2619ef74f9c8370dda5cf1ca6e57f640 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:26 +1000 Subject: [PATCH 49/89] Updating translations for config/locales/nb.yml --- config/locales/nb.yml | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 3fde559047..bbf81c9384 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -1321,14 +1321,8 @@ nb: cookie_stripe_desc: "Data samlet inn av betalingsprosessoren vår Stripe for svindeloppdagelse https://stripe.com/cookies-policy/legal. Ikke alle butikker bruker Stripe som betalingsmetode, men det er en god praksis å forhindre at svindel gjelder for alle sider. Stripe bygger sannsynligvis et bilde av hvilke av våre sider som til vanlig samhandler med API-en og deretter flagge alt uvanlig. Så å sette Stripe-cookien har en bredere funksjon enn bare å levere en betalingsmetode til en bruker. Fjerning av det kan påvirke sikkerheten til selve tjenesten. Du kan lære mer om Stripe og lese retningslinjene for personvern på https://stripe.com/privacy." statistics_cookies: "Statistikkkapsler" statistics_cookies_desc: "Følgende er ikke strengt nødvendige, men hjelper deg med å gi deg den beste brukeropplevelsen ved å tillate oss å analysere brukeradferd, identifisere hvilke funksjoner du bruker mest, eller ikke bruker, forstå brukeropplevelsesproblemer osv." - statistics_cookies_analytics_desc_html: "For å samle og analysere plattformbruksdata bruker vi Google Analytics, da det var standardtjenesten som var koblet til Spree (ehandel open source programvare som vi bygde på), men visjonen vår er å bytte til Matomo (ex Piwik, open source analyseverktøy som er GDPR-kompatibelt og beskytter ditt privatliv) så snart vi kan." statistics_cookies_matomo_desc_html: "For å samle og analysere plattformbruksdata bruker vi Matomo (ex Piwik), et åpen kildekodeanalyseverktøy som er kompatibelt med GDPR og beskytter personvernet ditt." statistics_cookies_matomo_optout: "Ønsker du å melde deg av Matomo analytics? Vi samler ikke inn personlige data, og Matomo hjelper oss med å forbedre vår tjeneste, men vi respekterer ditt valg :-)" - cookie_analytics_utma_desc: "Brukes til å skille mellom brukere og økter. Kapselen er opprettet når javascriptbiblioteket utføres, og ingen eksisterende __utma-informasjonskapsler eksisterer. Cookien oppdateres hver gang data sendes til Google Analytics." - cookie_analytics_utmt_desc: "Brukes til pådragsforespørselsrate." - cookie_analytics_utmb_desc: "Brukes til å bestemme nye økter/besøk. Kapselen blir opprettet når javascriptbiblioteket kjøres, og ingen eksisterende __utmb-cookies eksisterer. Cookien oppdateres hver gang data sendes til Google Analytics." - cookie_analytics_utmc_desc: "Ikke brukt i ga.js. Satt for interoperabilitet med urchin.js. Historisk kjørte denne informasjonskapselen sammen med __utmb-cookien for å avgjøre om brukeren var i en ny økt/besøk." - cookie_analytics_utmz_desc: "Lagrer trafikkilden eller kampanjen som forklarer hvordan brukeren nådde nettstedet ditt. Kapselen blir opprettet når javascriptbiblioteket utføres og oppdateres hver gang data sendes til Google Analytics." cookie_matomo_basics_desc: "Matomo førstehånds kapsler for å samle statistikk." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session opptakskapsel." cookie_matomo_ignore_desc: "Kapsel brukes til å utelukke at bruker blir sporet." @@ -2684,6 +2678,14 @@ nb: start_free_profile: "Start med en gratis profil, og utvid når du er klar!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Datointervall" + report_format_csv: "Last ned som CSV" + generate_report: "Generer rapport" + report: + none: "Ingen" + select_and_search: "Velg filtre og klikk på GENERER RAPPORT for å få tilgang til dataene dine." enterprise_fee_summary: date_end_before_start_error: "må være etter start" parameter_not_allowed_error: "Du er ikke autorisert til å bruke ett eller flere utvalgte filtre for denne rapporten." @@ -2877,12 +2879,6 @@ nb: shipping_categories: "Fraktkategorier" new_shipping_category: "Ny Fraktkategori" back_to_shipping_categories: "Tilbake til Leveringskategorier" - analytics_trackers: "Analyseverktøy" - no_trackers_found: "Ingen sporingsverktøy funnet" - new_tracker: "Nytt Sporingsverktøy" - add_one: "Legg til en" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Tilbake til Liste over Sporingsverktøy" name: "Navn" description: "Beskrivelse" type: "Type" @@ -3164,14 +3160,6 @@ nb: bulk_coop_allocation: 'Bulk Co-op - Allokering' bulk_coop_packing_sheets: 'Bulk Co-op - Pakkseddel' bulk_coop_customer_payments: 'Bulk Co-op - Kunde Betalinger' - enterprise_fee_summaries: - filters: - date_range: "Datointervall" - report_format_csv: "Last ned som CSV" - generate_report: "Generer rapport" - report: - none: "Ingen" - select_and_search: "Velg filtre og klikk på GENERER RAPPORT for å få tilgang til dataene dine." users: index: listing_users: "Lister opp brukere" @@ -3225,7 +3213,6 @@ nb: privacy_policy_url: "Personvernspolicy URL" enterprises_require_tos: "Bedrifter må godta Tjenestevilkår" cookies_policy_matomo_section: "Vis Matomo-delen på informasjonskapsler-siden" - cookies_policy_ga_section: "Vis Google Analytics-delen om informasjonskapsler på policy-siden om informasjonskapsler" footer_tos_url: "Vilkår URL" checkout: payment: From 16e289bf37e086fed9a9d02f2480bac76a08f9aa Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:29 +1000 Subject: [PATCH 50/89] Updating translations for config/locales/en_GB.yml --- config/locales/en_GB.yml | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index dd814710bd..43be091174 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -1321,14 +1321,8 @@ en_GB: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Would you like to opt-out of Matomo analytics? We use Matomo to help us improve our service, but we don't collect any personal data." - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -2691,6 +2685,14 @@ en_GB: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorised to use one or more selected filters for this report." @@ -2884,12 +2886,6 @@ en_GB: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3171,14 +3167,6 @@ en_GB: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3232,7 +3220,6 @@ en_GB: privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: From 612cc45ab7244e0c002e8f409b3fdbd8199f2ac8 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:35 +1000 Subject: [PATCH 51/89] Updating translations for config/locales/en_FR.yml --- config/locales/en_FR.yml | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index 37759490e5..5f96e5972e 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -1321,14 +1321,8 @@ en_FR: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -2685,6 +2679,14 @@ en_FR: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2878,12 +2880,6 @@ en_FR: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3165,14 +3161,6 @@ en_FR: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3226,7 +3214,6 @@ en_FR: privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: From 18fc4b7c92f846371c7fd50c34ca946d01fe448c Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Wed, 29 Apr 2020 01:13:42 +1000 Subject: [PATCH 52/89] Updating translations for config/locales/ca.yml --- config/locales/ca.yml | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 6f4dc90bb9..df9c10bbf5 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1324,14 +1324,8 @@ ca: cookie_stripe_desc: "Dades recollides pel nostre processador de pagaments Stripe per a la detecció de frau https://stripe.com/cookies-policy/legal. No totes les botigues utilitzen Stripe com a mètode de pagament, però és una bona pràctica per evitar que el frau s'apliqui a totes les pàgines. Probablement Stripe construeixi una imatge de quines de les nostres pàgines solen interactuar amb la seva API i, a continuació, marca qualsevol cosa inusual. Així, configurar les cookies d'Stripe té una funció més àmplia que simplement proporcionar un mètode de pagament a un usuari. Eliminant-lo podria afectar la seguretat del propi servei. Pots obtenir més informació sobre Stripe i llegir la seva política de privadesa a https://stripe.com/privacy." statistics_cookies: "Cookies d'estadístiques" statistics_cookies_desc: "Les següents no són estrictament necessàries, però ajuden a proporcionar-vos la millor experiència d'usuari, permetent-nos analitzar el comportament de l'usuari, identificar quines funcions s'utilitzen més o quines no es fan servir, comprendre problemes d'experiència d'usuari, etc." - statistics_cookies_analytics_desc_html: "Per recopilar i analitzar les dades d'ús de la plataforma utilitzem Google Analytics ja que era el servei predeterminat connectat amb Spree (el programari de codi obert de comerç en línia que hem construït), però la nostra visió és canviar a Matomo (ex Piwik, eina d'anàlisi de codi obert compatible amb GDPR i protegeix la vostra privadesa) tan aviat com puguem. " statistics_cookies_matomo_desc_html: "Per recopilar i analitzar les dades d'ús de la plataforma, utilitzem Matomo (ex Piwik), una eina d'anàlisi de codi obert que és compatible amb GDPR i protegeix la vostra privadesa." statistics_cookies_matomo_optout: "Vols desactivar l'anàlisi de dades de Matomo? No recopilem cap dada personal i Matomo ens ajuda a millorar el nostre servei però respectem la teva elecció :-)" - cookie_analytics_utma_desc: "S'utilitza per distingir usuaris i sessions. La cookie es crea quan s'executa la biblioteca javascript i no existeixen cookies __utma existents. La cookie s'actualitza cada cop que s'envien dades a Google Analytics." - cookie_analytics_utmt_desc: "S'utilitza per accelerar la quantitat de sol·licituds." - cookie_analytics_utmb_desc: "S'utilitza per determinar noves sessions / visites. La cookie es crea quan s'executa la biblioteca javascript i no existeixen cookies __utmb existents. La cookie s'actualitza cada cop que s'envien dades a Google Analytics." - cookie_analytics_utmc_desc: "No s'utilitza a ga.js. Estableix la interoperabilitat amb urchin.js. Històricament, aquesta cookie funcionava juntament amb la cookie __utmb per determinar si l'usuari estava en una nova sessió / visita." - cookie_analytics_utmz_desc: "Emmagatzema l'origen del codi o la campanya que explica com l'usuari ha arribat al vostre lloc. La cookie es crea quan s'executa i s'actualitza la biblioteca javascript cada vegada que s'envien dades a Google Analytics." cookie_matomo_basics_desc: "Les primeres cookies de Matomo per recollir estadístiques." cookie_matomo_heatmap_desc: "Galeta d'enregistrament de sessió i heatmap de Matomo" cookie_matomo_ignore_desc: "La cookie usada per excloure l'usuari de ser seguit." @@ -2691,6 +2685,14 @@ ca: start_free_profile: "Comença amb un perfil gratuït i amplia'l quan estiguis preparada." order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Interval de dates" + report_format_csv: "Descarrega com a CSV" + generate_report: "Generar informe" + report: + none: "Cap" + select_and_search: "Seleccioneu els filtres i feu clic a GENERAR INFORME per accedir a les dades." enterprise_fee_summary: date_end_before_start_error: "ha de ser després de l'inici" parameter_not_allowed_error: "No esteu autoritzats a utilitzar un o més filtres seleccionats per a aquest informe." @@ -2884,12 +2886,6 @@ ca: shipping_categories: "Tipus d'enviament" new_shipping_category: "Nova categoria d’enviament" back_to_shipping_categories: "Tornar a les categories d'enviament" - analytics_trackers: "Rastrejadors d'anàlisi" - no_trackers_found: "No s'ha trobat cap rastrejador" - new_tracker: "Nou rastrejador" - add_one: "Afegeix-ne un" - google_analytics_id: "ID d'Analytics" - back_to_trackers_list: "Torna a la llista de rastrejadors" name: "Nom" description: "Descripció" type: "Tipus" @@ -3171,14 +3167,6 @@ ca: bulk_coop_allocation: 'Compra grupal - Assignació' bulk_coop_packing_sheets: 'Compra grupal - Fulls de preparació de cistelles' bulk_coop_customer_payments: 'Compra grupal - Pagaments de les consumidores' - enterprise_fee_summaries: - filters: - date_range: "Interval de dates" - report_format_csv: "Descarrega com a CSV" - generate_report: "Generar informe" - report: - none: "No productora" - select_and_search: "Seleccioneu els filtres i feu clic a GENERAR INFORME per accedir a les dades." users: index: listing_users: "Llistat d'usuàries" @@ -3232,7 +3220,6 @@ ca: privacy_policy_url: "URL de la política de privacitat " enterprises_require_tos: "Les organitzacions han d'acceptar les condicions del servei" cookies_policy_matomo_section: "Mostra la secció de Matomo a la pàgina de política de cookies" - cookies_policy_ga_section: "Mostra la secció de Google Analytics a la pàgina de política de cookies" footer_tos_url: "URL de les condicions d'ús" checkout: payment: From e6fa08edfc231281fb31c07922cc6a1a1ce6cb69 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Tue, 28 Apr 2020 19:07:19 +0100 Subject: [PATCH 53/89] Delete some dead views --- app/views/modals/_food_hub.html.haml | 11 ----------- app/views/modals/_groups.html.haml | 9 --------- app/views/modals/_learn_more.html.haml | 17 ----------------- app/views/modals/_producers.html.haml | 7 ------- config/locales/en.yml | 20 -------------------- 5 files changed, 64 deletions(-) delete mode 100644 app/views/modals/_food_hub.html.haml delete mode 100644 app/views/modals/_groups.html.haml delete mode 100644 app/views/modals/_learn_more.html.haml delete mode 100644 app/views/modals/_producers.html.haml diff --git a/app/views/modals/_food_hub.html.haml b/app/views/modals/_food_hub.html.haml deleted file mode 100644 index 233512b5f0..0000000000 --- a/app/views/modals/_food_hub.html.haml +++ /dev/null @@ -1,11 +0,0 @@ -%h2 - %i.ofn-i_040-hub> - = t :modal_hubs -%h5 - = t :modal_hubs_abstract -%p - = t :modal_hubs_content1 -%p - = t :modal_hubs_content2 -%a.close-reveal-modal{"ng-click" => "$close()"} - %i.ofn-i_009-close diff --git a/app/views/modals/_groups.html.haml b/app/views/modals/_groups.html.haml deleted file mode 100644 index 4a6f092a03..0000000000 --- a/app/views/modals/_groups.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -%h2 - %i.ofn-i_035-groups - = t :modal_groups -%p - = t :modal_groups -%p - = t :modal_groups -%a.close-reveal-modal{"ng-click" => "$close()"} - %i.ofn-i_009-close diff --git a/app/views/modals/_learn_more.html.haml b/app/views/modals/_learn_more.html.haml deleted file mode 100644 index 3a7330aee3..0000000000 --- a/app/views/modals/_learn_more.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -%h2 - = t :modal_how -%h5 - = t :modal_how_shop -%p - = t :modal_how_shop_explained -%h5 - = t :modal_how_pickup -%p - = t :modal_how_pickup_explained -%h5 - = t :modal_how -%p - = t :modal_how -%a.button.neutral-btn.dark{:href => "http://www.openfoodnetwork.org" , :target => "_blank" } Open Food Network -%a.close-reveal-modal{"ng-click" => "$close()"} - %i.ofn-i_009-close diff --git a/app/views/modals/_producers.html.haml b/app/views/modals/_producers.html.haml deleted file mode 100644 index 6e87e0d5c4..0000000000 --- a/app/views/modals/_producers.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -%h2 - %i.ofn-i_036-producers - = t :modal_producers -%p - = t :modal_producers_explained -%a.close-reveal-modal{"ng-click" => "$close()"} - %i.ofn-i_009-close diff --git a/config/locales/en.yml b/config/locales/en.yml index 07a8a849c2..78d7fdf855 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1704,26 +1704,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." - producers_about: About us producers_buy: Shop for producers_contact: Contact From f4bcf6c6d5782c998ce6cab7df6100bcbf0aede7 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 16 Apr 2020 00:05:12 +0200 Subject: [PATCH 54/89] Eager-load line_item associations in order --- app/models/spree/order_decorator.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 85b86c4169..7fa3af05e6 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -263,7 +263,11 @@ Spree::Order.class_eval do end def line_item_variants - line_items.map(&:variant) + if line_items.loaded? + line_items.map(&:variant) + else + line_items.includes(:variant).map(&:variant) + end end # Show already bought line items of this order cycle From 96825444420b50b61d6f8afc8e047d76213953da Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 16 Apr 2020 01:09:11 +0200 Subject: [PATCH 55/89] Eager-load and update BasicEnterpriseSerializer --- .../admin/enterprise_relationships_controller.rb | 10 +++++++--- .../api/admin/basic_enterprise_serializer.rb | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/enterprise_relationships_controller.rb b/app/controllers/admin/enterprise_relationships_controller.rb index 0ffb648f44..545f0e429c 100644 --- a/app/controllers/admin/enterprise_relationships_controller.rb +++ b/app/controllers/admin/enterprise_relationships_controller.rb @@ -1,9 +1,13 @@ module Admin class EnterpriseRelationshipsController < ResourceController def index - @my_enterprises = Enterprise.managed_by(spree_current_user).by_name - @all_enterprises = Enterprise.by_name - @enterprise_relationships = EnterpriseRelationship.by_name.involving_enterprises @my_enterprises + @my_enterprises = Enterprise. + includes(:shipping_methods, :payment_methods). + managed_by(spree_current_user).by_name + @all_enterprises = Enterprise.includes(:shipping_methods, :payment_methods).by_name + @enterprise_relationships = EnterpriseRelationship. + includes(:parent, :child). + by_name.involving_enterprises @my_enterprises end def create diff --git a/app/serializers/api/admin/basic_enterprise_serializer.rb b/app/serializers/api/admin/basic_enterprise_serializer.rb index 880147e296..9072f94291 100644 --- a/app/serializers/api/admin/basic_enterprise_serializer.rb +++ b/app/serializers/api/admin/basic_enterprise_serializer.rb @@ -1,4 +1,12 @@ class Api::Admin::BasicEnterpriseSerializer < ActiveModel::Serializer attributes :name, :id, :is_primary_producer, :is_distributor, :sells, :category, :payment_method_ids, :shipping_method_ids, :producer_profile_only, :permalink + + def payment_method_ids + object.payment_methods.map(&:id) + end + + def shipping_method_ids + object.shipping_methods.map(&:id) + end end From d3af3d3f27dd1df9ab7f55e1191eb3d01fff7724 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 28 Apr 2020 01:15:10 +0200 Subject: [PATCH 56/89] Avoid extra query on stock_items every time #on_demand is called on a variant. In the case where the variant has not been saved yet, we can use #new_record? here instead of #stock_items.empty?, to avoid an additional query. This can be called a vast number of times per request, in various N+1s. The other case where we need to return here is when a variant has been deleted, so #stock_items will be empty and #stock_item will be nil. Likewise, we can just check that with #deleted? and avoid #stock_items.empty? --- app/models/concerns/variant_stock.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/variant_stock.rb b/app/models/concerns/variant_stock.rb index 1cc0ec4e04..5a6094adf4 100644 --- a/app/models/concerns/variant_stock.rb +++ b/app/models/concerns/variant_stock.rb @@ -40,9 +40,9 @@ module VariantStock # Checks whether this variant is produced on demand. def on_demand - # A variant that has not been saved yet, doesn't have a stock item + # A variant that has not been saved yet or has been soft-deleted doesn't have a stock item # This provides a default value for variant.on_demand using Spree::StockLocation.backorderable_default - return Spree::StockLocation.first.backorderable_default if stock_items.empty? + return Spree::StockLocation.first.backorderable_default if new_record? || deleted? stock_item.backorderable? end From 6405c344280a956a80ecfb2d65c9c3ca3ea7c6dd Mon Sep 17 00:00:00 2001 From: Rob H Date: Wed, 29 Apr 2020 21:20:14 +1000 Subject: [PATCH 57/89] Add order number and date/time to order cycles customer report --- .../customer_totals_report.rb | 12 +++++++++--- .../customer_totals_report_spec.rb | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb b/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb index 8225d45eea..16d1a4e163 100644 --- a/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb +++ b/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb @@ -36,7 +36,9 @@ module OpenFoodNetwork I18n.t(:report_header_customer_code), I18n.t(:report_header_tags), I18n.t(:report_header_billing_street), I18n.t(:report_header_billing_street_2), I18n.t(:report_header_billing_city), I18n.t(:report_header_billing_postcode), - I18n.t(:report_header_billing_state)] + I18n.t(:report_header_billing_state), + I18n.t(:report_header_order_number), + I18n.t(:report_header_date)] end # rubocop:enable Metrics/AbcSize # rubocop:enable Metrics/MethodLength @@ -92,7 +94,9 @@ module OpenFoodNetwork proc { |_line_items| "" }, proc { |_line_items| "" }, proc { |_line_items| "" }, - proc { |_line_items| "" } + proc { |_line_items| "" }, + proc { |line_items| line_items.first.order.number }, + proc { |line_items| line_items.first.order.completed_at.strftime("%F %T") }, ] }, { @@ -187,7 +191,9 @@ module OpenFoodNetwork proc { |line_items| line_items.first.order.bill_address.andand.address2 }, proc { |line_items| line_items.first.order.bill_address.andand.city }, proc { |line_items| line_items.first.order.bill_address.andand.zipcode }, - proc { |line_items| line_items.first.order.bill_address.andand.state } + proc { |line_items| line_items.first.order.bill_address.andand.state }, + proc { |line_items| line_items.first.order.number }, + proc { |line_items| line_items.first.order.completed_at.strftime("%F %T") }, ] end # rubocop:enable Metrics/AbcSize diff --git a/spec/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report_spec.rb b/spec/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report_spec.rb index eb2e2f3cc9..628279c260 100644 --- a/spec/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report_spec.rb +++ b/spec/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report_spec.rb @@ -35,6 +35,22 @@ RSpec.describe OpenFoodNetwork::OrdersAndFulfillmentsReport::CustomerTotalsRepor total_field = report_table.last[5] expect(total_field).to eq I18n.t("admin.reports.total") end + + it 'includes the order number and date in item rows' do + order_number_and_date_fields = report_table.first[33..34] + expect(order_number_and_date_fields).to eq([ + order.number, + order.completed_at.strftime("%F %T"), + ]) + end + + it 'includes the order number and date in total rows' do + order_number_and_date_fields = report_table.last[33..34] + expect(order_number_and_date_fields).to eq([ + order.number, + order.completed_at.strftime("%F %T"), + ]) + end end context "loading shipping methods" do From a38b18bd0d767753150f3e43f38e317dca2cf294 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Wed, 15 Apr 2020 18:29:25 +0100 Subject: [PATCH 58/89] Remove smtp config from admin config page --- .../spree/admin/mail_methods_controller.rb | 4 - .../spree/admin/mail_methods/_form.html.haml | 84 ++++++------------- config/locales/en.yml | 8 -- .../admin/configuration/mail_methods_spec.rb | 9 -- 4 files changed, 26 insertions(+), 79 deletions(-) diff --git a/app/controllers/spree/admin/mail_methods_controller.rb b/app/controllers/spree/admin/mail_methods_controller.rb index 3bc52ce659..e95739148d 100644 --- a/app/controllers/spree/admin/mail_methods_controller.rb +++ b/app/controllers/spree/admin/mail_methods_controller.rb @@ -4,10 +4,6 @@ module Spree after_filter :initialize_mail_settings def update - if params[:smtp_password].blank? - params.delete(:smtp_password) - end - params.each do |name, value| next unless Spree::Config.has_preference? name diff --git a/app/views/spree/admin/mail_methods/_form.html.haml b/app/views/spree/admin/mail_methods/_form.html.haml index 670e37140e..02b7ea11dd 100644 --- a/app/views/spree/admin/mail_methods/_form.html.haml +++ b/app/views/spree/admin/mail_methods/_form.html.haml @@ -1,60 +1,28 @@ %div .row - .alpha.six.columns - %fieldset.no-border-bottom - %legend{align: "center"}= t("spree.general") - .field - = preference_field_tag("enable_mail_delivery", Spree::Config[:enable_mail_delivery], type: :boolean) - = label_tag :enable_mail_delivery, t("spree.enable_mail_delivery") - .field - = label_tag :mails_from, t("spree.send_mails_as") - %br/ - = text_field_tag :mails_from, Spree::Config[:mails_from], maxlength: 256, class: 'fullwidth' - %br/ - %span.info - = t("spree.smtp_send_all_emails_as_from_following_address") - .field - = label_tag :mail_bcc, t("spree.send_copy_of_all_mails_to") - %br/ - = text_field_tag :mail_bcc, Spree::Config[:mail_bcc], maxlength: 256, class: 'fullwidth' - %br/ - %span.info - = t("spree.smtp_send_copy_to_this_addresses") - .field - = label_tag :intercept_email, t("spree.intercept_email_address") - %br/ - = text_field_tag :intercept_email, Spree::Config[:intercept_email], maxlength: 256, class: 'fullwidth' - %br/ - %span.info - = t("spree.intercept_email_instructions") - .six.columns.omega - %fieldset.no-border-bottom - %legend{align: "center"}= t("spree.smtp") - .field - = label_tag :mail_domain, t("spree.smtp_domain") - %br/ - = text_field_tag :mail_domain, Spree::Config[:mail_domain], class: 'fullwidth' - .field - = label_tag :mail_host, t("spree.smtp_mail_host") - %br/ - = text_field_tag :mail_host, Spree::Config[:mail_host], class: 'fullwidth' - .field - = label_tag :mail_port, t("spree.smtp_port") - %br/ - = text_field_tag :mail_port, Spree::Config[:mail_port], class: 'fullwidth' - .field - = label_tag :secure_connection_type, t("spree.secure_connection_type") - %br/ - = select_tag(:secure_connection_type, options_from_collection_for_select(Spree::Core::MailSettings::SECURE_CONNECTION_TYPES.map{|w| Spree.t(w.downcase.to_sym, default: w)}, :to_s, :to_s, Spree::Config[:secure_connection_type]), class: 'select2 fullwidth') - .field - = label_tag :mail_auth_type, t("spree.smtp_authentication_type") - %br/ - = select_tag(:mail_auth_type, options_from_collection_for_select(Spree::Core::MailSettings::MAIL_AUTH.map{|w| Spree.t(w.downcase.to_sym, default: w)}, :to_s, :to_s, Spree::Config[:mail_auth_type]), class: 'select2 fullwidth') - .field - = label_tag :smtp_username, t("spree.smtp_username") - %br/ - = text_field_tag :smtp_username, Spree::Config[:smtp_username], class: 'fullwidth' - .field - = label_tag :preferred_smtp_password, t("spree.smtp_password") - %br/ - = password_field_tag :smtp_password, Spree::Config[:smtp_password], class: 'fullwidth' + %fieldset.no-border-bottom + %legend{align: "center"}= t("spree.general") + .field + = preference_field_tag("enable_mail_delivery", Spree::Config[:enable_mail_delivery], type: :boolean) + = label_tag :enable_mail_delivery, t("spree.enable_mail_delivery") + .field + = label_tag :mails_from, t("spree.send_mails_as") + %br/ + = text_field_tag :mails_from, Spree::Config[:mails_from], maxlength: 256, class: 'fullwidth' + %br/ + %span.info + = t("spree.smtp_send_all_emails_as_from_following_address") + .field + = label_tag :mail_bcc, t("spree.send_copy_of_all_mails_to") + %br/ + = text_field_tag :mail_bcc, Spree::Config[:mail_bcc], maxlength: 256, class: 'fullwidth' + %br/ + %span.info + = t("spree.smtp_send_copy_to_this_addresses") + .field + = label_tag :intercept_email, t("spree.intercept_email_address") + %br/ + = text_field_tag :intercept_email, Spree::Config[:intercept_email], maxlength: 256, class: 'fullwidth' + %br/ + %span.info + = t("spree.intercept_email_instructions") diff --git a/config/locales/en.yml b/config/locales/en.yml index 831dec00f8..da87782fb8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2978,14 +2978,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." diff --git a/spec/features/admin/configuration/mail_methods_spec.rb b/spec/features/admin/configuration/mail_methods_spec.rb index 158e4e42a6..6ff8db2d6b 100644 --- a/spec/features/admin/configuration/mail_methods_spec.rb +++ b/spec/features/admin/configuration/mail_methods_spec.rb @@ -19,14 +19,5 @@ describe "Mail Methods" do click_button "Update" expect(page).to have_content("successfully updated!") end - - # Regression test for #2094 - it "does not clear password if not provided" do - Spree::Config[:smtp_password] = "haxme" - click_button "Update" - expect(page).to have_content("successfully updated!") - - expect(Spree::Config[:smtp_password]).not_to be_blank - end end end From 0e5d7c1eb1a3b287224e8fede47e4ac731b07d91 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Wed, 29 Apr 2020 13:30:55 +0100 Subject: [PATCH 59/89] Add migration to drop dead spree_mail_methods table and some dead mail_methods preferences --- db/migrate/20200429122446_drop_mail_methods.rb | 16 ++++++++++++++++ db/schema.rb | 9 +-------- lib/tasks/data/anonymize_data.rake | 2 -- 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20200429122446_drop_mail_methods.rb diff --git a/db/migrate/20200429122446_drop_mail_methods.rb b/db/migrate/20200429122446_drop_mail_methods.rb new file mode 100644 index 0000000000..12dba55bbe --- /dev/null +++ b/db/migrate/20200429122446_drop_mail_methods.rb @@ -0,0 +1,16 @@ +class DropMailMethods < ActiveRecord::Migration + def up + drop_table :spree_mail_methods + + # delete mail_method preferences associated with the old MailMethod model + execute "DELETE FROM spree_preferences WHERE key LIKE 'spree/mail_method%'" + end + + def down + create_table :spree_mail_methods do |t| + t.string :environment + t.boolean :active, default: true + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b00e0bf89e..1004c0bc38 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20200406085833) do +ActiveRecord::Schema.define(:version => 20200429122446) do create_table "adjustment_metadata", :force => true do |t| t.integer "adjustment_id" t.integer "enterprise_id" @@ -505,13 +505,6 @@ ActiveRecord::Schema.define(:version => 20200406085833) do t.datetime "updated_at", :null => false end - create_table "spree_mail_methods", :force => true do |t| - t.string "environment" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "spree_option_types", :force => true do |t| t.string "name", :limit => 100 t.string "presentation", :limit => 100 diff --git a/lib/tasks/data/anonymize_data.rake b/lib/tasks/data/anonymize_data.rake index f494de99fc..bdc6e37c1f 100644 --- a/lib/tasks/data/anonymize_data.rake +++ b/lib/tasks/data/anonymize_data.rake @@ -18,8 +18,6 @@ namespace :ofn do anonymize_payments_accounts Spree::TokenizedPermission.update_all("token = null") - ActiveRecord::Base.connection.execute("update spree_mail_methods - set environment = '#{Rails.env}'") # Delete all preferences that may contain sensitive information Spree::Preference From 78fd785f0c5e1b1a8c9bb99d78a5612cff85203d Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:26:49 +0100 Subject: [PATCH 60/89] Extract TruncateData out of :truncate_data task --- lib/tasks/data/truncate_data.rb | 77 +++++++++++++++++++++++ spec/lib/tasks/data/truncate_data_spec.rb | 56 +++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 lib/tasks/data/truncate_data.rb create mode 100644 spec/lib/tasks/data/truncate_data_spec.rb diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb new file mode 100644 index 0000000000..2add9f6111 --- /dev/null +++ b/lib/tasks/data/truncate_data.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +class TruncateData + def initialize(months_to_keep: nil) + @date = (months_to_keep || 3).months.ago + end + + def call + sql_delete_from " + spree_inventory_units #{where_order_id_in_orders_to_delete}" + sql_delete_from " + spree_inventory_units + where shipment_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" + + truncate_adjustments + + sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" + sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" + sql_delete_from "spree_shipments #{where_order_id_in_orders_to_delete}" + Spree::ReturnAuthorization.delete_all + + truncate_order_cycle_data + + sql_delete_from "proxy_orders #{where_oc_id_in_ocs_to_delete}" + + sql_delete_from "spree_orders #{where_oc_id_in_ocs_to_delete}" + sql_delete_from "order_cycle_schedules #{where_oc_id_in_ocs_to_delete}" + sql_delete_from "order_cycles #{where_ocs_to_delete}" + + Spree::TokenizedPermission.where("created_at < '#{date}'").delete_all + Spree::StateChange.delete_all + Spree::LogEntry.delete_all + sql_delete_from "sessions" + end + + private + + attr_reader :date + + def sql_delete_from(sql) + ActiveRecord::Base.connection.execute("delete from #{sql}") + end + + def where_order_id_in_orders_to_delete + "where order_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" + end + + def where_oc_id_in_ocs_to_delete + "where order_cycle_id in (select id from order_cycles #{where_ocs_to_delete} )" + end + + def where_ocs_to_delete + "where orders_close_at < '#{date}'" + end + + def truncate_adjustments + sql_delete_from "spree_adjustments where source_type = 'Spree::Order' + and source_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::Shipment' + and source_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::Payment' + and source_id in (select id from spree_payments #{where_order_id_in_orders_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::LineItem' + and source_id in (select id from spree_line_items #{where_order_id_in_orders_to_delete})" + end + + def truncate_order_cycle_data + sql_delete_from "coordinator_fees #{where_oc_id_in_ocs_to_delete}" + sql_delete_from " + exchange_variants where exchange_id + in (select id from exchanges #{where_oc_id_in_ocs_to_delete})" + sql_delete_from " + exchange_fees where exchange_id + in (select id from exchanges #{where_oc_id_in_ocs_to_delete})" + sql_delete_from "exchanges #{where_oc_id_in_ocs_to_delete}" + end +end diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb new file mode 100644 index 0000000000..9ed8075c72 --- /dev/null +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -0,0 +1,56 @@ +require 'spec_helper' +require 'tasks/data/truncate_data' + +describe TruncateData do + describe '#call' do + before do + allow(Spree::ReturnAuthorization).to receive(:delete_all) + allow(Spree::StateChange).to receive(:delete_all) + allow(Spree::LogEntry).to receive(:delete_all) + end + + context 'when months_to_keep is not specified' do + it 'truncates order cycles closed earlier than 3 months ago' do + order_cycle = create( + :order_cycle, orders_open_at: 4.months.ago, orders_close_at: 4.months.ago + 1.day + ) + create(:order, order_cycle: order_cycle) + + TruncateData.new.call + + expect(OrderCycle.all).to be_empty + end + end + + context 'when months_to_keep is nil' do + it 'truncates order cycles closed earlier than 3 months ago' do + order_cycle = create( + :order_cycle, orders_open_at: 4.months.ago, orders_close_at: 4.months.ago + 1.day + ) + create(:order, order_cycle: order_cycle) + + TruncateData.new(months_to_keep: nil).call + + expect(OrderCycle.all).to be_empty + end + end + + context 'when months_to_keep is specified' do + it 'truncates order cycles closed earlier than months_to_keep months ago' do + old_order_cycle = create( + :order_cycle, orders_open_at: 7.months.ago, orders_close_at: 7.months.ago + 1.day + ) + create(:order, order_cycle: old_order_cycle) + recent_order_cycle = create( + :order_cycle, orders_open_at: 1.months.ago, orders_close_at: 1.months.ago + 1.day + ) + create(:order, order_cycle: recent_order_cycle) + + TruncateData.new(months_to_keep: 6).call + + expect(OrderCycle.all).to contain_exactly(recent_order_cycle) + end + end + end +end + From 60d29d619ffe696343faa03eadbb595d295d2d4f Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:34:45 +0100 Subject: [PATCH 61/89] Replace :truncate_data definition with new class And cover it with a test. --- lib/tasks/data/truncate_data.rake | 80 ++++--------------- .../lib/tasks/data/truncate_data_rake_spec.rb | 34 ++++++++ 2 files changed, 48 insertions(+), 66 deletions(-) create mode 100644 spec/lib/tasks/data/truncate_data_rake_spec.rb diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index a815f6ea1f..69f529cc67 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -1,3 +1,8 @@ +# frozen_string_literal: true + +require 'highline' +require 'tasks/data/truncate_data' + # This task can be used to significantly reduce the size of a database # This is used for example when loading live data into a staging server # This way the staging server is not overloaded with too much data @@ -7,75 +12,18 @@ namespace :ofn do task truncate: :environment do guard_and_warn - sql_delete_from " - spree_inventory_units #{where_order_id_in_orders_to_delete}" - sql_delete_from " - spree_inventory_units - where shipment_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" - - truncate_adjustments - - sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" - sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" - sql_delete_from "spree_shipments #{where_order_id_in_orders_to_delete}" - Spree::ReturnAuthorization.delete_all - - truncate_order_cycle_data - - sql_delete_from "proxy_orders #{where_oc_id_in_ocs_to_delete}" - - sql_delete_from "spree_orders #{where_oc_id_in_ocs_to_delete}" - sql_delete_from "order_cycle_schedules #{where_oc_id_in_ocs_to_delete}" - sql_delete_from "order_cycles #{where_ocs_to_delete}" - - Spree::TokenizedPermission.where("created_at < '#{date}'").delete_all - Spree::StateChange.delete_all - Spree::LogEntry.delete_all - sql_delete_from "sessions" + TruncateData.new.call end - def sql_delete_from(sql) - ActiveRecord::Base.connection.execute("delete from #{sql}") - end + def guard_and_warn + if Rails.env.production? + Rails.logger.info("This task cannot be executed in production") + exit + end - private - - def date - 3.months.ago - end - - def where_ocs_to_delete - "where orders_close_at < '#{date}'" - end - - def where_oc_id_in_ocs_to_delete - "where order_cycle_id in (select id from order_cycles #{where_ocs_to_delete} )" - end - - def where_order_id_in_orders_to_delete - "where order_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" - end - - def truncate_adjustments - sql_delete_from "spree_adjustments where source_type = 'Spree::Order' - and source_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" - sql_delete_from "spree_adjustments where source_type = 'Spree::Shipment' - and source_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" - sql_delete_from "spree_adjustments where source_type = 'Spree::Payment' - and source_id in (select id from spree_payments #{where_order_id_in_orders_to_delete})" - sql_delete_from "spree_adjustments where source_type = 'Spree::LineItem' - and source_id in (select id from spree_line_items #{where_order_id_in_orders_to_delete})" - end - - def truncate_order_cycle_data - sql_delete_from "coordinator_fees #{where_oc_id_in_ocs_to_delete}" - sql_delete_from " - exchange_variants where exchange_id - in (select id from exchanges #{where_oc_id_in_ocs_to_delete})" - sql_delete_from " - exchange_fees where exchange_id - in (select id from exchanges #{where_oc_id_in_ocs_to_delete})" - sql_delete_from "exchanges #{where_oc_id_in_ocs_to_delete}" + message = "\n <%= color('This will permanently change DB contents', :yellow) %>, + are you sure you want to proceed? (y/N)" + exit unless HighLine.new.agree(message) { |q| q.default = "n" } end end end diff --git a/spec/lib/tasks/data/truncate_data_rake_spec.rb b/spec/lib/tasks/data/truncate_data_rake_spec.rb new file mode 100644 index 0000000000..fff40d5b1f --- /dev/null +++ b/spec/lib/tasks/data/truncate_data_rake_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' +require 'rake' + +describe 'truncate_data.rake' do + describe ':truncate' do + context 'when months_to_keep is specified' do + it 'truncates order cycles closed earlier than months_to_keep months ago' do + Rake.application.rake_require 'tasks/data/truncate_data' + Rake::Task.define_task(:environment) + + highline = instance_double(HighLine, agree: true) + allow(HighLine).to receive(:new).and_return(highline) + + old_order_cycle = create( + :order_cycle, + orders_open_at: 7.months.ago, + orders_close_at: 7.months.ago + 1.day, + ) + create(:order, order_cycle: old_order_cycle) + recent_order_cycle = create( + :order_cycle, + orders_open_at: 1.months.ago, + orders_close_at: 1.months.ago + 1.day, + ) + create(:order, order_cycle: recent_order_cycle) + + months_to_keep = 6 + Rake.application.invoke_task "ofn:data:truncate[#{months_to_keep}]" + + expect(OrderCycle.all).to contain_exactly(recent_order_cycle) + end + end + end +end From be123b2a720d1e5657e59a564d57c081932d5569 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:40:11 +0100 Subject: [PATCH 62/89] Specify how much data to remove in :truncate_data --- lib/tasks/data/truncate_data.rake | 5 +++-- lib/tasks/data/truncate_data.rb | 2 +- spec/lib/tasks/data/truncate_data_spec.rb | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index 69f529cc67..12c7866926 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -9,10 +9,11 @@ require 'tasks/data/truncate_data' namespace :ofn do namespace :data do desc 'Truncate data' - task truncate: :environment do + task :truncate, [:months_to_keep] => :environment do |_task, args| guard_and_warn - TruncateData.new.call + months_to_keep = args.months_to_keep.to_i + TruncateData.new(months_to_keep).call end def guard_and_warn diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 2add9f6111..5534ec4dfc 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class TruncateData - def initialize(months_to_keep: nil) + def initialize(months_to_keep = nil) @date = (months_to_keep || 3).months.ago end diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index 9ed8075c72..6d26ae9a29 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -29,7 +29,7 @@ describe TruncateData do ) create(:order, order_cycle: order_cycle) - TruncateData.new(months_to_keep: nil).call + TruncateData.new(nil).call expect(OrderCycle.all).to be_empty end @@ -46,7 +46,7 @@ describe TruncateData do ) create(:order, order_cycle: recent_order_cycle) - TruncateData.new(months_to_keep: 6).call + TruncateData.new(6).call expect(OrderCycle.all).to contain_exactly(recent_order_cycle) end From f199cb1bea6a22566056db1d58cd7edc23806bcb Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:45:03 +0100 Subject: [PATCH 63/89] Warn but allow executing :truncate_data in prod --- lib/tasks/data/truncate_data.rake | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index 12c7866926..c1c94b7310 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -10,20 +10,18 @@ namespace :ofn do namespace :data do desc 'Truncate data' task :truncate, [:months_to_keep] => :environment do |_task, args| - guard_and_warn + warn_with_confirmation months_to_keep = args.months_to_keep.to_i TruncateData.new(months_to_keep).call end - def guard_and_warn - if Rails.env.production? - Rails.logger.info("This task cannot be executed in production") - exit - end - - message = "\n <%= color('This will permanently change DB contents', :yellow) %>, - are you sure you want to proceed? (y/N)" + def warn_with_confirmation + message = <<-MSG.strip_heredoc + \n + <%= color('This will permanently change DB contents. Please, make a backup first.', :yellow) %> + Are you sure you want to proceed? (y/N) + MSG exit unless HighLine.new.agree(message) { |q| q.default = "n" } end end From b6d3c3039a58a52cc74295fcb95d566cdda803df Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:01:00 +0100 Subject: [PATCH 64/89] Fix "Method has too many lines" violation --- lib/tasks/data/truncate_data.rb | 51 +++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 5534ec4dfc..3e0b7390c4 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -6,37 +6,52 @@ class TruncateData end def call - sql_delete_from " - spree_inventory_units #{where_order_id_in_orders_to_delete}" - sql_delete_from " - spree_inventory_units - where shipment_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" - + truncate_inventory truncate_adjustments - - sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" - sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" - sql_delete_from "spree_shipments #{where_order_id_in_orders_to_delete}" - Spree::ReturnAuthorization.delete_all - + truncate_order_associations truncate_order_cycle_data - sql_delete_from "proxy_orders #{where_oc_id_in_ocs_to_delete}" - sql_delete_from "spree_orders #{where_oc_id_in_ocs_to_delete}" - sql_delete_from "order_cycle_schedules #{where_oc_id_in_ocs_to_delete}" + + truncate_subscriptions + sql_delete_from "order_cycles #{where_ocs_to_delete}" Spree::TokenizedPermission.where("created_at < '#{date}'").delete_all - Spree::StateChange.delete_all - Spree::LogEntry.delete_all - sql_delete_from "sessions" + + remove_transient_data end private attr_reader :date + def truncate_order_associations + sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" + sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" + sql_delete_from "spree_shipments #{where_order_id_in_orders_to_delete}" + end + + def remove_transient_data + Spree::ReturnAuthorization.delete_all + Spree::StateChange.delete_all + Spree::LogEntry.delete_all + sql_delete_from "sessions" + end + + def truncate_subscriptions + sql_delete_from "order_cycle_schedules #{where_oc_id_in_ocs_to_delete}" + sql_delete_from "proxy_orders #{where_oc_id_in_ocs_to_delete}" + end + + def truncate_inventory + sql_delete_from " + spree_inventory_units #{where_order_id_in_orders_to_delete}" + sql_delete_from " + spree_inventory_units + where shipment_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" + end + def sql_delete_from(sql) ActiveRecord::Base.connection.execute("delete from #{sql}") end From a4372e4d313157a154a6e44797e25bc2142649a6 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 17:49:38 +0100 Subject: [PATCH 65/89] Fix long lines --- lib/tasks/data/truncate_data.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 3e0b7390c4..68f08977ac 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -70,13 +70,16 @@ class TruncateData def truncate_adjustments sql_delete_from "spree_adjustments where source_type = 'Spree::Order' - and source_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" + and source_id in (select id from spree_orders #{where_oc_id_in_ocs_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::Shipment' - and source_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" + and source_id in (select id from spree_shipments #{where_order_id_in_orders_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::Payment' - and source_id in (select id from spree_payments #{where_order_id_in_orders_to_delete})" + and source_id in (select id from spree_payments #{where_order_id_in_orders_to_delete})" + sql_delete_from "spree_adjustments where source_type = 'Spree::LineItem' - and source_id in (select id from spree_line_items #{where_order_id_in_orders_to_delete})" + and source_id in (select id from spree_line_items #{where_order_id_in_orders_to_delete})" end def truncate_order_cycle_data From e1a80edb7e7b5292e6d14c22f03569ee22272694 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 6 Mar 2020 18:09:42 +0100 Subject: [PATCH 66/89] Carefully doc how to archive data from an instance --- lib/tasks/data/truncate_data.rake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index c1c94b7310..c5e9985b3d 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -6,6 +6,22 @@ require 'tasks/data/truncate_data' # This task can be used to significantly reduce the size of a database # This is used for example when loading live data into a staging server # This way the staging server is not overloaded with too much data +# +# This is also aimed at implementing data archiving. We assume data older than +# 2 years can be safely removed and restored from a backup. This gives room for +# hubs to do their tax declaration. +# +# It's a must to perform a backup right before executing this. Then, to allow +# for a later data recovery we need to keep track of the exact moment this rake +# task was executed. +# +# Execute this in production only when the instance users are sleeping to avoid any trouble. +# +# Example: +# +# $ bundle exec rake "ofn:data:truncate[24]" +# +# This will remove data older than 2 years (24 months). namespace :ofn do namespace :data do desc 'Truncate data' From d215c76bc98aaf9d466805e1e6da87c2cae2eaaa Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 12:23:14 +0100 Subject: [PATCH 67/89] Make it even more explicit the action is dangerous We're yelling at the person to make a backup before proceeding. --- lib/tasks/data/truncate_data.rake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index c5e9985b3d..ef01918205 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -35,10 +35,12 @@ namespace :ofn do def warn_with_confirmation message = <<-MSG.strip_heredoc \n - <%= color('This will permanently change DB contents. Please, make a backup first.', :yellow) %> + <% highlighted_message = "This will permanently change DB contents. Please, make a backup first." %> + <%= color(highlighted_message, :blink, :on_red) %> Are you sure you want to proceed? (y/N) MSG - exit unless HighLine.new.agree(message) { |q| q.default = "n" } + + exit unless HighLine.new.agree(message) { |q| q.default = "N" } end end end From 5f84c51c1343c8701f0d9aba15b05ba43e4e514f Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 13:07:34 +0100 Subject: [PATCH 68/89] Delete StateChanges older than a month They are useful for troubleshooting but a month data seems enough. --- lib/tasks/data/truncate_data.rb | 2 +- spec/lib/tasks/data/truncate_data_spec.rb | 24 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 68f08977ac..d01c914ea7 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -34,7 +34,7 @@ class TruncateData def remove_transient_data Spree::ReturnAuthorization.delete_all - Spree::StateChange.delete_all + Spree::StateChange.delete_all("created_at < '#{1.month.ago.to_date}'") Spree::LogEntry.delete_all sql_delete_from "sessions" end diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index 6d26ae9a29..faf2e6268d 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -20,6 +20,14 @@ describe TruncateData do expect(OrderCycle.all).to be_empty end + + it 'deletes state changes older than a month' do + TruncateData.new.call + + expect(Spree::StateChange) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end context 'when months_to_keep is nil' do @@ -33,6 +41,14 @@ describe TruncateData do expect(OrderCycle.all).to be_empty end + + it 'deletes state changes older than a month' do + TruncateData.new.call + + expect(Spree::StateChange) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end context 'when months_to_keep is specified' do @@ -50,6 +66,14 @@ describe TruncateData do expect(OrderCycle.all).to contain_exactly(recent_order_cycle) end + + it 'deletes state changes older than a month' do + TruncateData.new.call + + expect(Spree::StateChange) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end end end From 0f1d57db73e0c352f4c06f419e317aef2a32f5c3 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 13:10:52 +0100 Subject: [PATCH 69/89] Delete LogEntries older than a month They are useful for troubleshooting but a month data seems enough. --- lib/tasks/data/truncate_data.rb | 2 +- spec/lib/tasks/data/truncate_data_spec.rb | 24 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index d01c914ea7..fbf658973c 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -35,7 +35,7 @@ class TruncateData def remove_transient_data Spree::ReturnAuthorization.delete_all Spree::StateChange.delete_all("created_at < '#{1.month.ago.to_date}'") - Spree::LogEntry.delete_all + Spree::LogEntry.delete_all("created_at < '#{1.month.ago.to_date}'") sql_delete_from "sessions" end diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index faf2e6268d..bc79463f48 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -28,6 +28,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes log entries older than a month' do + TruncateData.new.call + + expect(Spree::LogEntry) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end context 'when months_to_keep is nil' do @@ -49,6 +57,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes log entries older than a month' do + TruncateData.new.call + + expect(Spree::LogEntry) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end context 'when months_to_keep is specified' do @@ -74,6 +90,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes log entries older than a month' do + TruncateData.new.call + + expect(Spree::LogEntry) + .to have_received(:delete_all) + .with("created_at < '#{1.month.ago.to_date}'") + end end end end From 4f015320a3facfaa12fffc34180483870bce7590 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 13:15:54 +0100 Subject: [PATCH 70/89] Upper case DELETE statement This keeps it consistent with the rest of the log. --- lib/tasks/data/truncate_data.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index fbf658973c..6e789128c8 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -53,7 +53,7 @@ class TruncateData end def sql_delete_from(sql) - ActiveRecord::Base.connection.execute("delete from #{sql}") + ActiveRecord::Base.connection.execute("DELETE FROM #{sql}") end def where_order_id_in_orders_to_delete From a3b8638faf6874df7a1319d76c099e0321edef6d Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 13:40:39 +0100 Subject: [PATCH 71/89] Delete sessions older than two weeks This affects users that are actively purchasing, so 2 weeks data is more than enough. Others can afford to log in again. --- lib/tasks/data/truncate_data.rb | 8 +++++++- spec/lib/tasks/data/truncate_data_spec.rb | 25 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 6e789128c8..68b10c0a63 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -1,6 +1,12 @@ # frozen_string_literal: true class TruncateData + # This model lets us operate on the sessions DB table using ActiveRecord's + # methods within the scope of this service. This relies on the AR's + # convention where a Session model maps to a sessions table. + class Session < ActiveRecord::Base + end + def initialize(months_to_keep = nil) @date = (months_to_keep || 3).months.ago end @@ -36,7 +42,7 @@ class TruncateData Spree::ReturnAuthorization.delete_all Spree::StateChange.delete_all("created_at < '#{1.month.ago.to_date}'") Spree::LogEntry.delete_all("created_at < '#{1.month.ago.to_date}'") - sql_delete_from "sessions" + Session.delete_all("created_at < '#{2.weeks.ago.to_date}'") end def truncate_subscriptions diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index bc79463f48..d5972fa2ea 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -7,6 +7,7 @@ describe TruncateData do allow(Spree::ReturnAuthorization).to receive(:delete_all) allow(Spree::StateChange).to receive(:delete_all) allow(Spree::LogEntry).to receive(:delete_all) + allow(TruncateData::Session).to receive(:delete_all) end context 'when months_to_keep is not specified' do @@ -36,6 +37,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes sessions older than two weeks' do + TruncateData.new.call + + expect(TruncateData::Session) + .to have_received(:delete_all) + .with("created_at < '#{2.weeks.ago.to_date}'") + end end context 'when months_to_keep is nil' do @@ -65,6 +74,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes sessions older than two weeks' do + TruncateData.new.call + + expect(TruncateData::Session) + .to have_received(:delete_all) + .with("created_at < '#{2.weeks.ago.to_date}'") + end end context 'when months_to_keep is specified' do @@ -98,6 +115,14 @@ describe TruncateData do .to have_received(:delete_all) .with("created_at < '#{1.month.ago.to_date}'") end + + it 'deletes sessions older than two weeks' do + TruncateData.new.call + + expect(TruncateData::Session) + .to have_received(:delete_all) + .with("created_at < '#{2.weeks.ago.to_date}'") + end end end end From e2a3dd0c6faa4f81b426f928d9a920a8eca07289 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 10 Mar 2020 13:50:13 +0100 Subject: [PATCH 72/89] Delete only return auths. of the deleted orders They are associated to order and as such we can't remove them all blindly. --- lib/tasks/data/truncate_data.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 68b10c0a63..0c5e86c538 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -36,10 +36,10 @@ class TruncateData sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" sql_delete_from "spree_shipments #{where_order_id_in_orders_to_delete}" + sql_delete_from "spree_return_authorizations #{where_order_id_in_orders_to_delete}" end def remove_transient_data - Spree::ReturnAuthorization.delete_all Spree::StateChange.delete_all("created_at < '#{1.month.ago.to_date}'") Spree::LogEntry.delete_all("created_at < '#{1.month.ago.to_date}'") Session.delete_all("created_at < '#{2.weeks.ago.to_date}'") From 703706ee0b588d33d0cd3568f8ec97fb65b2e8d9 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Mon, 16 Mar 2020 18:37:55 +0100 Subject: [PATCH 73/89] Replace one-letter variable with full word --- lib/tasks/data/truncate_data.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index ef01918205..dce1476e69 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -40,7 +40,7 @@ namespace :ofn do Are you sure you want to proceed? (y/N) MSG - exit unless HighLine.new.agree(message) { |q| q.default = "N" } + exit unless HighLine.new.agree(message) { |question| question.default = "N" } end end end From 6ceeda7d9e4e3c79586f3d511e2caeae26544e0c Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Mon, 16 Mar 2020 18:57:25 +0100 Subject: [PATCH 74/89] Instrument TruncateData logging start and end --- lib/tasks/data/truncate_data.rb | 26 +++++++++++++++-------- spec/lib/tasks/data/truncate_data_spec.rb | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 0c5e86c538..2e9a703535 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -12,26 +12,34 @@ class TruncateData end def call - truncate_inventory - truncate_adjustments - truncate_order_associations - truncate_order_cycle_data + logging do + truncate_inventory + truncate_adjustments + truncate_order_associations + truncate_order_cycle_data - sql_delete_from "spree_orders #{where_oc_id_in_ocs_to_delete}" + sql_delete_from "spree_orders #{where_oc_id_in_ocs_to_delete}" - truncate_subscriptions + truncate_subscriptions - sql_delete_from "order_cycles #{where_ocs_to_delete}" + sql_delete_from "order_cycles #{where_ocs_to_delete}" - Spree::TokenizedPermission.where("created_at < '#{date}'").delete_all + Spree::TokenizedPermission.where("created_at < '#{date}'").delete_all - remove_transient_data + remove_transient_data + end end private attr_reader :date + def logging + Rails.logger.info("TruncateData started with truncation date #{date}") + yield + Rails.logger.info("TruncateData finished") + end + def truncate_order_associations sql_delete_from "spree_line_items #{where_order_id_in_orders_to_delete}" sql_delete_from "spree_payments #{where_order_id_in_orders_to_delete}" diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index d5972fa2ea..3362450c48 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -8,6 +8,7 @@ describe TruncateData do allow(Spree::StateChange).to receive(:delete_all) allow(Spree::LogEntry).to receive(:delete_all) allow(TruncateData::Session).to receive(:delete_all) + allow(Rails.logger).to receive(:info) end context 'when months_to_keep is not specified' do From 38ea95ea856dcadbb0eb728b95d6a46ce1d2b090 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 17 Mar 2020 19:25:11 +0100 Subject: [PATCH 75/89] Prevent nil input to turn into 0 --- lib/tasks/data/truncate_data.rake | 3 +-- lib/tasks/data/truncate_data.rb | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index dce1476e69..da4a63674a 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -28,8 +28,7 @@ namespace :ofn do task :truncate, [:months_to_keep] => :environment do |_task, args| warn_with_confirmation - months_to_keep = args.months_to_keep.to_i - TruncateData.new(months_to_keep).call + TruncateData.new(args.months_to_keep).call end def warn_with_confirmation diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 2e9a703535..56645eea3e 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -8,7 +8,7 @@ class TruncateData end def initialize(months_to_keep = nil) - @date = (months_to_keep || 3).months.ago + @date = (months_to_keep || 3).to_i.months.ago end def call From e0228f66af27cb9e3601372684f599d5a9b0ac4c Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Tue, 17 Mar 2020 19:29:32 +0100 Subject: [PATCH 76/89] Default to archiving data older than 2 years. This is safer than the current 3 months. --- lib/tasks/data/truncate_data.rb | 2 +- spec/lib/tasks/data/truncate_data_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/tasks/data/truncate_data.rb b/lib/tasks/data/truncate_data.rb index 56645eea3e..34300ca1dc 100644 --- a/lib/tasks/data/truncate_data.rb +++ b/lib/tasks/data/truncate_data.rb @@ -8,7 +8,7 @@ class TruncateData end def initialize(months_to_keep = nil) - @date = (months_to_keep || 3).to_i.months.ago + @date = (months_to_keep || 24).to_i.months.ago end def call diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index 3362450c48..850b9bb9a8 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -12,9 +12,9 @@ describe TruncateData do end context 'when months_to_keep is not specified' do - it 'truncates order cycles closed earlier than 3 months ago' do + it 'truncates order cycles closed earlier than 2 years ago' do order_cycle = create( - :order_cycle, orders_open_at: 4.months.ago, orders_close_at: 4.months.ago + 1.day + :order_cycle, orders_open_at: 25.months.ago, orders_close_at: 25.months.ago + 1.day ) create(:order, order_cycle: order_cycle) @@ -49,9 +49,9 @@ describe TruncateData do end context 'when months_to_keep is nil' do - it 'truncates order cycles closed earlier than 3 months ago' do + it 'truncates order cycles closed earlier than 2 years ago' do order_cycle = create( - :order_cycle, orders_open_at: 4.months.ago, orders_close_at: 4.months.ago + 1.day + :order_cycle, orders_open_at: 25.months.ago, orders_close_at: 25.months.ago + 1.day ) create(:order, order_cycle: order_cycle) From 647a7bdddf1e0f13f3460086688d538183aa461c Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Wed, 29 Apr 2020 17:00:53 +0200 Subject: [PATCH 77/89] Clarify we won't use truncate_date in prod yet We initially aimed at implementing data archiving in production reusing this rake task but priorities have changed. It'll be just a refactor for now. --- lib/tasks/data/truncate_data.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/data/truncate_data.rake b/lib/tasks/data/truncate_data.rake index da4a63674a..65075a3ffb 100644 --- a/lib/tasks/data/truncate_data.rake +++ b/lib/tasks/data/truncate_data.rake @@ -34,7 +34,7 @@ namespace :ofn do def warn_with_confirmation message = <<-MSG.strip_heredoc \n - <% highlighted_message = "This will permanently change DB contents. Please, make a backup first." %> + <% highlighted_message = "This will permanently change DB contents. This is not meant to be run in production as it needs more thorough testing." %> <%= color(highlighted_message, :blink, :on_red) %> Are you sure you want to proceed? (y/N) MSG From 92a881c584eca0f2bd62a685c26b03489a4b5d73 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 29 Apr 2020 17:19:16 +0200 Subject: [PATCH 78/89] Simplify relation used in #exchanges_supplying --- app/models/order_cycle.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index 9c7837c4c4..607d49b061 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -240,8 +240,8 @@ class OrderCycle < ActiveRecord::Base end def exchanges_supplying(order) - variants_relation = Spree::Variant.joins(:line_items).merge(Spree::LineItem.in_orders(order)) - exchanges.supplying_to(order.distributor).with_any_variant(variants_relation) + variant_ids_relation = Spree::LineItem.in_orders(order).select(:variant_id) + exchanges.supplying_to(order.distributor).with_any_variant(variant_ids_relation) end def coordinated_by?(user) From 2bdda7de04fe0e0a9f7bd288d4b095e8dd24bda5 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 29 Apr 2020 17:22:46 +0200 Subject: [PATCH 79/89] Change order of methods for easier reading --- app/services/cart_service.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 8d837d9eb8..90b67450cf 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -37,6 +37,17 @@ class CartService end end + def indexed_variants(variants_data) + @indexed_variants ||= begin + variant_ids_in_data = variants_data.map{ |v| v[:variant_id] } + + Spree::Variant.where(id: variant_ids_in_data). + includes(:default_price, :stock_items, :product). + all. + index_by(&:id) + end + end + def attempt_cart_add(variant, quantity, max_quantity = nil) quantity = quantity.to_i max_quantity = max_quantity.to_i if max_quantity @@ -145,15 +156,4 @@ class CartService def variant_ids_in_cart @order.line_items.pluck :variant_id end - - def indexed_variants(variants_data) - @indexed_variants ||= begin - variant_ids_in_data = variants_data.map{ |v| v[:variant_id] } - - Spree::Variant.where(id: variant_ids_in_data). - includes(:default_price, :stock_items, :product). - all. - index_by(&:id) - end - end end From 4054bdd7225943ad2803a3d4f3d8a1f42b9b2a70 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 29 Apr 2020 17:33:49 +0200 Subject: [PATCH 80/89] Add Bugsnag call for "variant with no stock item" case --- app/models/concerns/variant_stock.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/models/concerns/variant_stock.rb b/app/models/concerns/variant_stock.rb index 5a6094adf4..dedf667c1b 100644 --- a/app/models/concerns/variant_stock.rb +++ b/app/models/concerns/variant_stock.rb @@ -44,6 +44,15 @@ module VariantStock # This provides a default value for variant.on_demand using Spree::StockLocation.backorderable_default return Spree::StockLocation.first.backorderable_default if new_record? || deleted? + # This can be removed unless we have seen this error in Bugsnag recently + if stock_item.nil? + Bugsnag.notify( + RuntimeError.new("Variant #stock_item called, but the stock_item does not exist!"), + object: as_json + ) + return Spree::StockLocation.first.backorderable_default + end + stock_item.backorderable? end From f2cd122ec8937824a22bc5e795e4764acf69d4b3 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 29 Apr 2020 18:26:17 +0200 Subject: [PATCH 81/89] Update variant_stock_spec for unsaved and soft-deleted cases --- spec/models/concerns/variant_stock_spec.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/spec/models/concerns/variant_stock_spec.rb b/spec/models/concerns/variant_stock_spec.rb index e417e3a203..0c9aa30a25 100644 --- a/spec/models/concerns/variant_stock_spec.rb +++ b/spec/models/concerns/variant_stock_spec.rb @@ -90,13 +90,33 @@ describe VariantStock do end end - context 'when the variant has no stock item' do + context 'when the variant has not been saved yet' do let(:variant) { build(:variant) } + it 'has no stock items' do + expect(variant.stock_items.count).to eq 0 + end + it 'returns stock location default' do expect(variant.on_demand).to be_falsy end end + + context 'when the variant has been soft-deleted' do + let(:deleted_variant) { create(:variant) } + + before do + deleted_variant.destroy + end + + it 'has no stock items' do + expect(deleted_variant.stock_items.count).to eq 0 + end + + it 'returns stock location default' do + expect(deleted_variant.on_demand).to be_falsy + end + end end describe '#on_demand=' do From 5bc5ef9a9d90849863e60513cb6a6933a255922b Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Thu, 30 Apr 2020 03:52:57 +1000 Subject: [PATCH 82/89] Updating translations for config/locales/pt_BR.yml --- config/locales/pt_BR.yml | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index 9966e927c8..819083e58a 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -323,6 +323,7 @@ pt_BR: show_n_more: 'Mostrar mais %{num} ' choose: "Escolher..." please_select: Por favor selecione... + column_save_as_default: Salvar Como Padrão columns: Colunas actions: Ações viewing: "Visualizando: %{current_view_name}" @@ -1319,14 +1320,8 @@ pt_BR: cookie_stripe_desc: "Dados coletados pelo nosso processador de pagamentos Stripe para detecção de fraude https://stripe.com/cookies-policy/legal. Nem todas as lojas usam o Stripe como método de pagamento, mas é uma boa prática para evitar fraudes aplicá-lo a todas as páginas. O Stripe provavelmente cria uma imagem de quais de nossas páginas geralmente interagem com a API e sinaliza algo incomum. Portanto, definir o cookie Stripe tem uma função mais ampla do que simplesmente fornecer um método de pagamento a um usuário. Removê-lo pode afetar a segurança do próprio serviço. Você pode aprender mais sobre o Stripe e ler sua política de privacidade em https://stripe.com/privacy." statistics_cookies: "Estatísticas de cookies" statistics_cookies_desc: "O seguinte não é estritamente necessário, mas ajuda a fornecer a melhor experiência do usuário, permitindo-nos analisar o comportamento do usuário, identificar quais recursos você mais usa ou não usar, entender problemas de experiência do usuário etc." - statistics_cookies_analytics_desc_html: "Para coletar e analisar dados de uso da plataforma, usamos o Google Analytics, pois era o serviço padrão conectado ao Spree (o software de código aberto de comércio eletrônico em que construímos), mas nossa visão é mudar para o Matomo (ex Piwik, análise de código aberto) ferramenta compatível com GDPR e protege sua privacidade) assim que possível." statistics_cookies_matomo_desc_html: "Para coletar e analisar dados de uso da plataforma, usamos o Matomo (ex Piwik), uma ferramenta de análise de código aberto compatível com o GDPR e que protege sua privacidade." statistics_cookies_matomo_optout: "Deseja desativar a análise da Matomo? Não coletamos dados pessoais, e o Matomo nos ajuda a melhorar nosso serviço, mas respeitamos sua escolha :-)" - cookie_analytics_utma_desc: "Usado para distinguir usuários e sessões. O cookie é criado quando a biblioteca javascript é executada e não existem cookies __utma existentes. O cookie é atualizado sempre que os dados são enviados para o Google Analytics." - cookie_analytics_utmt_desc: "Usado para acelerar a taxa de solicitação." - cookie_analytics_utmb_desc: "Usado para determinar novas sessões / visitas. O cookie é criado quando a biblioteca javascript é executada e nenhum cookie __utmb existente existe. O cookie é atualizado sempre que os dados são enviados para o Google Analytics." - cookie_analytics_utmc_desc: "Não usado em ga.js. Definido para interoperabilidade com o urchin.js. Historicamente, esse cookie operava em conjunto com o cookie __utmb para determinar se o usuário estava em uma nova sessão / visita." - cookie_analytics_utmz_desc: "Armazena a origem ou a campanha de tráfego que explica como o usuário chegou ao seu site. O cookie é criado quando a biblioteca javascript é executada e atualizada sempre que os dados são enviados ao Google Analytics." cookie_matomo_basics_desc: "Cookies primários Matomo para coletar estatísticas." cookie_matomo_heatmap_desc: "Cookie Matomo Heatmap e gravação de sessão." cookie_matomo_ignore_desc: "Cookie usado para excluir o usuário de ser rastreado." @@ -1918,6 +1913,7 @@ pt_BR: admin_enterprise_relationships_permits: "permite" admin_enterprise_relationships_seach_placeholder: "Buscar" admin_enterprise_relationships_button_create: "Criar" + admin_enterprise_relationships_to: "para" admin_enterprise_groups: "Grupos de iniciativas" admin_enterprise_groups_name: "Nome" admin_enterprise_groups_owner: "Dono" @@ -2687,6 +2683,14 @@ pt_BR: start_free_profile: "Comece com um perfil gratuito e expanda quando estiver pronto!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Período" + report_format_csv: "Baixar como CSV" + generate_report: "Gerar Relatório" + report: + none: "Nenhum" + select_and_search: "Selecione filtros e clique em GERAR RELATÓRIO para acessar seus dados" enterprise_fee_summary: date_end_before_start_error: "deve ser após o início" parameter_not_allowed_error: "Você não está autorizado a usar um ou mais filtros selecionados para este relatório." @@ -2880,12 +2884,6 @@ pt_BR: shipping_categories: "Categorias de Remessa" new_shipping_category: "Nova categoria de frete" back_to_shipping_categories: "Voltar para categorias de remessa" - analytics_trackers: "Rastreadores de análise" - no_trackers_found: "Nenhum rastreador encontrado" - new_tracker: "Novo Rastreador" - add_one: "Adicione um" - google_analytics_id: "ID do Google Analytics" - back_to_trackers_list: "Voltar à lista de rastreadores" name: "Nome" description: "Descrição" type: "Tipo" @@ -3167,14 +3165,6 @@ pt_BR: bulk_coop_allocation: 'Atacado Cooperativa - Alocação' bulk_coop_packing_sheets: 'Atacado Cooperativa - Folhas de Empacotamento' bulk_coop_customer_payments: 'Atacado Cooperativa - Pagamentos de Cliente' - enterprise_fee_summaries: - filters: - date_range: "Período" - report_format_csv: "Transferir como CSV" - generate_report: "Gerar relatório" - report: - none: "Nenhum" - select_and_search: "Selecione os filtros e clique em GERAR RELATÓRIO para acessar seus dados." users: index: listing_users: "Listando Usuários" @@ -3219,14 +3209,15 @@ pt_BR: autocomplete: producer_name: "Produtor" unit: "Unidade" - general_settings: + shared: + sortable_header: + name: "Nome" edit: - legal_settings: "Configurações legais" - cookies_consent_banner_toggle: "Exibir banner de consentimento de cookies" + legal_settings: "Configurações de Legislação" + cookies_consent_banner_toggle: "Mostrar banner sobre permissão para cookies" privacy_policy_url: " Política de Privacidade URL" enterprises_require_tos: "As iniciativas devem aceitar os Termos de Serviço" cookies_policy_matomo_section: "Exibir a seção Matomo nos cookies da página de política" - cookies_policy_ga_section: "Exibir a seção do Google Analytics na página de política de cookies" footer_tos_url: "URL Termos de Serviço" checkout: payment: From c424e7b65edc37253783ceaf5ae044706f60b6e9 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Fri, 1 May 2020 04:55:21 +1000 Subject: [PATCH 83/89] Updating translations for config/locales/fr.yml --- config/locales/fr.yml | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 19fca72388..d8e71f3328 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1583,22 +1583,6 @@ fr: groups_signup_contact_text: "Prenez contact et découvrez ce qu'Open Food France peut faire pour vous:" groups_signup_detail: "Plus de précisions." login_invalid: "Email ou mot de passe erroné" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Nos food hubs sont les points de contact entre vous et les personnes qui produisent votre nourriture! - modal_hubs_content1: Vous pouvez chercher le hub qui vous convient par localisation ou par nom. Certains hubs ont de multiples points de retrait de vos achats, et certains proposent également la livraison à domicile. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs. - modal_hubs_content2: Vous pouvez uniquement faire vos courses dans un hub à la fois. - modal_groups: "Groupes / réseaux territoriaux" - modal_groups_content1: Voilà les organisations et les relations inter-hubs qui constituent l'Open Food Network. - modal_groups_content2: Certains groupes sont regroupés pas localisation ou région, d'autres sur des smilitudes non géographiques. - modal_how: "Comment ça marche" - modal_how_shop: Faire vos courses sur Open Food France - modal_how_shop_explained: Recherchez un food hub près de chez vous et commencez vos achats! Vous pouvez afficher plus d'infos sur chaque food hub pour voir le type de produits qu'il propose, et cliquer sur le hub pour commencer vos achats. (Vous ne pouvez faire vos courses que dans un food hub à la fois.) - modal_how_pickup: Frais de retrait, livraison et transport - modal_how_pickup_explained: Certains food hubs livrent à domicile, d'autres vous demandent de venir récupérer vos achats dans un point de retrait. Vous pouvez voir quelle options sont proposées sur la page d'accueil du hub, et sélectionner votre choix au moment de la validation de la commande. La livraison à domicile coûtera souvent plus cher, et les prix diffèrent selon le hub. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs. - modal_how_more: En savoir plus - modal_how_more_explained: "Pour en savoir plus sur Open Food France, comment ça marche, et contribuer, allez voir:" - modal_producers: "Producteurs" - modal_producers_explained: "Nos producteurs font pousser et fabriquent tous les délicieux produits que vous pouvez acheter sur Open Food France." producers_about: A propos producers_buy: Acheter producers_contact: Contact @@ -2856,14 +2840,6 @@ fr: smtp_send_copy_to_this_addresses: "Envoyer une copie de tous les mails sortants à cette adresse. Si plusieurs adresses, les séparer par une virgule." intercept_email_address: "Adresse email d'interception" intercept_email_instructions: "Modifier l'email destinataire et le remplacer avec cette adresse." - smtp: "SMTP" - smtp_domain: "Domaine SMTP" - smtp_mail_host: "Hôte de messagerie SMTP" - smtp_port: "Port SMTP" - secure_connection_type: "Type de connexion sécurisée" - smtp_authentication_type: "Type d'authentification SMTP" - smtp_username: "Nom d'utilisateur SMTP" - smtp_password: "Mot de passe SMTP" image_settings: "Paramètres des images" image_settings_warning: "Vous devrez générer de nouvelles vignettes si vous mettez à jour les styles paperclip. Utilisez rake paperclip:refresh:thumbnails CLASS=Spree::Image pour le faire." attachment_default_style: Style des pièces jointes @@ -3232,6 +3208,8 @@ fr: price: "Prix" display_as: "Unité affichée" display_name: "Nom affiché" + display_as_placeholder: 'ex. 2 kg' + display_name_placeholder: 'ex. Tomates' autocomplete: producer_name: "Producteur" unit: "Unité" From 39875308c2b9356a2fbf60e82bc9b89210f8ec51 Mon Sep 17 00:00:00 2001 From: Transifex-Openfoodnetwork Date: Fri, 1 May 2020 04:55:35 +1000 Subject: [PATCH 84/89] Updating translations for config/locales/en_FR.yml --- config/locales/en_FR.yml | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index 5f96e5972e..6722c384b4 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -1581,22 +1581,6 @@ en_FR: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2826,14 +2810,6 @@ en_FR: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -3202,6 +3178,8 @@ en_FR: price: "Price" display_as: "Display As" display_name: "Display Name" + display_as_placeholder: 'eg. 2 kg' + display_name_placeholder: 'eg. Tomatoes' autocomplete: producer_name: "Producer" unit: "Unit" From acb7e9751bf3659adcc8cd598a32331e176515c1 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 2 May 2020 10:42:49 +0100 Subject: [PATCH 85/89] Move debug assets flag to another env var so we go back to having both profile and debug assets disabled by default --- config/environments/development.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index b0e6ceafd1..88714f3f7f 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -50,7 +50,7 @@ Openfoodnetwork::Application.configure do # You can remove them by simply running: # # $ bundle exec rake assets:clean - config.assets.debug = !ENV["PROFILE"] + config.assets.debug = !!ENV["DEBUG_ASSETS"] # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. From b568d254467c4df1c891b917104599af3a4fdc97 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 2 May 2020 17:08:53 +0100 Subject: [PATCH 86/89] Update all locales with the latest Transifex translations --- config/locales/ar.yml | 57 ++------- config/locales/ca.yml | 24 ---- config/locales/de_DE.yml | 58 ++------- config/locales/en_AU.yml | 57 ++------- config/locales/en_BE.yml | 57 ++------- config/locales/en_CA.yml | 57 ++------- config/locales/en_DE.yml | 57 ++------- config/locales/en_GB.yml | 24 ---- config/locales/en_NZ.yml | 57 ++------- config/locales/en_PH.yml | 57 ++------- config/locales/en_US.yml | 57 ++------- config/locales/en_ZA.yml | 57 ++------- config/locales/es.yml | 57 ++------- config/locales/es_CR.yml | 113 ++++++------------ config/locales/fil_PH.yml | 94 ++++++--------- config/locales/fr_BE.yml | 57 ++------- config/locales/fr_CA.yml | 57 ++------- config/locales/it.yml | 57 ++------- config/locales/nb.yml | 24 ---- config/locales/nl_BE.yml | 57 ++------- config/locales/pt.yml | 57 ++------- config/locales/pt_BR.yml | 38 ++---- config/locales/sv.yml | 26 +--- config/locales/tr.yml | 241 ++++++++++++++++---------------------- 24 files changed, 363 insertions(+), 1134 deletions(-) diff --git a/config/locales/ar.yml b/config/locales/ar.yml index d364366dff..b4ef0f903c 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1314,14 +1314,8 @@ ar: cookie_stripe_desc: "البيانات التي يتم جمعها بواسطة معالج الدفع لدينا Stripe للكشف عن الاحتيال https://stripe.com/cookies-policy/legal. لا تستخدم جميع المتاجر Stripe كوسيلة للدفع ، ولكن من الممارسات الجيدة منع الاحتيال لتطبيقه على جميع الصفحات. من المحتمل أن يقوم Stripe بإنشاء صورة لصفحاتنا التي تتفاعل عادةً مع واجهة برمجة التطبيقات الخاصة بهم ومن ثم وضع علامة على أي شيء غير عادي. لذلك فإن إعداد ملف تعريف الارتباط للشريط له وظيفة أوسع من مجرد توفير طريقة الدفع للمستخدم. يمكن أن تؤثر إزالتها على أمان الخدمة نفسها. يمكنك معرفة المزيد حول الشريط وقراءة سياسة الخصوصية الخاصة به على https://stripe.com/privacy." statistics_cookies: "إحصائيات ملفات تعريف الارتباط" statistics_cookies_desc: "ما يلي ليس ضروريًا تمامًا ، ولكنه يساعد في تزويدك بأفضل تجربة للمستخدم من خلال السماح لنا بتحليل سلوك المستخدم ، وتحديد الميزات التي تستخدمها أكثر من غيرها ، أو عدم استخدامها ، وفهم مشكلات تجربة المستخدم ، إلخ." - statistics_cookies_analytics_desc_html: "لجمع وتحليل بيانات استخدام النظام الأساسي ، نستخدم Google Analytics ، لأنها كانت الخدمة الافتراضية المرتبطة بـ Spree (برمجيات المصدر المفتوح للتجارة الإلكترونية التي بنينا عليها) ولكن رؤيتنا هي التحول إلى Matomo (على سبيل المثال Piwik ، تحليلات مفتوحة المصدر أداة متوافقة مع الناتج المحلي الإجمالي وتحمي خصوصيتك) في أسرع وقت ممكن." statistics_cookies_matomo_desc_html: "لجمع وتحليل بيانات استخدام النظام الأساسي ، نستخدم Matomo (ex Piwik) ، وهي أداة تحليل مفتوحة المصدر متوافقة مع إجمالي الناتج المحلي وتحمي خصوصيتك." statistics_cookies_matomo_optout: "هل تريد إلغاء الاشتراك في تحليلات Matomo؟ نحن لا نجمع أي بيانات شخصية ، ويساعدنا Matomo على تحسين خدماتنا ، لكننا نحترم اختيارك :-)" - cookie_analytics_utma_desc: "تستخدم لتمييز المستخدمين والجلسات. يتم إنشاء ملف تعريف الارتباط عندما تنفذ مكتبة جافا سكريبت ولا توجد ملفات تعريف الارتباط __utma الموجودة. يتم تحديث ملف تعريف الارتباط في كل مرة يتم فيها إرسال البيانات إلى Google Analytics." - cookie_analytics_utmt_desc: "تستخدم لرفع معدل الطلب." - cookie_analytics_utmb_desc: "يستخدم لتحديد جلسات / زيارات جديدة. يتم إنشاء ملف تعريف الارتباط عندما تنفذ مكتبة جافا سكريبت ولا توجد ملفات تعريف الارتباط الموجودة. يتم تحديث ملف تعريف الارتباط في كل مرة يتم فيها إرسال البيانات إلى Google Analytics." - cookie_analytics_utmc_desc: "غير مستخدم في ga.js. تعيين إمكانية التشغيل المتداخل مع urchin.js. تاريخياً ، يتم تشغيل ملف تعريف الارتباط هذا بالتزامن مع ملف تعريف الارتباط __utmb لتحديد ما إذا كان المستخدم في جلسة / زيارة جديدة." - cookie_analytics_utmz_desc: "يخزن مصدر حركة المرور أو الحملة التي تشرح كيف وصل المستخدم إلى موقعك. يتم إنشاء ملف تعريف الارتباط عندما تنفذ مكتبة جافا سكريبت ويتم تحديثها في كل مرة يتم فيها إرسال البيانات إلى Google Analytics." cookie_matomo_basics_desc: "ملفات تعريف الارتباط الطرف الأول Matomo لجمع الإحصاءات." cookie_matomo_heatmap_desc: "ملف تعريف الارتباط Matmo Heatmap وتسجيل الجلسة." cookie_matomo_ignore_desc: "يستخدم ملف تعريف الارتباط لاستبعاد المستخدم من التعقب." @@ -1584,22 +1578,6 @@ ar: groups_signup_contact_text: "تواصل لتكتشف ما يمكن أن تفعله شبكة الغذاء المفتوح لك:" groups_signup_detail: "هنا التفاصيل." login_invalid: "البريد الإلكتروني أو كلمة السر خاطئة" - modal_hubs: "نقطة بيع الطعام" - modal_hubs_abstract: مراكز الغذاء لدينا هي نقطة الاتصال بينك وبين الأشخاص الذين يصنعون طعامك! - modal_hubs_content1: يمكنك البحث عن مركز مناسب حسب الموقع أو الاسم. تحتوي بعض لوحات الوصل على نقاط متعددة حيث يمكنك التقاط مشترياتك ، وسيوفر بعضها أيضًا خيارات التسليم. كل مركز غذاء هو نقطة مبيعات لها عمليات أعمال ولوجستيات مستقلة - لذلك من المتوقع حدوث تباينات بين المراكز. - modal_hubs_content2: يمكنك التسوق فقط في مركز طعام واحد في وقت واحد. - modal_groups: "المجموعات / المناطق" - modal_groups_content1: هذه هي المنظمات والعلاقات بين المحاور التي تشكل شبكة الغذاء المفتوح. - modal_groups_content2: يتم تجميع بعض المجموعات حسب الموقع أو المجلس ، والبعض الآخر حسب أوجه التشابه غير الجغرافية. - modal_how: "كيف تعمل" - modal_how_shop: تسوق في شبكة الغذاء المفتوح - modal_how_shop_explained: ابحث عن مركز طعام بالقرب منك لبدء التسوق! يمكنك توسيع كل مركز طعام لمعرفة أنواع الأشياء الجيدة المتاحة ، والنقر من خلاله البدء للتسوق. (يمكنك فقط الشراء من مركز طعام واحد في كل مرة.) - modal_how_pickup: الاستلام ، تكاليف التوصيل والشحن - modal_how_pickup_explained: تقوم بعض مراكز الطعام بالتوصيل إلى باب منزلك ، بينما يطلب منك البعض الآخر شراء مشترياتك. يمكنك معرفة الخيارات المتاحة على الصفحة الرئيسية ، وتحديد الخيارات التي تريدها في صفحات التسوق وتسجيل المغادرة. سيكلف التسليم أكثر ، ويختلف السعر من مركز الى اخر . كل مركز غذاء هو نقطة مبيعات مع عمليات تجارية مستقلة ولوجستية - لذلك من المتوقع حدوث اختلافات بين المراكز. - modal_how_more: أعرف أكثر - modal_how_more_explained: "إذا كنت تريد معرفة المزيد عن شبكة الغذاء المفتوح ، وكيف تعمل ، والمشاركة ، تحقق من:" - modal_producers: "المنتجين" - modal_producers_explained: "ينتج المنتجون لدينا جميع الأطعمة اللذيذة التي يمكنك تسوقها على شبكة الغذاء المفتوح." producers_about: معلومات عنا producers_buy: متجر لل producers_contact: اتصل @@ -2648,6 +2626,14 @@ ar: start_free_profile: "ابدأ بملف تعريف مجاني ، وتوسع عندما تكون جاهزًا!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "نطاق الموعد" + report_format_csv: "تنزيل بتنسيق CSV" + generate_report: "توليد تقرير" + report: + none: "لا شيء" + select_and_search: "حدد المرشحات وانقر على GENERATE REPORT للوصول إلى بياناتك." enterprise_fee_summary: date_end_before_start_error: "يجب أن يكون بعد البداية" parameter_not_allowed_error: "غير مصرح لك باستخدام عامل تصفية واحد أو أكثر لهذا التقرير." @@ -2787,14 +2773,6 @@ ar: smtp_send_copy_to_this_addresses: "يرسل نسخة من جميع الرسائل الصادرة إلى هذا العنوان. لعناوين متعددة ، افصل بينها بفواصل." intercept_email_address: "اعتراض عنوان البريد الإلكتروني" intercept_email_instructions: "تجاوز مستلم البريد الإلكتروني واستبداله بهذا العنوان." - smtp: "SMTP" - smtp_domain: "مجال SMTP" - smtp_mail_host: "مضيف بريد SMTP" - smtp_port: "منفذ SMTP" - secure_connection_type: "نوع اتصال آمن" - smtp_authentication_type: "نوع مصادقة SMTP" - smtp_username: "اسم مستخدم SMTP" - smtp_password: "كلمة مرور SMTP" image_settings: "إعدادات الصورة" image_settings_warning: "ستحتاج إلى تجديد الصور المصغرة إذا قمت بتحديث أنماط مشبك الورق. استخدم rap paperclip: refresh: الصور المصغرة CLASS = Spree :: Image للقيام بذلك." attachment_default_style: نمط المرفقات @@ -2841,12 +2819,6 @@ ar: shipping_categories: "فئات الشحن" new_shipping_category: "فئة الشحن الجديدة" back_to_shipping_categories: "العودة إلى فئات الشحن" - analytics_trackers: "تحليلات التتبع" - no_trackers_found: "لم يتم العثور على متتبعين" - new_tracker: "متتبع جديد" - add_one: "أضف واحدا" - google_analytics_id: "معرف التحليلات" - back_to_trackers_list: "العودة إلى قائمة التتبعات" name: "اسم" description: "وصف" type: "نوع" @@ -3128,14 +3100,6 @@ ar: bulk_coop_allocation: 'معظم التعاونية - تخصيص' bulk_coop_packing_sheets: 'معظم التعاونية - صحائف التعبئة' bulk_coop_customer_payments: ' الجمعية التعاونية - مدفوعات العملاء بالجملة' - enterprise_fee_summaries: - filters: - date_range: "نطاق الموعد" - report_format_csv: "تنزيل بتنسيق CSV" - generate_report: "توليد تقرير" - report: - none: "لا شيء" - select_and_search: "حدد المرشحات وانقر على GENERATE REPORT للوصول إلى بياناتك." users: index: listing_users: "قائمة المستخدمين" @@ -3180,14 +3144,15 @@ ar: autocomplete: producer_name: "المنتج" unit: "وحدة" - general_settings: + shared: + sortable_header: + name: "الاسم" edit: legal_settings: "الإعدادات القانونية" cookies_consent_banner_toggle: "عرض راية موافقة ملفات تعريف الارتباط" privacy_policy_url: "URL سياسة الخصوصية" enterprises_require_tos: "يجب على المؤسسات قبول شروط الخدمة" cookies_policy_matomo_section: "عرض قسم Matomo في صفحة سياسة ملفات تعريف الارتباط" - cookies_policy_ga_section: "عرض قسم Google Analytics في صفحة سياسة ملفات تعريف الارتباط" footer_tos_url: "شروط الخدمة URL" checkout: payment: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index df9c10bbf5..5089fa3427 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1584,22 +1584,6 @@ ca: groups_signup_contact_text: "Posa't en contacte per descobrir què pot fer OFN per tu:" groups_signup_detail: "Aquest és el detall." login_invalid: "Correu electrònic o contrasenya no vàlids" - modal_hubs: "Grups" - modal_hubs_abstract: Els nostres grups són el punt de contacte entre tu i les persones que fan els teus aliments. - modal_hubs_content1: Pots cercar un grup convenient per ubicació o nom. Alguns grups tenen diversos punts on pots recollir les vostres comandes i alguns també proporcionen opcions de lliurament. Cada grup és un punt de venda amb operacions comercials i logística independents, per la qual cosa és normal que existeixin variacions d'un grup a un altre. - modal_hubs_content2: Només pots comprar en un grup de consum a la vegada. - modal_groups: "Xarxes /Grups" - modal_groups_content1: Aquestes són les organitzacions i les relacions entre els grups que conformen l'OFN - modal_groups_content2: Alguns grups estan agrupats per localització o Ajuntament, altres per similituds no geogràfiques. - modal_how: "Com funciona" - modal_how_shop: Compreu a Open Food Network - modal_how_shop_explained: Cerca un grup de consum a prop teu per començar a comprar. Pots expandir cada grup per veure quins tipus de productes estan disponibles i fer clic per començar a comprar. (Només pots comprar en un grup alhora). - modal_how_pickup: Costes de recollida, lliurament i enviament - modal_how_pickup_explained: Algunes organitzacións o grups lliuren a la vostra porta, mentre que altres requereixen que aneu a buscar les vostres comandes. Podeu veure quines opcions hi ha disponibles a la pàgina d'inici i seleccionar el que vulgueu a les pàgines de confirmació de la compra. L'enviament costarà més, i els preus difereixen de l'organització. Cada grup és un punt de venda amb operacions comercials i logística independents, per la qual cosa es existeixen variacions entre grups. - modal_how_more: Aprèn-ne més - modal_how_more_explained: "Si vols saber-ne més sobre l'Open Food Network, com funciona i participar-hi, consulta:" - modal_producers: "Productors" - modal_producers_explained: "Les nostres productores elaboren tot el menjar deliciós que pots adquirir a l'Open Food Network." producers_about: Sobre nosaltres producers_buy: 'Compreu ' producers_contact: Contacte @@ -2832,14 +2816,6 @@ ca: smtp_send_copy_to_this_addresses: "Envia una còpia de tots els correus sortints a aquesta adreça. Per a diverses adreces, separeu amb comes." intercept_email_address: "Intercepta adreça de correu" intercept_email_instructions: "Invalida el destinatari de correu electrònic i reemplaça amb aquesta adreça." - smtp: "SMTP" - smtp_domain: "Domini SMTP" - smtp_mail_host: "Servidor de correu SMTP" - smtp_port: "Port SMTP" - secure_connection_type: "Tipus de connexió segura" - smtp_authentication_type: "Tipus d'autenticació SMTP" - smtp_username: "Nom d'usuari SMTP" - smtp_password: "Contrasenya SMTP" image_settings: "Configuració de la imatge" image_settings_warning: "Haureu de regenerar thumbnails si actualitzeu els estils de paperclip. Feu servir rake paperclip:refresh:thumbnails CLASS=Spree::Image per fer-ho." attachment_default_style: Estil de fitxers adjunts diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index 95764417ea..b9fd67477c 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -1322,14 +1322,8 @@ de_DE: cookie_stripe_desc: "Daten gesammelt von unserem Zahlungsabwickler Stripe für die Betrugserkennung https://stripe.com/cookies-policy/legal. Nicht alle Geschäfte verwenden Stripe als Zahlungsmethode, aber es ist eine gute Vorgehensweise, sie auf alle Seiten anzuwenden. Stripe erstellt wahrscheinlich ein Bild davon, welche unserer Seiten normalerweise mit ihrer API interagieren und merkt, wenn etwas Ungewöhnliches passiert. Das Festlegen des Stripe-Cookies hat also eine breitere Funktion als die Bereitstellung einer Zahlungsmethode für einen Benutzer. Das Entfernen könnte die Sicherheit des Dienstes selbst beeinträchtigen. Sie können mehr über Stripe erfahren und dessen Datenschutzrichtlinie unter https://stripe.com/privacy lesen." statistics_cookies: "Statistik-Cookies" statistics_cookies_desc: "Die folgenden Punkte sind nicht unbedingt erforderlich, helfen Ihnen jedoch, die beste Benutzererfahrung zu bieten, indem wir das Benutzerverhalten analysieren, die am häufigsten verwendeten Funktionen identifizieren oder nicht verwenden, Probleme mit der Benutzerfreundlichkeit verstehen usw." - statistics_cookies_analytics_desc_html: "Zur Erfassung und Analyse von Daten zur Nutzung der Plattform verwenden wir Google Analytics, da es sich um den Standarddienst handelt, der mit Spree (der E-Commerce-Open-Source-Software, auf der wir aufgebaut haben) verbunden ist. Unsere Vision ist jedoch der Wechsel zu Matomo (ex Piwik, ein Open-Source-Analysetool, das der DSGVO entspricht und Ihre Privatsphäre schützt), sobald wir können." statistics_cookies_matomo_desc_html: "Um Daten zur Nutzung der Plattform zu erfassen und zu analysieren, verwenden wir Matomo (ex Piwik), ein Open-Source-Analysetool, das der DSGVO-Richtlinie entspricht schützt Ihre Privatsphäre." statistics_cookies_matomo_optout: "Möchten Sie Matomo Analytics deaktivieren? Wir sammeln keine persönlichen Daten und Matomo hilft uns, unseren Service zu verbessern, aber wir respektieren Ihre Wahl :-)" - cookie_analytics_utma_desc: "Wird zur Unterscheidung von Benutzern und Sitzungen verwendet. Der Cookie wird erstellt, wenn die JavaScript-Bibliothek ausgeführt wird und keine vorhandenen __utma-Cookies vorhanden sind. Der Cookie wird jedes Mal aktualisiert, wenn Daten an Google Analytics gesendet werden." - cookie_analytics_utmt_desc: "Wird zum Drosseln der Anforderungsrate verwendet." - cookie_analytics_utmb_desc: "Wird verwendet, um neue Sitzungen / Besuche zu bestimmen. Der Cookie wird erstellt, wenn die JavaScript-Bibliothek ausgeführt wird und keine vorhandenen __utmb-Cookies vorhanden sind. Der Cookie wird jedes Mal aktualisiert, wenn Daten an Google Analytics gesendet werden." - cookie_analytics_utmc_desc: "Wird nicht in ga.js verwendet Stellen Sie die Interoperabilität mit urchin.js ein. In der Vergangenheit wurde dieser Cookie in Verbindung mit dem __utmb-Cookie verwendet, um festzustellen, ob sich der Benutzer in einer neuen Sitzung / einem neuen Besuch befand." - cookie_analytics_utmz_desc: "Speichert die Zugriffsquelle oder Kampagne, die erläutert, wie der Nutzer Ihre Website erreicht hat. Der Cookie wird erstellt, wenn die JavaScript-Bibliothek ausgeführt wird, und wird jedes Mal aktualisiert, wenn Daten an Google Analytics gesendet werden." cookie_matomo_basics_desc: "Matomo First Party Cookies zum Sammeln von Statistiken." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Aufnahme-Cookie." cookie_matomo_ignore_desc: "Cookie verwendet, um Benutzer von der Verfolgung auszuschließen." @@ -1588,22 +1582,6 @@ de_DE: groups_signup_contact_text: "Kontaktieren Sie uns, um herauszufinden, was OFN für Sie tun kann:" groups_signup_detail: "Hier ist das Detail." login_invalid: "Ungültige E-Mail-Adresse oder ungültiges Passwort" - modal_hubs: "Lebensmittel-Hubs" - modal_hubs_abstract: Unsere Hubs sind der Kontaktpunkt zwischen Ihnen und den Menschen, die Ihre Lebensmittel herstellen! - modal_hubs_content1: Sie können nach einem geeigneten Hub nach Standort oder Namen suchen. Einige Hubs haben mehrere Punkte, an denen Sie Ihre Einkäufe abholen können, und einige bieten auch Lieferoptionen. Jeder Food-Hub ist eine Verkaufsstelle mit eigenständigem Geschäftsbetrieb und Logistik - so sind Unterschiede zwischen den Hubs zu erwarten. - modal_hubs_content2: Sie können nicht bei mehr als einem Hub gleichzeitig einkaufen. - modal_groups: "Gruppen / Regionen" - modal_groups_content1: Dies sind die Organisationen und Beziehungen zwischen Hubs, aus denen das Open Food Network besteht. - modal_groups_content2: Einige Gruppen sind nach Standort oder Rat gruppiert, andere nach nichtgeographischen Ähnlichkeiten. - modal_how: "Wie es funktioniert" - modal_how_shop: Einkaufen im Open Food Network - modal_how_shop_explained: Suchen Sie nach einem Hub in Ihrer Nähe, um mit dem Einkauf zu beginnen! Sie können ein Hub erweitern, um zu sehen, welche Arten von Produkten verfügbar sind. Klicken Sie durch, um dort einzukaufen. (Sie können jeweils nur bei einem Hub gleichzeitig einkaufen.) - modal_how_pickup: Abhol-, Liefer- und Versandkosten - modal_how_pickup_explained: Manche Hubs liefern an, bei anderen müssen Sie abholen. Sie können auf der Startseite sehen, welche Optionen verfügbar sind, und und diese dann an der Kasse wählen. Lieferungen kosten mehr und die Preise unterscheiden sich von Hub zu Hub. Jedes Hub ist eine Verkaufsstelle mit eigenständigem Geschäftsbetrieb und Logistik - so sind Schwankungen zwischen den Hubs zu erwarten. - modal_how_more: Mehr erfahren - modal_how_more_explained: "Wenn Sie mehr über das Open Food Network erfahren wollen, wie es funktioniert und sich einbringen, schauen Sie nach:" - modal_producers: "Produzenten" - modal_producers_explained: "Unsere Produzenten stellen all das leckere Essen her, das Sie im Open Food Network kaufen können." producers_about: Über uns producers_buy: Suchen producers_contact: Kontakt @@ -2688,6 +2666,11 @@ de_DE: start_free_profile: "Beginnen Sie mit einem kostenlosen Profil und erweitern Sie es, wenn Sie fertig sind!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Datumsbereich" + report: + none: "Keine" enterprise_fee_summary: date_end_before_start_error: "muss nach dem start sein" parameter_not_allowed_error: "Sie sind nicht berechtigt, einen oder mehrere ausgewählte Filter für diesen Bericht zu verwenden." @@ -2827,14 +2810,6 @@ de_DE: smtp_send_copy_to_this_addresses: "Sendet eine Kopie aller ausgehenden Mails an diese Adresse. Bei mehreren Adressen trennen Sie diese durch Kommas." intercept_email_address: "E-Mail-Adresse abfangen" intercept_email_instructions: "Überschreiben Sie den E-Mail-Empfänger und ersetzen Sie ihn mit dieser Adresse." - smtp: "SMTP" - smtp_domain: "SMTP-Domäne" - smtp_mail_host: "SMTP-Mail-Host" - smtp_port: "SMTP-Port" - secure_connection_type: "Sicherer Verbindungstyp" - smtp_authentication_type: "SMTP-Authentifizierungstyp" - smtp_username: "SMTP-Benutzername" - smtp_password: "SMTP-Passwort" image_settings: "Bildeinstellungen" image_settings_warning: "Sie müssen die Miniaturbilder neu erstellen, wenn Sie die Büroklammerformate aktualisieren. Verwenden Sie dazu die Rake-Büroklammer: Refresh: thumbnails CLASS = Spree :: Image." attachment_default_style: Anhänge-Stil @@ -2881,12 +2856,6 @@ de_DE: shipping_categories: "Versandkategorien" new_shipping_category: "Neue Versandkategorie" back_to_shipping_categories: "Zurück zu den Versandkategorien" - analytics_trackers: "Analytics-Tracker" - no_trackers_found: "Keine Tracker gefunden" - new_tracker: "Neuer Tracker" - add_one: "Füge eins hinzu" - google_analytics_id: "Analytics-ID" - back_to_trackers_list: "Zurück zur Trackers-Liste" name: "Name" description: "Beschreibung" type: "Art" @@ -3168,14 +3137,6 @@ de_DE: bulk_coop_allocation: 'Massenkoop - Zuteilung' bulk_coop_packing_sheets: 'Massenkoop - Verpackungsblätter' bulk_coop_customer_payments: 'Massenkoop - Kundenzahlungen' - enterprise_fee_summaries: - filters: - date_range: "Datumsbereich" - report_format_csv: "Als CSV herunterladen" - generate_report: "Bericht generieren" - report: - none: "Keine" - select_and_search: "Wählen Sie Filter aus und klicken Sie auf GENERATE REPORT, um auf Ihre Daten zuzugreifen." users: index: listing_users: "Benutzer auflisten" @@ -3220,14 +3181,11 @@ de_DE: autocomplete: producer_name: "Produzent" unit: "Einheit" - general_settings: + shared: + sortable_header: + name: "Name" edit: - legal_settings: "Rechtliche Einstellungen" - cookies_consent_banner_toggle: "Zeigen Sie das Zustimmungsbanner für Cookies" - privacy_policy_url: "Datenschutz URL" enterprises_require_tos: "Unternehmen müssen die AGB akzeptieren" - cookies_policy_matomo_section: "Zeigen Sie den Matomo-Abschnitt auf der Cookie-Richtlinienseite an" - cookies_policy_ga_section: "Google Analytics-Abschnitt auf der Cookie-Richtlinienseite anzeigen" footer_tos_url: "AGB URL" checkout: payment: diff --git a/config/locales/en_AU.yml b/config/locales/en_AU.yml index 47288e5a5e..ef6b678107 100644 --- a/config/locales/en_AU.yml +++ b/config/locales/en_AU.yml @@ -1320,14 +1320,8 @@ en_AU: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1585,22 +1579,6 @@ en_AU: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2599,6 +2577,14 @@ en_AU: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2738,14 +2724,6 @@ en_AU: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2792,12 +2770,6 @@ en_AU: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3074,14 +3046,6 @@ en_AU: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3126,14 +3090,15 @@ en_AU: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_BE.yml b/config/locales/en_BE.yml index 5be45d93e5..255310e643 100644 --- a/config/locales/en_BE.yml +++ b/config/locales/en_BE.yml @@ -1278,14 +1278,8 @@ en_BE: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1543,22 +1537,6 @@ en_BE: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2557,6 +2535,14 @@ en_BE: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2694,14 +2680,6 @@ en_BE: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2748,12 +2726,6 @@ en_BE: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -2993,14 +2965,6 @@ en_BE: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3034,14 +2998,15 @@ en_BE: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index 9e522830cd..48e84cb3ce 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -1315,14 +1315,8 @@ en_CA: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1581,22 +1575,6 @@ en_CA: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Hubs" - modal_hubs_abstract: Our hubs are the point of contact between you and the people who grow & make local sustainable things! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each fhub is a sales/distribution point with independent operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a hub near you to start shopping! You can expand each hub to see what kinds of products are available, and click through to start. (You can only shop one hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each hub is a sales point with independent operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make things you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2677,6 +2655,14 @@ en_CA: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2816,14 +2802,6 @@ en_CA: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2870,12 +2848,6 @@ en_CA: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back to Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3157,14 +3129,6 @@ en_CA: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3209,14 +3173,15 @@ en_CA: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_DE.yml b/config/locales/en_DE.yml index 711d8e4b30..bd8269e646 100644 --- a/config/locales/en_DE.yml +++ b/config/locales/en_DE.yml @@ -1288,14 +1288,8 @@ en_DE: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1553,22 +1547,6 @@ en_DE: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2567,6 +2545,14 @@ en_DE: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2706,14 +2692,6 @@ en_DE: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2760,12 +2738,6 @@ en_DE: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3009,14 +2981,6 @@ en_DE: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3050,14 +3014,15 @@ en_DE: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 43be091174..d65e15e69b 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -1581,22 +1581,6 @@ en_GB: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2832,14 +2816,6 @@ en_GB: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index e54cc75239..dd94f9bd09 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -1320,14 +1320,8 @@ en_NZ: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1586,22 +1580,6 @@ en_NZ: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2683,6 +2661,14 @@ en_NZ: start_free_profile: "Start with a basic profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2822,14 +2808,6 @@ en_NZ: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2876,12 +2854,6 @@ en_NZ: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3163,14 +3135,6 @@ en_NZ: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3215,14 +3179,15 @@ en_NZ: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_PH.yml b/config/locales/en_PH.yml index 3d07dac662..13226a8bd4 100644 --- a/config/locales/en_PH.yml +++ b/config/locales/en_PH.yml @@ -1320,14 +1320,8 @@ en_PH: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1586,22 +1580,6 @@ en_PH: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2683,6 +2661,14 @@ en_PH: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2822,14 +2808,6 @@ en_PH: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2876,12 +2854,6 @@ en_PH: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3163,14 +3135,6 @@ en_PH: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3215,14 +3179,15 @@ en_PH: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index 507653ccb5..b60b89f930 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -1316,14 +1316,8 @@ en_US: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behavior, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyze platform usage data, we use Google Analytics, as it was the default service connected with Spree (the e-commerce open source software that we built on) but our vision is to switch to Matomo (ex Piwik, open source analytics tool that is GDPR compliant and protects your privacy) as soon as we can." statistics_cookies_matomo_desc_html: "To collect and analyze platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Do you want to opt-out of Matomo analytics? We don’t collect any personal data, and Matomo helps us to improve our service, but we respect your choice :-)" - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1582,22 +1576,6 @@ en_US: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organizations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2676,6 +2654,14 @@ en_US: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorized to use one or more selected filters for this report." @@ -2815,14 +2801,6 @@ en_US: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mail to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2869,12 +2847,6 @@ en_US: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3156,14 +3128,6 @@ en_US: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3207,14 +3171,15 @@ en_US: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/en_ZA.yml b/config/locales/en_ZA.yml index bcc0f2e080..baadbeccbc 100644 --- a/config/locales/en_ZA.yml +++ b/config/locales/en_ZA.yml @@ -1284,14 +1284,8 @@ en_ZA: cookie_stripe_desc: "Data collected by our payment processor Stripe for fraud detection https://stripe.com/cookies-policy/legal. Not all shops use Stripe as a payment method but it is a good practice to prevent fraud to apply it to all pages. Stripe probably build a picture of which of our pages usually interact with their API and then flag anything unusual. So setting the Stripe cookie has a broader function than simply the provision of a payment method to a user. Removing it could affect the security of the service itself. You can learn more about Stripe and read its privacy policy at https://stripe.com/privacy." statistics_cookies: "Statistics Cookies" statistics_cookies_desc: "The following are not strictly necessary, but help to provide you with the best user experience by allowing us to analyse user behaviour, identify which features you use most, or don’t use, understand user experience issues, etc." - statistics_cookies_analytics_desc_html: "To collect and analyse platform usage data, we use Google Analytics." statistics_cookies_matomo_desc_html: "To collect and analyse platform usage data, we use Matomo (ex Piwik), an open source analytics tool that is GDPR compliant and protects your privacy." statistics_cookies_matomo_optout: "Would you like to opt-out of Matomo analytics? We use Matomo to help us improve our service, but we don't collect any personal data." - cookie_analytics_utma_desc: "Used to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmt_desc: "Used to throttle request rate." - cookie_analytics_utmb_desc: "Used to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics." - cookie_analytics_utmc_desc: "Not used in ga.js. Set for interoperability with urchin.js. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit." - cookie_analytics_utmz_desc: "Stores the traffic source or campaign that explains how the user reached your site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics." cookie_matomo_basics_desc: "Matomo first party cookies to collect statistics." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Recording cookie." cookie_matomo_ignore_desc: "Cookie used to exclude user from being tracked." @@ -1549,22 +1543,6 @@ en_ZA: groups_signup_contact_text: "Get in touch to discover what OFN can do for you:" groups_signup_detail: "Here's the detail." login_invalid: "Invalid email or password" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Our food hubs are the point of contact between you and the people who make your food! - modal_hubs_content1: You can search for a convenient hub by location or name. Some hubs have multiple points where you can pick-up your purchases, and some will also provide delivery options. Each food hub is a sales point with independent business operations and logistics - so variations between hubs are to be expected. - modal_hubs_content2: You can only shop at one food hub at a time. - modal_groups: "Groups / Regions" - modal_groups_content1: These are the organisations and relationships between hubs which make up the Open Food Network. - modal_groups_content2: Some groups are clustered by location or council, others by non-geographic similarities. - modal_how: "How it works" - modal_how_shop: Shop the Open Food Network - modal_how_shop_explained: Search for a food hub near you to start shopping! You can expand each food hub to see what kinds of goodies are available, and click through to start shopping. (You can only shop one food hub at a time.) - modal_how_pickup: Pick-ups, delivery and shipping costs - modal_how_pickup_explained: Some food hubs deliver to your door, while others require you to pick-up your purchases. You can see which options are available on the homepage, and select which you'd like at the shopping and check-out pages. Delivery will cost more, and pricing differs from hub-to-hub. Each food hub is a sales point with independent business operations and logisitics - so variations between hubs are to be expected. - modal_how_more: Learn more - modal_how_more_explained: "If you want to learn more about the Open Food Network, how it works, and get involved, check out:" - modal_producers: "Producers" - modal_producers_explained: "Our producers make all the delicious food you can shop for on the Open Food Network." producers_about: About us producers_buy: Shop for producers_contact: Contact @@ -2570,6 +2548,14 @@ en_ZA: start_free_profile: "Start with a free profile, and expand when you're ready!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Date Range" + report_format_csv: "Download as CSV" + generate_report: "Generate Report" + report: + none: "None" + select_and_search: "Select filters and click on GENERATE REPORT to access your data." enterprise_fee_summary: date_end_before_start_error: "must be after start" parameter_not_allowed_error: "You are not authorised to use one or more selected filters for this report." @@ -2707,14 +2693,6 @@ en_ZA: smtp_send_copy_to_this_addresses: "Sends a copy of all outgoing mails to this address. For multiple addresses, separate with commas." intercept_email_address: "Intercept Email Address" intercept_email_instructions: "Override email recipient and replace with this address." - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP Username" - smtp_password: "SMTP Password" image_settings: "Image Settings" image_settings_warning: "You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::Image to do this." attachment_default_style: Attachments Style @@ -2761,12 +2739,6 @@ en_ZA: shipping_categories: "Shipping Categories" new_shipping_category: "New Shipping Category" back_to_shipping_categories: "Back To Shipping Categories" - analytics_trackers: "Analytics Trackers" - no_trackers_found: "No Trackers Found" - new_tracker: "New Tracker" - add_one: "Add One" - google_analytics_id: "Analytics ID" - back_to_trackers_list: "Back to Trackers List" name: "Name" description: "Description" type: "Type" @@ -3007,14 +2979,6 @@ en_ZA: bulk_coop_allocation: 'Bulk Co-op - Allocation' bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets' bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments' - enterprise_fee_summaries: - filters: - date_range: "Date Range" - report_format_csv: "Download as CSV" - generate_report: "Generate Report" - report: - none: "None" - select_and_search: "Select filters and click on GENERATE REPORT to access your data." users: index: listing_users: "Listing Users" @@ -3048,14 +3012,15 @@ en_ZA: autocomplete: producer_name: "Producer" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Name" edit: legal_settings: "Legal Settings" cookies_consent_banner_toggle: "Display cookies consent banner" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Enterprises must accept Terms of Service" cookies_policy_matomo_section: "Display Matomo section on cookies policy page" - cookies_policy_ga_section: "Display Google Analytics section on cookies policy page" footer_tos_url: "Terms of Service URL" checkout: payment: diff --git a/config/locales/es.yml b/config/locales/es.yml index d287fba960..4bafcc35b0 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1322,14 +1322,8 @@ es: cookie_stripe_desc: "Datos recopilados por nuestro procesador de pagos Stripe para detectar fraudes https://stripe.com/cookies-policy/legal. No todas las tiendas usan Stripe como método de pago pero es una buena práctica evitar fraude aplicarlo a todas las páginas. Stripe probablemente crea una imagen de cuáles de nuestras páginas generalmente interactúan con su API y luego marca cualquier cosa inusual. Por lo tanto configurar la cookie Stripe tiene una función más amplia que la simple provisión de un método de pago a un usuario. Eliminarla podría afectar la seguridad del servicio en sí. Puede obtener más información acerca de Stripe y leer su política de privacidad en https://stripe.com/privacy." statistics_cookies: "Cookies de estadísticas" statistics_cookies_desc: "Las siguientes no son estrictamente necesarias, pero ayudan a proporcionarle una mejor experiencia de usuario al permitirnos analizar el comportamiento del usuario, identificar qué funciones usa más o no, comprender los problemas de la experiencia del usuario, etc." - statistics_cookies_analytics_desc_html: "Para recopilar y analizar los datos de uso de la plataforma utilizamos Google Analytics, ya que era el servicio predeterminado conectado con Spree (el software de código abierto de comercio electrónico en el que creamos) pero nuestra visión es cambiar a Matomo (ex Piwik, herramienta analítica de código abierto que cumple con GDPR y protege tu privacidad) tan pronto como podamos." statistics_cookies_matomo_desc_html: "Para recopilar y analizar los datos de uso de la plataforma, utilizamos Matomo (ex Piwik), una herramienta analítica de código abierto que cumple con GDPR y protege tu privacidad" statistics_cookies_matomo_optout: "¿Deseas excluirte de Matomo Analytics? No recopilamos ningún dato personal y Matomo nos ayuda a mejorar nuestro servicio, pero respetamos tu elección :-)" - cookie_analytics_utma_desc: "Se usa para distinguir usuarios y sesiones. La cookie se crea cuando la biblioteca javascript se ejecuta y no existe ninguna cookie __utma existente. La cookie se actualiza cada vez que se envían datos a Google Analytics." - cookie_analytics_utmt_desc: "Se usa para acelerar la tasa de solicitud." - cookie_analytics_utmb_desc: "Se utiliza para determinar nuevas sesiones / visitas. La cookie se crea cuando la librería javascript se ejecuta y no existe ninguna cookie __utmb existente. La cookie se actualiza cada vez que los datos se envían a Google Analytics." - cookie_analytics_utmc_desc: "No utilizado en ga.js. Establecer para la interoperabilidad con urchin.js. Históricamente, esta cookie funcionó junto con la cookie __utmb para determinar si el usuario estaba en una nueva sesión / visita." - cookie_analytics_utmz_desc: "Almacena la fuente de tráfico o la campaña que explica cómo el usuario llegó a su sitio. La cookie se crea cuando se ejecuta la librería javascript y se actualiza cada vez que se envían datos a Google Analytics." cookie_matomo_basics_desc: "Matomo cookies de origen para recopilar estadísticas." cookie_matomo_heatmap_desc: "Matomo Heatmap y sesión de grabación de cookies." cookie_matomo_ignore_desc: "Cookie utilizada para excluir al usuario de ser rastreado." @@ -1588,22 +1582,6 @@ es: groups_signup_contact_text: "Póngase en conta para descubrir qué puede hacer OFN por usted:" groups_signup_detail: "Aquí está el detalle." login_invalid: "Correo electrónico o contraseña inválidos" - modal_hubs: "Hubs" - modal_hubs_abstract: ¡Nuestros Grupos de Consumo son el punto de contacto entre usted y la gente que hace su comida! - modal_hubs_content1: Puede buscar un grupo de consumo conveniente por ubicación o nombre. Algunos grupos de consumo tienen múltiples puntos en loa que puede recoger las compras, y algunos también brindan opciones de entrega a domicilio. Cada Grupo de Consumo es un punto de venta con operaciones de negocio y logística independientes, entonces puede esperar diferencias entre Grupos de Consumo. - modal_hubs_content2: Sólo puedes comprar en un grupo de consumo a la vez. - modal_groups: "Redes / Regiones" - modal_groups_content1: Estas son las organizaciones y relaciones entre grupos de consumo que conforman el Open Food Network. - modal_groups_content2: Algunas redes están organizadas por ubicación, otros por afinidades no geográficas. - modal_how: "Cómo funciona" - modal_how_shop: Comprar en Open Food Network - modal_how_shop_explained: ¡Buscar un grupo de consumo cerca de ti para empezar a comprar! Puedes expandir cada grupo de consumo para ver qué tipos de productos están disponibles, y hacer clic para empezar a comprar. (Sólo puedes comprar en un grupo de consumo a la vez.) - modal_how_pickup: Recogida, entrega y gastos de envío - modal_how_pickup_explained: Algunos grupos de consumo hacen entregas hasta su puerta, mientras otros requieren que recojas las compras. Puedes ver que opciones están disponibles en su página de inicio, y seleccionar cuál te gustaría en las páginas de compras y revisión. Las entregas costarán más, y el precio cambia entre grupos de consumo. Cada grupo es un punto de venta con operaciones y logística independientes, las diferencias son normales y deseables. - modal_how_more: Aprender más - modal_how_more_explained: "Si quieres saber más acerca de Open Food Network, cómo trabajamos y nos organizamos, visita:" - modal_producers: "Productoras" - modal_producers_explained: "Nuestras productoras hacen todos los deliciosos alimentos que puedes comprar en Open Food Network." producers_about: Acerca de nosotras producers_buy: Comprar producers_contact: Contacto @@ -2689,6 +2667,14 @@ es: start_free_profile: "Empieze con un perfil gratuito, y amplíelo cuando esté preparado!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Rango de fechas" + report_format_csv: "Descargar como CSV" + generate_report: "Generar informe" + report: + none: "Ninguno" + select_and_search: "Seleccione los filtros y haga clic en GENERAR INFORME para acceder a sus datos." enterprise_fee_summary: date_end_before_start_error: "debe ser después del comienzo" parameter_not_allowed_error: "No está autorizado a usar uno o más filtros seleccionados para este informe." @@ -2828,14 +2814,6 @@ es: smtp_send_copy_to_this_addresses: "Envía una copia de todos los correos salientes a esta dirección. Para direcciones múltiples, sepárelas con comas." intercept_email_address: "Interceptar la dirección de correo electrónico" intercept_email_instructions: "Anular destinatario de correo electrónico y reemplazar con esta dirección." - smtp: "SMTP" - smtp_domain: "Dominio SMTP" - smtp_mail_host: "Alojamiento de correo SMTP" - smtp_port: "Puerto SMTP" - secure_connection_type: "Tipo de conexión segura" - smtp_authentication_type: "Tipo de autenticación SMTP" - smtp_username: "Nombre de usuario SMTP" - smtp_password: "Contraseña SMTP" image_settings: "Ajustes de imagen" image_settings_warning: "Deberá regenerar las miniaturas si actualiza los estilos de paperclip. Utilize rake paperclip:refresh:thumbnails CLASS=Spree::Image para hacer esto." attachment_default_style: Estilo de los archivos adjuntos @@ -2882,12 +2860,6 @@ es: shipping_categories: "Categorías de envío" new_shipping_category: "Nueva categoría de envío" back_to_shipping_categories: "Volver a las categorías de envío" - analytics_trackers: "Analizadores de seguimiento" - no_trackers_found: "No se encontraron rastreadores" - new_tracker: "Nuevo rastreador" - add_one: "Agrega uno" - google_analytics_id: "ID d'Analytics" - back_to_trackers_list: "Volver a la lista de rastreadores" name: "Nombre" description: "Descripción" type: "Tipo" @@ -3169,14 +3141,6 @@ es: bulk_coop_allocation: 'Bulk Co-op - Asignación' bulk_coop_packing_sheets: 'Bulk Co-op - Hojas de Empaquetado' bulk_coop_customer_payments: 'Bulk Co-op - Pagos de las Consumidoras' - enterprise_fee_summaries: - filters: - date_range: "Rango de fechas" - report_format_csv: "Descargar como CSV" - generate_report: "Generar informe" - report: - none: "Ninguno" - select_and_search: "Seleccione los filtros y haga clic en GENERAR INFORME para acceder a sus datos." users: index: listing_users: "Listado de Usuarias" @@ -3221,14 +3185,15 @@ es: autocomplete: producer_name: "Productora" unit: "Unidad" - general_settings: + shared: + sortable_header: + name: "Nombre" edit: legal_settings: "Configuraciones legales" cookies_consent_banner_toggle: "Mostrar el banner de consentimiento de cookies" privacy_policy_url: "Vínculo con la Política de privacidad" enterprises_require_tos: "Las organizaciones deben aceptar los Términos del Servicio" cookies_policy_matomo_section: "Mostrar la sección de Matomo en la página de política de cookies" - cookies_policy_ga_section: "Mostrar la sección de Google Analytics en la página de la política de cookies" footer_tos_url: "URL de términos y servicios" checkout: payment: diff --git a/config/locales/es_CR.yml b/config/locales/es_CR.yml index f04841c2da..ff2948a8b1 100644 --- a/config/locales/es_CR.yml +++ b/config/locales/es_CR.yml @@ -204,7 +204,7 @@ es_CR: ongoing: En marcha bill_address: Dirección de facturación ship_address: Dirección de envío - sort_order_cycles_on_shopfront_by: "Ordenar Ciclos de Pedidos en Tienda por" + sort_order_cycles_on_shopfront_by: "Ordenar ciclos de pedidos en tienda por" required_fields: Los campos obligatorios se indican con un asterisco select_continue: Seleccione y Continue remove: Eliminar @@ -235,7 +235,7 @@ es_CR: admin_and_handling: Administración y Manejo profile: Perfil supplier_only: Sólo proveedor - has_shopfront: Tiene puesto de tienda + has_shopfront: Tiene tienda weight: Peso volume: Volumen items: Elementos @@ -261,7 +261,7 @@ es_CR: change_my_password: "Cambiar mi contraseña" update_password: "Actualizar contraseña" password_confirmation: Confirmación de contraseña - reset_password_token: token de restablecimiento de contraseña + reset_password_token: Token de restablecimiento de contraseña expired: ha expirado, por favor solicite una nueva back_to_payments_list: "Volver a la lista de pagos" maestro_or_solo_cards: "Solo tarjetas MasterCard" @@ -388,7 +388,7 @@ es_CR: update_address: 'Actualizar dirección' confirm_delete: '¿Confirmas que quieres borrar?' search_by_email: "Buscar por correo electrónico/código" - guest_label: 'Hacer pedido como invitado' + guest_label: 'Retirar como invitado' destroy: has_associated_orders: 'Error al eliminar: el cliente tiene pedidos asociados a su tienda.' contents: @@ -560,16 +560,16 @@ es_CR: add: Añadir hide: Ocultar import_date: Importado - select_a_shop: Selecciona una Tienda + select_a_shop: Seleccione una tienda review_now: Revisar ahora new_products_alert_message: Hay %{new_product_count} nuevos productos disponibles para añadir a tu inventario. - currently_empty: Tu inventario está vacio - no_matching_products: No se encuentran productos que concuerden en tu inventario - no_hidden_products: No hay productos ocultados de tu inventario - no_matching_hidden_products: No se encuentran productos ocultos que concuerden + currently_empty: Su inventario está vacio + no_matching_products: No se encuentran productos que concuerden en su inventario + no_hidden_products: No hay productos que hayan sido ocultados de su inventario + no_matching_hidden_products: No se encuentran productos ocultos que concuerden con su criterio de búsqueda no_new_products: No hay nuevos productos disponibles para añadir a este inventario - no_matching_new_products: No hay nuevos productos que concuerden - inventory_powertip: Este es tu inventario de productos. Para añadir productos a tu inventario, selecciona "Nuevos Productos" en el menú desplegable. + no_matching_new_products: No hay nuevos productos que concuerden con su criterio de búsqueda + inventory_powertip: Este es su inventario de productos. Para añadir productos a su inventario, seleccione "Nuevos Productos" en el menú desplegable. hidden_powertip: Estos productos han sido ocultados de tu inventario y no están disponibles para añadir a tu tienda. Puedes hacer click en "Añadir" para añadir un producto a tu inventario. new_powertip: Estos productos están disponibles para añadirlos a tu inventario. Haz clic en "Añadir" para añadir un producto a tu inventario o "Ocultar" para ocultarlo de la vista. Siempre puedes cambiar de idea! controls: @@ -682,7 +682,7 @@ es_CR: permalink: Permalink (sin espacios) permalink_tip: "Se usa para crear la URL de tu tienda: %{link}nombre-de-tu-tienda/shop" link_to_front: Link a la tienda - link_to_front_tip: Enlace directo a tu tienda en Open Food Networks + link_to_front_tip: Enlace directo a tu tienda en Open Food Networks (LaFeriaCR) ofn_uid: UID de OFN ofn_uid_tip: La identificación única utilizada para identificar la organización en Open Food Network. shipping_methods: @@ -710,10 +710,10 @@ es_CR: enable_subscriptions_tip: "¿Habilitar la funcionalidad de suscripciones?" enable_subscriptions_false: "Deshabilitado" enable_subscriptions_true: "Habilitado" - shopfront_message: "Mensaje de la Tienda" + shopfront_message: "Mensaje de la tienda" shopfront_message_placeholder: > Mensaje de bienvenida opcional para compradores, explica como comprar - en el sitio. si el texto se agrega en este campo, va a ser mostrado + en el sitio. Si el texto se agrega en este campo, va a ser mostrado en la pestaña de inicio cuando los clientes ingresen por primera vez a la tienda. shopfront_message_link_tooltip: "Insertar / editar enlace" @@ -1094,7 +1094,7 @@ es_CR: confirm_cancel_msg: "¿Seguro que quieres cancelar esta suscripción? Esta acción no se puede deshacer." cancel_failure_msg: "Lo sentimos ¡la cancelación falló!" confirm_pause_msg: "¿Seguro que quieres pausar esta suscripción?" - pause_failure_msg: "Lo sentimos ¡pausar falló!" + pause_failure_msg: "Lo sentimos ¡no se pude pausar!" confirm_unpause_msg: "Si tiene un ciclo de pedido abierto en el horario de esta suscripción, se creará un pedido para este cliente. ¿Estás seguro de que deseas anular la pausa de esta suscripción?" unpause_failure_msg: "Lo sentimos ¡no se pudo reanudar!" confirm_cancel_open_orders_msg: "Algunos pedidos de esta suscripción están actualmente abiertos. El cliente ya ha sido notificado de que se realizará el pedido. ¿Desea cancelar estos pedidos o conservarlos?" @@ -1146,7 +1146,7 @@ es_CR: checkout: "Validar el carrito ahora" already_ordered_products: "Pedido en este ciclo de pedido" register_call: - selling_on_ofn: "¿Tiene interés sobre entrar en Open Food Network (LaFeriaCR)?" + selling_on_ofn: "¿Quiere ser parte de Open Food Network (LaFeriaCR)?" register: "Regístrarse aquí" footer: footer_secure: "Seguro y de confianza." @@ -1209,7 +1209,7 @@ es_CR: menu_4_title: "Grupos" menu_4_url: "/groups" menu_5_title: "Acerca de" - menu_5_url: "https://laferia.cr/" + menu_5_url: "https://about.laferia.cr/" menu_6_title: "Conectar" menu_6_url: " " menu_7_title: "Aprender" @@ -1323,14 +1323,8 @@ es_CR: cookie_stripe_desc: "Datos recopilados por nuestro procesador de pagos Stripe para detectar fraudes https://stripe.com/cookies-policy/legal. No todas las tiendas usan Stripe como método de pago pero es una buena práctica evitar fraude aplicarlo a todas las páginas. Stripe probablemente crea una imagen de cuáles de nuestras páginas generalmente interactúan con su API y luego marca cualquier cosa inusual. Por lo tanto configurar la cookie Stripe tiene una función más amplia que la simple provisión de un método de pago a un usuario. Eliminarla podría afectar la seguridad del servicio en sí. Puede obtener más información acerca de Stripe y leer su política de privacidad en https://stripe.com/privacy." statistics_cookies: "Cookies de estadísticas" statistics_cookies_desc: "Las siguientes no son estrictamente necesarias, pero ayudan a proporcionarle una mejor experiencia de usuario al permitirnos analizar el comportamiento del usuario, identificar qué funciones usa más o no, comprender los problemas de la experiencia del usuario, etc." - statistics_cookies_analytics_desc_html: "Para recopilar y analizar los datos de uso de la plataforma utilizamos Google Analytics, ya que era el servicio predeterminado conectado con Spree (el software de código abierto de comercio electrónico que utilizamos) pero nuestra visión es cambiar a Matomo (ex Piwik, herramienta analítica de código abierto que cumple con GDPR y protege su privacidad) tan pronto como podamos." statistics_cookies_matomo_desc_html: "Para recopilar y analizar los datos de uso de la plataforma, utilizamos Matomo (ex Piwik), una herramienta analítica de código abierto que cumple con GDPR y protege tu privacidad" statistics_cookies_matomo_optout: "¿Deseas excluirte de Matomo Analytics? No recopilamos ningún dato personal y Matomo nos ayuda a mejorar nuestro servicio, pero respetamos tu elección :-)" - cookie_analytics_utma_desc: "Se usa para distinguir usuarios y sesiones. La cookie se crea cuando la biblioteca javascript se ejecuta y no existe ninguna cookie __utma existente. La cookie se actualiza cada vez que se envían datos a Google Analytics." - cookie_analytics_utmt_desc: "Se usa para acelerar la tasa de solicitud." - cookie_analytics_utmb_desc: "Se utiliza para determinar nuevas sesiones / visitas. La cookie se crea cuando la librería javascript se ejecuta y no existe ninguna cookie __utmb existente. La cookie se actualiza cada vez que los datos se envían a Google Analytics." - cookie_analytics_utmc_desc: "No utilizado en ga.js. Establecer para la interoperabilidad con urchin.js. Históricamente, esta cookie funcionó junto con la cookie __utmb para determinar si el usuario estaba en una nueva sesión / visita." - cookie_analytics_utmz_desc: "Almacena la fuente de tráfico o la campaña que explica cómo el usuario llegó a su sitio. La cookie se crea cuando se ejecuta la librería javascript y se actualiza cada vez que se envían datos a Google Analytics." cookie_matomo_basics_desc: "Matomo cookies de origen para recopilar estadísticas." cookie_matomo_heatmap_desc: "Matomo Heatmap y sesión de grabación de cookies." cookie_matomo_ignore_desc: "Cookie utilizada para excluir al usuario de ser rastreado." @@ -1349,7 +1343,7 @@ es_CR: cookies_policy_link: "política de cookies" cookies_accept_button: "Aceptar cookies" home_shop: Comprar ahora - brandstory_headline: "Consume con valores." + brandstory_headline: "Consuma con valores." brandstory_intro: "A veces la mejor forma de arreglar el sistema es empezar uno nuevo…" brandstory_part1: "Nosotros empezamos desde abajo. Con granjeros y productoras listas para contar sus historias con orgullo y autenticidad. Con distribuidoras listas para conectar gente con productos de forma justa y honesta. Con compradores que creen que mejores decisiones de compras semanales pueden seriamente cambiar el mundo." brandstory_part2: "Luego necesitamos una forma de hacerlo real. Una forma de empoderar a todos los que producen, venden y compran comida. Una forma de contar todas las historias, de manejar todas las logísticas. Una forma de convertir transacción en transformación todos los días." @@ -1363,11 +1357,11 @@ es_CR: connect_cta: "Explorar" system_headline: "Compras - aquí está cómo funcionan." system_step1: "1. Buscar" - system_step1_text: "Busque comida local y de temporada en nuestras tiendas diversas e independientes. Busque por cantón y categoría de comida o si prefiere entrega o recoger." + system_step1_text: "Busque comida local y de temporada en nuestras tiendas diversas e independientes. Puede buscar por cantón y tipo de comida o si prefiere por método de envío." system_step2: "2. Comprar" - system_step2_text: "Transforme su consumo con comida local y asequible de diversos productores ¡Conoce las historias detrás de su comida y la gente que la hace!" + system_step2_text: "Transforme su consumo con comida local y asequible de diversos productores ¡Conozca las historias detrás de su comida y la gente que la hace!" system_step3: "3. Recogida" - system_step3_text: "Visite su productor para crear un vínculo más directo con los productores y sus vecinos, también puedes comprar directamente a algunos productores. Compre su comida de una manera tan diversa como la naturaleza." + system_step3_text: "Visite su productor para crear un vínculo más directo con los productores y sus vecinos, también puede comprar directamente a algunos productores. Compre su comida de una manera tan diversa como la naturaleza." cta_headline: "Compras que hacen el mundo un mejor lugar." cta_label: "Estoy listo" stats_headline: "Entre todos creamos un nuevo sistema de producción, distribución y consumo." @@ -1551,8 +1545,8 @@ es_CR: products_update_error_msg: "No se ha podido guardar." products_update_error_data: "Error al guardar datos no válidos:" products_changes_saved: "Cambios guardados." - search_no_results_html: "Lo sentimos, no hay resultados para %{query}. ¿Intentar otra búsqueda?" - components_profiles_popover: "Los perfiles no tienen una tienda en Open Food Network, pero pueden tener su propia tienda física o en línea en otro lugar" + search_no_results_html: "Lo sentimos, no hay resultados para %{query}. ¿Por qué no intenta otra búsqueda?" + components_profiles_popover: "Los perfiles no tienen una tienda en Open Food Network (LaFeriaCR), pero pueden tener su propia tienda física o en línea en otro lugar" components_profiles_show: "Mostrar perfiles" components_filters_nofilters: "Sin filtros" components_filters_clearfilters: "Limpiar todos los filtros" @@ -1589,22 +1583,6 @@ es_CR: groups_signup_contact_text: "Póngase en conta para descubrir qué puede hacer OFN por usted:" groups_signup_detail: "Aquí está el detalle." login_invalid: "Correo electrónico o contraseña inválidos" - modal_hubs: "Hubs" - modal_hubs_abstract: ¡Nuestros Grupos de Consumo son el punto de contacto entre usted y la gente que hace su comida! - modal_hubs_content1: Puede buscar un grupo de consumo conveniente por ubicación o nombre. Algunos grupos de consumo tienen múltiples puntos en loa que puede recoger las compras, y algunos también brindan opciones de entrega a domicilio. Cada Grupo de Consumo es un punto de venta con operaciones de negocio y logística independientes, entonces puede esperar diferencias entre Grupos de Consumo. - modal_hubs_content2: Sólo puedes comprar en un grupo de consumo a la vez. - modal_groups: "Grupos / Regiones" - modal_groups_content1: Estas son las organizaciones y relaciones entre grupos de consumo que conforman el Open Food Network. - modal_groups_content2: Algunos grupos están organizados por ubicación, otros por afinidades no geográficas. - modal_how: "Cómo funciona" - modal_how_shop: Comprar en Open Food Network - modal_how_shop_explained: ¡Buscar un grupo de consumo cerca de ti para empezar a comprar! Puedes expandir cada grupo de consumo para ver qué tipos de productos están disponibles, y hacer clic para empezar a comprar. (Sólo puedes comprar en un grupo de consumo a la vez.) - modal_how_pickup: Recogida, entrega y gastos de envío - modal_how_pickup_explained: Algunos grupos de consumo hacen entregas hasta su puerta, mientras otros requieren que recojas las compras. Puedes ver que opciones están disponibles en su página de inicio, y seleccionar cuál te gustaría en las páginas de compras y revisión. Las entregas costarán más, y el precio cambia entre grupos de consumo. Cada grupo es un punto de venta con operaciones y logística independientes, las diferencias son normales y deseables. - modal_how_more: Aprender más - modal_how_more_explained: "Si quieres saber más acerca de Open Food Network, cómo trabajamos y nos organizamos, visita:" - modal_producers: "Productores" - modal_producers_explained: "Nuestras productoras hacen todos los deliciosos alimentos que puedes comprar en Open Food Network." producers_about: Acerca de nosotros producers_buy: Comprar para producers_contact: Contacto @@ -1831,7 +1809,7 @@ es_CR: enterprise_tax_required: "Necesita seleccionar algo." images: title: "Imágenes" - headline: "¡Ya casi lo tenemos!" + headline: "¡Gracias!" description: "¡Sube algunas fotografías así el perfil se verá mucho mejor! :)" uploading: "Subiendo..." continue: "Continuar" @@ -1875,7 +1853,7 @@ es_CR: headline: "¡Terminado!" thanks: "Gracias por llenar los detalles de %{enterprise}." login: "Puede cambiar o actualizar su negocio en cualquier etapa iniciando sesión en Open Food Network y yendo a Admin." - action: "Ir al Panel de Organización" + action: "Ir al panel de organización" back: "Atrás" continue: "Continuar" action_or: "Ó" @@ -1888,14 +1866,14 @@ es_CR: shop_variant_quantity_max: "máximo" follow: "Seguir" shop_for_products_html: "Comprar productos de %{enterprise} en:" - change_shop: "Cambiar de tienda:" - shop_at: "Comprar en:" + change_shop: "Cambiar de tienda a:" + shop_at: "Comprar ahora en:" price_breakdown: "Desglose de precios completo" admin_fee: "Comisión de administración" sales_fee: "Comisión de ventas" - packing_fee: "Comisión de empaquetado" + packing_fee: "Cuota de empaquetado" transport_fee: "Comisión de transporte" - fundraising_fee: "Comisión para recaptación de fondos" + fundraising_fee: "Cuota para recaudación de fondos" price_graph: "Gráfico de precios" included_tax: "Impuesto incluido" balance: "Saldo" @@ -2408,7 +2386,7 @@ es_CR: producer_hub_text1: > Tu organización es la columna vertebral de un sistema de consumo local. Agrega productos tuyos o de otras organizaciones y véndelo a través - de tu tienda en Open Food Network. + de tu tienda en Open Food Network (LaFeriaCR). producer_hub_text2: > Los Hubs de Productoras pueden tener diferentes finalidades, ya sea una cooperativa de alimentos, un grupo de consumo o un supermercado @@ -2691,6 +2669,14 @@ es_CR: start_free_profile: "¡Empieze con un perfil gratuito, y amplíelo cuando esté preparado!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Rango de fechas" + report_format_csv: "Descargar como CSV" + generate_report: "Generar reporte" + report: + none: "Ninguno" + select_and_search: "Seleccione los filtros y haga clic en GENERAR REPORTE para acceder a sus datos." enterprise_fee_summary: date_end_before_start_error: "debe ser después del comienzo" parameter_not_allowed_error: "Usted no está autorizado a usar uno o más filtros seleccionados para este reporte." @@ -2830,14 +2816,6 @@ es_CR: smtp_send_copy_to_this_addresses: "Envía una copia de todos los correos salientes a esta dirección. Para direcciones múltiples, sepárelas con comas." intercept_email_address: "Interceptar la dirección de correo electrónico" intercept_email_instructions: "Anular destinatario de correo electrónico y reemplazar con esta dirección." - smtp: "SMTP" - smtp_domain: "Dominio SMTP" - smtp_mail_host: "Alojamiento de correo SMTP" - smtp_port: "Puerto SMTP" - secure_connection_type: "Tipo de conexión segura" - smtp_authentication_type: "Tipo de autenticación SMTP" - smtp_username: "Nombre de usuario SMTP" - smtp_password: "Contraseña SMTP" image_settings: "Ajustes de imágen" image_settings_warning: "Deberá regenerar las miniaturas si actualiza los estilos de paperclip. Utilize rake paperclip:refresh:thumbnails CLASS=Spree::Image para hacer esto." attachment_default_style: Estilo de los archivos adjuntos @@ -2884,12 +2862,6 @@ es_CR: shipping_categories: "Categorías de envío" new_shipping_category: "Nueva categoría de envío" back_to_shipping_categories: "Volver a las categorías de envío" - analytics_trackers: "Rastreador de analizador" - no_trackers_found: "No se encontraron rastreadores" - new_tracker: "Nuevo rastreador" - add_one: "Agrega uno" - google_analytics_id: "ID de analizador" - back_to_trackers_list: "Volver a la lista de rastreadores" name: "Nombre" description: "Descripción" type: "Tipo" @@ -3171,14 +3143,6 @@ es_CR: bulk_coop_allocation: 'Bulk Co-op - Asignación' bulk_coop_packing_sheets: 'Bulk Co-op - Hojas de Empaquetado' bulk_coop_customer_payments: 'Bulk Co-op - Pagos de clientes' - enterprise_fee_summaries: - filters: - date_range: "Rango de fechas" - report_format_csv: "Descargar como CSV" - generate_report: "Generar reporte" - report: - none: "Ninguno" - select_and_search: "Seleccione los filtros y haga clic en GENERAR REPORTE para acceder a sus datos." users: index: listing_users: "Listando usuarios" @@ -3232,7 +3196,6 @@ es_CR: privacy_policy_url: "Vínculo con la política de privacidad" enterprises_require_tos: "Las organizaciones deben aceptar los Términos del Servicio" cookies_policy_matomo_section: "Mostrar la sección de Matomo en la página de política de cookies" - cookies_policy_ga_section: "Mostrar la sección de Google Analytics en la página de la política de cookies" footer_tos_url: "URL de términos y servicios" checkout: payment: diff --git a/config/locales/fil_PH.yml b/config/locales/fil_PH.yml index 58985e59a1..92122208f7 100644 --- a/config/locales/fil_PH.yml +++ b/config/locales/fil_PH.yml @@ -47,12 +47,12 @@ fil_PH: activemodel: attributes: order_management/reports/enterprise_fee_summary/parameters: - start_at: "Simula" - end_at: "Hanggang" + start_at: "Magsisimula" + end_at: "Matatapos" distributor_ids: "Hubs" producer_ids: "Producers" order_cycle_ids: "Order Cycles" - enterprise_fee_ids: "pangalan ng mga bayarin" + enterprise_fee_ids: "pangalan ng mga Fees" shipping_method_ids: "Mga Paraan ng Pagpapadala" payment_method_ids: "Mga Paraan ng Pagbabayad" errors: @@ -65,7 +65,7 @@ fil_PH: at_least_one_product: "^Magdagdag ng kahit isang produkto" not_available: "^%{name} ay hindi available sa napiling iskedyul" ends_at: - after_begins_at: "ay dapat pagkatapos ng nagsisimula sa" + after_begins_at: "ay dapat pagkatapos ng magsisimula ng" customer: does_not_belong_to_shop: "ay hindi nabibilang sa%{shop}" schedule: @@ -151,7 +151,7 @@ fil_PH: confirmation_summary_email: subject: Buod ng mga bagong kumpirmadong subscription orders greeting: "Magandang araw%{name}," - intro: "sa ilalim ay ang buod ng mga subscription order na na-finalize para sa%{shop}." + intro: "sa ilalim ay ang buod ng mga nauulit na order na na-finalize para sa%{shop}." summary_overview: total: may kabuuuan na %{count}subscriptions ang minarkahan para sa awtomatikong pagproseso. success_zero: sa lahat ng ito, walang matagumpay na naproseso @@ -168,7 +168,7 @@ fil_PH: explainer: ang mga order na ito ay hindi naproseso sapagkat walang stock ng mga ni-request na item. complete: title: Naproseso Na (%{count}na order) - explainer: ang mga order na ito ay namarkahan na kumpleto at hindi na babaguhin + explainer: ang mga order na ito ay Kumpleto na at hindi na maaaring babaguhin processing: title: May Error na Kinaharap (%{count}na order) explainer: ang awtomatikong pagproseso ng mga order na ito ay hindi nagtagumpay dahil sa isang error. ang error ay nailista na upang mabusisi kung saan posibleng nagsimula. @@ -219,7 +219,7 @@ fil_PH: edit: i-edit clone: Gayahin distributors: Mga Distributor - bulk_order_management: Pamamahala sa pangmaramihang order + bulk_order_management: Pamamahala sa mga Bulk Order enterprises: Mga Enterprise enterprise_groups: Mga grupo reports: Mga Ulat @@ -311,8 +311,8 @@ fil_PH: select_all: piliin ang lahat quick_search: madaliang paghahanap clear_all: alisin lahat - start_date: "Petsa na nagsimula" - end_date: "Petsa na natapos" + start_date: "Petsa ng Pagsimula" + end_date: "Petsa ng Pagtatapos" form_invalid: "ang form ay may nawawala o hindi valid na sagot sa mga patlang" clear_filters: alisin ang mga filter clear: alisin @@ -346,7 +346,7 @@ fil_PH: title: "settings ng invoice" enable_invoices?: "paganahin ang mga invoice?" invoice_style2?: "gamitin ang alternatibong modelo ng invoice na kinabibilangan ng kabuuang breakdown ng tax bawat rate at impormasyon ng rate ng tax kada item (hindi pa akma para sa mga bansang nagpapakita na presyo na hindi kasama ang tax)" - enable_receipt_printing?: "ipakita ang mga pagpipilian sa pag-print ng mga resibo gamit ang thermal printers sa dropdown ng order." + enable_receipt_printing?: "ipakita ang mga pagpipilian sa pag-print ng mga resibo gamit ang thermal printers sa dropdown ng order?" stripe_connect_settings: edit: title: "Stripe Connect" @@ -378,7 +378,7 @@ fil_PH: bill_address: "Billing Address" ship_address: "Shipping Address" update_address_success: 'matagumpay na na-update ang address' - update_address_error: 'pakisagutan lahat ng kailangang impormasyon' + update_address_error: 'Paunawa! Sagutan lahat ng mga kailangang impormasyon!' edit_bill_address: 'i-edit ang Billing Address' edit_ship_address: 'i-edit ang shipping address' required_fileds: 'ang mga kailangang may sagot ay may nakalagay na asterisk' @@ -405,7 +405,7 @@ fil_PH: user_guide: gabay sa gumagamit enterprise_fees: index: - title: "bayad para sa enterprise" + title: "fees para sa Enterprise" enterprise: "Enterprise" fee_type: "uri ng bayad" name: "pangalan" @@ -564,10 +564,10 @@ fil_PH: review_now: tignan ngayon new_products_alert_message: mayroong%{new_product_count}bagong mga produkto na maaaring idagdag sa inyong imbentaryo currently_empty: ang iyong imbentaryo ay kasalukuyang walang laman - no_matching_products: Walang nahanap na katumbas na produkto sa inyong imbentaryo - no_hidden_products: Walang produkto na nakatago mula sa imbentaryong ito + no_matching_products: Walang nahanap na parehong produkto sa inyong imbentaryo + no_hidden_products: Walang produkto na itinago sa imbentaryong ito no_matching_hidden_products: walang nakatagong produkto na tugma sa inyong hinahanap na pamantayan - no_new_products: walang bagong produkto na maaaring idagdag sa inyong imbentaryo + no_new_products: walang bagong produkto na maaaring idagdag sa imbentaryong ito no_matching_new_products: walang bagong mga produkto na tugma sa inyong hinahanap na pamantayan inventory_powertip: Ito ang imbentaryo ng inyong mga produkto. Upang magdagdag ng produkto sa inyong imbentaryo, piliin ang "Bagong Produkto" sa viewing dropdown. hidden_powertip: ang mga produktong ito ay nakatago sa inyong imbentaryo at hindi maaaring idagdag sa inyong shop. maaaring pindutin ang "Idagdag" para madagdag ang produkto sa inyong imbentaryo. @@ -576,13 +576,13 @@ fil_PH: back_to_my_inventory: bumalik sa aking imbentaryo orders: invoice_email_sent: 'ang invoice email ay naipadala na' - order_email_resent: 'ang email ng order ay napadala na muli' + order_email_resent: 'ang email ng order ay naipadala na muli' bulk_management: tip: "gamitin ang pahina na ito para baguhin ang dami ng mga produkto sa maramihang mga order. maaari ding magtanggal ng mga produkto mula sa order kung kinakailangan." shared: "ibinahaging pinagkuhanan?" order_no: "Order No." order_date: "nakumpleto sa" - max: "Labis" + max: "Max" product_unit: "Produkto: Yunit" weight_volume: "Timbang/Dami" ask: "itanong?" @@ -634,8 +634,8 @@ fil_PH: enterprise_fees: name: pangalan fee_type: uri ng kabayaran - manage_fees: pamahalaan ang mga bayarin para sa enterprise - no_fees_yet: wala ka pang kahit anong bayaring pang-enterprise + manage_fees: pamahalaan ang fees para sa enterprise + no_fees_yet: wala ka pang kahit anong fees para sa enterprise create_button: gumawa ng isa ngayon images: logo: Logo @@ -741,7 +741,7 @@ fil_PH: title: Kumonekta sa Stripe part1: ang Stripe ay isang serbisyong nagpoproseso ng mga bayad na ginagawang posible para sa mga shop sa OFN na tumanggap ng bayad gamit ang mga credit card mula sa mga customer. part2: para magamit ito, kailangang ikonekta ang iyong Stripe account sa OFN. ang pagpindot ng "pumapayag ako" sa ibaba ay ididirekta ka sa Stripe website kung saan mo maaaring ikonek ang iyong Stripe account o gumawa ng bago kung wala ka pa nito. - part3: pinapayagan nito ang Open Food Network na tumanggap para sa iyo ng bayad gamit ang mga credit card mula sa mga customer. tandaan na kailangan mong pangalagaan ang sarili mong Stripe Account, bayaran ang serbisyo ng Stripe, isaayos ang mga paniningil at gawin ang serbisyo sa customer sa sarili mong paraan. + part3: pinapayagan nito ang Open Food Network na tumanggap para sa iyo ng bayad gamit ang mga credit card mula sa mga customer. tandaan na kailangan mong pangalagaan ang sarili mong Stripe Account, bayaran ang serbisyo ng Stripe, asikasuhin ang mga chargebacks at Customer service sa sarili mong paraan. i_agree: pumapayag ako cancel: i-cancel tag_rules: @@ -779,8 +779,8 @@ fil_PH: payment_methods_tip: ang enterprise na ito ay walang mga paraan ng pagbabayad shipping_methods: mga paraan ng pagpapadala shipping_methods_tip: ang enterprise na ito ay may mga paraan ng pagpapadala - enterprise_fees: bayad para sa enterprise - enterprise_fees_tip: ang enterprise na ito walang mga bayarin + enterprise_fees: fees para sa enterprise + enterprise_fees_tip: ang enterprise na ito ay walang fees admin_index: name: Pangalan role: papel na gagampanan @@ -875,7 +875,7 @@ fil_PH: products: "mga produkto" tags: "tags" delivery_details: "detalye ng pag-deliver" - fees: "mga bayarin" + fees: "Fees" previous: "nauna" save: "i-save" save_and_back_to_list: "i-save at bumalik sa listahan" @@ -915,7 +915,7 @@ fil_PH: incoming: papasok supplier: Supplier receival_details: detalye ng pagtanggap - fees: mga bayarin + fees: Fees outgoing: papalabas distributor: Distributor products: mga produkto @@ -941,7 +941,7 @@ fil_PH: customer_instructions: panuto ng Customer customer_instructions_placeholder: tala para sa pag-pick-up o pagdeliver products: mga produkto - fees: mga bayarin + fees: Fees destroy_errors: orders_present: ang order cycle na ito ay napili na ng isang customer at hindi na maaaring tanggalin. upang maiwasan na ma-access muli, isarado muna ito. schedule_present: ang order cycle na ito ay naka-link sa isang iskedyul at hindi maaaring tanggalin. maaaring tanggalin muna ang link o tanggalin muna ang iskedyul. @@ -965,7 +965,7 @@ fil_PH: enterprises_hubs_tabs: has_no_payment_methods: "%{enterprise}ay walang paraan ng pagbabayad" has_no_shipping_methods: "%{enterprise}ay walang paraan ng pagpapadala" - has_no_enterprise_fees: "%{enterprise}ay walang mga bayarin sa enterpise" + has_no_enterprise_fees: "%{enterprise}ay walang fees para sa enterpise" enterprise_issues: create_new: gumawa ng bago resend_email: ipadala muli ang email @@ -1022,7 +1022,7 @@ fil_PH: name: ulat sa pagbabalot enterprise_fee_summary: name: "buod ng bayad sa enterprise" - description: "buod ng mga nakolektang bayad sa enterprise" + description: "buod ng mga nakolektang fees para sa enterprise" subscriptions: subscriptions: mga subscription new: bagong subscription @@ -1583,22 +1583,6 @@ fil_PH: groups_signup_contact_text: "Makipag-ugnayan upang malaman kung paano ka matutulungan ng OFN:" groups_signup_detail: "ito ang mga detalye:" login_invalid: "hindi valid ang email o password" - modal_hubs: "Mga Hub ng pagkain" - modal_hubs_abstract: ang mga Hub ng pagkain ang namamagitan sa iyo at sa mga gumagawa ng inyong pagkain! - modal_hubs_content1: maaari kang humanap ng pinakamalapit na Hub gamit ang lokasyon o pangalan. Ang ibang Hub ay may maraming mga lugar kung saan maaari mong kunin ang iyong pinamili habang ang iba ay bibigyan ka rin ng iba pang opsyon kung paano mo makukuha ang iyong order. Bawat Food Hub ay may iba ibang paraan ng operasyon at proseso kaya asahan ang kaibahan sa mga binibigay na serbisyo. - modal_hubs_content2: Maaari ka lamang mamili sa isang hub ng pagkain sa bawat pagkakataon. - modal_groups: "Mga Grupo / Mga Rehiyon" - modal_groups_content1: ito ang mga organisasyon at mga relasyon na namamagitan sa mga Hub na bumubuo sa Open Food Network. - modal_groups_content2: ang ibang grupo ay pinagsasama sama depende sa lokasyon o lupon, at ang iba ay sa hindi pangheograpiyang pagkakapareho. - modal_how: "Paano it gumagana" - modal_how_shop: Mamili sa Open Food Network - modal_how_shop_explained: maghanap ng hub ng pagkain na pinakamalapit sa iyo para makapagsimulang makapamili. maaring palawakin ng bawat hub upang makita kung anong uri ng pagkain ang inaalok nila at pindutin ng tuluyan para magsimula mamili. (maaari lamang mamili sa isang hub sa isang pagkakataon.) - modal_how_pickup: Singil sa Pick-up, pag-deliver at pagpapadala - modal_how_pickup_explained: ang ibang food hub ay magde-deliver mismo sa inyong tirahan, habang ang iba ay kakailanganin kang kunin ng personal sa kanila ang inyong mga order. Mababasa sa homepage ang mga opsyon, at piliin ang mga produkto na nais sa pahina ng pamimili at checkout. Ang pagpapa-deliver ay mas mahal at ang halagang babayaran ay nakadepende sa iba't ibang food hub. Bawat Food Hub ay may iba't ibang paraan ng operasyon at proseso kaya dapat asahan ang kaibahan sa mga binibigay na serbisyo. - modal_how_more: dagdagan ang kaalaman - modal_how_more_explained: "kung nais mong mas maintindihan ang Open Food Network, kung paano ito gumagana at paano makasali dito, tignan ito:" - modal_producers: "Producers" - modal_producers_explained: "ang aming mga producer ay gumagawa ng masasarap na pagkain na maaari mong mabili sa Open Food Network." producers_about: Tungkol sa amin producers_buy: 'mamili para sa ' producers_contact: Makipag-ugnayan @@ -1724,7 +1708,7 @@ fil_PH: error_not_found_in_database: "%{name}ay hindi mahanap sa database" error_not_primary_producer: "%{name}ay hindi isang producer" error_no_permission_for_enterprise: "\"%{name}\": wala kang permiso para pamahalaan ang mga produkto ng enterprise na ito." - item_handling_fees: "bayad sa paghawak ng item (kasama sa kabuuan ng item)" + item_handling_fees: "Fee para sa paghawak ng item (kasama sa kabuuan ng item)" january: "Enero" february: "Pebrero" march: "Marso" @@ -1748,7 +1732,7 @@ fil_PH: forgot_password: "nakalimutan ang password?" password_reset_sent: "ang email na may panuto kung paano papalitan ang inyong password ay napadala na!" reset_password: "palitan ang password" - update_and_recalculate_fees: "i-update at kwentahin muli ang mga bayarin" + update_and_recalculate_fees: "i-update at kuwentahin muli ang fees" registration: steps: introduction: @@ -1875,7 +1859,7 @@ fil_PH: action_or: "O" enterprise_limit: Limitasyon ng enterprise shipping_method_destroy_error: "ang paraan ng pagpapadala ay hindi maaaring burahin sapagkat ito ay nakasangguni na sa isang order:%{number}." - fees: "mga bayarin" + fees: "fees" item_cost: "halaga ng item" bulk: "Bulto" shop_variant_quantity_min: "pinakakaunti" @@ -2124,7 +2108,7 @@ fil_PH: report_header_sales_tax: "tax sa mga nabenta (%{currency_symbol})" report_header_delivery_charge: "bayad sa pag-deliver(%{currency_symbol})" report_header_tax_on_delivery: "tax sa pagdeliver (%{currency_symbol})" - report_header_tax_on_fees: "tax sa mga bayarin (%{currency_symbol})" + report_header_tax_on_fees: "Buwis sa Fees (%{currency_symbol})" report_header_total_tax: "kabuuang tax(%{currency_symbol})" report_header_enterprise: Enterprise report_header_customer: customer @@ -2179,7 +2163,7 @@ fil_PH: report_header_payment_state: status ng pagbabayad report_header_payment_type: uri ng pagbabayad report_header_item_price: "item(%{currency})" - report_header_item_fees_price: "item + bayad (%{currency})" + report_header_item_fees_price: "item + fees (%{currency})" report_header_admin_handling_fees: "Admin at paghawak (%{currency})" report_header_ship_price: "pagdala (%{currency})" report_header_pay_fee_price: "Bayad sa pagbabayad (%{currency})" @@ -2206,8 +2190,8 @@ fil_PH: report_header_gst_free_income: GST sa Libreng Kinikita report_header_total_untaxable_produce: kabuuang produkto na untaxable (walang tax) report_header_total_taxable_produce: kabuuang produkto na taxable (may kasamang tax) - report_header_total_untaxable_fees: kabuuang bayarin na untaxable (walang tax) - report_header_total_taxable_fees: kabuuang bayarin na taxable (may kasamang tax) + report_header_total_untaxable_fees: kabuuang fees na untaxable (walang tax) + report_header_total_taxable_fees: kabuuang fees na taxable (may kasamang tax) report_header_delivery_shipping_cost: Singil sa pagdeliver ng pinapadala (kasama ang tax) report_header_transaction_fee: Bayad sa Transaksyon (walang tax) report_header_total_untaxable_admin: kabuuang untaxable na pagsasaayos ng admin (walang tax) @@ -2283,7 +2267,7 @@ fil_PH: cycle ngunit walang valid na paraan ng pagpapadala at pagbabayad. Hanggang hindi pa naisasaayos ang pagset-up, hindi makakapamili ang mga customer sa mga hub na ito. - enterprise_fees_update_notice: ang mga bayarin ng inyong enterprise ay na-update na + enterprise_fees_update_notice: ang fees ng inyong enterprise ay na-update na. enterprise_register_package_error: "pumili ng package" enterprise_register_error: "hindi makumpleto ang rehistrasyon para sa%{enterprise}" enterprise_register_success_notice: "maligayang pagbati! ang rehistrasyon para sa%{enterprise}ay kumpleto na!" @@ -2838,14 +2822,6 @@ fil_PH: smtp_send_copy_to_this_addresses: "nagpapadala ng kopya ng lahat ng lumalabas na mga sulat sa address na ito, para sa maraming address, paghiwalayin gamit ang kuwit." intercept_email_address: "harangin ang email address" intercept_email_instructions: "pawalang halaga ang tatanggap ng email at palitan ng address na ito" - smtp: "SMTP" - smtp_domain: "SMTP Domain" - smtp_mail_host: "SMTP Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMTP username" - smtp_password: "SMTP password" image_settings: "mga setting ng larawan" image_settings_warning: "kinakailangang gumawa muli ng mga thumbnail kung ia-update ang mga estilo ng paperclip. gumamit ng rake paperclip:refresh:thumbnails CLASS=Spree::Image para gawin ito." attachment_default_style: estilo ng mga attachment diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index b05a488edf..842e6bda2a 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -1322,14 +1322,8 @@ fr_BE: cookie_stripe_desc: "Données collectées par notre processeur de paiement Stripe proposé aux utilisateurs d'Open Food Network https://stripe.com/fr/cookies-policy/legal. Même si toutes les comptoirs n'utilisent pas Stripe, c'est une bonne pratique en matière de sécurité d'appliquer ce cookie sur toutes les pages vues. Stripe construit probablement une image des pages qui ont un quelconque lien avec l'API connectant Open Food Network à leur système de paiement pour détecter les comportements anormaux pouvant suggérer un risque de fraude. Donc ce cookie a un rôle qui va au-delà de la simple fourniture d'un système de paiement. Le supprimer pourrait affecter la sécurité du service. Pour en savoir plus sur la politique de confidentialité de Stripe: https://stripe.com/fr/privacy." statistics_cookies: "Cookies d'analyse de navigation" statistics_cookies_desc: "Ces cookies ne sont pas obligatoires, mais nous permettent de mieux comprendre votre usage de la plateforme, les endroits où vous bloquez, les fonctionnalités qui semblent vous manquer, ou que vous n'utilisez jamais, afin de fournir le service le plus adapté possible aux besoins des utilisateurs." - statistics_cookies_analytics_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Google Analytics, pas vraiment par choix, mais simplement parce que c'était l'outil d'analyse connecté par défaut via Spree, le logiciel e-commerce open source sur lequel nous avons construit. Mais nous espérons pouvoir rapidement migrer vers Matomo (anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Matomo(anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_optout: "Vous ne voulez pas que vos données soient analysées par Matomo ? Nous ne collectons aucune donnée personnelle, et Matomo nous aide à améliorer le service que nous vous offrons, mais nous respectons votre choix :-)" - cookie_analytics_utma_desc: "Utilisé pour distinguer les utilisateurs et les sessions. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utma n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics." - cookie_analytics_utmt_desc: "Utilisé pour limiter le taux de requêtes." - cookie_analytics_utmb_desc: "Utilisé pour distinguer les nouvelles sessions/visites. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utmb n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics. " - cookie_analytics_utmc_desc: "Non utilisé dans ga.js. Utilisé pour l'interopérabilité avec urchin.js. Historiquement, ce cookie fonctionnait en conjonction avec le cookie __utmb pour déterminer si l'utilisateur était dans une nouvelle session/visite ou pas." - cookie_analytics_utmz_desc: "Ce cookie stocke les sources de trafic qui expliquent comment l'utilisateur est arrivé sur le site (via une campagne, une recherche sur un moteur de recherche, etc.). Ce cookie est installé quand la librairie Javascript s'exécute et mis à jour à chaque fois que des données sont envoyées à Google Analytics. " cookie_matomo_basics_desc: "Cookies déposés par Matomo pour collecter les statistiques de trafic." cookie_matomo_heatmap_desc: "Utilisé par Matomo pour enregistrer les sessions et \"cartes thermiques\" (représentations graphiques des données)" cookie_matomo_ignore_desc: "Cookie utilisé pour se souvenir qu'un utilisateur a souhaité explicitement que sa navigation ne soit pas analysée par Matomo, et exclure cet utilisateur du suivi du site." @@ -1588,22 +1582,6 @@ fr_BE: groups_signup_contact_text: "Prenez contact et découvrez ce qu'Open Food France peut faire pour vous:" groups_signup_detail: "Comment ça marche" login_invalid: "Email ou mot de passe erroné" - modal_hubs: "Comptoirs" - modal_hubs_abstract: Nos comptoirs sont les points de contact entre vous et les personnes qui produisent votre nourriture! - modal_hubs_content1: Vous pouvez chercher le comptoir qui vous convient par localisation ou par nom. Certains comptoirs ont de multiples points de retrait de vos achats, et certains proposent également la livraison à domicile. Chaque comptoir est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs. - modal_hubs_content2: Vous pouvez uniquement faire vos courses dans un comptoir à la fois. - modal_groups: "Groupes" - modal_groups_content1: Voilà les organisations et les relations inter-comptoirs qui constituent l'Open Food Network. - modal_groups_content2: Certains groupes sont regroupés pas localisation ou région, d'autres sur des smilitudes non géographiques. - modal_how: "Comment ça marche" - modal_how_shop: Faire vos courses sur Open Food Network - modal_how_shop_explained: Recherchez un comptoir près de chez vous et commencez vos achats! Vous pouvez afficher plus d'infos sur chaque comptoir pour voir le type de produits qu'il propose, et cliquer sur le comptoir pour commencer vos achats. (Vous ne pouvez faire vos courses que dans un food hub à la fois.) - modal_how_pickup: Frais de retrait, livraison et transport - modal_how_pickup_explained: Certains comptoirs livrent à domicile, d'autres vous demandent de venir récupérer vos achats dans un point de retrait. Vous pouvez voir quelle options sont proposées sur la page d'accueil du hub, et sélectionner votre choix au moment de la validation de la commande. La livraison à domicile coûtera souvent plus cher, et les prix diffèrent selon le comptoir. Chaque comptoir est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les comptoirs. - modal_how_more: En savoir plus - modal_how_more_explained: "Pour en savoir plus sur Open Food Network, comment ça marche, et contribuer, allez voir:" - modal_producers: "Producteurs" - modal_producers_explained: "Nos producteurs font pousser et fabriquent tous les délicieux produits que vous pouvez acheter sur Open Food Network." producers_about: A propos producers_buy: Acheter producers_contact: Contact @@ -2625,6 +2603,14 @@ fr_BE: start_free_profile: "Commencez par créer votre profil entreprise, et présentez votre formule quand vous êtes prêt !" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Plage de dates" + report_format_csv: "Télécharger comme valeur décimale " + generate_report: "Générer un rapport" + report: + none: "Aucun" + select_and_search: "Sélectionner les filtres et cliquer sur GENERER RAPPORT pour accéder à vos données." enterprise_fee_summary: date_end_before_start_error: "Doit être après le départ" parameter_not_allowed_error: "Vous n'êtes pas autorisé à employer un ou plusieurs filtres de ce rapport." @@ -2764,14 +2750,6 @@ fr_BE: smtp_send_copy_to_this_addresses: "Envoit une copie de tous les mails sortants vers cette adresse. En cas de plusieurs adresses, séparer par une virgule." intercept_email_address: "Intercepter les adresses mail" intercept_email_instructions: "Ignorer le destinataire et le remplacer par cette adresse." - smtp: "SMTP" - smtp_domain: "Domaine SMPT" - smtp_mail_host: "SMPT Serveur mail" - smtp_port: "SMTP Port" - secure_connection_type: "Type de connexion sécurisée" - smtp_authentication_type: "Type d'authentification SMTP" - smtp_username: " SMPT Nom d’utilisateur·trice" - smtp_password: "SMPT Mot de passe" image_settings: "Paramètres image" image_settings_warning: "Il est nécessaire de régénérer des logos lors de la mise à jour des styles de trombones . Utiliser ratisser trombone:rafraîchir:logos CLASS=Spree::Image pour faire ceci. " attachment_default_style: Style Pièces jointes @@ -2818,12 +2796,6 @@ fr_BE: shipping_categories: "Condition de transport" new_shipping_category: "Nouvelle catégorie d'expédition " back_to_shipping_categories: "Retour vers les catégories d'expédition" - analytics_trackers: "Analyse trackers" - no_trackers_found: "Aucun tracker trouvé" - new_tracker: "Nouveau tracker" - add_one: "Ajoutez un" - google_analytics_id: "Analyse ID" - back_to_trackers_list: "Retour à la liste des trackers " name: "Nom" description: "Description" type: "Catégorie" @@ -3105,14 +3077,6 @@ fr_BE: bulk_coop_allocation: 'Achats groupés - Allocation' bulk_coop_packing_sheets: 'Achats groupés - Feuilles de préparation des paniers' bulk_coop_customer_payments: 'Achats groupés - Paiement des acheteur·euse·s' - enterprise_fee_summaries: - filters: - date_range: "Plage de dates" - report_format_csv: "Télécharger comme valeur décimale " - generate_report: "Générer un rapport" - report: - none: "Aucun" - select_and_search: "Sélectionner les filtres et cliquer sur GENERER RAPPORT pour accéder à vos données." users: index: listing_users: "Utilisateur·trice d'annonces" @@ -3157,14 +3121,15 @@ fr_BE: autocomplete: producer_name: "Producteur·trice" unit: "Unité" - general_settings: + shared: + sortable_header: + name: "Nom" edit: legal_settings: "Configuration légales" cookies_consent_banner_toggle: "Afficher la bannière de consentement à l'utilisation des cookies" privacy_policy_url: "URL de la politique de confidentialité" enterprises_require_tos: "Les entreprises doivent accepter les Conditions Générales d'Utilisation" cookies_policy_matomo_section: "Afficher la section Matomo sur la politique de cookies" - cookies_policy_ga_section: "Afficher la section Google Analytics sur la politique de cookies" footer_tos_url: "Conditions d'utilisation URL" checkout: payment: diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index f354f638ce..47fb8fae13 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -1316,14 +1316,8 @@ fr_CA: cookie_stripe_desc: "Utilisé par le terminal de payement en ligne Stripe (proposé aux utilisateurs d'Open Food France) https://stripe.com/fr/cookies-policy/legal. Même si toutes les boutiques n'utilisent pas Stripe, c'est une bonne pratique en matière de sécurité d'appliquer ce cookie sur toutes les pages vues. Stripe construit probablement une image des pages qui ont un quelconque lien avec l'API connectant Open Food France à leur système de paiement pour détecter les comportements anormaux pouvant suggérer un risque de fraude. Donc ce cookie a un rôle qui va au-delà de la simple fourniture d'un système de paiement. Le supprimer pourrait affecter la sécurité du service. Pour en savoir plus sur la politique de confidentialité de Stripe: https://stripe.com/fr/privacy." statistics_cookies: "Cookies d'analyse de navigation" statistics_cookies_desc: "Ces cookies ne sont pas obligatoires, mais nous permettent de mieux comprendre votre usage de la plateforme, les endroits où vous bloquez, les fonctionnalités qui semblent vous manquer, ou que vous n'utilisez jamais, afin de fournir le service le plus adapté possible aux besoins des utilisateurs." - statistics_cookies_analytics_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Google Analytics, pas vraiment par choix, mais simplement parce que c'était l'outil d'analyse connecté par défaut via Spree, le logiciel e-commerce open source sur lequel nous avons construit. Mais nous espérons pouvoir rapidement migrer vers Matomo (ex anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_desc_html: "Pour analyser les données concernant votre usage de la plateforme, nous utilisons Matomo (anciennement Piwik), outil d'analyse open source compatible RGPD et engagé sur le respect de la vie privée des utilisateurs." statistics_cookies_matomo_optout: "Vous ne voulez pas que vos données soient analysées par Matomo ? Nous ne collectons aucune donnée personnelle, et Matomo nous aide à améliorer le service que nous vous offrons, mais nous respectons votre choix :-)" - cookie_analytics_utma_desc: "Utilisé pour distinguer les utilisateurs et les sessions. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utma n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics." - cookie_analytics_utmt_desc: "Utilisé pour limiter le taux de requêtes." - cookie_analytics_utmb_desc: "Utilisé pour distinguer les nouvelles sessions/visites. Ce cookie est installé quand la librairie Javascript s'exécute et qu'aucun cookie __utmb n'existe déjà. Le cookie est mis à jour à chaque fois que des données sont envoyées à Google Analytics. " - cookie_analytics_utmc_desc: "Non utilisé dans ga.js. Utilisé pour l'interopérabilité avec urchin.js. Historiquement, ce cookie fonctionnait en conjonction avec le cookie __utmb pour déterminer si l'utilisateur était dans une nouvelle session/visite ou pas." - cookie_analytics_utmz_desc: "Ce cookie stocke les sources de trafic qui expliquent comment l'utilisateur est arrivé sur le site (via une campagne, une recherche sur un moteur de recherche, etc.). Ce cookie est installé quand la librairie Javascript s'exécute et mis à jour à chaque fois que des données sont envoyées à Google Analytics. " cookie_matomo_basics_desc: "Cookies déposés par Matomo pour collecter les statistiques de trafic." cookie_matomo_heatmap_desc: "Utilisé par Matomo pour enregistrer les sessions et \"cartes thermiques\" (représentations graphiques des données)" cookie_matomo_ignore_desc: "Cookie utilisé pour se souvenir qu'un utilisateur a souhaité explicitement que sa navigation ne soit pas analysée par Matomo, et exclure cet utilisateur du suivi du site." @@ -1581,22 +1575,6 @@ fr_CA: groups_signup_contact_text: "Prenez contact et découvrez ce qu'Open Food Network peut faire pour vous:" groups_signup_detail: "Plus de précisions." login_invalid: "Email ou mot de passe erroné" - modal_hubs: "Food Hubs" - modal_hubs_abstract: Nos food hubs sont les points de contact entre vous et les personnes qui produisent votre nourriture! - modal_hubs_content1: Vous pouvez chercher le hub qui vous convient par localisation ou par nom. Certains hubs ont de multiples points de retrait de vos achats, et certains proposent également la livraison à domicile. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs. - modal_hubs_content2: Vous pouvez uniquement faire vos courses dans un hub à la fois. - modal_groups: "Groupes / réseaux territoriaux" - modal_groups_content1: Voilà les organisations et les relations inter-hubs qui constituent l'Open Food Network. - modal_groups_content2: Certains groupes sont regroupés pas localisation ou région, d'autres sur des smilitudes non géographiques. - modal_how: "Comment ça marche" - modal_how_shop: Faire vos courses sur Open Food Network - modal_how_shop_explained: Recherchez un food hub près de chez vous et commencez vos achats! Vous pouvez afficher plus d'infos sur chaque food hub pour voir le type de produits qu'il propose, et cliquer sur le hub pour commencer vos achats. (Vous ne pouvez faire vos courses que dans un food hub à la fois.) - modal_how_pickup: Frais de retrait, livraison et transport - modal_how_pickup_explained: Certains food hubs livrent à domicile, d'autres vous demandent de venir récupérer vos achats dans un point de retrait. Vous pouvez voir quelle options sont proposées sur la page d'accueil du hub, et sélectionner votre choix au moment de la validation de la commande. La livraison à domicile coûtera souvent plus cher, et les prix diffèrent selon le hub. Chaque food hub est un point de vente et gère de façon indépendante ses opérations et sa logistique - attendez-vous donc à des disparités de fonctionnement entre les hubs. - modal_how_more: En savoir plus - modal_how_more_explained: "Pour en savoir plus sur Open Food Network, comment ça marche, et contribuer, allez voir:" - modal_producers: "Producteurs" - modal_producers_explained: "Nos producteurs font pousser et fabriquent tous les délicieux produits que vous pouvez acheter sur Open Food Network." producers_about: A propos producers_buy: Acheter producers_contact: Contact @@ -2688,6 +2666,14 @@ fr_CA: start_free_profile: "Commencez par créer votre profil entreprise, c'est gratuit, et changez de formule quand vous êtes prêt !" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Période" + report_format_csv: "Télécharger en csv" + generate_report: "Générer le rapport" + report: + none: "Aucun" + select_and_search: "Sélectionnez les filtres et cliquez sur \"générer le rapport\" pour accéder aux données." enterprise_fee_summary: date_end_before_start_error: "doit être après date début" parameter_not_allowed_error: "Vous n'êtes pas authorisé.e à utiliser un ou plusieurs des filtres sélectionnés pour ce rapport." @@ -2827,14 +2813,6 @@ fr_CA: smtp_send_copy_to_this_addresses: "Envoyer une copie de tous les mails sortants à cette adresse. Si plusieurs adresses, les séparer par une virgule." intercept_email_address: "Adresse email d'interception" intercept_email_instructions: "Modifier l'email destinataire et le remplacer avec cette adresse." - smtp: "SMTP" - smtp_domain: "Domaine SMTP" - smtp_mail_host: "Hôte de messagerie SMTP" - smtp_port: "Port SMTP" - secure_connection_type: "Type de connexion sécurisée" - smtp_authentication_type: "Type d'authentification SMTP" - smtp_username: "Nom d'utilisateur SMTP" - smtp_password: "Mot de passe SMTP" image_settings: "Paramètres des images" image_settings_warning: "Vous devrez générer de nouvelles vignettes si vous mettez à jour les styles paperclip. Utilisez rake paperclip:refresh:thumbnails CLASS=Spree::Image pour le faire." attachment_default_style: Style des pièces jointes @@ -2881,12 +2859,6 @@ fr_CA: shipping_categories: "Condition de transport" new_shipping_category: "Créer nouvelle méthode de livraison" back_to_shipping_categories: "Retour aux catégories d'expédition" - analytics_trackers: "Traqueurs analyse navigation" - no_trackers_found: "Pas de traqueur trouvé" - new_tracker: "Nouveau traqueur" - add_one: "En ajouter un" - google_analytics_id: "ID analytique" - back_to_trackers_list: "Retour à la liste des traqueurs" name: "Nom" description: "Description" type: "Catégorie" @@ -3166,14 +3138,6 @@ fr_CA: bulk_coop_allocation: 'Achats groupés - Allocation' bulk_coop_packing_sheets: 'Achats groupés - Feuilles de préparation des paniers' bulk_coop_customer_payments: 'Achats groupés - Paiement des acheteurs' - enterprise_fee_summaries: - filters: - date_range: "Période" - report_format_csv: "Télécharger en csv" - generate_report: "Générer le rapport" - report: - none: "Aucun" - select_and_search: "Sélectionnez les filtres et cliquez sur \"générer le rapport\" pour accéder aux données." users: index: listing_users: "Liste des utilisateurs" @@ -3218,14 +3182,15 @@ fr_CA: autocomplete: producer_name: "Producteur" unit: "Unité" - general_settings: + shared: + sortable_header: + name: "Nom" edit: legal_settings: "Configuration légales" cookies_consent_banner_toggle: "Afficher la bannière de consentement à l'utilisation des cookies" privacy_policy_url: "URL de la politique de confidentialité" enterprises_require_tos: "Les entreprises doivent accepter les Conditions Générales d'Utilisation" cookies_policy_matomo_section: "Afficher la section Matomo sur la politique de cookies" - cookies_policy_ga_section: "Afficher la section Google Analytics sur la politique de cookies" footer_tos_url: "Conditions d'utilisation URL" checkout: payment: diff --git a/config/locales/it.yml b/config/locales/it.yml index 1e1552af14..68714c7bb5 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1316,14 +1316,8 @@ it: cookie_stripe_desc: "Dati raccolti dal nostro processore di pagamento Stripe per il rilevamento di frodi https://stripe.com/cookies-policy/legal. Non tutti i negozi usano Stripe come metodo di pagamento, ma è una buona pratica evitare che le frodi lo applichino a tutte le pagine. Stripe probabilmente costruisce un'immagine di quali delle nostre pagine di solito interagiscono con le loro API e quindi segnala qualcosa di insolito. Pertanto, l'impostazione del cookie Stripe ha una funzione più ampia rispetto alla semplice fornitura di un metodo di pagamento a un utente. La sua rimozione potrebbe influire sulla sicurezza del servizio stesso. Puoi saperne di più su Stripe e leggere la sua informativa sulla privacy all'indirizzo https://stripe.com/privacy." statistics_cookies: "Cookies di statistica" statistics_cookies_desc: "Ciò che segue non è strettamente necessario, ma aiuta a fornirti la migliore esperienza utente, permettendoci di analizzare il comportamento degli utenti, identificare le funzionalità che usi di più, o non usi mai, capire i problemi dell'esperienza utente, ecc." - statistics_cookies_analytics_desc_html: "Per raccogliere e analizzare i dati di utilizzo della piattaforma, utilizziamo Google Analytics, in quanto era il servizio predefinito connesso a Spree (il software di e-commerce open source su cui abbiamo costruito), ma la nostra visione è passare a Matomo (ex Piwik, uno strumento di analisi open source che è conforme a GDPR e protegge la tua privacy) non appena possibile." statistics_cookies_matomo_desc_html: "Per raccogliere e analizzare i dati di utilizzo della piattaforma, utilizziamo Matomo(ex Piwik), uno strumento di analisi open source che è conforme al GDPR e protegge la tua privacy." statistics_cookies_matomo_optout: "Vuoi rinunciare a Matomo analytics? Noi non raccogliamo nessun dato personale e Matomo ci aiuta a migliorare il nostro servizio, ma rispettiamo la tua scelta :-)" - cookie_analytics_utma_desc: "Utilizzato per distinguere utenti e sessioni. Il cookie viene creato quando viene eseguita la libreria javascript e non esistono cookie __utma. Il cookie viene aggiornato ogni volta che i dati vengono inviati a Google Analytics." - cookie_analytics_utmt_desc: "Utilizzato per limitare la velocità di richiesta." - cookie_analytics_utmb_desc: "Utilizzato per determinare nuove sessioni / visite. Il cookie viene creato quando viene eseguita la libreria javascript e non esistono cookie __utmb. Il cookie viene aggiornato ogni volta che i dati vengono inviati a Google Analytics." - cookie_analytics_utmc_desc: "Non utilizzato in ga.js. Impostato per l'interoperabilità con urchin.js. Storicamente, questo cookie operava in combinazione con il cookie __utmb per determinare se l'utente si trovava in una nuova sessione / visita." - cookie_analytics_utmz_desc: "Memorizza la fonte di traffico o la campagna che spiega come l'utente ha raggiunto il tuo sito. Il cookie viene creato quando la libreria javascript viene eseguita e viene aggiornato ogni volta che i dati vengono inviati a Google Analytics." cookie_matomo_basics_desc: "Cookie di prima parte di Matomo per raccogliere statistiche." cookie_matomo_heatmap_desc: "Matomo Heatmap e cookie di registrazione sessione." cookie_matomo_ignore_desc: "Cookie utilizzato per escludere l'utente dal tracciamento." @@ -1582,22 +1576,6 @@ it: groups_signup_contact_text: "Mettiti in contatto per scoprire cosa ha da offrire OFN per te:" groups_signup_detail: "Ecco il dettaglio." login_invalid: "Email o password invalida" - modal_hubs: "Hub di cibo" - modal_hubs_abstract: I nostri hub del cibo sono il punto di contatto tra te e le persone che fanno il tuo cibo! - modal_hubs_content1: Puoi cercare l'hub più adatto per località o nome. Alcuni hub hanno più punti dove puoi ritirare i tuoi ordini, e alcuni hanno anche la possibilità di consegna. Ogni hub di cibo è un punt vendita con operazioni commerciali e logistiche indipendenti - così sono da aspettarsi variazioni tra hub. - modal_hubs_content2: Puoi comprare solo in un hub alla volta. - modal_groups: "Gruppi / regioni" - modal_groups_content1: Queste sono le organizzazioni e le relazioni tra hub che compongono l'Open Food Network. - modal_groups_content2: Alcuni gruppi sono riuniti per località o zona, altri per somiglianze non geografiche. - modal_how: "Come funziona" - modal_how_shop: Fai la spesa con Open Food Network - modal_how_shop_explained: Cerca un hub vicino a te per iniziare a fare la spesa! Puoi espandere ogni hub di cibo pe vedere quali tipi di prodotti sono disponibili, e cliccarce per iniziare la spesa. (Puoi comprare su un solo hub alla volta.) - modal_how_pickup: Costi di ritiro, consegna e spedizione - modal_how_pickup_explained: Alcuni hub di cibo consegnano a casa, mentre altri richiedono che te vada a ritirare il tuo ordine. Puoi vedere quali opzioni sono disponibili sulla homepage, e selezionare l'opzione preferita nella pagine della spesa e del pagamento. La consegna costerà di più e i costi variano da hub a hub. Ogni hub di cibo è un punto vendita con operazioni commerciali e logistiche indipendenti - così sono da aspettarsi variazioni tra hub. - modal_how_more: Apprendi di più - modal_how_more_explained: "Se vuoi saperne di più su Open Food Network, come funziona, e partecipare, guarda:" - modal_producers: "Produttori" - modal_producers_explained: "I nostri produttori fanno tutto il cibo delizioso che puoi comprare su Open Food Network." producers_about: Su di noi producers_buy: Acquista per producers_contact: Contatta @@ -2682,6 +2660,14 @@ it: start_free_profile: "Inizia con un profilo gratuito e migliora quando sei pronto!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Intervallo di date" + report_format_csv: "Scarica come CSV" + generate_report: "Genera report" + report: + none: "Nessuno" + select_and_search: "Seleziona i filtri e fai clic su GENERA REPORT per accedere ai tuoi dati." enterprise_fee_summary: date_end_before_start_error: "deve essere dopo l'inizio" parameter_not_allowed_error: "Non sei autorizzato a utilizzare uno o più filtri selezionati per questo rapporto." @@ -2821,14 +2807,6 @@ it: smtp_send_copy_to_this_addresses: "Invia una copia di tutti i messaggi in uscita a questo indirizzo. Per più indirizzi, separare con virgole." intercept_email_address: "Intercettare l'indirizzo email" intercept_email_instructions: "Sostituire il destinatario della posta elettronica con questo indirizzo." - smtp: "SMTP" - smtp_domain: "Dominio SMTP" - smtp_mail_host: "Host di posta SMTP" - smtp_port: "Porta SMTP" - secure_connection_type: "Tipo di connessione sicura" - smtp_authentication_type: "Tipo di autenticazione SMTP" - smtp_username: "Nome utente SMTP" - smtp_password: "Password SMTP" image_settings: "Impostazioni immagine" image_settings_warning: "Avrai bisogno di rigenerare le miniature se aggiorni gli stili di graffetta. Usa rake paperclip: refresh: miniature CLASS = Spree :: Immagine per farlo." attachment_default_style: Stile allegati @@ -2875,12 +2853,6 @@ it: shipping_categories: "Categorie Spedizioni" new_shipping_category: "Nuova categoria di spedizione" back_to_shipping_categories: "Torna alle categorie di spedizione" - analytics_trackers: "Tracker di Analytics" - no_trackers_found: "Nessun tracker trovato" - new_tracker: "Nuovo tracker" - add_one: "Aggiungi uno" - google_analytics_id: "ID Analytics" - back_to_trackers_list: "Torna all'elenco dei tracker" name: "Nome" description: "Descrizione" type: "Tipo" @@ -3161,14 +3133,6 @@ it: bulk_coop_allocation: 'Assegnazione - tabella' bulk_coop_packing_sheets: 'Imballaggio - tabella' bulk_coop_customer_payments: 'Pagamenti clienti - tabella' - enterprise_fee_summaries: - filters: - date_range: "Intervallo di date" - report_format_csv: "Scarica come CSV" - generate_report: "Genera report" - report: - none: "Nessuno" - select_and_search: "Seleziona i filtri e fai clic su GENERA REPORT per accedere ai tuoi dati." users: index: listing_users: "Elenco Utenti" @@ -3213,14 +3177,15 @@ it: autocomplete: producer_name: "Produttore" unit: "Unità" - general_settings: + shared: + sortable_header: + name: "Nome" edit: legal_settings: "Impostazioni Legali" cookies_consent_banner_toggle: "Mostra banner di consenso per i cookie" privacy_policy_url: "Privacy Policy URL" enterprises_require_tos: "Le aziende devono accettare i Termini di Servizio" cookies_policy_matomo_section: "Visualizza la sezione di Matomo nella pagina della cookie policy" - cookies_policy_ga_section: "Visualizza la sezione di Google Analytics nella pagina della cookie policy" footer_tos_url: "URL Termini di Servizio" checkout: payment: diff --git a/config/locales/nb.yml b/config/locales/nb.yml index bbf81c9384..fc91cafb01 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -1581,22 +1581,6 @@ nb: groups_signup_contact_text: "Ta kontakt for å oppdage hva OFN kan gjøre for deg:" groups_signup_detail: "Her er detaljene." login_invalid: "Ugyldig epost eller passord" - modal_hubs: "Mathubs" - modal_hubs_abstract: Våre hubs er kontaktpunkt mellom deg og menneskene som lager maten din! - modal_hubs_content1: Du kan søke etter en passende hub på lokasjon eller navn. Noen hubs har flere hentepunkt hvor du kan plukke opp det du har kjøpt, og noen tilbyr også levering. Hver mathub er en butikk med uavhengig drift og logistikk - så det vil være forskjeller mellom huber. - modal_hubs_content2: Du kan kun handle hos en hub om gangen. - modal_groups: "Grupper / Regioner" - modal_groups_content1: Dette er organisasjonene og hub-koblingene som utgjør Open Food Network. - modal_groups_content2: Noen grupper er klynger basert på lokalnivå eller regionnivå, andre har ingen geografiske likheter. - modal_how: "Slik fungerer det" - modal_how_shop: Handle på Open Food Network - modal_how_shop_explained: Søk etter en mathub nær deg for å begynne å handle! Du kan se detaljer for hver mathub for å se hvilke godbiter som finnes, og klikk deg videre for å handle. (Du kan kun handle hos en mathub om gangen). - modal_how_pickup: Henting, levering og fraktkostnader - modal_how_pickup_explained: Noen mathubs leverer på døren, mens andre krever at du henter varene du har kjøpt. Du kan se hvilke alternativ som er tilgjengelige på hjemmesiden, og velge hvilket du ønsker på handle- og betalingssidene. Levering koster mer, og prisene varierer fra hub til hub. Hver mathub er en forretning med uavhengig drift og logistikk - så variasjoner mellom hubs er naturlig. - modal_how_more: Finn ut mer - modal_how_more_explained: "Hvis du ønsker å lære mer om Open Food Network, hvordan det fungerer og ta del, sjekk ut:" - modal_producers: "Produsenter" - modal_producers_explained: "Våre produsenter lager all den herlige maten du kan handle på Open Food Network." producers_about: Om oss producers_buy: Handle producers_contact: Kontakt @@ -2825,14 +2809,6 @@ nb: smtp_send_copy_to_this_addresses: "Sender en kopi av alle utgående eposter til denne adressen. For flere adresser, skill med komma." intercept_email_address: "Avskjær epostadresse" intercept_email_instructions: "Overstyr epost mottaker og erstatt med denne adressen." - smtp: "SMTP" - smtp_domain: "SMTP-domene" - smtp_mail_host: "SMTP epost-vert" - smtp_port: "SMTP-port" - secure_connection_type: "Sikker tilkoblingstype" - smtp_authentication_type: "SMTP-godkjenningstype" - smtp_username: "SMTP Brukernavn" - smtp_password: "SMTP-passord" image_settings: "Bildeinnstillinger" image_settings_warning: "Du må regenerere miniatyrbilder hvis du oppdaterer paperclip-stiler. Bruk rake paperclip:refresh:thumbnails CLASS=Spree::Image for å gjøre dette" attachment_default_style: Vedlegg Stil diff --git a/config/locales/nl_BE.yml b/config/locales/nl_BE.yml index ee09e5d0f7..34cdb4eb4d 100644 --- a/config/locales/nl_BE.yml +++ b/config/locales/nl_BE.yml @@ -1281,14 +1281,8 @@ nl_BE: cookie_stripe_desc: "Gegevens verzamelt door onze betalingsverwerker Stripe voor fraudedetectie https://stripe.com/cookies-policy/legal. Niet alle winkels gebruiken Stripe als een betaalmethode maar het is een goede manier om te verhinderen dat er gefraudeerd wordt op alle webpagina's. Waarschijnlijk heeft Stripe een idee welke van onze pagina's vaak met hun API interageren en signaleren dan zo ongebruikelijke activiteit. Dus het instellen van de Stripe cookie heeft een ruimer nut dan enkel het voorzien van een betaalmethode naar een gebruiker. De cookie verwijderen kan dus een invloed hebben op de veiligheid van de dienst zelf. Je kan meer te weten komen over Stripe en hun privacy beleid op https://stripe.com/privacy." statistics_cookies: "Statistiek Cookies" statistics_cookies_desc: "Het volgende is niet strikt noodzakelijk, maar helpt om je te voorzien met de beste gebruikerservaring door toe te staan om gebruikersgedrag te analyseren, te identificeren welke functionaliteiten je het meest gebruikt, of juist niet, te begrijpen welke gebruikerservaring problemen er zich voordoen, enzovoort ..." - statistics_cookies_analytics_desc_html: "Om platform-gebruikersgegevens te verzamelen en te analyseren, gebruiken we Google Analytics, aangezien het de standaard dienst was gekoppeld met Spree (de opensource e-commerce software waarop we hebben verder gebouwd) maar onze visie is om zo snel mogelijk over te schakelen naar Matomo(ex Piwik, een opensource analytics tool die GDPR-compliant is en je privacy beschermt). " statistics_cookies_matomo_desc_html: "Om platform gebruikersgegevens te verzamelen en te analyseren, gebruiken we Matomo (ex Piwik, een opensource analytics tool die GDPR-compliant is en je privacy beschermt). " statistics_cookies_matomo_optout: "Wil je je uitschrijven uit Matomo analytics? We verzamelen geen persoonlijke gegevens, en Matomo helpt ons om onze diensten te verbeteren, maar we respecteren je keuze :-)" - cookie_analytics_utma_desc: "Gebruikt om gebruikers en sessies te onderscheiden. De cookies worden aangemaakt wanneer de javascript bibliotheek uitvoert en er nog geen bestaande __utma cookie bestaat. Deze cookie wordt geüpdatet elke keer gegevens worden verstuurd naar Google Analytics." - cookie_analytics_utmt_desc: "Gebruikt om request rate in te perken" - cookie_analytics_utmb_desc: "Gebruikt om nieuwe sessies/ bezoeken vast te stellen. De cookie worden aangemaakt wanneer de javascript bibliotheek uitvoert en er nog geen bestaande __utma cookie bestaat. Deze cookie wordt geüpdatet elke keer gegevens worden verstuurd naar Google Analytics." - cookie_analytics_utmc_desc: "Niet gebruikt in ga.js. Ingesteld voor compatibiliteit met urchin.js. Historisch gezien, wordt deze cookie gebruikt in relatie met de __utmb cookie om vast te stellen welke gebruiker in een nieuwe sessie / bezoek was." - cookie_analytics_utmz_desc: "Bewaart de trafiek bron of de route die verklaart hoe de gebruiker je website bereikte. Deze cookie wordt aangemaakt wanneer de javascript bibliotheek wordt geraadpleegd en wordt geüpdatet elke keer gegevens verzonden worden naar Google Analytics." cookie_matomo_basics_desc: "First party cookies van Matomo om statistieken te verzamelen." cookie_matomo_heatmap_desc: "Heatmap & Sessie Recording cookie van Matomo." cookie_matomo_ignore_desc: "Cookie gebruikt om de gebruiker te verhinderen gevolgd te worden." @@ -1546,22 +1540,6 @@ nl_BE: groups_signup_contact_text: "Contacteer ons om te ontdekken wat OFN voor jou kan betekenen:" groups_signup_detail: "Hier het gedetailleerder." login_invalid: "Ongeldige E-mail of wachtwoord" - modal_hubs: "VoedselHubs" - modal_hubs_abstract: Onze voedselhubs zijn het contactpunt tussen jou en de mensen die het eten maken! - modal_hubs_content1: Je kan kiezen voor geschikte hub op basis van locatie of naam. Sommige hubs hebben meerdere punten waar je je aankopen kan ophalen, en sommige zullen leveringsopties ter beschikking stellen. Elke voedselhub is een verkoopspunt met een onafhankelijk zakelijke werking en logistiek - dus variatie tussen hubs is te verwachten. - modal_hubs_content2: Je kan slechts winkelen bij één voedselhub tergelijkertijd. - modal_groups: "Groepen / Regio's" - modal_groups_content1: Dit zijn de organisaties en connecties tussen hubs die het Open Food Network vormen. - modal_groups_content2: Deze groepen zijn geclusterd per locatie of provincie, andere per niet-geografische gelijkenissen. - modal_how: "Hoe het werkt" - modal_how_shop: Winkel in het Open Food Network - modal_how_shop_explained: Zoek voor een voedselhub bij jou in de buurt en start met shoppen! Je kan elke voedselhub uitvergroten om te zien welke soort producten er beschikbaar zijn, en klik via begin met winkelen. (Je kan enkel bij één voedselhub tergelijkertijd winkelen.) - modal_how_pickup: Ophaal-, levering-en-verzendskosten - modal_how_pickup_explained: Sommige voedselhubs leveren aan de deur, terwijl andere vereisen dat je je aankopen komt ophalen. Je kan zien welke mogelijkheden beschikbaar zijn op de startpagina, en selecteren welke je graag wil hebben op de winkel-en-betaalpagina's. Elke voedselhub is een verkoopspunt met onafhankelijke werking en logistiek - dus variaties tussen hubs zijn te verwachten. - modal_how_more: Ontdek - modal_how_more_explained: "Als je meer wil te weten komen over het Open Food Network, hoe het werkt en hoe je betrokken kan raken, kijk eens naar:" - modal_producers: "Producenten" - modal_producers_explained: "Onze producent maken al het héérlijke eten dat je kan winkelen in ons Open Food Network." producers_about: Over ons producers_buy: op Zoek naar producers_contact: Contact @@ -2566,6 +2544,14 @@ nl_BE: start_free_profile: "Eerst uw bedrijfsprofiel maken en wijzig de formule als U klaar bent !" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Datumbereik" + report_format_csv: "Opladen als CSV" + generate_report: "Ontwikkel verslag" + report: + none: "Geen enkele" + select_and_search: "Selecteer filters en klik op 'ONTWIKKEL VERSLAG' om toegang te krijgen tot je gegevens." enterprise_fee_summary: date_end_before_start_error: "moet zijn na het starten " parameter_not_allowed_error: "Je hebt geen machtiging om één of meerdere geselecteerde filters toe te passen op dit verslag." @@ -2703,14 +2689,6 @@ nl_BE: smtp_send_copy_to_this_addresses: "Stuurt een kopie van alle uitgaande mails naar dit adres. In geval van meerdere adressen, die met een comma scheiden." intercept_email_address: "Email adres onderscheppen" intercept_email_instructions: "De mailontvanger omzeilen en door dit adres vervangen. " - smtp: "SMTP" - smtp_domain: "SMTP Domein" - smtp_mail_host: "SMPT Mail Host" - smtp_port: "SMTP Port" - secure_connection_type: "Secure Connection Type" - smtp_authentication_type: "SMTP Authentication Type" - smtp_username: "SMPT Gebruikersnaam" - smtp_password: "SMPT Wachtwoord" image_settings: "Beeldinstellingen " image_settings_warning: "Logos regeneren als de paperclips stylen bijgewerkt worden. Paperclip harken gebruiken :opfrissen:logos CLASS=Spree::Image om het doen. " attachment_default_style: Bijlagestijl @@ -2757,12 +2735,6 @@ nl_BE: shipping_categories: "Verzendingscategorieën" new_shipping_category: "Nieuwe verzendingscategorie" back_to_shipping_categories: "Terug naar verzendingscategoriëen" - analytics_trackers: "Analyse van Trackers" - no_trackers_found: "Geen Trackers gevonden" - new_tracker: "Nieuwe Tracker" - add_one: "Eén toevoegen" - google_analytics_id: "ID analyse " - back_to_trackers_list: "Terug naar de Trackerslijst" name: "Naam" description: "Beschrijving" type: "Type" @@ -3002,14 +2974,6 @@ nl_BE: bulk_coop_allocation: 'Groepsaankoop-Toelage' bulk_coop_packing_sheets: 'Groepsaankoop- voorbereidingsdokumenten voor de manden' bulk_coop_customer_payments: 'Groepsaankoop-betalingen van de klanten' - enterprise_fee_summaries: - filters: - date_range: "Datumbereik" - report_format_csv: "Opladen als CSV" - generate_report: "Ontwikkel verslag" - report: - none: "Geen enkele" - select_and_search: "Selecteer filters en klik op 'ONTWIKKEL VERSLAG' om toegang te krijgen tot je gegevens." users: index: listing_users: "Advertentiegebruikers" @@ -3043,14 +3007,15 @@ nl_BE: autocomplete: producer_name: "Producent" unit: "Unit" - general_settings: + shared: + sortable_header: + name: "Naam" edit: legal_settings: "De legale instelling" cookies_consent_banner_toggle: "Laat de strook met uw akkoord voor de cookies zien" privacy_policy_url: "Privacybeleid URL" enterprises_require_tos: "Debedrijven moeten de Algemene gebruiksvoorwaarden aanvaarden" cookies_policy_matomo_section: "Geef Matomosectie weer op cookiesprivacypagina" - cookies_policy_ga_section: "Geef Google Analytics-sectie weer op cookiesprivacypagina" footer_tos_url: "Gebruiksvoorwaarden URL" checkout: payment: diff --git a/config/locales/pt.yml b/config/locales/pt.yml index c3a1b473fc..2abc2435fd 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -1255,14 +1255,8 @@ pt: cookie_stripe_desc: "Cookie definida pelo nosso fornecedor de serviços de pagamento Stripe. Para mais informações veja https://stripe.com/cookies-policy/legal e https://stripe.com/privacy." statistics_cookies: "Cookies de Estatísticas" statistics_cookies_desc: "As seguintes cookies não são estritamente necessárias mas ajudam a uma melhor experiência do/a utilizador/a." - statistics_cookies_analytics_desc_html: "Para coletar e analisar dados de utilização da plataforma nós usamos Google Analytics e Matomo (ex Piwik, uma ferramenta de analytics de código aberto que está confirme do RGPD e protege a sua privacidade)." statistics_cookies_matomo_desc_html: "Para coletar e analisar dados de utilização da plataforma nós usamos Matomo (ex Piwik, uma ferramenta de analytics de código aberto que está confirme do RGPD e protege a sua privacidade)." statistics_cookies_matomo_optout: "Quer optar por não usar a cookie Matomo?" - cookie_analytics_utma_desc: "Usado para distinguir utilizadores e sessões." - cookie_analytics_utmt_desc: "Usado para evitar demasiados pedidos aos servidores." - cookie_analytics_utmb_desc: "Usado para determinar novas visitas/sessões." - cookie_analytics_utmc_desc: "Versão anterior usada para determinar novas visitas/sessões." - cookie_analytics_utmz_desc: "Usado para guarda a origem do trafego." cookie_matomo_basics_desc: "Cookies Matomo para recolher estatísticas." cookie_matomo_heatmap_desc: "Cookie Matomo para registo de sessões." cookie_matomo_ignore_desc: "Cookie Matomo para registar opt-out de utilizadores." @@ -1520,22 +1514,6 @@ pt: groups_signup_contact_text: "Entre em contato para descobrir o que a OFN pode fazer por si:" groups_signup_detail: "Aqui está o detalhe. " login_invalid: "Email ou palavra-passe inválidos" - modal_hubs: "Centrais de Alimentos" - modal_hubs_abstract: As nossas centrais de alimentos são o ponto de contato entre si e as pessoas que produzem a sua comida! - modal_hubs_content1: 'Pode procurar por uma central conveniente por localização ou por nome. Algumas centrais têm múltiplos pontos de entrega, onde pode levantar as suas compras, e outros ainda entregam na sua casa. Cada central é um ponto de venda independente, e por isso as ofertas e maneira de operar podem variar de um para outro. ' - modal_hubs_content2: Só pode comprar numa central de alimentos de cada vez. - modal_groups: "Grupos / Regiões" - modal_groups_content1: Estas são as organizações e relações entre as centrais que constroem a Open Food Network - modal_groups_content2: Alguns grupos estão organizados por localização, outros por similaridades não geográficas. - modal_how: "Como funciona" - modal_how_shop: Compre na Open Food Network - modal_how_shop_explained: Procure por um mercado próximo e comece as suas compras! Em cada mercado pode ver, em detalhe, quais os produtos que são oferecidos (só pode comprar num mercado de cada vez). - modal_how_pickup: 'Custos de levantamento e entrega. ' - modal_how_pickup_explained: Alguns mercados entregam em sua casa, outros oferecem um local para que levante os produtos. É possível ver quais as opções que estão disponíveis no perfil individual de cada um, e fazer a sua escolha no momento do checkout. Provavelmente será cobrada uma taxa de entrega, que pode variar de mercado para mercado. - modal_how_more: Saiba mais - modal_how_more_explained: "Para saber mais sobre a Open Food Network, como funciona, e participar, visite:" - modal_producers: "Produtores" - modal_producers_explained: "Os nosso produtores são quem disponibilizam toda a comida que pode comprar na Open Food Network." producers_about: Sobre nós producers_buy: Comprar producers_contact: Contacto @@ -2522,6 +2500,14 @@ pt: start_free_profile: "Comece com um perfil gratuito e expanda quando estivere pronto/a!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Intervalo de Datas" + report_format_csv: "Descarregar como csv" + generate_report: "Gerar Relatório" + report: + none: "Nenhum" + select_and_search: "Selecione filtros e carregue em Gerar Relatório para ver os seus dados." enterprise_fee_summary: date_end_before_start_error: "deve ser depois do início" parameter_not_allowed_error: "Não está autorizado a usar um ou mais filtros selecionados neste relatório." @@ -2658,14 +2644,6 @@ pt: smtp_send_copy_to_this_addresses: "Envia uma cópia de todos os email enviados para este endereço. Para múltiplos endereços, separar por vírgulas." intercept_email_address: "Interceptar Endereço de Email" intercept_email_instructions: "Substituir destinatário de todos os email por este endereço." - smtp: "SMTP" - smtp_domain: "Domínio SMTP" - smtp_mail_host: "Servidor de Email SMTP" - smtp_port: "Porta SMTP" - secure_connection_type: "Tipo de Ligação Segura" - smtp_authentication_type: "Tipo de Autenticação SMTP" - smtp_username: "Utilizador SMTP" - smtp_password: "Password SMTP" image_settings: "Configurações de Imagens" image_settings_warning: "Terá de regenerar os ícones se alterar is estilos. Para tal execute rake paperclip:refresh:thumbnails CLASS=Spree::Image" attachment_default_style: Estilo dos Anexos @@ -2712,12 +2690,6 @@ pt: shipping_categories: "Categorias de Envio" new_shipping_category: "Nova Categoria de Envio" back_to_shipping_categories: "Voltar à Lista de Categorias de Envio" - analytics_trackers: "Trackers do Analytics" - no_trackers_found: "Nenhum Tracker encontrado" - new_tracker: "Novo Tracker" - add_one: "Adicionar um" - google_analytics_id: "ID do Analytics" - back_to_trackers_list: "Voltar à Lista de Trackers" name: "Nome" description: "Descrição" type: "Tipo" @@ -2933,14 +2905,6 @@ pt: bulk_coop_allocation: 'Compra em Grupo - Alocação' bulk_coop_packing_sheets: 'Compra em Grupo - Folhas de Empacotamento' bulk_coop_customer_payments: 'Compra em Grupo - Pagamentos do Consumidor' - enterprise_fee_summaries: - filters: - date_range: "Intervalo de Datas" - report_format_csv: "Descarregar como csv" - generate_report: "Gerar Relatório" - report: - none: "Nenhum" - select_and_search: "Selecione filtros e carregue em Gerar Relatório para ver os seus dados." users: index: listing_users: "Lista de Utilizadores" @@ -2974,14 +2938,15 @@ pt: autocomplete: producer_name: "Produtor" unit: "Unidade" - general_settings: + shared: + sortable_header: + name: "Nome" edit: legal_settings: "Configurações Legais" cookies_consent_banner_toggle: "Mostrar o Banner de consentimento de Cookies" privacy_policy_url: "URL da Politíca de Privacidade" enterprises_require_tos: "As organizações têm de aceitar os Termos de Serviço" cookies_policy_matomo_section: "Mostrar a secção do Matomo na página da política de Cookies" - cookies_policy_ga_section: "Mostrar a secção do Google Analytics na página de política de Cookies" footer_tos_url: "URL dos Termos de Serviço" checkout: payment: diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index 819083e58a..6ba990a294 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -1144,7 +1144,7 @@ pt_BR: already_ordered_products: "Já pediu neste ciclo de pedido" register_call: selling_on_ofn: "Interessado em registrar a sua iniciativa na Open Food Brasil?" - register: "Faça o cadastro aqui" + register: "Registre-se aqui" footer: footer_secure: "Seguro e confiável." footer_secure_text: "A Open Food Brasil utiliza a criptografia SSL (2048 bit RSA) para manter suas informações em segurança. Nossos servidores não guardam os detalhes do seu cartão de crédito e os pagamentos são processados por serviços compatíveis com PCI." @@ -1580,22 +1580,6 @@ pt_BR: groups_signup_contact_text: "Entre em contato para descobrir o que a OFB pode fazer por você" groups_signup_detail: "Aqui está o detalhe. " login_invalid: "E-mail ou senha inválidos" - modal_hubs: "Central de alimentos" - modal_hubs_abstract: Nossas centrais são o ponto de contato entre você e as pessoas que produzem sua comida! - modal_hubs_content1: 'Você pode procurar a central mais próxima por localização ou nome. Alguns possuem múltiplos pontos de entrega, onde você pode retirar suas compras, e outros ainda entregam na sua casa. Cada um é um ponto de venda independente, e por isso as ofertas e maneira de operar podem variar de um para outro. ' - modal_hubs_content2: Você só pode comprar de uma central por vez. - modal_groups: "Grupos / Regiões" - modal_groups_content1: Estas são as organizações e as relações entre as centrais que compõem a Open Food Brasil. - modal_groups_content2: Alguns grupos estão organizados por localização, outros por similaridades não geográficas. - modal_how: "Como funciona" - modal_how_shop: Compre na Open Food Brasil - modal_how_shop_explained: Procure por um produtor ou central próximo e comece suas compras! Em cada mercado você pode ver, em detalhe, quais produtos são oferecidos (você só pode comprar em um mercado de cada vez). - modal_how_pickup: 'Custos de retirada e entrega ' - modal_how_pickup_explained: Algumas centrais entregam na sua casa, enquanto outros exigem que você mesmo retire suas compras. É possível ver quais opções estão disponíveis no perfil individual de cada um, e fazer sua escolha no momento do check-out. A entrega custará mais e o preço difere de central para central. Cada um é um ponto de venda com operação comercial e logística independente - então as variações são esperadas. - modal_how_more: Saiba mais - modal_how_more_explained: "Se você quiser saber mais sobre como a Open Food Brasil funciona e se envolver, confira:" - modal_producers: "Produtores" - modal_producers_explained: "Nossos produtores fazem todos os alimentos deliciosos que você pode comprar no Open Food Brasil." producers_about: Sobre nós producers_buy: Compre por producers_contact: Contato @@ -1624,16 +1608,16 @@ pt_BR: products_producer: "Produtor" products_price: "Preço" name_or_sku: "NOME OU SKU" - register_title: Registro + register_title: Registre-se sell_title: "Registrar" - sell_headline: "Fazer parte do Open Food Brasil!" - sell_motivation: "Mostre seus belos produtos." + sell_headline: "Faça parte da Open Food Brasil." + sell_motivation: "Queremos conhecer seus produtos!" sell_producers: "Produtores" sell_hubs: "Centrais" sell_groups: "Grupos" - sell_producers_detail: "Crie um perfil para seu negócio em apenas alguns minutos. A qualquer momento você pode atualizar seu perfil para uma loja online e vender seus produtos diretamente aos consumidores." - sell_hubs_detail: "Crie um perfil para a sua iniciativa ou organização na Open Food Brasil. A qualquer momento você poderá fazer um upgrade para um mercado de multi-produtores. " - sell_groups_detail: "Organize um lista personalizada de negócios (cultivos, cooperativas, comércios, etc.) para sua região ou organização. " + sell_producers_detail: "Crie um perfil para a sua atividade em apenas alguns minutos. A qualquer momento você pode transformá-lo em uma loja online e vender seus produtos diretamente aos consumidores." + sell_hubs_detail: "Crie um perfil para a sua iniciativa ou organização na Open Food Brasil e comece a distribuir os produtos dos seus fornecedores locais. " + sell_groups_detail: "Organize um lista personalizada de iniciativas (cultivos, cooperativas, feiras, grupos de compra, etc.) para sua região ou organização. " sell_user_guide: "Saiba mais acessando nosso guia. " sell_listing_price: "A OFB está em sua versão beta. Por acreditarmos que a plataforma pode colaborar com a circulação e a comercialização de comida de verdade no período de quarentena imposto pela atual pandemia, sua utilização permanecerá gratuita nos próximos meses." sell_embed: "Também podemos incorporar uma loja da Open Food Brasil em seu próprio site personalizado ou criar um site específico para a sua região. " @@ -2830,14 +2814,6 @@ pt_BR: smtp_send_copy_to_this_addresses: "Envia uma cópia de todos os correios enviados para este endereço. Para vários endereços, separe com vírgulas." intercept_email_address: "Interceptar endereço de email" intercept_email_instructions: "Substitua o destinatário do email e substitua por este endereço." - smtp: "SMTP" - smtp_domain: "Domínio SMTP" - smtp_mail_host: "Host de email SMTP" - smtp_port: "Porta SMTP" - secure_connection_type: "Tipo de conexão segura" - smtp_authentication_type: "Tipo de autenticação SMTP" - smtp_username: "Nome de usuário SMTP" - smtp_password: "Senha SMTP" image_settings: "Configurações de imagem" image_settings_warning: "Você precisará gerar novamente as miniaturas se atualizar os estilos de clipes de papel. Use o clipe de papel rake: refresh: miniaturas CLASS = Spree :: Image para fazer isso." attachment_default_style: Estilo dos Anexos diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 53985ac51f..655db7eb4f 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -964,22 +964,6 @@ sv: groups_signup_contact_text: "Ta kontakt för att upptäcka vad OFN kan göra för dig:" groups_signup_detail: "Här är haken." login_invalid: "Ogiltig e-postadress eller lösenord" - modal_hubs: "Mathubbar" - modal_hubs_abstract: Våra mathubbar är kontaktpunkten mellan dig och de människor som gör din mat! - modal_hubs_content1: Du kan söka efter en lämplig hub enligt plats eller namn. Vissa hubbar har flera samlingspunkter där du kan plocka upp dina köp, och några kommer även tillhandahålla leveransalternativ. Varje mathub är en försäljningspunkt med oberoende affärsverksamhet och logistik - så variation mellan hubbar är att förväntas. - modal_hubs_content2: Du kan endast handla vid en hubb i taget. - modal_groups: "Grupper / Regioner" - modal_groups_content1: Detta är organisationerna och förhållandena mellan hubbar som skapar Open Food Network. - modal_groups_content2: Vissa grupper är klustrade enligt plats eller råd, andra efter icke-geografiska likheter. - modal_how: "Så här fungerar det" - modal_how_shop: Handla på Open Food Network - modal_how_shop_explained: Sök efter en mathubb nära dig för att börja handla! Du kan expandera varje mathubb för att se vilka typer av godsaker som finns tillgängliga och klicka genom för att börja handla. (Du kan bara handla vid en mathubb i taget.) - modal_how_pickup: Upphämtning, leverans och fraktavgifter - modal_how_pickup_explained: Vissa mathubbar levererar till din dörr, medan andra kräver att du hämtar upp dina köp. Du kan se vilka alternativ som finns tillgängliga på hemsidan, och välja vilka du vill ha vid handels- och utcheckningssidorna. Frakt kostar mer, och prissättning varierar mellan hubbar. Varje mathubb är en försäljningspunkt med oberoende affärsverksamheter och logistik - så variationer mellan hubbar är att förväntas. - modal_how_more: Lär dig mer - modal_how_more_explained: "Om du vill lära dig mer om Open Food Network, hur det fungerar, och hur du kan involvera dig, kolla in:" - modal_producers: "Producenter " - modal_producers_explained: "Våra tillverkare producerar all den delikata mat du kan handla efter på Open Food Network." producers_about: Om oss producers_buy: Handla producers_contact: Kontakt @@ -1869,6 +1853,9 @@ sv: start_free_profile: "Börja med en gratis profil och uppgradera när du är redo!" order_management: reports: + enterprise_fee_summaries: + report: + none: "Ingen" enterprise_fee_summary: fee_calculated_on_transfer_through_all: "Alla" fee_placements: @@ -2035,9 +2022,6 @@ sv: bulk_coop_allocation: 'Bulk Co-op - Allokering' bulk_coop_packing_sheets: 'Bulk Co-op - Förpackningssedlar' bulk_coop_customer_payments: 'Bulk Co-op - kundbetalningar' - enterprise_fee_summaries: - report: - none: "Ingen" users: index: user: "Användare" @@ -2060,7 +2044,9 @@ sv: autocomplete: producer_name: "Producent" unit: "Enhet" - general_settings: + shared: + sortable_header: + name: "Namn" edit: enterprises_require_tos: "Företag måste acceptera servicevillkoren" footer_tos_url: "Användarvillkor URL" diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 5f3fd36365..8da6830930 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -204,7 +204,7 @@ tr: ongoing: Devam eden bill_address: Fatura Adresi ship_address: Teslimat Adresi - sort_order_cycles_on_shopfront_by: "Sipariş Dönemlerini Vitrinde Şuna Göre Sırala" + sort_order_cycles_on_shopfront_by: "Sipariş Dönemlerini Mağazada Şuna Göre Sırala" required_fields: Zorunlu alanlar yıldız ile belirtilmiştir select_continue: Seç ve Devam Et remove: Kaldır @@ -229,13 +229,13 @@ tr: all: Hepsi current: Güncel available: Mevcut - dashboard: Gösterge Paneli + dashboard: KONTROL PANELİ undefined: tanımsız unused: kullanılmamış admin_and_handling: Yönetici & İşlemler profile: Profil supplier_only: Sadece Tedarikçi - has_shopfront: Vitrini Var + has_shopfront: Mağazası Var weight: Ağırlık volume: Hacim items: Kalemler @@ -284,7 +284,7 @@ tr: email: E-posta ends_at: Bitiş ends_on: Bitiş vakti - name: İsim + name: İsİM on_hand: Mevcut on_demand: Talep Üzerine on_demand?: Talep Üzerine? @@ -323,6 +323,7 @@ tr: show_n_more: '%{num} tane daha göster' choose: "Seç..." please_select: Lütfen seçin... + column_save_as_default: Varsayılan Olarak Kaydet columns: Sütunlar actions: Eylemler viewing: "Görüntülenen: %{current_view_name}" @@ -334,8 +335,8 @@ tr: unsaved_confirm_leave: "Kaydedilmemiş değişiklikler var. Kaydetmeden devam etmek istiyor musunuz?" unsaved_changes: "Kaydedilmemiş değişiklikleriniz var" shopfront_settings: - embedded_shopfront_settings: "Yerleştirilmiş Vitrin Ayarları" - enable_embedded_shopfronts: "Gömülü Vitrinleri Etkinleştir" + embedded_shopfront_settings: "Yerleştirilmiş Mağaza Ayarları" + enable_embedded_shopfronts: "Gömülü Mağazaları Etkinleştir" embedded_shopfronts_whitelist: "Beyaz Listedeki harici Domain'ler" number_localization: number_localization_settings: "Numara Yerelleştirme Ayarları" @@ -428,7 +429,7 @@ tr: display_as: Gösterme Şekli category: Kategori tax_category: Vergi Kategorisi - inherits_properties?: Özellikler aktarılıyor mu? + inherits_properties?: Özellikler devralınsın mı? available_on: Mevcut Olma Tarihi av_on: "Mevcut Olma Tarihi" import_date: Aktarıldı @@ -441,7 +442,7 @@ tr: search: "Ara" properties: property_name: "Özellik Adı" - inherited_property: "Aktarılan Özellik" + inherited_property: "Devralınan Özellik" variants: infinity: "Sonsuz" to_order_tip: "Sipariş üzerine yapılan ürünlerin, belirlenmiş stok seviyeleri yoktur." @@ -507,7 +508,7 @@ tr: options_and_defaults: İçe aktarma seçenekleri ve varsayılanlar no_permission: bu işletmeyi yönetme izniniz yok not_found: işletme veritabanında bulunamadı - no_name: İsimsiz + no_name: İsİMSİZ blank_enterprise: bazı ürünler için tanımlanmış bir işletme yok reset_absent?: Mevcut olmayan ürünleri sıfırla reset_absent_tip: Dosyada bulunmayan tüm mevcut ürünler için stoğu sıfıra ayarlayın @@ -555,7 +556,7 @@ tr: description: İşletmelerinizin stoklarını yönetmek için bu sayfayı kullanın. Burada yapılan değişiklikler 'Ürünler' sayfasındaki ayarları da günceller. enable_reset?: Stok Sıfırlama etkinleştirilsin mi? default_stock: "Varsayılan stok" - inherit?: Aktar? + inherit?: Devral? add: Ekle hide: Sakla import_date: Aktarıldı @@ -650,15 +651,15 @@ tr: ürünün satış listenize eklenmeden önce Stok listenize eklenip eklenmemesi gerektiğini seçebilirsiniz. Eğer ürünlerinizi yönetmek için Stok sistemini kullanmıyorsanız 'tavsiye edilen' seçeneği ile devam etmeniz gerekir. - preferred_product_selection_from_inventory_only_yes: Vitrininize yeni ürünler eklenebilir (önerilir) - preferred_product_selection_from_inventory_only_no: Yeni ürünler vitrininize eklemeden önce Stok listesine girilmelidir + preferred_product_selection_from_inventory_only_yes: Mağazanıza yeni ürünler eklenebilir (önerilir) + preferred_product_selection_from_inventory_only_no: Yeni ürünler mağazanıza eklemeden önce Stok listesine girilmelidir payment_methods: name: Ad applies: Uygulanma? manage: Ödeme Yöntemlerini Yönet no_method_yet: Henüz herhangi bir ödeme yönteminiz yok. create_button: Yeni Ödeme Yöntemi Oluştur - create_one_button: Şimdi Bir Tane Oluştur + create_one_button: Şimdi Oluştur primary_details: name: Ad name_placeholder: Örn. Ahmet Amca'nın Ekolojik Meyveleri @@ -669,9 +670,9 @@ tr: primary_producer_tip: Siz de birincil üreticisiyseniz 'Üretici' yi seçin. producer: Üretici any: Hepsi - none: Hiç - own: Kendi - sells: Satıyor + none: SATMIYOR + own: KENDİ ÜRÜNLERİ + sells: NE SATIYOR sells_tip: "Hiç - İşletme müşterilere doğrudan satış yapmaz.
Kendi - İşletme müşterilerine kendi ürünlerini satar.
Hepsi - İşletme kendi ürünlerini veya diğer işletmelerin ürünlerini satabilir.
" visible_in_search: Haritada görünsün mü? visible_in_search_tip: Sitede arama yapılırken bu işletmenin müşteriler tarafından görünür olup olmayacağını belirler. @@ -680,7 +681,7 @@ tr: permalink: Bağlantı Adı (boşluk yok) permalink_tip: "Bağlantı adı, mağazanızın bağlantı URL'sini oluşturmak için kullanılır: %{link}sectiginiz-ad/tezgah" link_to_front: Tezgah linkiniz - link_to_front_tip: Açık Gıda Ağı’ndaki tezgahınıza doğrudan bağlantı linki + link_to_front_tip: Açık Gıda Ağı’ndaki mağazanıza doğrudan bağlantı linki ofn_uid: AGA KN ofn_uid_tip: Açık Gıda Ağı'na kayıtlı işletmenize özel tanımlanan kimlik numarası shipping_methods: @@ -691,8 +692,8 @@ tr: create_one_button: Şimdi Oluştur no_method_yet: Henüz herhangi bir teslimat yönteminiz yok. shop_preferences: - shopfront_requires_login: "Tezgahınız haritada görünür olsun mu?" - shopfront_requires_login_tip: "Tezgahınızın yalnızca üyelerinize mi yoksa herkese mi açık olduğunu seçin." + shopfront_requires_login: "Mağazanız haritada görünür olsun mu?" + shopfront_requires_login_tip: "Mağazanızın yalnızca üyelerinize mi yoksa herkese mi açık olduğunu seçin." shopfront_requires_login_false: "Herkese açık" shopfront_requires_login_true: "Yalnızca kayıtlı müşteriler tarafından görülebilir" recommend_require_login: "Siparişlerin değiştirilebileceği durumlarda kullanıcıların oturum açmasını öneriyoruz." @@ -708,19 +709,19 @@ tr: enable_subscriptions_tip: "Üyelik işlevselliği etkinleştirilsin mi?" enable_subscriptions_false: "Kapalı" enable_subscriptions_true: "Etkin" - shopfront_message: "Vitrin Mesajınız" + shopfront_message: "Mağaza Mesajınız" shopfront_message_placeholder: > Müşterilerinize merhaba diyebilir, tezgahınız ve alışveriş şartlarınız - ile ilgili bilgi verebilirsiniz. Yazdıklarınız, müşteriler vitrininizi + ile ilgili bilgi verebilirsiniz. Yazdıklarınız, müşteriler mağazanızı ziyaret ettiğinde görünür olacak. shopfront_message_link_tooltip: "Bağlantı ekle / düzenle" shopfront_message_link_prompt: "Lütfen eklemek için bir URL girin" - shopfront_closed_message: "Kapalı Vitrin Mesajı" + shopfront_closed_message: "Kapalı Mağaza Mesajı" shopfront_closed_message_placeholder: > Vitrininizin neden satışa kapalı olduğunu ve ne zaman açılacağını müşterilerinize açıklayan bir mesaj yazın. Bu mesaj, açık sipariş döneminiz olmadığında sizi ziyaret edenler tarafından görülecek. - shopfront_category_ordering: "Vitrin Kategori Sıralaması" + shopfront_category_ordering: "Mağaza Kategori Sıralaması" open_date: "Açılış Tarihi" close_date: "Kapanış Tarih" social: @@ -754,7 +755,7 @@ tr: email_confirmation_notice_html: "E-posta onayı bekleniyor. %{email} adresine bir doğrulama e-postası gönderdik." resend: Yeniden gönder owner: 'Yönetici' - contact: "İletişim" + contact: "İLETİŞİM" contact_tip: "İşletme adına sipariş ve bildirim e-postalarını alacak olan yönetici. Onaylanmış bir e-posta adresi olması gerekir." owner_tip: Bu işletmeden sorumlu birincil kullanıcı. notifications: Bildirimler @@ -780,7 +781,7 @@ tr: admin_index: name: Ad role: Görev - sells: Satıyor + sells: NE SATIYOR visible: Haritada görünür mü? owner: Yönetici producer: Üretici @@ -791,11 +792,11 @@ tr: producer_description_text: Ürünlerinizi Açık Gıda Ağı'na yükleyin. Böylece ürünleriniz pazar hesapları üzerinden satışa sunulabilir. producer_shop: Üretici Tezgahı sell_your_produce: Kendi ürününü sat - producer_shop_description_text: Açık Gıda Ağı üzerinden açtığınız bireysel tezgahınız ile ürünlerinizi doğrudan müşterilere ulaştırabilirsiniz. + producer_shop_description_text: Açık Gıda Ağı üzerinden açtığınız bireysel mağazanız ile ürünlerinizi doğrudan müşterilere ulaştırabilirsiniz. producer_shop_description_text2: Üretici Tezgahı sadece sizin ürünleriniz içindir. Üretiminiz haricindeki ürünleri satabilmek için lütfen 'Üretici Pazarı' seçeneğini seçin. producer_hub: Üretici Pazarı producer_hub_text: Kendi ürünleriniz ile beraber başkalarından ürünlerini de satın - producer_hub_description_text: İşletmeniz, yerel gıda sisteminizin belkemiğidir. Açık Gıda Ağı'ndaki pazar yeriniz aracılığıyla kendi ürünlerinizi ve çevrenizdeki diğer üreticilerin ürünlerini beraber satabilirsiniz. + producer_hub_description_text: İşletmeniz, yerel gıda sisteminizin bel kemiğidir. Açık Gıda Ağı'ndaki mağazanız aracılığıyla kendi ürünlerinizi ve çevrenizdeki diğer üreticilerin ürünlerini beraber satabilirsiniz. profile: Yalnızca Profil get_listing: Görünür ol profile_description_text: İnsanlar Açık Gıda Ağı üzerinden sizi bulabilir ve sizinle iletişim kurabilir. İşletmeniz haritada ve listelerde görünür olacak. @@ -816,14 +817,14 @@ tr: new_form: owner: Yönetici owner_tip: Bu işletmeden sorumlu birincil kullanıcı. - i_am_producer: Üreticiyim - contact_name: İşetişim Kurulacak Kişi + i_am_producer: ÜRETİCİYİM + contact_name: İLETİŞİM Kurulacak KİŞİ edit: editing: 'Ayarlar:' - back_link: İşletmeler listesine geri dön + back_link: İşletmeler LİSTESİNE gerİ dön new: title: Yeni İşletme - back_link: İşletmeler listesine geri dön + back_link: İşletmeler LİSTESİNE gerİ dön remove_logo: remove: "Resmi Kaldır" removed_successfully: "Logo başarıyla kaldırıldı" @@ -977,11 +978,11 @@ tr: supplier_totals: Sipariş Dönemi Tedarikçi Toplamları supplier_totals_by_distributor: Dağıtımcıya Göre Sipariş Dönemi Tedarikçi Toplamları totals_by_supplier: Tedarikçiye Göre Sipariş Dönemi Dağıtımcı Toplamları - customer_totals: Sipariş Döngüsü Müşteri Toplamları + customer_totals: Sipariş Dönemi Müşteri Toplamları all_products: Tüm ürünler inventory: Stok (mevcut) lettuce_share: Hasat Ortaklığı - mailing_list: Mail listesi + mailing_list: E-posta listesi addresses: Adresler payment_methods: Ödeme Yöntemleri Raporu delivery: Teslimat raporu @@ -1139,7 +1140,7 @@ tr: mobile_menu: cart: "Sepet" joyride: - checkout: "Ödemeyi Şimdi Yap" + checkout: "Alışverişi Tamamla" already_ordered_products: "Bu sipariş dönemi içinde zaten sipariş verildi" register_call: selling_on_ofn: "Açık Gıda Ağı'na katılmak ister misiniz?" @@ -1151,7 +1152,7 @@ tr: footer_contact_email: "Bize e-posta gönderin" footer_nav_headline: "Gezin" footer_join_headline: "Bize katılın" - footer_join_body: "Açık Gıda Ağı üzerinden aracısız, adil ve temiz gıdaya ulaşma yolları keşfedin." + footer_join_body: "Açık Gıda Ağı üzerinden aracısız, adil ve temiz gıdaya ulaşma yollarını keşfedin." footer_join_cta: "Daha fazlasını anlat!" footer_legal_call: "Okuyun" footer_legal_tos: "Şartlar ve koşullar" @@ -1165,7 +1166,7 @@ tr: messages: login: "oturum aç" signup: "Kaydol" - contact: "İletişim" + contact: "İLETİŞİM" require_customer_login: "Yalnızca onaylı müşteriler buradan alışveriş yapabilir." require_login_html: "Zaten onaylanmış bir müşteriyseniz, devam etmek için %{login} veya %{signup}. Buradan alışveriş yapmaya başlamak ister misiniz? Lütfen katılmak için %{contact} %{enterprise} ile iletişime geçin." require_customer_html: "Buradan alışveriş yapmaya başlamak istiyorsanız, katılmak için lütfen %{contact} %{enterprise} 'a sorun." @@ -1196,7 +1197,7 @@ tr: ticket_column_item: "Ürün" ticket_column_unit_price: "Birim fiyat" ticket_column_total_price: "Toplam tutar" - menu_1_title: "Pazar Yeri" + menu_1_title: "PAZAR YERİ" menu_1_url: "/shops" menu_2_title: "HARİTA" menu_2_url: "/map" @@ -1226,7 +1227,7 @@ tr: footer_links_md: "Bağlantılar" footer_about_url: "URL hakkında" user_guide_link: "Kullanıcı Kılavuzu Linki" - name: İsim + name: İSİM first_name: Ad last_name: Soyadı email: E-posta @@ -1235,7 +1236,7 @@ tr: address: Adres address_placeholder: Örn. Barış Mah. 3. Cadde address2: Adres (devam) - city: Şehir + city: ŞEHİR city_placeholder: Örn. Bursa postcode: posta kodu postcode_placeholder: Örn. 16000 @@ -1254,12 +1255,12 @@ tr: days: günler authorization_failure: "Yetki Hatası" label_shop: "Pazar" - label_shops: "Pazar Yeri" + label_shops: "PAZAR YERİ" label_map: "HARİTA" label_producer: "Üretici" label_producers: "ÜRETİCİLER" label_groups: "Gruplar" - label_about: "hakkında" + label_about: "HAKKINDA" label_connect: "Bağlan" label_learn: "Öğren" label_blog: "Blog" @@ -1319,14 +1320,8 @@ tr: cookie_stripe_desc: "Sahtekarlık tespiti için ödeme işlemcimiz Stripe tarafından toplanan veriler https://stripe.com/cookies-policy/legal. Tüm mağazalar Stripe'ı ödeme yöntemi olarak kullanmaz, ancak dolandırıcılığın tüm sayfalara uygulanmasını önlemek iyi bir yöntemdir. Stripe muhtemelen sayfalarımızdan hangilerinin genellikle API'leriyle etkileşime girdiğini gösteren bir resim oluşturur ve daha sonra olağandışı bir şeyi işaretler. Dolayısıyla, Stripe çerezinin ayarlanması, kullanıcıya ödeme yönteminin sağlanmasından daha geniş bir işleve sahiptir. Kaldırılması hizmetin güvenliğini etkileyebilir. Stripe hakkında daha fazla bilgi edinebilir ve gizlilik politikasını https://stripe.com/privacy adresinde okuyabilirsiniz." statistics_cookies: "İstatistik Çerezleri" statistics_cookies_desc: "Aşağıdakiler mecburi değildir, ancak kullanıcı davranışını analiz etmemize, en çok kullandığınız veya kullanmadığınız özellikleri belirlememize veya kullanıcı deneyimi sorunlarını anlamamıza vb. izin vererek size en iyi kullanıcı deneyimini sunmaya yardımcı olur." - statistics_cookies_analytics_desc_html: "Platform kullanım verilerini toplamak ve analiz etmek için, Google Analytics'i Spree ( temelde oluşturduğumuz e-ticaret açık kaynak yazılımı) ile bağlantılı varsayılan hizmet olduğu için kullanıyoruz, ancak vizyonumuz Matomoya (eski Piwik, açık kaynak analitiği) geçmek GDPR uyumlu ve gizliliğinizi koruyan bir araç)." statistics_cookies_matomo_desc_html: "Platform kullanım verilerini toplamak ve analiz etmek için, GDPR uyumlu ve gizliliğinizi koruyan açık kaynaklı bir analiz aracı olan Matomo (eski Piwik) kullanıyoruz." statistics_cookies_matomo_optout: "Matomo analitiğinden çıkmak istiyor musunuz? Herhangi bir kişisel veri toplamıyoruz ve Matomo hizmetimizi geliştirmemize yardımcı oluyor, ancak seçiminize saygı duyuyoruz :-)" - cookie_analytics_utma_desc: "Kullanıcıları ve oturumları ayırt etmek için kullanılır. Çerez, javascript kütüphanesi yürütüldüğünde ve mevcut __utma çerezleri olmadığında oluşturulur. Çerez, Google Analytics'e her veri gönderildiğinde güncellenir." - cookie_analytics_utmt_desc: "Talep oranını azaltmak için kullanılır." - cookie_analytics_utmb_desc: "Yeni oturumları / ziyaretleri belirlemek için kullanılır. Çerez, javascript kütüphanesi yürütüldüğünde ve mevcut __utmb çerezleri olmadığında oluşturulur. Çerez, Google Analytics'e her veri gönderildiğinde güncellenir." - cookie_analytics_utmc_desc: "Ga.js'de kullanılmaz Urchin.js ile birlikte çalışabilirlik için ayarlayın. Tarihsel olarak, bu çerez, kullanıcının yeni bir oturumda / ziyarette olup olmadığını belirlemek için __utmb çereziyle birlikte çalışıyor." - cookie_analytics_utmz_desc: "Kullanıcının sitenize nasıl ulaştığını açıklayan trafik kaynağını veya kampanyayı depolar. Çerez, javascript kitaplığı yürütüldüğünde oluşturulur ve Google Analytics'e her veri gönderildiğinde güncellenir." cookie_matomo_basics_desc: "Matomo istatistik toplamak için birinci taraf çerezleri." cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Kayıt çerezi." cookie_matomo_ignore_desc: "Kullanıcının izlenmesini önlemek için kullanılan çerez." @@ -1363,7 +1358,7 @@ tr: system_step2: "2. Alışveriş Yap" system_step2_text: "Gıdanızı yerel üretici tezgahlarından, üretici ve türetici pazarlarından temin edin. Yaşanabilir bir dünya için alışkanlıklarınızı şimdi değiştirin. Gıdanızın ve onu size getiren insanların hikayelerini öğrenin!" system_step3: "3. Teslimat " - system_step3_text: "Gıdanıza ulaşmak için eve teslim edilmesini ya da kargoyu bekleyin veya gıdanız ile daha kişisel bir bağ kurmak için üreticinizi veya pazarını kendiniz ziyaret edin. Doğayla ve gıdayla istediğiniz şekilde ama gerçek bir bağ kurun. " + system_step3_text: "Seçtiğiniz gıdaya ulaşmak için adresinize teslim edilmesini bekleyin veya gıdanız ile daha kişisel bir bağ kurmak için üreticinizi veya pazarını ziyaret edin. Doğayla ve gıdayla istediğiniz şekilde ama gerçek bir bağ kurun. " cta_headline: "Dünyayı daha iyi bir yer yapan alışveriş biçimi." cta_label: "Hazırım" stats_headline: "Yeni bir gıda sistemi yaratıyoruz." @@ -1372,7 +1367,7 @@ tr: stats_shoppers: "gıda alıcıları" stats_orders: "GIDA SİPARİŞLERİ" checkout_title: Ödeme Yap - checkout_now: Şimdi ödeme yap + checkout_now: Alışverişi Tamamla checkout_order_ready: Sipariş şu tarihte hazır checkout_hide: Gizle checkout_expand: genişlet @@ -1500,10 +1495,10 @@ tr: shopping_oc_select: "Seçin..." shopping_tabs_home: "Ana sayfa" shopping_tabs_shop: "Alışveriş yap" - shopping_tabs_about: "hakkında" - shopping_tabs_contact: "İletişim" + shopping_tabs_about: "Hakkında" + shopping_tabs_contact: "İLETİŞİM" shopping_contact_address: "Adres" - shopping_contact_web: "İletişim" + shopping_contact_web: "İLETİŞİM" shopping_contact_social: "Takip et" shopping_groups_part_of: "şunun parçası:" shopping_producers_of_hub: "%{hub} üreticileri:" @@ -1548,7 +1543,7 @@ tr: products_update_error_data: "Geçersiz veriler nedeniyle kaydetme başarısız oldu:" products_changes_saved: "Değişiklikler kaydedildi." search_no_results_html: "Üzgünüz, %{query} sonuç bulunamadı. Başka bir arama yapmak ister misiniz?" - components_profiles_popover: "Açık Gıda Ağında bir vitrini olmayan ancak başka bir sitede kendi satış siteleri olan hesaplar" + components_profiles_popover: "Açık Gıda Ağında bir mağazası olmayan ancak başka bir sitede kendi satış siteleri olan hesaplar" components_profiles_show: "Profilleri göster" components_filters_nofilters: "Filtresiz" components_filters_clearfilters: "Tüm filtreleri temizle" @@ -1560,7 +1555,7 @@ tr: groups_about: "Hakkımızda" groups_producers: "Üreticilerimiz" groups_hubs: "Pazarlarımız" - groups_contact_web: İletişim + groups_contact_web: İLETİŞİM groups_contact_social: Takip et groups_contact_address: Adres groups_contact_email: Bize e-posta gönderin @@ -1585,25 +1580,9 @@ tr: groups_signup_contact_text: "AGA'nın sizin için neler yapabileceğini keşfetmek için iletişime geçin:" groups_signup_detail: "İşte bilgiler." login_invalid: "Geçersiz e-posta veya şifre" - modal_hubs: "Gıda Pazarları" - modal_hubs_abstract: Pazarlarımız, bizi gıdamızı yetiştiren insanlarla bir araya getiren temas noktalarıdır! - modal_hubs_content1: Konuma veya ada göre uygun bir pazar arayabilirsiniz. Bazı pazarlar ürünlerinizi alabileceğiniz teslimat noktaları belirlerken bazıları da kargo ile evinize teslim edebilir.. Her bir gıda pazarı tedarik, satış ve lojistik süreçlerini bağımsız olarak yöneten gruplardır - bu nedenle pazarlar arasında farklılıklar olması beklenir. - modal_hubs_content2: Bir seferde yalnızca bir pazardan alışveriş yapabilirsiniz. - modal_groups: "Gruplar / Bölgeler" - modal_groups_content1: Bunlar, Açık Gıda Ağını oluşturan pazarlar arasındaki ilişkiler ve işbirlikleridir. - modal_groups_content2: Bazı gruplar yalnızca fiziksel yakınlıklarından dolayı bir araya gelirken bazıları ortak değerler etrafında kümelenir. - modal_how: "Nasıl çalışır" - modal_how_shop: Açık Gıda Ağı'nda Alışveriş Yapın - modal_how_shop_explained: Alışverişe başlamak için size en yakın pazarları arayın! Ürünleri ve diğer bilgileri görmek için her bir pazar detayını genişletebilir ve bir tuşla alışverişe başlayabilirsiniz. (Bir seferde yalnızca bir pazardan alışveriş yapabilirsiniz.) - modal_how_pickup: Teslimat noktası, kargo ve gönderi masrafları - modal_how_pickup_explained: Bazı pazarlar kargo ile gönderim yaparken bazıları ile yalnızca teslimat noktalarında buluşabilirsiniz. İşletme ana sayfasına hangi seçeneklerin mevcut olduğunu görebilir ve alışveriş ve ödeme sayfalarından seçim yapabilirsiniz. Kargo maliyetleri her pazarda farklılık gösterebilir. Her pazar, bağımsız iş operasyonları ve nakliye süreçleri olan satış noktalarıdır- bu nedenle pazarlar arasında farklılıklar olması beklenir. - modal_how_more: Daha fazla bilgi edin - modal_how_more_explained: "Açık Gıda Ağı nasıl çalışır öğrenmek ve bu ailenin bir parçası olmak için göz göz atın:" - modal_producers: "Üreticiler" - modal_producers_explained: "Üreticilerimiz, Açık Gıda Ağı üzerinden ulaşabileceğiniz temiz gıda ürünlerini hazırlıyor." producers_about: Hakkımızda producers_buy: Alışveriş ürünleri - producers_contact: İletişim + producers_contact: İLETİŞİM producers_contact_phone: Ara producers_contact_social: Takip et producers_buy_at_html: "%{enterprise} ürünleri için buradan alışveriş yapın:" @@ -1645,7 +1624,7 @@ tr: sell_ask_services: "Bize AGA hizmetleri hakkında soru sorun." shops_title: Dükkanlar shops_headline: Alışveriş biçim değiştiriyor - shops_text: Gıda dönemsel yetiştirilir, dönemsel hasat edilir ve dönemsel sipariş edilir. Aradığınız sipariş dönemi kapalı ise kısa süre sonra tekrar kontrol edin. + shops_text: Gıda dönemsel yetiştirilir, dönemsel hasat edilir ve dönemsel sipariş edilir. Aradığınız mağazanın sipariş dönemi kapalı ise kısa süre sonra tekrar kontrol edin. shops_signup_title: Pazar olarak kaydolun shops_signup_headline: Gıda pazarları, sınır yok. shops_signup_motivation: Her türlü gıda işletmesi/topluluğu modelini destekliyoruz. Bağımsız ve şeffaf bir sosyal girişimiz. İşlerinizi kolaylaştırmaya çalışan yol arkadaşlarıyız. @@ -1755,7 +1734,7 @@ tr: steps: introduction: registration_greeting: "Merhaba!" - registration_intro: "Artık Üretici veya Pazar için bir profil oluşturabilirsiniz" + registration_intro: "Şimdi AGA üzerinden bir Üretici veya Türetici profili oluşturabilirsiniz" registration_checklist: "Neye ihtiyacım var?" registration_time: "5-10 dakika" registration_enterprise_address: "İşletme adresi" @@ -1773,8 +1752,8 @@ tr: headline: "Hadi Başlayalım !" enterprise: "Merhaba! Öncelikle işletmenizi tanıyalım:" producer: "Merhaba! Öncelikle çiftliğinizi tanıyalım:" - enterprise_name_field: "İşletme Adı:" - producer_name_field: "Çiftlik Adı:" + enterprise_name_field: "İŞLETME ADI:" + producer_name_field: "ÇİFTLİK ADI:" producer_name_field_placeholder: "örn. Ali Baba Çiftliği" producer_name_field_error: "Lütfen işletmeniz için özgün bir ad seçin" address1_field: "Adres satırı 1:" @@ -1792,10 +1771,10 @@ tr: country_field: "Ülke:" country_field_error: "lütfen bir ülke seçiniz" contact: - title: "İletişim" + title: "İLETİŞİM" who_is_managing_enterprise: "%{enterprise}'ın yönetiminden kim sorumlu?" contact_field: "Birincil Kontak" - contact_field_placeholder: "Kişi Adı" + contact_field_placeholder: "İLETİŞİM" contact_field_required: "Birincil kişi girmeniz gerekiyor." phone_field: "Telefon numarası" phone_field_placeholder: "Örn. (0530) 123 45 67" @@ -1810,7 +1789,7 @@ tr: no_producer_help: "Üretici değilseniz muhtemelen gıdaya ulaşım sağlayan, dağıtım veya satış yapan bir grup ya da işletmesiniz. Bir dükkan, kooperatif, gıda topluluğu, restaurant veya toptancı bile olabilirsiniz. " create_profile: "Profil oluştur" about: - title: "hakkında" + title: "Hakkında" headline: "Güzel!" message: "Şimdi ayrıntıları açıklayalım" success: "Sonunda! %{enterprise} Açık Gıda Ağı'na eklendi" @@ -1871,7 +1850,7 @@ tr: headline: "Tamamlandı!" thanks: "%{enterprise} ile ilgili ayrıntıları doldurduğunuz için teşekkür ederiz." login: "Dilediğiniz zaman Açık Gıda Ağı üzerinden giriş yapıp Yönetici paneline giderek işletmenizin ayarlarını güncelleyebilirsiniz." - action: "İşletme Paneline Git" + action: "İşletme Kontrol Paneline Git" back: "Geri" continue: "Devam et" action_or: "VEYA" @@ -1918,6 +1897,7 @@ tr: admin_enterprise_relationships_permits: "izinler" admin_enterprise_relationships_seach_placeholder: "Ara" admin_enterprise_relationships_button_create: "Oluştur" + admin_enterprise_relationships_to: "'a" admin_enterprise_groups: "İşletme Grupları" admin_enterprise_groups_name: "Ad" admin_enterprise_groups_owner: "Sahip" @@ -1926,7 +1906,7 @@ tr: admin_enterprise_groups_data_powertip: "Bu gruptan sorumlu birincil kullanıcı." admin_enterprise_groups_data_powertip_logo: "Grubun logosu" admin_enterprise_groups_data_powertip_promo_image: "Bu resim grup profilinin üstünde görüntülenir" - admin_enterprise_groups_contact: "İletişim" + admin_enterprise_groups_contact: "İLETİŞİM" admin_enterprise_groups_contact_phone_placeholder: "Örneğin. 532 100 05 01" admin_enterprise_groups_contact_address1_placeholder: "Örneğin. 123 Cadde" admin_enterprise_groups_contact_city: "İlçe" @@ -1962,7 +1942,7 @@ tr: flat_rate_per_item: "Sabit Ücret (ürün başına)" flat_rate_per_order: "Sabit Ücret (sipariş Başına) " flexible_rate: "Esnek Ücret" - price_sack: "Fiyat Torbası" + price_sack: "Değişken Ücret" new_order_cycles: "Yeni Sipariş Dönemleri" new_order_cycle: "Yeni Sipariş Dönemi" select_a_coordinator_for_your_order_cycle: "Sipariş döneminiz için bir koordinatör seçin" @@ -2040,8 +2020,8 @@ tr: order_cycles: "Sipariş Dönemleri" enterprise_relationships: "İşletme izinleri" remove_tax: "Vergiyi kaldır" - first_name_begins_with: "Adının Baş harfi" - last_name_begins_with: "Soyadının Baş Harfi" + first_name_begins_with: "Adının BAŞ HARFİ" + last_name_begins_with: "Soyadının BAŞ HARFİ" enterprise_tos_link: "İşletme Hizmet Şartları bağlantısı" enterprise_tos_message: "Amaçlarımızı ve değerlerimizi paylaşan insanlarla çalışmak istiyoruz. Bu nedenle yeni işletmelerden bunu kabul etmesini istiyoruz:" enterprise_tos_link_text: "Kullanım Şartları." @@ -2050,7 +2030,7 @@ tr: products_require_tax_category: "ürünler vergi kategorisi gerektirir" admin_shared_address_1: "Adres" admin_shared_address_2: "Adres (devam)" - admin_share_city: "Şehir" + admin_share_city: "ŞEHİR" admin_share_zipcode: "posta kodu" admin_share_country: "ülke" admin_share_state: "Şehir" @@ -2103,14 +2083,14 @@ tr: report_header_shipping_instructions: Teslimat bilgileri report_header_ship_street: Teslimat Adresi report_header_ship_street_2: Teslimat Adresi 2 - report_header_ship_city: Teslimat Şehri + report_header_ship_city: TESLİMAT ŞEHRİ report_header_ship_postcode: Teslimat Posta Kodu report_header_ship_state: Teslimat Durumu report_header_billing_street: Fatura Adresi report_header_billing_street_2: Fatura Adresi 2 report_header_billing_street_3: Fatura Adresi 3 report_header_billing_street_4: Fatura Adresi 4 - report_header_billing_city: Fatura Adresi + report_header_billing_city: FATURA ADRESİ report_header_billing_postcode: Fatura Posta Kodu report_header_billing_state: Fatura Durumu report_header_incoming_transport: Gelen Nakliye @@ -2151,17 +2131,17 @@ tr: report_header_curr_cost_per_unit: Birim Maliyet report_header_total_shipping_cost: Toplam Teslimat Maliyeti report_header_payment_method: Ödeme Yöntemi - report_header_sells: Satıyor + report_header_sells: NE SATIYOR report_header_visible: Görünür report_header_price: Fiyat report_header_unit_size: Ölçü Birimi report_header_distributor: Dağıtımcı report_header_distributor_address: Dağıtımcı adresi - report_header_distributor_city: Dağıtımcı şehri + report_header_distributor_city: DAĞITIMCI ŞEHRİ report_header_distributor_postcode: Dağıtımcı posta kodu report_header_delivery_address: Teslimat Adresi report_header_delivery_postcode: Teslimat Adresi Posta Kodu - report_header_bulk_unit_size: Toplu Ölçü + report_header_bulk_unit_size: Toplu Alım Miktarı report_header_weight: Ağırlık report_header_sum_total: Toplamı report_header_date_of_order: Sipariş Tarihi @@ -2173,10 +2153,10 @@ tr: report_header_order_id: Sipariş Kimliği report_header_item_name: Ürün adı report_header_temp_controlled_items: Soğuk Sevkiyat Ürünleri? - report_header_customer_name: müşteri adı + report_header_customer_name: MÜŞTERİ adı report_header_customer_email: Müşteri e-postası report_header_customer_phone: Müşteri Telefonu - report_header_customer_city: Müşteri Şehri + report_header_customer_city: MÜŞTERİ ŞEHRİ report_header_payment_state: Ödeme Durumu report_header_payment_type: Ödeme şekli report_header_item_price: "Ürün (%{currency})" @@ -2213,7 +2193,7 @@ tr: report_header_transaction_fee: İşlem Ücreti (vergi yok) report_header_total_untaxable_admin: Toplam vergisiz yönetici düzenlemeleri (vergi yok) report_header_total_taxable_admin: Vergiye tabi toplam yönetim düzenlemeleri (vergi dahil) - initial_invoice_number: "İlk fatura numarası:" + initial_invoice_number: "Başlangıç fatura numarası:" invoice_date: "Fatura tarihi:" due_date: "Vade tarihi:" account_code: "Hesap kodu:" @@ -2239,7 +2219,7 @@ tr: web: "Web" primary_details: "Temel Bilgiler" adrdress: "Adres" - contact: "İletişim" + contact: "İLETİŞİM" social: "Sosyal" business_details: "İşletme Detayları" properties: "Özellikler" @@ -2252,7 +2232,7 @@ tr: payment_updated: "Ödeme Güncellendi" inventory_settings: "Stok Ayarları" tag_rules: "Etiket Kuralları" - shop_preferences: "Vitrin Tercihleri" + shop_preferences: "Mağaza Tercihleri" enterprise_fee_whole_order: Tüm sipariş enterprise_fee_by: "%{role}%{enterprise_name} tarafından%{type} ücreti" validation_msg_relationship_already_established: "^ Bu ilişki zaten kurulmuş." @@ -2391,7 +2371,7 @@ tr: gibi diğer hesaplar ürünlerinizi kendi listelerine ekleyip satışa sunabilsinler. producer_shop: Üretici Tezgahı producer_shop_text1: > - Açık Gıda Ağı üzerindeki tezgahınız aracılığıyla ürünlerinizi alıcılara + Açık Gıda Ağı üzerindeki mağazanız aracılığıyla ürünlerinizi alıcılara direk olarak satın. producer_shop_text2: > Üretici Tezgahı yalnızca kendi ürünlerinizi satmanız içindir. Kendi @@ -2462,7 +2442,7 @@ tr: select_rule_type: "Bir kural türü seçin:" add_rule: "Kural Ekle" enterprise_fees: - inherit_from_product: "Üründen Aktar" + inherit_from_product: "Üründen Devral" orders: index: per_page: "sayfa başına %{results}" @@ -2551,7 +2531,7 @@ tr: 'yes': "Evet" 'no': "Hayır" inventory_products: "Stok Ürünleri" - hidden_products: "Gizli Ürünler" + hidden_products: "GİZLİ ÜRÜNLER" new_products: "Yeni ürünler" reset_stock_levels: Stok Seviyelerini Varsayılanlara Sıfırla changes_to: Değiştirir @@ -2564,10 +2544,10 @@ tr: changing_on_hand_stock: Eldeki stok seviyeleri değiştiriliyor ... stock_reset: Stoklar varsayılana ayarlanır tag_rules: - show_hide_variants: 'Vitrinimde varyantları Göster veya Gizle' + show_hide_variants: 'Mağazamda varyantları Göster veya Gizle' show_hide_shipping: 'Ödeme sırasında teslimat yöntemlerini göster veya gizle' show_hide_payment: 'Ödeme sırasında ödeme yöntemlerini göster veya gizle' - show_hide_order_cycles: 'Vitrinimde sipariş dönemlerini göster veya gizle' + show_hide_order_cycles: 'Mağazamda sipariş dönemlerini göster veya gizle' visible: GÖRÜNÜR not_visible: GÖRÜNÜR DEĞİL services: @@ -2679,6 +2659,14 @@ tr: start_free_profile: "Ücretsiz bir profille başlayın ve hazır olduğunuzda devam edin!" order_management: reports: + enterprise_fee_summaries: + filters: + date_range: "Tarih Aralığı" + report_format_csv: "CSV olarak indir" + generate_report: "Rapor Oluştur" + report: + none: "HİÇ" + select_and_search: "Filtreleri seçin ve verilerinize erişmek için RAPOR OLUŞTUR'a tıklayın." enterprise_fee_summary: date_end_before_start_error: "başlangıçtan sonra olmalı" parameter_not_allowed_error: "Bu rapor için seçilen bir veya daha fazla filtreyi kullanma yetkiniz yok." @@ -2709,7 +2697,7 @@ tr: header: fee_type: "Ücret Türü" enterprise_name: "İşletme Sahibi" - fee_name: "Ücret Adı" + fee_name: "ÜCRET ADI" customer_name: "Müşteri" fee_placement: "Ücret Yerleşimi" fee_calculated_on_transfer_through_name: "Aktarma Ücreti Hesaplama" @@ -2733,14 +2721,14 @@ tr: new_product: "Yeni ürün" administration: "yönetim" logged_in_as: "olarak giriş yapıldı" - account: "hesap" + account: "Hesap" logout: "Çıkış Yap" date_range: "Tarih aralığı" status: "durum" new: "Yeni" start: "Başlangıç" end: "Son" - stop: "Dur" + stop: "Bitiş" first: "İlk" previous: "Önceki" last: "Son" @@ -2771,14 +2759,14 @@ tr: customer_details: "Müşteri detayları" customer_search: "Müşteri Arama" choose_a_customer: "Bir müşteri seçin" - account: "hesap" + account: "Hesap" billing_address: "Fatura Adresi" shipping_address: "Teslimat Adresi" first_name: "İsim" last_name: "Soyadı" street_address: "Açık adres" street_address_2: "Açık Adres (devam)" - city: "Şehir" + city: "ŞEHİR" zip: "Postakodu" country: "ülke" state: "Şehir" @@ -2809,7 +2797,7 @@ tr: hide_cents: "Kuruşları gizle" display_currency: "Para birimini göster" choose_currency: "Para Birimini Seç" - mail_method_settings: "Posta Yöntemi Ayarları" + mail_method_settings: "E-posta Ayarları" general: "Genel" enable_mail_delivery: "Posta Dağıtımını Etkinleştir" send_mails_as: "Postaları Farklı Gönder" @@ -2818,14 +2806,6 @@ tr: smtp_send_copy_to_this_addresses: "Tüm giden postaların bir kopyasını bu adrese gönderir. Birden çok adres için virgülle ayırın." intercept_email_address: "Durdurma E-posta Adresi" intercept_email_instructions: "E-posta alıcısını geçersiz kılın ve bu adresle değiştirin." - smtp: "SMTP" - smtp_domain: "SMTP Alanı" - smtp_mail_host: "SMTP Posta Ana Bilgisayarı" - smtp_port: "SMTP Bağlantı Noktası" - secure_connection_type: "Güvenli Bağlantı Türü" - smtp_authentication_type: "SMTP Kimlik Doğrulama Türü" - smtp_username: "SMTP Kullanıcı Adı" - smtp_password: "SMTP Parolası" image_settings: "Görüntü Ayarları" image_settings_warning: "Ataç stillerini güncellerseniz küçük resimleri yeniden oluşturmanız gerekir. Bunu yapmak için rake ataç kullanın: refresh: thumbnail CLASS = Spree :: Image." attachment_default_style: Ekler Stili @@ -2872,12 +2852,6 @@ tr: shipping_categories: "Nakliye Kategorileri" new_shipping_category: "Yeni Nakliye Kategorisi" back_to_shipping_categories: "Teslimat Kategorilerine Geri Dön" - analytics_trackers: "Analitik İzleyiciler" - no_trackers_found: "İzleyici Bulunamadı" - new_tracker: "Yeni İzleyici" - add_one: "Bir tane Ekle" - google_analytics_id: "Analytik Kimliği" - back_to_trackers_list: "İzleyiciler Listesine Geri Dön" name: "ad" description: "Açıklama" type: "Çeşit" @@ -2932,7 +2906,7 @@ tr: store: Ana Site admin: tab: - dashboard: "Gösterge Paneli" + dashboard: "KONTROL PANELİ" orders: "Siparişler" bulk_order_management: "Toplu Sipariş Yönetimi" subscriptions: "Üyelikler" @@ -2941,7 +2915,7 @@ tr: properties: "Özellikler" variant_overrides: "Stok" reports: "Raporlar" - configuration: "Yapılandırma" + configuration: "KURULUM" users: "Kullanıcılar" roles: "Roller" order_cycles: "Sipariş Dönemleri" @@ -2951,7 +2925,7 @@ tr: groups: "Gruplar" product_properties: index: - inherits_properties_checkbox_hint: "Özellikler %{supplier}'den aktarılsın mı? (yukarıda geçersiz kılınmadıkça)" + inherits_properties_checkbox_hint: "Özellikler %{supplier}'den devralınsın mı? (yukarıda geçersiz kılınmadıkça)" add_product_properties: "Ürün Özelliği Ekle" select_from_prototype: "Prototipten Seç" properties: @@ -3112,10 +3086,10 @@ tr: title: "Yeni Ürün" new_product: "Yeni Ürün" supplier: "Tedarikçi" - product_name: "Ürün adı" + product_name: "ÜRÜN ADI" units: "Ölçü Birimi" value: "değer" - unit_name: "Birim adı" + unit_name: "BİRİM ADI" price: "Fiyat" on_hand: "Mevcut" on_demand: "Talep üzerine" @@ -3136,19 +3110,19 @@ tr: display_as: Gösterme Şekli category: Kategori tax_category: Vergi Kategorisi - inherits_properties?: Özellikler aktarılıyor mu? + inherits_properties?: Özellikler devralınsın mı? available_on: Şu Tarihte Hazır av_on: "Şu tarihte hazır" import_date: "İçe Aktarım Tarihi" products_variant: variant_has_n_overrides: "Bu varyant %{n} geçersiz kılınma özelliğine sahip" new_variant: "Yeni Varyant" - product_name: Ürün adı + product_name: ÜRÜN ADI primary_taxon_form: product_category: Ürün Kategorisi group_buy_form: group_buy: "Grup Alımı?" - bulk_unit_size: 'Toplu Ölçü ' + bulk_unit_size: Toplu Alım Miktarı display_as: display_as: Gösterme Şekli reports: @@ -3159,14 +3133,6 @@ tr: bulk_coop_allocation: 'Müşteri Bazında Toplu Alım Rakamları' bulk_coop_packing_sheets: 'Toplu Alım - Paketleme Sayfaları' bulk_coop_customer_payments: 'Toplu Alım - Müşteri Ödemeleri' - enterprise_fee_summaries: - filters: - date_range: "Tarih Aralığı" - report_format_csv: "CSV olarak indir" - generate_report: "Rapor Oluştur" - report: - none: "Yok" - select_and_search: "Filtreleri seçin ve verilerinize erişmek için RAPOR OLUŞTUR'a tıklayın." users: index: listing_users: "Kullanıcılar Listeleniyor" @@ -3211,14 +3177,15 @@ tr: autocomplete: producer_name: "Üretici" unit: "Birim" - general_settings: + shared: + sortable_header: + name: "Ad" edit: legal_settings: "Yasal Ayarlar" cookies_consent_banner_toggle: "Çerezler onay başlığını göster" privacy_policy_url: "Gizlilik Politikası URLsi" enterprises_require_tos: "İşletmeler Hizmet Şartlarını kabul etmelidir" cookies_policy_matomo_section: "Çerez politikası sayfasında Matomo bölümünü görüntüle" - cookies_policy_ga_section: "Çerez politikası sayfasında Google Analytics bölümünü görüntüle" footer_tos_url: "Hizmet Şartları URLsi" checkout: payment: From 7180af2736d60905db54cba3868cc11639b18c22 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 4 May 2020 22:46:59 +0000 Subject: [PATCH 87/89] Bump ddtrace from 0.34.2 to 0.35.0 Bumps [ddtrace](https://github.com/DataDog/dd-trace-rb) from 0.34.2 to 0.35.0. - [Release notes](https://github.com/DataDog/dd-trace-rb/releases) - [Changelog](https://github.com/DataDog/dd-trace-rb/blob/master/CHANGELOG.md) - [Commits](https://github.com/DataDog/dd-trace-rb/compare/v0.34.2...v0.35.0) Signed-off-by: dependabot-preview[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d56477f603..7ff9cd2a05 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -196,7 +196,7 @@ GEM activerecord (>= 3.2.0, < 5.0) fog (~> 1.0) rails (>= 3.2.0, < 5.0) - ddtrace (0.34.2) + ddtrace (0.35.0) msgpack debugger-linecache (1.2.0) delayed_job (4.1.8) From a3757992b5e0aa5408e478a7cf9ebe9993ed9a85 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 5 May 2020 09:55:14 +0200 Subject: [PATCH 88/89] Use #tap to destroy and remove before block --- spec/models/concerns/variant_stock_spec.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/models/concerns/variant_stock_spec.rb b/spec/models/concerns/variant_stock_spec.rb index 0c9aa30a25..160f802df9 100644 --- a/spec/models/concerns/variant_stock_spec.rb +++ b/spec/models/concerns/variant_stock_spec.rb @@ -103,11 +103,7 @@ describe VariantStock do end context 'when the variant has been soft-deleted' do - let(:deleted_variant) { create(:variant) } - - before do - deleted_variant.destroy - end + let(:deleted_variant) { create(:variant).tap(&:destroy) } it 'has no stock items' do expect(deleted_variant.stock_items.count).to eq 0 From 805f91e838913f02f0cc08504165f47134330a55 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 5 May 2020 09:56:08 +0200 Subject: [PATCH 89/89] Remove unnecessary #all call --- app/services/cart_service.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 90b67450cf..5818f8f91f 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -43,7 +43,6 @@ class CartService Spree::Variant.where(id: variant_ids_in_data). includes(:default_price, :stock_items, :product). - all. index_by(&:id) end end