diff --git a/Dockerfile b/Dockerfile index 202bbeccf7..c30df2f92f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,8 +13,8 @@ WORKDIR /usr/src/app COPY .ruby-version . # Install Rbenv & Ruby -RUN git clone https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \ - git clone https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build && \ +RUN git clone --depth 1 --branch v1.1.2 https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \ + git clone --depth 1 --branch v20200520 https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build && \ ${RBENV_ROOT}/plugins/ruby-build/install.sh && \ echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh && \ rbenv install $(cat .ruby-version) && \ @@ -43,4 +43,5 @@ RUN wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.z # Copy code and install app dependencies COPY . /usr/src/app/ -RUN bundle install +# Run bundler install in parallel with the amount of available CPUs +RUN bundle install --jobs="$(nproc)" diff --git a/Gemfile.lock b/Gemfile.lock index 00e058fd5a..2776c9503c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -502,6 +502,7 @@ GEM pg (0.21.0) polyamorous (0.6.4) activerecord (>= 3.0) + power_assert (1.2.0) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -643,9 +644,10 @@ GEM sprockets (>= 2.8, < 4.0) state_machine (1.2.0) stringex (1.5.1) - stripe (5.15.0) temple (0.8.2) - test-unit (3.3.5) + stripe (5.22.0) + test-unit (3.3.6) + power_assert thor (0.20.3) thread_safe (0.3.6) tilt (1.4.1) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index d92bc73566..94939f3f91 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -105,6 +105,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.producerFilter = "0" $scope.categoryFilter = "0" $scope.importDateFilter = "0" + $scope.fetchProducts() $scope.$watch 'sortOptions', (sort) -> return unless sort && sort.predicate != "" diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index f6d4c964d6..751ddf8866 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -37,6 +37,7 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque 'q[distributor_id_in][]': $scope['q']['distributor_id_in'], 'q[order_cycle_id_in][]': $scope['q']['order_cycle_id_in'], 'q[s]': $scope.sorting || 'completed_at desc', + shipping_method_id: $scope.shipping_method_id, per_page: $scope.per_page, page: page } diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index 46e50cb574..843749c2e6 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons, Dereferencer, Matcher, Geo, $rootScope) -> +Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons, Dereferencer, Matcher, GmapsGeo, $rootScope) -> new class Enterprises enterprises: [] enterprises_by_id: {} @@ -59,7 +59,7 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons false calculateDistance: (query, firstMatching) -> - if query?.length > 0 and Geo.OK + if query?.length > 0 and GmapsGeo.OK if firstMatching? @setDistanceFrom firstMatching else @@ -68,9 +68,9 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons @resetDistance() calculateDistanceGeo: (query) -> - Geo.geocode query, (results, status) => + GmapsGeo.geocode query, (results, status) => $rootScope.$apply => - if status == Geo.OK + if status == GmapsGeo.OK #console.log "Geocoded #{query} -> #{results[0].geometry.location}." @setDistanceFrom results[0].geometry.location else @@ -79,7 +79,7 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons setDistanceFrom: (locatable) -> for enterprise in @enterprises - enterprise.distance = Geo.distanceBetween enterprise, locatable + enterprise.distance = GmapsGeo.distanceBetween enterprise, locatable $rootScope.$broadcast 'enterprisesChanged' resetDistance: -> diff --git a/app/assets/javascripts/darkswarm/services/geo.js.erb.coffee b/app/assets/javascripts/darkswarm/services/gmaps_geo.js.erb.coffee similarity index 93% rename from app/assets/javascripts/darkswarm/services/geo.js.erb.coffee rename to app/assets/javascripts/darkswarm/services/gmaps_geo.js.erb.coffee index ee5961be36..9b78ea4bcc 100644 --- a/app/assets/javascripts/darkswarm/services/geo.js.erb.coffee +++ b/app/assets/javascripts/darkswarm/services/gmaps_geo.js.erb.coffee @@ -1,5 +1,5 @@ -Darkswarm.service "Geo", -> - new class Geo +Darkswarm.service "GmapsGeo", -> + new class GmapsGeo OK: google?.maps?.GeocoderStatus?.OK # Usage: diff --git a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss index 95bd6b1059..a360c8f606 100644 --- a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss @@ -63,6 +63,8 @@ ordercycle { select { background-image: url('/assets/white-caret.svg'); + background-size: 30px auto; + background-position-x: 102%; } p { @@ -71,24 +73,27 @@ ordercycle { select, p { - width: inherit; display: inline-block; color: $white; background-color: transparent; border: 0; + border-radius: 0 $radius-small $radius-small 0; margin-bottom: 0; + padding: 0.5em 1.25em 0.5em 0.75em; font-size: 1em; line-height: 1.3em; - padding: 0.5em 1.25em 0.5em 0.75em; height: 2.35em; - background-size: 30px auto; - border-radius: 0 $radius-small $radius-small 0; min-width: 13em; + width: 200px; @include breakpoint(mobile) { width: 100%; min-width: 0; } + + @media all and (min-width: 640px) and (max-width: 1024px), (min-width: 1200px) { + width: 250px; + } } option { @@ -107,6 +112,7 @@ ordercycle { @include breakpoint(mobile) { display: flex; + margin-right: 0; } } @@ -162,7 +168,7 @@ shop ordercycle { @include breakpoint(tablet) { float: none; - padding: 0 0 10px; + padding: 0; } } diff --git a/app/assets/stylesheets/darkswarm/distributor_header.css.scss b/app/assets/stylesheets/darkswarm/distributor_header.css.scss index be64ef3914..f7591cd986 100644 --- a/app/assets/stylesheets/darkswarm/distributor_header.css.scss +++ b/app/assets/stylesheets/darkswarm/distributor_header.css.scss @@ -20,10 +20,6 @@ section { padding: 30px 0 0; position: relative; - select { - width: 200px; - } - img { display: block; height: 100px; diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 6c477acb48..0c46523184 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -234,6 +234,7 @@ $sidebar-footer-height: 5em; .warning-sign { margin: 0 10px 0 5px; display: inline-block; + line-height: 1.9rem; strong { color: $grey-650; diff --git a/app/controllers/spree/admin/mail_methods_controller.rb b/app/controllers/spree/admin/mail_methods_controller.rb index e95739148d..a21e3afe7d 100644 --- a/app/controllers/spree/admin/mail_methods_controller.rb +++ b/app/controllers/spree/admin/mail_methods_controller.rb @@ -23,7 +23,7 @@ module Spree rescue StandardError => e flash[:error] = Spree.t('admin.mail_methods.testmail.error') % { e: e } ensure - redirect_to edit_admin_mail_method_url + redirect_to edit_admin_mail_methods_url end private diff --git a/app/controllers/spree/admin/reports_controller.rb b/app/controllers/spree/admin/reports_controller.rb index 095643e7a0..3ada1fbbcd 100644 --- a/app/controllers/spree/admin/reports_controller.rb +++ b/app/controllers/spree/admin/reports_controller.rb @@ -247,8 +247,10 @@ module Spree end def suppliers_of_products_distributed_by(distributors) - distributors.map { |d| Spree::Product.in_distributor(d).includes(:supplier).to_a }. - flatten.map(&:supplier).uniq + supplier_ids = Spree::Product.in_distributors(distributors). + select('spree_products.supplier_id') + + Enterprise.where(id: supplier_ids) end # Load order cycles the current user has access to diff --git a/app/models/spree/app_configuration_decorator.rb b/app/models/spree/app_configuration_decorator.rb index 5b11a0ee61..a039ddbd45 100644 --- a/app/models/spree/app_configuration_decorator.rb +++ b/app/models/spree/app_configuration_decorator.rb @@ -26,6 +26,7 @@ Spree::AppConfiguration.class_eval do preference :bugherd_api_key, :string, default: nil preference :matomo_url, :string, default: nil preference :matomo_site_id, :string, default: nil + preference :matomo_tag_manager_url, :string, default: nil # Invoices & Receipts preference :enable_invoices?, :boolean, default: true diff --git a/app/models/spree/calculator/price_sack_decorator.rb b/app/models/spree/calculator/price_sack_decorator.rb index b474f77861..389649f916 100644 --- a/app/models/spree/calculator/price_sack_decorator.rb +++ b/app/models/spree/calculator/price_sack_decorator.rb @@ -13,7 +13,7 @@ module Spree end def compute(object) - min = preferred_minimal_amount.to_i + min = preferred_minimal_amount.to_f order_amount = line_items_for(object).map { |x| x.price * x.quantity }.sum if order_amount < min diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index 35f8af598d..602329b5c1 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -79,6 +79,12 @@ Spree::Product.class_eval do select('distinct spree_products.*') } + scope :in_distributors, lambda { |distributors| + with_order_cycles_outer. + where('(o_exchanges.incoming = ? AND o_exchanges.receiver_id IN (?))', false, distributors). + uniq + } + # Products supplied by a given enterprise or distributed via that enterprise through an OC scope :in_supplier_or_distributor, lambda { |enterprise| enterprise = enterprise.respond_to?(:id) ? enterprise.id : enterprise.to_i @@ -153,18 +159,6 @@ Spree::Product.class_eval do self.class.in_order_cycle(order_cycle).include? self end - # overriding to check self.on_demand as well - def has_stock? - has_variants? ? variants.any?(&:in_stock?) : (on_demand || master.in_stock?) - end - - def has_stock_for_distribution?(order_cycle, distributor) - # This product has stock for a distribution if it is available on-demand - # or if one of its variants in the distribution is in stock - (!has_variants? && on_demand) || - variants_distributed_by(order_cycle, distributor).any?(&:in_stock?) - end - def variants_distributed_by(order_cycle, distributor) order_cycle.variants_distributed_by(distributor).where(product_id: self) end diff --git a/app/services/bulk_invoice_service.rb b/app/services/bulk_invoice_service.rb index 18921bd413..ab69df03ca 100644 --- a/app/services/bulk_invoice_service.rb +++ b/app/services/bulk_invoice_service.rb @@ -7,9 +7,8 @@ class BulkInvoiceService def start_pdf_job(order_ids) pdf = CombinePDF.new - orders = Spree::Order.where(id: order_ids) - orders.each do |order| + orders_from(order_ids).each do |order| invoice = renderer.render_to_string(order) pdf << CombinePDF.parse(invoice) @@ -29,6 +28,10 @@ class BulkInvoiceService private + def orders_from(order_ids) + Spree::Order.where(id: order_ids).order("completed_at DESC") + end + def new_invoice_id Time.zone.now.to_i.to_s end diff --git a/app/services/search_orders.rb b/app/services/search_orders.rb index 4ff0f717da..30afb964a7 100644 --- a/app/services/search_orders.rb +++ b/app/services/search_orders.rb @@ -24,13 +24,25 @@ class SearchOrders attr_reader :params, :current_user def fetch_orders - @search = ::Permissions::Order.new(current_user).editable_orders.ransack(params[:q]) + @search = search_query.ransack(params[:q]) return paginated_results if using_pagination? @search.result(distinct: true) end + def search_query + base_query = ::Permissions::Order.new(current_user).editable_orders + return base_query unless params[:shipping_method_id] + + base_query + .joins(shipments: :shipping_rates) + .where(spree_shipping_rates: { + selected: true, + shipping_method_id: params[:shipping_method_id] + }) + end + def paginated_results @search.result(distinct: true) .page(params[:page]) diff --git a/app/views/admin/matomo_settings/edit.html.haml b/app/views/admin/matomo_settings/edit.html.haml index 51f553bcff..0c553ae002 100644 --- a/app/views/admin/matomo_settings/edit.html.haml +++ b/app/views/admin/matomo_settings/edit.html.haml @@ -18,6 +18,10 @@ = label_tag(:matomo_site_id, t('.matomo_site_id')) + tag(:br) = preference_field_tag("preferences[#{:matomo_site_id}]", Spree::Config[:matomo_site_id], type: Spree::Config.preference_type(:matomo_site_id)) + .field + = label_tag(:matomo_tag_manager_url, t('.matomo_tag_manager_url')) + tag(:br) + = preference_field_tag("preferences[#{:matomo_tag_manager_url}]", Spree::Config[:matomo_tag_manager_url], type: Spree::Config.preference_type(:matomo_tag_manager_url)) + .warning.note= t('.config_instructions_tag_manager_html') .form-buttons{"data-hook" => "buttons"} = button t(:update), 'icon-refresh' diff --git a/app/views/layouts/_matomo_tag.html.haml b/app/views/layouts/_matomo_tag.html.haml index aba1b19528..85a4cf47dc 100644 --- a/app/views/layouts/_matomo_tag.html.haml +++ b/app/views/layouts/_matomo_tag.html.haml @@ -1,6 +1,15 @@ + +- if Spree::Config.matomo_tag_manager_url.present? + :javascript + var _mtm = _mtm || []; + _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; + var u="#{Spree::Config.matomo_tag_manager_url}"; + g.type='text/javascript'; g.async=true; g.defer=true; g.src=u; s.parentNode.insertBefore(g,s); + - if Spree::Config.matomo_url.present? :javascript - var _paq = _paq || []; + var _paq = window._paq || []; _paq.push(["setDocumentTitle", document.domain + "/" + document.title]); _paq.push(["setCookieDomain", "*.#{Spree::Config.site_url}"]); _paq.push(["setDomains", ["*.#{Spree::Config.site_url}"]]); @@ -8,8 +17,8 @@ _paq.push(['enableLinkTracking']); (function() { var u="#{Spree::Config.matomo_url}"; - _paq.push(['setTrackerUrl', u+'piwik.php']); + _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '#{Spree::Config.matomo_site_id}']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); diff --git a/app/views/spree/admin/adjustments/edit.html.haml b/app/views/spree/admin/adjustments/edit.html.haml index c31dfb145e..756288c4f4 100644 --- a/app/views/spree/admin/adjustments/edit.html.haml +++ b/app/views/spree/admin/adjustments/edit.html.haml @@ -1,4 +1,5 @@ -= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Adjustments' } += render :partial => 'spree/admin/shared/order_page_title' += render :partial => 'spree/admin/shared/order_tabs', locals: { current: 'Adjustments' } - content_for :page_title do %i.icon-arrow-right diff --git a/app/views/spree/admin/adjustments/index.html.haml b/app/views/spree/admin/adjustments/index.html.haml index 7268441e1e..02433a6e5c 100644 --- a/app/views/spree/admin/adjustments/index.html.haml +++ b/app/views/spree/admin/adjustments/index.html.haml @@ -1,4 +1,5 @@ -= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Adjustments' } += render partial: 'spree/admin/shared/order_page_title' += render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Adjustments' } - content_for :page_title do %i.icon-arrow-right diff --git a/app/views/spree/admin/adjustments/new.html.haml b/app/views/spree/admin/adjustments/new.html.haml index 3eb6f5c58e..2af33aae54 100644 --- a/app/views/spree/admin/adjustments/new.html.haml +++ b/app/views/spree/admin/adjustments/new.html.haml @@ -1,4 +1,5 @@ -= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Adjustments' } += render partial: 'spree/admin/shared/order_page_title' += render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Adjustments' } - content_for :page_title do %i.icon-arrow-right diff --git a/app/views/spree/admin/images/index.html.haml b/app/views/spree/admin/images/index.html.haml index 89124383e2..37cc53c70b 100644 --- a/app/views/spree/admin/images/index.html.haml +++ b/app/views/spree/admin/images/index.html.haml @@ -15,15 +15,13 @@ %colgroup %col{ style: "width: 5%" }/ %col{ style: "width: 10%" }/ - - if @product.has_variants? - %col{ style: "width: 25%" }/ + %col{ style: "width: 25%" }/ %col{ style: "width: 45%" }/ %col{ style: "width: 15%" }/ %thead %tr %th{:colspan => "2"}= t('spree.thumbnail') - - if @product.has_variants? - %th= Spree::Variant.model_name.human + %th= Spree::Variant.model_name.human %th= t('spree.alt_text') %th.actions %tbody @@ -35,8 +33,7 @@ %span.handle %td = link_to image_tag(image.attachment.url(:mini)), image.attachment.url(:product) - - if @product.has_variants? - %td= options_text_for(image) + %td= options_text_for(image) %td= image.alt %td.actions = link_to_with_icon 'icon-edit', t('spree.edit'), edit_admin_product_image_url(@product, image), no_text: true, data: { action: 'edit'} diff --git a/app/views/spree/admin/mail_methods/edit.html.haml b/app/views/spree/admin/mail_methods/edit.html.haml index 90938e4542..9e79403270 100644 --- a/app/views/spree/admin/mail_methods/edit.html.haml +++ b/app/views/spree/admin/mail_methods/edit.html.haml @@ -5,11 +5,11 @@ - content_for :page_actions do %li - = link_to_with_icon 'icon-envelope-alt', t("spree.admin.mail_methods.send_testmail"), testmail_admin_mail_method_path, method: :post, title: t("spree.admin.mail_methods.send_testmail"), class: 'send_mail button no-text' + = link_to_with_icon 'icon-envelope-alt', t("spree.admin.mail_methods.send_testmail"), testmail_admin_mail_methods_path, method: :post, title: t("spree.admin.mail_methods.send_testmail"), class: 'send_mail button no-text' = render partial: 'spree/shared/error_messages', locals: { target: @mail_method } -= form_tag admin_mail_method_path, method: :put do |f| += form_tag admin_mail_methods_path, method: :put do |f| %fieldset.no-border-top = render partial: 'form', locals: { f: f } .form-buttons.filter-actions.actions= button t("spree.actions.update"), 'icon-refresh' diff --git a/app/views/spree/admin/orders/_filters.html.haml b/app/views/spree/admin/orders/_filters.html.haml index 5b1c9b4024..0479e26a62 100644 --- a/app/views/spree/admin/orders/_filters.html.haml +++ b/app/views/spree/admin/orders/_filters.html.haml @@ -32,6 +32,11 @@ %label = check_box_tag "q[completed_at_not_null]", 1, true, {'ng-model' => 'q.completed_at_not_null'} = t(:show_only_complete_orders) + .field + = label_tag nil, t(:shipping_method) + = select_tag("shipping_method_id", + options_for_select(Spree::ShippingMethod.managed_by(spree_current_user).collect {|s| [t("spree.shipping_method.#{s.name}"), s.id]}), + {include_blank: true, class: 'select2', 'ng-model' => 'shipping_method_id'}) .field-block.alpha.eight.columns = label_tag nil, t(:distributors) = select_tag("q[distributor_id_in]", diff --git a/app/views/spree/admin/orders/customer_details/edit.html.haml b/app/views/spree/admin/orders/customer_details/edit.html.haml index f6a83316da..584c3350b9 100644 --- a/app/views/spree/admin/orders/customer_details/edit.html.haml +++ b/app/views/spree/admin/orders/customer_details/edit.html.haml @@ -1,4 +1,5 @@ -= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Customer Details' } += render partial: 'spree/admin/shared/order_page_title' += render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Customer Details' } = csrf_meta_tags diff --git a/app/views/spree/admin/orders/edit.html.haml b/app/views/spree/admin/orders/edit.html.haml index 69abbe8f38..d2047e6bf4 100644 --- a/app/views/spree/admin/orders/edit.html.haml +++ b/app/views/spree/admin/orders/edit.html.haml @@ -8,7 +8,8 @@ - if can?(:admin, Spree::Order) %li= button_link_to t(:back_to_orders_list), admin_orders_path, :icon => 'icon-arrow-left' -= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Order Details' } += render partial: "spree/admin/shared/order_page_title" += render partial: "spree/admin/shared/order_tabs", locals: { current: 'Order Details' } %div{"data-hook" => "admin_order_edit_header"} -# Suppress errors when manually creating a new order - needs to proceed to edit page diff --git a/app/views/spree/admin/orders/new.html.haml b/app/views/spree/admin/orders/new.html.haml index 9ec198b2d7..556e464cd4 100644 --- a/app/views/spree/admin/orders/new.html.haml +++ b/app/views/spree/admin/orders/new.html.haml @@ -1,5 +1,7 @@ - content_for :page_title do - = t(:new) + = t(:new_order) + \# + = @order.number - content_for :page_actions do %li= button_link_to t(:back_to_orders_list), spree.admin_orders_path, :icon => 'icon-arrow-left' diff --git a/app/views/spree/admin/orders/set_distribution.html.haml b/app/views/spree/admin/orders/set_distribution.html.haml index f5e259321e..3579619185 100644 --- a/app/views/spree/admin/orders/set_distribution.html.haml +++ b/app/views/spree/admin/orders/set_distribution.html.haml @@ -1,12 +1,14 @@ -- content_for :page_title do - = t(:new) - - content_for :page_actions do %li= button_link_to t(:back_to_orders_list), spree.admin_orders_path, :icon => 'icon-arrow-left' = admin_inject_shops(module: 'admin.orders') = admin_inject_order_cycles +- content_for :page_title do + = t(:new_order) + \# + = @order.number + = render 'spree/admin/shared/order_tabs', :current => 'Order Details' = csrf_meta_tags diff --git a/app/views/spree/admin/payments/index.html.haml b/app/views/spree/admin/payments/index.html.haml index 3c62b54843..7fbe76429f 100644 --- a/app/views/spree/admin/payments/index.html.haml +++ b/app/views/spree/admin/payments/index.html.haml @@ -1,3 +1,4 @@ += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Payments' } - content_for :page_actions do diff --git a/app/views/spree/admin/payments/new.html.haml b/app/views/spree/admin/payments/new.html.haml index 7c825051ad..710456cc2d 100644 --- a/app/views/spree/admin/payments/new.html.haml +++ b/app/views/spree/admin/payments/new.html.haml @@ -1,3 +1,4 @@ += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Payments' } - content_for :page_title do diff --git a/app/views/spree/admin/payments/show.html.haml b/app/views/spree/admin/payments/show.html.haml index 97850cb19a..acbc2d8aaf 100644 --- a/app/views/spree/admin/payments/show.html.haml +++ b/app/views/spree/admin/payments/show.html.haml @@ -1,3 +1,4 @@ += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Payments' } - content_for :page_title do diff --git a/app/views/spree/admin/products/_form.html.haml b/app/views/spree/admin/products/_form.html.haml index 616f7977f3..08386e10dd 100644 --- a/app/views/spree/admin/products/_form.html.haml +++ b/app/views/spree/admin/products/_form.html.haml @@ -43,37 +43,6 @@ .clear - - unless @product.has_variants? - = f.field_container :sku do - = f.label :sku, t(:sku) - = f.text_field :sku, :size => 16 - - .alpha.two.columns - = f.field_container :on_hand do - = f.label :on_hand, t(:on_hand) - = f.number_field :on_hand, :min => 0 - .omega.two.columns - = f.field_container :on_demand, :class => ['checkbox'] do - %label - = f.check_box :on_demand - = t(:on_demand) - - .clear - - %ul#shipping_specs - %li#shipping_specs_weight_field.field.alpha.two.columns - = f.label :weight, t(:weight) - = f.text_field :weight, :size => 4 - %li#shipping_specs_height_field.field.omega.two.columns - = f.label :height, t(:height) - = f.text_field :height, :size => 4 - %li#shipping_specs_width_field.field.alpha.two.columns - = f.label :width, t(:width) - = f.text_field :width, :size => 4 - %li#shipping_specs_depth_field.field.omega.two.columns - = f.label :depth, t(:depth) - = f.text_field :depth, :size => 4 - = f.field_container :shipping_categories do = f.label :shipping_category_id, t(:shipping_categories) = f.collection_select(:shipping_category_id, @shipping_categories, :id, :name, { :include_blank => 'None' }, { :class => 'select2' }) diff --git a/app/views/spree/admin/return_authorizations/edit.html.haml b/app/views/spree/admin/return_authorizations/edit.html.haml index 2847c10965..9f5429640d 100644 --- a/app/views/spree/admin/return_authorizations/edit.html.haml +++ b/app/views/spree/admin/return_authorizations/edit.html.haml @@ -6,6 +6,7 @@ - if @return_authorization.can_cancel? = button_link_to t('actions.cancel'), fire_admin_order_return_authorization_url(@order, @return_authorization, e: 'cancel'), method: :put, data: { confirm: t('.are_you_sure') }, icon: 'icon-remove' += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Return Authorizations' } - content_for :page_title do diff --git a/app/views/spree/admin/return_authorizations/index.html.haml b/app/views/spree/admin/return_authorizations/index.html.haml index acf016b50d..bc8ed9dd80 100644 --- a/app/views/spree/admin/return_authorizations/index.html.haml +++ b/app/views/spree/admin/return_authorizations/index.html.haml @@ -1,3 +1,4 @@ += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Return Authorizations' } - content_for :page_actions do diff --git a/app/views/spree/admin/return_authorizations/new.html.haml b/app/views/spree/admin/return_authorizations/new.html.haml index 54573f7392..5594288cf3 100644 --- a/app/views/spree/admin/return_authorizations/new.html.haml +++ b/app/views/spree/admin/return_authorizations/new.html.haml @@ -1,3 +1,4 @@ += render partial: 'spree/admin/shared/order_page_title' = render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Return Authorizations' } - content_for :page_title do diff --git a/app/views/spree/admin/shared/_configuration_menu.html.haml b/app/views/spree/admin/shared/_configuration_menu.html.haml index 5810cc97b2..c5f302f0db 100644 --- a/app/views/spree/admin/shared/_configuration_menu.html.haml +++ b/app/views/spree/admin/shared/_configuration_menu.html.haml @@ -6,7 +6,7 @@ %ul.sidebar = configurations_sidebar_menu_item Spree.t(:general_settings), edit_admin_general_settings_path - if Spree::Config[:override_actionmailer_config] - = configurations_sidebar_menu_item Spree.t(:mail_method_settings), edit_admin_mail_method_path + = configurations_sidebar_menu_item Spree.t(:mail_method_settings), edit_admin_mail_methods_path = configurations_sidebar_menu_item Spree.t(:image_settings), edit_admin_image_settings_path = configurations_sidebar_menu_item Spree.t(:tax_categories), admin_tax_categories_path = configurations_sidebar_menu_item Spree.t(:tax_rates), admin_tax_rates_path diff --git a/app/views/spree/admin/shared/_order_page_title.html.haml b/app/views/spree/admin/shared/_order_page_title.html.haml new file mode 100644 index 0000000000..927062d4f7 --- /dev/null +++ b/app/views/spree/admin/shared/_order_page_title.html.haml @@ -0,0 +1,4 @@ +- content_for :page_title do + = t(:order) + \# + = @order.number diff --git a/app/views/spree/admin/shared/_order_tabs.html.haml b/app/views/spree/admin/shared/_order_tabs.html.haml index 89d7299fdc..f96a5dd140 100644 --- a/app/views/spree/admin/shared/_order_tabs.html.haml +++ b/app/views/spree/admin/shared/_order_tabs.html.haml @@ -1,8 +1,3 @@ -- content_for :page_title do - = t(:order) - \# - = @order.number - - if @order.bill_address.present? = @order.bill_address.firstname = @order.bill_address.lastname diff --git a/app/views/spree/admin/shared/_tabs.html.haml b/app/views/spree/admin/shared/_tabs.html.haml index 920480fc8b..e0134ee272 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, :contents, :invoice_settings, :matomo_settings, :stripe_connect_settings, label: 'configuration', icon: 'icon-wrench', url: edit_admin_general_settings_path += tab :general_settings, :mail_methods, :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/admin/variants/_autocomplete.js.erb b/app/views/spree/admin/variants/_autocomplete.js.erb index 527b55568c..5ef095925c 100644 --- a/app/views/spree/admin/variants/_autocomplete.js.erb +++ b/app/views/spree/admin/variants/_autocomplete.js.erb @@ -57,7 +57,7 @@ {{else}} - <%= Spree.t(:out_of_stock) %> + <%= t('.out_of_stock') %> 0 {{/if}} diff --git a/app/views/spree/admin/variants/index.html.haml b/app/views/spree/admin/variants/index.html.haml index 199bcc0501..ce9c1edd86 100644 --- a/app/views/spree/admin/variants/index.html.haml +++ b/app/views/spree/admin/variants/index.html.haml @@ -3,40 +3,32 @@ = render partial: 'spree/admin/shared/product_tabs', locals: {current: 'Variants'} #new_variant -- if @variants.any? - %table.index.sortable{"data-sortable-link" => update_positions_admin_product_variants_path(@product)} - %colgroup - %col{style: "width: 5%"}/ - %col{style: "width: 25%"}/ - %col{style: "width: 20%"}/ - %col{style: "width: 20%"}/ - %col{style: "width: 15%"}/ - %col{style: "width: 15%"}/ - %thead - %tr - %th{colspan: "2"}= t('.options') - %th= t('.price') - %th= t('.sku') - %th.actions - %tbody - - @variants.each do |variant| - %tr{id: spree_dom_id(variant), class: cycle('odd', 'even'), style: "#{"color:red;" if variant.deleted? }" } - %td.no-border - %span.handle - %td= variant.full_name - %td.align-center= variant.display_price.to_html - %td.align-center= variant.sku - %td.actions - = link_to_edit(variant, no_text: true) unless variant.deleted? - = link_to_delete(variant, no_text: true) unless variant.deleted? - - unless @product.has_variants? - %tr - %td{colspan: "5"}= t(:none) -- else - .alpha.twelve.columns.no-objects-found - = t('.no_results') - \. +%table.index.sortable{"data-sortable-link" => update_positions_admin_product_variants_path(@product)} + %colgroup + %col{style: "width: 5%"}/ + %col{style: "width: 25%"}/ + %col{style: "width: 20%"}/ + %col{style: "width: 20%"}/ + %col{style: "width: 15%"}/ + %col{style: "width: 15%"}/ + %thead + %tr + %th{colspan: "2"}= t('.options') + %th= t('.price') + %th= t('.sku') + %th.actions + %tbody + - @variants.each do |variant| + %tr{id: spree_dom_id(variant), class: cycle('odd', 'even'), style: "#{"color:red;" if variant.deleted? }" } + %td.no-border + %span.handle + %td= variant.full_name + %td.align-center= variant.display_price.to_html + %td.align-center= variant.sku + %td.actions + = link_to_edit(variant, no_text: true) unless variant.deleted? + = link_to_delete(variant, no_text: true) unless variant.deleted? - if @product.empty_option_values? %p.first_add_option_types.no-objects-found diff --git a/app/views/spree/shared/_error_messages.html.haml b/app/views/spree/shared/_error_messages.html.haml index 54fabd313e..b0ced1b317 100644 --- a/app/views/spree/shared/_error_messages.html.haml +++ b/app/views/spree/shared/_error_messages.html.haml @@ -1,10 +1,9 @@ - if target && target.errors.any? #errorExplanation.errorExplanation %h2 - = Spree.t(:errors_prohibited_this_record_from_being_saved, count: target.errors.count) - \: + = t(".errors_prohibited_this_record_from_being_saved", count: target.errors.count) %p - = Spree.t(:there_were_problems_with_the_following_fields) + = t(".there_were_problems_with_the_following_fields") \: %ul - target.errors.full_messages.each do |msg| diff --git a/config/locales/ar.yml b/config/locales/ar.yml index f4c0dbbcf7..278d54f8dd 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -363,7 +363,6 @@ ar: title: "إعدادات Matomo" matomo_url: "العنوان الالكتروني ل Matomo " matomo_site_id: "معرف موقع Matomo" - info_html: "Matomo هو تحليلات الويب والجوال. يمكنك إما تنصيب Matomo محليًا أو استخدام خدمة استضافة سحابية. انظر matomo.org لمزيد من المعلومات." config_instructions_html: "هنا يمكنك تهيئة تكامل Matomo لشبكة الغذاء المفتوح. يجب أن يشير عنوان الالكتروني URL الخاص بـ Matomo أدناه إلى مثيل Matomo حيث سيتم إرسال معلومات تتبع المستخدم إلى ؛ إذا تم تركه فارغًا ، فسيتم تعطيل تتبع مستخدم Matomo. حقل معرف الموقع ليس إلزاميًا ولكنه مفيد إذا كنت تتعقب أكثر من موقع ويب على مثيل Matomo ؛ يمكن العثور عليه على وحدة تحكم مثيل Matomo." customers: index: @@ -3168,6 +3167,7 @@ ar: display_as: "عرض ب" display_name: "اسم العرض" autocomplete: + out_of_stock: "غير متوفر" producer_name: "المنتج" unit: "وحدة" shared: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 4ee031cc78..fe72aeeb3a 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -368,8 +368,10 @@ ca: title: "Configuració de Matomo" matomo_url: "URL de Matomo" matomo_site_id: "Identificador de Matomo" - info_html: "Matomo és un analitzador de webs i mòbils. Podeu allotjar Matomo de manera local o utilitzar un servei al núvol. Vegeu matomo.org per obtenir més informació." + matomo_tag_manager_url: "URL de Matomo Tag Manager" + info_html: "Matomo és una aplicació d'analytics web i mòbil. Podeu allotjar Matomo en local o bé utilitzar un servei allotjat al núvol. Consulteu matomo.org per obtenir més informació." config_instructions_html: "Aquí podeu configurar la integració Matomo OFN. L'URL de Matomo que us apareix a continuació ha d'indicar la instància de Matomo en la qual s'enviarà la informació de seguiment de l'usuari; si es deixa buit, el seguiment de l'usuari de Matomo estarà desactivat. El camp d'identificació del lloc no és obligatori, però és útil si fa un seguiment de més d'un lloc web en una sola instància de Matomo; es pot trobar a la consola d'instància de Matomo." + config_instructions_tag_manager_html: "En configurar l'URL de Matomo Tag Manager s'activa Matomo Tag Manager. Aquesta eina us permet configurar esdeveniments d’analítica. L’URL de Matomo Tag Manager es copia de la secció Instal·lar codi de Matomo Tag Manager. Assegureu-vos de seleccionar el contenidor i l’entorn adequats ja que aquestes opcions canvien l’URL." customers: index: new_customer: "Nova consumidora" @@ -2815,6 +2817,12 @@ ca: void: "Buit" login: "Inicia sessió" password: "Contrasenya" + signature: "Signatura" + solution: "Solució" + landing_page: "Pàgina d'inici" + server: "Servidor" + test_mode: "Mode de prova" + logourl: "URL del logo" configurations: "Configuracions" general_settings: "Configuració general" site_name: "Nom del lloc" @@ -2931,6 +2939,12 @@ ca: options: "Opcions" actions: update: "Actualitzar" + shared: + error_messages: + errors_prohibited_this_record_from_being_saved: + one: "Un error va prohibir guardar aquest registre:" + other: "%{count} errors han impedit guardar aquest registre:" + there_were_problems_with_the_following_fields: "Hi ha hagut problemes amb els camps següents" errors: messages: blank: "no es pot deixar en blanc" @@ -3100,9 +3114,11 @@ ca: display: "Mostra" active: "Actiu" both: "Ambdós" + front_end: "Visible només per al comprador" back_end: "Només pàgina administració (back office) " active_yes: "Sí" active_no: "No" + no_payment_methods_found: "No s'han trobat mètodes de pagament" new: new_payment_method: "Nou mètode de pagament" back_to_payment_methods_list: "Tornar a la llista de mètodes de pagament" @@ -3132,8 +3148,10 @@ ca: active_yes: "Sí" active_no: "No" both: "Ambdues, validació de comanda i administració" + front_end: "Visible només per al comprador" back_end: "Només pàgina administració (back office) " tags: "Etiquetes" + deactivation_warning: "Desactivar un mètode de pagament pot fer que el mètode de pagament desapareixi de la vostra llista. De forma alternativa, podeu amagar un mètode de pagament a la pàgina de compra configurant l'opció \"Mostrar\" a \"només a la pàgina d'administració\" (back end)." providers: provider: "Proveïdor" payments: @@ -3238,6 +3256,7 @@ ca: display_as_placeholder: 'per exemple. 2 kg' display_name_placeholder: 'per exemple. Tomàquets' autocomplete: + out_of_stock: "Fora d'existència" producer_name: "Productor" unit: "Unitat" shared: diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index ea894331c1..f15957eb07 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -367,7 +367,6 @@ de_DE: title: "Matomo-Einstellungen" matomo_url: "Matomo-URL" matomo_site_id: "Matomo-Site-ID" - info_html: "Matomo ist eine Web- und Mobile Analytics. Sie können Matomo entweder lokal hosten oder einen von der Cloud gehosteten Dienst verwenden. Weitere Informationen finden Sie unter matomo.org ." config_instructions_html: "Hier können Sie die OFN Matomo Integration konfigurieren. Die unten angegebene Matomo-URL sollte auf die Matomo-Instanz verweisen, an die die Benutzerverfolgungsinformationen gesendet werden. Wenn es leer bleibt, wird das Matomo-Benutzer-Tracking deaktiviert. Das Feld Site-ID ist nicht obligatorisch, aber nützlich, wenn Sie mehr als eine Website in einer einzelnen Matomo-Instanz verfolgen. Es kann auf der Matomo-Instanzkonsole gefunden werden." customers: index: diff --git a/config/locales/en.yml b/config/locales/en.yml index 63be6d0844..0c23d12125 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -44,6 +44,8 @@ en: base: "Credit Card" order_cycle: orders_close_at: Close date + variant_override: + count_on_hand: "On Hand" errors: models: spree/user: @@ -415,8 +417,10 @@ en: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." + matomo_tag_manager_url: "Matomo Tag Manager URL" + info_html: "Matomo is a Web and Mobile Analytics application. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." + config_instructions_tag_manager_html: "Setting the Matomo Tag Manager URL enables Matomo Tag Manager. This tool allows you to set up analytics events. The Matomo Tag Manager URL is copied from the Install Code section of Matomo Tag Manager. Ensure you select the right container and environment as these options change the URL." customers: index: @@ -2880,6 +2884,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using customer_details: "Customer Details" adjustments: "Adjustments" payments: "Payments" + return_authorizations: "Return Authorizations" payment: "Payment" payment_method: "Payment Method" @@ -3096,6 +3101,12 @@ See the %{link} to find out more about %{sitename}'s features and to start using actions: update: "Update" + shared: + error_messages: + errors_prohibited_this_record_from_being_saved: + one: "1 error prohibited this record from being saved:" + other: "%{count} errors prohibited this record from being saved:" + there_were_problems_with_the_following_fields: "There were problems with the following fields" errors: messages: blank: "can't be blank" @@ -3407,6 +3418,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_AU.yml b/config/locales/en_AU.yml index 87dd14b521..85e74324b9 100644 --- a/config/locales/en_AU.yml +++ b/config/locales/en_AU.yml @@ -359,7 +359,6 @@ en_AU: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3114,6 +3113,7 @@ en_AU: display_as: "Display As" display_name: "Display Name" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_BE.yml b/config/locales/en_BE.yml index ad108f1377..ccefbc27d6 100644 --- a/config/locales/en_BE.yml +++ b/config/locales/en_BE.yml @@ -354,7 +354,6 @@ en_BE: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3021,6 +3020,7 @@ en_BE: price: "Price" display_as: "Display As" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index 2d06220419..8eb65e9a43 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -368,7 +368,6 @@ en_CA: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3231,6 +3230,7 @@ en_CA: display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_DE.yml b/config/locales/en_DE.yml index f3effeead7..43f8f6dd44 100644 --- a/config/locales/en_DE.yml +++ b/config/locales/en_DE.yml @@ -359,7 +359,6 @@ en_DE: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3037,6 +3036,7 @@ en_DE: price: "Price" display_as: "Display As" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index 37dc60af05..352eedea77 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -368,8 +368,10 @@ en_FR: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." + matomo_tag_manager_url: "Matomo Tag Manager URL" + info_html: "Matomo is a Web and Mobile Analytics application. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.orgfor more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." + config_instructions_tag_manager_html: "Setting the Matomo Tag Manager URL enables Matomo Tag Manager. This tool allows you to set up analytics events. The Matomo Tag Manager URL is copied from the Install Code section of Matomo Tag Manager. Ensure you select the right container and environment as these options change the URL." customers: index: new_customer: "New Customer" @@ -2931,6 +2933,12 @@ en_FR: options: "Options" actions: update: "Update" + shared: + error_messages: + errors_prohibited_this_record_from_being_saved: + one: "1 error prohibited this record from being saved:" + other: "%{count} errors prohibited this record from being saved:" + there_were_problems_with_the_following_fields: "There were problems with the following fields" errors: messages: blank: "can't be blank" @@ -3242,6 +3250,7 @@ en_FR: display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index f18c25b4dd..71358c855d 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -368,7 +368,6 @@ en_GB: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3238,6 +3237,7 @@ en_GB: display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_IE.yml b/config/locales/en_IE.yml index 0f838aff2e..69bcb54e04 100644 --- a/config/locales/en_IE.yml +++ b/config/locales/en_IE.yml @@ -368,7 +368,6 @@ en_IE: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3229,6 +3228,7 @@ en_IE: display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index 22a9902b96..fa30c62f25 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -368,7 +368,6 @@ en_NZ: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3230,6 +3229,7 @@ en_NZ: display_as_placeholder: 'eg. 2 kg' display_name_placeholder: 'eg. Tomatoes' autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_PH.yml b/config/locales/en_PH.yml index 154bb93df0..da4c883de1 100644 --- a/config/locales/en_PH.yml +++ b/config/locales/en_PH.yml @@ -367,7 +367,6 @@ en_PH: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3203,6 +3202,7 @@ en_PH: display_as: "Display As" display_name: "Display Name" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index e1deb0373b..feb491c764 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -363,7 +363,6 @@ en_US: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo locally or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3195,6 +3194,7 @@ en_US: display_as: "Display As" display_name: "Display Name" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/en_ZA.yml b/config/locales/en_ZA.yml index 06cd4ee1c4..8017668827 100644 --- a/config/locales/en_ZA.yml +++ b/config/locales/en_ZA.yml @@ -368,7 +368,6 @@ en_ZA: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is a Web and Mobile Analytics. You can either host Matomo on-premises or use a cloud-hosted service. See matomo.org for more information." config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console." customers: index: @@ -3097,6 +3096,7 @@ en_ZA: price: "Price" display_as: "Display As" autocomplete: + out_of_stock: "Out of Stock" producer_name: "Producer" unit: "Unit" shared: diff --git a/config/locales/es.yml b/config/locales/es.yml index 0fc3a89fe4..f4ea131b1e 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -368,8 +368,10 @@ es: title: "Configuración de Matomo" matomo_url: "URL de Matomo" matomo_site_id: "ID de sitio de Matomo" - info_html: "Matomo es un analizador web y móvil. Puede alojar Matomo en sus servidores o utilizar un servicio alojado en la nube. Consulte matomo.org para obtener más información." + matomo_tag_manager_url: "URL de Matomo Tag Manager" + info_html: "Matomo es una aplicación de análisis web y móvil. Puede alojar Matomo localmente o utilizar un servicio alojado en la nube. Ver matomo.org para más información." config_instructions_html: "Aquí puede configurar la integración de OFN Matomo. La siguiente URL de Matomo debe apuntar a la instancia de Matomo a la que se enviará la información de seguimiento del usuario; si se deja vacío, el seguimiento del usuario Matomo se desactivará. El campo ID del sitio no es obligatorio, pero es útil si está rastreando más de un sitio web en una sola instancia de Matomo; se puede encontrar en la consola de la instancia de Matomo." + config_instructions_tag_manager_html: "La configuración de la URL de Matomo Tag Manager habilita Matomo Tag Manager. Esta herramienta le permite configurar eventos analíticos. La URL de Matomo Tag Manager se copia de la sección Código de instalación de Matomo Tag Manager. Asegúrese de seleccionar el contenedor y el entorno correctos, ya que estas opciones cambian la URL." customers: index: new_customer: "Nuevo Consumidor" @@ -2815,6 +2817,12 @@ es: void: "Vacío" login: "Iniciar sesión" password: "Contraseña" + signature: "Firma" + solution: "Solución" + landing_page: "Página de inicio" + server: "Servidor" + test_mode: "Modo de prueba" + logourl: "URL del logo" configurations: "Configuraciones" general_settings: "Configuración general" site_name: "Nombre del sitio" @@ -2931,6 +2939,12 @@ es: options: "Opciones" actions: update: "Actualizar" + shared: + error_messages: + errors_prohibited_this_record_from_being_saved: + one: "1 error prohibió guardar este registro:" + other: "%{count} errores impidieron que se guardara este registro:" + there_were_problems_with_the_following_fields: "Hubo problemas con los siguientes campos" errors: messages: blank: "no puede estar vacío" @@ -3100,9 +3114,11 @@ es: display: "Mostrar" active: "Activo" both: "Ambos" + front_end: "Solo visible para el comprador" back_end: "Solo en Administración" active_yes: "Sí" active_no: "No" + no_payment_methods_found: "No se encontraron métodos de pago." new: new_payment_method: "Nuevo método de pago" back_to_payment_methods_list: "Volver a la lista de métodos de pago" @@ -3132,8 +3148,10 @@ es: active_yes: "Sí" active_no: "No" both: "Tanto en Hacer pedido como en Administración" + front_end: "Solo visible para el comprador" back_end: "Solo en Administración" tags: "Tags" + deactivation_warning: "La desactivación de un método de pago puede hacer que el método de pago desaparezca de su lista. Alternativamente, puede ocultar un método de pago desde la página de pago configurando la opción 'Mostrar' como 'Solo visible para el administrador'." providers: provider: "Proveedor" payments: @@ -3238,6 +3256,7 @@ es: display_as_placeholder: 'p. ej. 2 Kg' display_name_placeholder: 'p. ej. Tomates' autocomplete: + out_of_stock: "Agotado" producer_name: "Productora" unit: "Unidad" shared: diff --git a/config/locales/es_CR.yml b/config/locales/es_CR.yml index bd8f7c51e6..8dce3680ee 100644 --- a/config/locales/es_CR.yml +++ b/config/locales/es_CR.yml @@ -368,7 +368,6 @@ es_CR: title: "Configuración de Matomo" matomo_url: "URL de Matomo" matomo_site_id: "ID de sitio de Matomo" - info_html: "Matomo es un analizador web y móvil. Puede alojar Matomo en sus servidores o utilizar un servicio alojado en la nube. Consulte matomo.org para obtener más información." config_instructions_html: "Aquí puede configurar la integración de OFN Matomo. La siguiente URL de Matomo debe apuntar a la instancia de Matomo a la que se enviará la información de seguimiento del usuario; si se deja vacío, el seguimiento del usuario Matomo se desactivará. El campo ID del sitio no es obligatorio, pero es útil si está rastreando más de un sitio web en una sola instancia de Matomo; se puede encontrar en la consola de la instancia de Matomo." customers: index: @@ -3211,6 +3210,7 @@ es_CR: display_as: "Mostrar como" display_name: "Nombre para mostrar" autocomplete: + out_of_stock: "Agotado" producer_name: "Productor" unit: "Unidad" shared: diff --git a/config/locales/fil_PH.yml b/config/locales/fil_PH.yml index 1b4b545419..0c7bf87148 100644 --- a/config/locales/fil_PH.yml +++ b/config/locales/fil_PH.yml @@ -368,7 +368,6 @@ fil_PH: title: "Matomo Settings" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "ang Matomo ay isang Web at Mobile Analytics. Maaari kang mag-host ng Matomo sa mga lugar o gumamit ng mga serbisyong naka-cloud. Tignanmatomo.org para sa karagdagang impormasyon." config_instructions_html: "Dito ay maaaring ayusin ang pagsasama ng OFN Matomo. ang URL ng Matomo sa ibaba ay ituturo ka sa Matomo kung saan ipapadala ang impormasyon ukol sa pagtatrack ng gumagamit; kung iiwanang blanko, ay hindi gagana ang pag-track ng Matomo. ang paglagay ng SITE ID ay hindi sapilitan ngunit maaaring makatulong kung ikaw ay nagta-track na mahigit sa isang website sa isang pagkakataon; ito ay matatagpuan sa Matomo instance console." customers: index: @@ -1909,18 +1908,18 @@ fil_PH: 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_name: "Pangalan" admin_enterprise_groups_owner: "may-ari" admin_enterprise_groups_on_front_page: "sa harapang pahina?" - admin_enterprise_groups_enterprise: "enterprises" + admin_enterprise_groups_enterprise: "Mga Enterprise" admin_enterprise_groups_data_powertip: "ang pangunahing gumagamit na responsable sa grupo na ito" - admin_enterprise_groups_data_powertip_logo: "ito ang logo ng inyong grupo" + admin_enterprise_groups_data_powertip_logo: "ito ang logo para sa grupo" admin_enterprise_groups_data_powertip_promo_image: "ang larawan na ito ay makikita sa taas ng profile ng grupo" admin_enterprise_groups_contact: "Makipag-ugnayan" admin_enterprise_groups_contact_phone_placeholder: "hal. 98 7654 3210" - admin_enterprise_groups_contact_address1_placeholder: "eg. 123 High Street" + admin_enterprise_groups_contact_address1_placeholder: "eg. 123 Kalayaan Street" admin_enterprise_groups_contact_city: "lungsod" - admin_enterprise_groups_contact_city_placeholder: "hal. Northcote" + admin_enterprise_groups_contact_city_placeholder: "hal. Mandaluyong" admin_enterprise_groups_contact_zipcode: "Postcode" admin_enterprise_groups_contact_zipcode_placeholder: "hal. 3070" admin_enterprise_groups_contact_state_id: "Lalawigan" @@ -3217,6 +3216,7 @@ fil_PH: display_as: "Ipakita Bilang" display_name: "Pangalan na nakikita" autocomplete: + out_of_stock: "Walang stock" producer_name: "Producer" unit: "yunit" shared: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 88e0e981c1..6f4cf8df9b 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -368,8 +368,10 @@ fr: title: "Configuration Matomo" matomo_url: "URL de l'instance sur Matomo" matomo_site_id: "ID de l'instance sur Matomo" - info_html: "Matomo est un outil d'analyse de trafic web (ordinateur et téléphone). Vous pouvez installer vous-même Matomo ou utiliser une version hébergée. Voir matomo.org pour plus d'information." + matomo_tag_manager_url: "URL du Matomo Tag Manager" + info_html: "Matomo est un outil de suivi de traffic et de comportement des utilisateurs. Matomo est open source et validée par la CNIL française car non intrusif dans les données personnelles des utilisateurs. Pour plus d'infos : matomo.org." config_instructions_html: "Pour utiliser Matomo, vous devez configurer l'intégration avec Open Food France. L'URL de l'instance sur Matomo correspond à l'url du site internet visé par le suivi de la navigation utilisateur. Si le champ est vide, Matomo n'effectuera aucune analyse sur ce site. L'ID de l'instance sur Matomo n'est pas obligatoire, mais nécessaire si vous souhaitez analyser plusieurs sites web sur une seule instance Matomo. Cet ID peut être trouvé sur l'espace administrateur Matomo." + config_instructions_tag_manager_html: "Ajouter l'URL du Tag Manager rend actif Matomo Tag Manager. Cet outil vous permet de suivre des évènements en particulier. Pour trouver l'URL rendez-vous sur l' \"Install Code section\" du Tag Manager. Attention à bien copier le bon contener et le bon environnement, car ils font varier l'URL." customers: index: new_customer: "Nouvel acheteur" @@ -2961,6 +2963,12 @@ fr: options: "Options" actions: update: "Mettre à jour" + shared: + error_messages: + errors_prohibited_this_record_from_being_saved: + one: "1 erreur n'a pas permis de sauvegarder:" + other: "%{count} erreurs ne permettent pas de sauvegarder:" + there_were_problems_with_the_following_fields: "Ils a eu des soucis avec les champs suivants" errors: messages: blank: "Champ obligatoire" @@ -3272,6 +3280,7 @@ fr: display_as_placeholder: 'ex. 2 kg' display_name_placeholder: 'ex. Tomates' autocomplete: + out_of_stock: "En rupture de stock" producer_name: "Producteur" unit: "Unité" shared: diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index 5405e9484d..60c840f730 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -367,7 +367,6 @@ fr_BE: title: "Configuration Matomo" matomo_url: "URL de l'instance sur Matomo" matomo_site_id: "ID de l'instance sur Matomo" - info_html: "Matomo est un outil d'analyse de trafic web (ordinateur et téléphone). Vous pouvez installer vous-même Matomo ou utiliser une version hébergée. Voir matomo.org pour plus d'information." config_instructions_html: "Pour utiliser Matomo, vous devez configurer l'intégration avec Open Food France. L'URL de l'instance sur Matomo correspond à l'url du site internet visé par le suivi de la navigation utilisateur. Si le champ est vide, Matomo n'effectuera aucune analyse sur ce site. L'ID de l'instance sur Matomo n'est pas obligatoire, mais nécessaire si vous souhaitez analyser plusieurs sites web sur une seule instance Matomo. Cet ID peut être trouvé sur l'espace administrateur Matomo." customers: index: @@ -3154,6 +3153,7 @@ fr_BE: display_as: "Unité affichéé" display_name: "Nom d'affichage" autocomplete: + out_of_stock: "Pas en stock" producer_name: "Producteur·trice" unit: "Unité" shared: diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index fba999a5cd..5f7f23ce5f 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -363,7 +363,6 @@ fr_CA: title: "Configuration Matomo" matomo_url: "URL de l'instance sur Matomo" matomo_site_id: "ID de l'instance sur Matomo" - info_html: "Matomo est un outil d'analyse de trafic web (ordinateur et téléphone). Vous pouvez installer vous-même Matomo ou utiliser une version hébergée. Voir matomo.org pour plus d'information." config_instructions_html: "Pour utiliser Matomo, vous devez configurer l'intégration avec Open Food France. L'URL de l'instance sur Matomo correspond à l'url du site internet visé par le suivi de la navigation utilisateur. Si le champ est vide, Matomo n'effectuera aucune analyse sur ce site. L'ID de l'instance sur Matomo n'est pas obligatoire, mais nécessaire si vous souhaitez analyser plusieurs sites web sur une seule instance Matomo. Cet ID peut être trouvé sur l'espace administrateur Matomo." customers: index: @@ -3206,6 +3205,7 @@ fr_CA: display_as: "Afficher comme" display_name: "Nom affiché" autocomplete: + out_of_stock: "En rupture de stock" producer_name: "Producteur" unit: "Unité" shared: diff --git a/config/locales/it.yml b/config/locales/it.yml index 89e40ea4c4..13a6c49aeb 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -3,20 +3,20 @@ it: activerecord: attributes: enterprise_fee: - fee_type: Tipo di tariffa + fee_type: Tipo Tariffa spree/order: - payment_state: Stato del pagamento - shipment_state: Stato della spedizione - completed_at: Completo al + payment_state: Stato Pagamento + shipment_state: Stato Spedizione + completed_at: Completato Al number: Numero state: Stato - email: Mail consumatore + email: E-Mail Cliente spree/payment: amount: Quantità spree/product: - primary_taxon: "Categoria prodotto" + primary_taxon: "Categoria Prodotto" supplier: "Fornitore" - shipping_category_id: "Categoria di spedizione" + shipping_category_id: "Categoria Spedizioni" variant_unit: "Unità Variante" variant_unit_name: "Nome Unità Variante" spree/credit_card: @@ -31,6 +31,10 @@ it: taken: "Esiste già un account con questa email. Ti preghiamo di effettuare il login o impostare una nuova password." spree/order: no_card: Non ci sono carte di credito autorizzate disponibili per l'addebito + spree/credit_card: + attributes: + base: + card_expired: "è scaduto" order_cycle: attributes: orders_close_at: @@ -39,7 +43,7 @@ it: count_on_hand: using_producer_stock_settings_but_count_on_hand_set: "deve restare vuoto perché si stanno utilizzando le impostazioni di magazzino del produttore" on_demand_but_count_on_hand_set: "deve restare vuoto se su richiesta" - limited_stock_but_no_count_on_hand: "Torna alla lista dei pagamenti" + limited_stock_but_no_count_on_hand: "deve essere specificato a causa di una disponibilità limitata" activemodel: attributes: order_management/reports/enterprise_fee_summary/parameters: @@ -47,10 +51,10 @@ it: end_at: "Fine" distributor_ids: "Distributori" producer_ids: "Produttori" - order_cycle_ids: "Cicli di richieste" - enterprise_fee_ids: "Nome commissione" - shipping_method_ids: "Metodi di spedizione" - payment_method_ids: "Metodi di pagamento" + order_cycle_ids: "Cicli di Richieste" + enterprise_fee_ids: "Nomi Tariffe" + shipping_method_ids: "Metodi di Spedizione" + payment_method_ids: "Metodi di Pagamento" errors: messages: inclusion: "non incluso nella lista" @@ -58,7 +62,7 @@ it: order_management/subscriptions/validator: attributes: subscription_line_items: - at_least_one_product: "^Aggiungi almeno un prodotto" + at_least_one_product: "^Per favore aggiungi almeno un prodotto" not_available: "^%{name} non è disponibile nel programma selezionato" ends_at: after_begins_at: "deve essere dopo l'inizio il" @@ -67,28 +71,28 @@ it: schedule: not_coordinated_by_shop: "non è coordinato da %{shop}" payment_method: - not_available_to_shop: "non è disponibile al %{shop}" - invalid_type: "Il metodo dev'essere Cash o Stripe" - charges_not_allowed: "L'addebito su carta di credito non è consentito da questo consumatore" - no_default_card: "Nessuna carta predefinita è consentita per questo consumatore" + not_available_to_shop: "non è disponibile da %{shop}" + invalid_type: "il metodo deve essere Cash o Stripe" + charges_not_allowed: "L'addebito su carta di credito non è consentito per questo cliente" + no_default_card: "^Nessuna carta predefinita è disponibile per questo cliente" shipping_method: not_available_to_shop: "non è disponibile al %{shop}" devise: confirmations: - send_instructions: "A breve riceverai un'email con le istruzioni utili a confermare il tuo account." - failed_to_send: "C'è stato un errore nell'invio della tua mail di conferma." - resend_confirmation_email: "Re-invia la mail di conferma" - confirmed: "Grazie per aver confermato la tua mail! Ora puoi effettuare il log in." + send_instructions: "A breve riceverai una email con le istruzioni per la conferma del tuo account." + failed_to_send: "C'è stato un errore nell'invio dell'email di conferma." + resend_confirmation_email: "Invia di nuovo l'email di conferma." + confirmed: "Grazie per aver confermato la tua email! Ora puoi effettuare il log in." not_confirmed: "Il tuo indirizzo email non può essere confermato. Forse avevi già completato questo passaggio?" user_confirmations: spree_user: - send_instructions: "A breve riceverai un'email con le istruzioni utili a confermare il tuo account." + send_instructions: "A breve riceverai una email con le istruzioni per la conferma del tuo account." confirmation_sent: "Email di conferma inviata" confirmation_not_sent: "Errore invio emai di conferma" user_registrations: spree_user: signed_up_but_unconfirmed: "Abbiamo inviato un link di conferma al tuo indirizzo email. Per favore apri il link per attivare il tuo account." - unknown_error: "Qualcosa è andato storto durante la creazione del tuo account. Controlla il tuo indirizzo e-mail e riprova" + unknown_error: "Qualcosa è andato storto durante la creazione del tuo account. Controlla il tuo indirizzo email e riprova" failure: invalid: | Email o password non valida. @@ -101,29 +105,29 @@ it: spree_user: updated_not_active: "La tua password è stata resettata, ma la tua email non è ancora stata confermata." updated: "La tua password è stata modificata con successo.\nOra sei collegato." - send_instructions: "A breve riceverai un'email con le istruzioni utili a confermare il tuo account." + send_instructions: "A breve riceverai una email con le istruzioni per la conferma del tuo account." models: order_cycle: cloned_order_cycle_name: "COPIA DI %{order_cycle}" validators: date_time_string_validator: - not_string_error: "Deve essere una linea" - invalid_format_error: "Deve essere valido" + not_string_error: "deve essere una stringa" + invalid_format_error: "deve essere valido" integer_array_validator: - not_array_error: "Deve essere una sequenza" - invalid_element_error: "Deve contenere solo numeri interi" + not_array_error: "deve essere un array" + invalid_element_error: "deve contenere solo numeri interi" enterprise_mailer: confirmation_instructions: - subject: "Per favore conferma l'indirizzo email per %{enterprise}" + subject: "Per favore conferma l'indirizzo email di %{enterprise}" welcome: subject: "%{enterprise} è ora su %{sitename}" email_welcome: "Benvenuto" email_registered: "è ora parte di" - email_userguide_html: "La Guida Utente con supporto dettagliato per l'impostazione del tuo Produttore o Hub è qui: %{link}" - userguide: "Guida di Open Food Network" + email_userguide_html: "La Guida Utente con supporto dettagliato per l'impostazione del tuo Produttore o Distributore è qui: %{link}" + userguide: "Guida Utente di Open Food Network" email_admin_html: "Puoi gestire il tuo profilo facendo il log in al link %{link} o cliccando sull'ingranaggio in alto a destra della homepage, e selezionando Amministrazione" - admin_panel: "Pannello di controllo" - email_community_html: "Abbiamo anche un forum on-line per le discussioni della comunità sul software OFN e le sfide uniche legate all'avere un'impresa del cibo. Sei invitato ad unirti. Ci evolviamo in continuo e il tuo contributo in questo forum plasmerà ciò che sarà. %{link}" + admin_panel: "Panello Amministrativo" + email_community_html: "Abbiamo anche un forum per le discussioni comunitarie legate al software di OFN e le sfide uniche legate all'avere un'impresa alimentare. Ti incoraggiamo a farne parte. Siamo in continua evoluzione e il tuo contributo al forum delineerà quello che succederà in futuro. %{link}" join_community: "Unisciti alla community" invite_manager: subject: "%{enterprise} ti a invitato ad essere un referente" @@ -132,30 +136,30 @@ it: subject: "Resoconto degli ordini per %{producer}" shipment_mailer: shipped_email: - dear_customer: "Caro consumatore," + dear_customer: "Caro Cliente," instructions: "Il tuo ordine è stato spedito" - shipment_summary: "Riepilogo della spedizione" - subject: "Avviso di spedizione" - thanks: "Grazie per utilizzare la piattaforma per il tuo commercio" - track_information: "Informazioni di tracciamento" - track_link: "Link del tracciamento" + shipment_summary: "Riepilogo della Spedizione" + subject: "Notifica di Spedizione" + thanks: "Grazie per il tuo lavoro." + track_information: "Informazioni Tracking: %{tracking}" + track_link: "Tracking Link: %{url}" subscription_mailer: placement_summary_email: subject: Riassunto degli ordini più recenti greeting: "Ciao %{name}," - intro: "Qui sotto un riassunto degli ordini appena inviati per%{shop} ," + intro: "Qui sotto un riassunto degli ordini appena inviati per%{shop}," confirmation_summary_email: subject: Riassunto delle richieste recentemente confermate greeting: "Ciao %{name}," intro: "Qui sotto un riassunto delle richieste che hai appena confermato per %{shop}." summary_overview: - total: Un totale di %{count} abbonamenti sono stati contrassegnati per l'elaborazione automatica.. - success_zero: Di questi, nessuno è stato modificato con successo + total: Un totale di %{count} sottoscrizioni sono stati contrassegnati per l'elaborazione automatica. + success_zero: Di questi, nessuno è stato elaborato con successo. success_some: Di questi, %{count} sono stati elaborati con successo. success_all: Tutti sono stati elaborati con successo. - issues: Qui sotto i dettagli dei problemi incontrati. + issues: Qui sotto i dettagli dei problemi riscontrati. summary_detail: - no_message_provided: 'Nessun messaggio di errore ' + no_message_provided: Nessun messaggio di errore fornito changes: title: Scorte insufficienti (%{count} gentili richieste) explainer: Queste gentili richieste sono state elaborate, ma la quantità richiesta di alcuni prodotti non è disponibile @@ -176,7 +180,7 @@ it: explainer: L'elaborazione automatica di queste gentili richieste non è riuscita per una ragione sconosciuta. Questo non dovrebbe accadere, ti preghiamo di contattarci se visualizzi questo messaggio. home: "OFN" title: Open Food Network - welcome_to: 'Benvenuto a' + welcome_to: 'Benvenuto su' site_meta_description: "Cominciamo da zero. Con i produttori e gli allevatori pronti a raccontare le loro storie, sinceramente e orgogliosamente. Con i distributori pronti a connettere le persone con i prodotti in modo giusto ed equo. Con i compratori che credono che migliori decisioni per l'acquisto settimanale possano..." search_by_name: Cerca per nome o zona... producers_join: I Produttori sono ora invitati ad unirsi ad Open Food Network @@ -184,12 +188,12 @@ it: print_invoice: "Stampa fattura" print_ticket: "Stampa Biglietto" select_ticket_printer: "Seleziona la stampante per i biglietti" - send_invoice: "Manda fattura" - resend_confirmation: "Rimanda conferma" - view_order: "Vedi l'ordine" - edit_order: "Modifica l'ordine" - ship_order: "Invia l'ordine" - cancel_order: "Cancella l'ordine" + send_invoice: "Invia Fattura" + resend_confirmation: "Rimanda Conferma" + view_order: "Vedi Ordine" + edit_order: "Modifica Ordine" + ship_order: "Invia Ordine" + cancel_order: "Cancella Ordine" confirm_send_invoice: "Una fattura per quest'ordine verrà mandata al cliente. Sei sicuro di voler continuare?" confirm_resend_order_confirmation: "Sei sicuro di voler inviare di nuovo l'email di conferma per l'ordine?" must_have_valid_business_number: "%{enterprise_name} deve avere una partita iva valida per poter emettere fattura." @@ -198,11 +202,11 @@ it: say_no: "No" say_yes: "Sì" ongoing: Attivo - bill_address: Indirizzo di fatturazione - ship_address: Indirizzo di consegna - sort_order_cycles_on_shopfront_by: "Ordina cicli d'ordine in vetrina per" + bill_address: Indirizzo Fatturazione + ship_address: Indirizzo Consegna + sort_order_cycles_on_shopfront_by: "Ordina Cicli Ordine in Vetrina per" required_fields: I campi obbligatori sono contrassegnati con un asterisco - select_continue: Seleziona e continua + select_continue: Seleziona e Continua remove: Rimuovi or: o collapse_all: Riduci tutto @@ -215,7 +219,7 @@ it: edit: Modifica clone: Duplica distributors: Distributori - bulk_order_management: Gestione richieste all'ingrosso + bulk_order_management: Gestione Ordini Massivi enterprises: Aziende enterprise_groups: Gruppi reports: Resoconti @@ -223,15 +227,15 @@ it: import: Importazione spree_products: Prodotti Spree all: Tutti - current: Attuali + current: Correnti available: Disponibile dashboard: Pannello di controllo undefined: non definito unused: non in uso admin_and_handling: Admin profile: Profilo - supplier_only: Solo per i fornitori - has_shopfront: Informazioni di tracciamento + supplier_only: Solo Fornitori + has_shopfront: Ha una Vetrina weight: Peso volume: Volume items: Prodotti @@ -246,26 +250,26 @@ it: blocked_cookies_alert: "Il tuo browser sembra stia bloccando i cookies necessari ad usare questa pagina del negozio. Clicca sotto per consentire i cookies e ricaricare la pagina." allow_cookies: "Accetta i cookies" notes: Note - error: Eorrore + error: Errore processing_payment: "Elaborazione pagamento..." - no_pending_payments: "nessun pagamento in sospeso" - invalid_payment_state: "stato del pagamento non valido" + no_pending_payments: "Nessun pagamento in sospeso" + invalid_payment_state: "Stato del pagamento non valido" filter_results: Filtra i risultati quantity: Quantità pick_up: Ritiro copy: Copia change_my_password: "Cambia la mia password" update_password: "Aggiorna password" - password_confirmation: 'Conferma password ' + password_confirmation: 'Conferma Password ' reset_password_token: Token per il reset della password expired: è scaduto, si prega di richiederne uno nuovo - back_to_payments_list: "Torna alla lista dei pagamenti" - maestro_or_solo_cards: "carte Maestro/Solo" - backordered: "ordini arretrati" + back_to_payments_list: "Torna alla Lista dei Pagamenti" + maestro_or_solo_cards: "Carte Maestro/Solo" + backordered: "Ordini arretrati" on hand: "Disponibile" ship: "Spedizione" actions: - create_and_add_another: "Crea e aggiungi un altro" + create_and_add_another: "Crea e Aggiungi un Altro" create: "Crea" cancel: "Annulla" save: "Salva" @@ -275,7 +279,7 @@ it: admin: begins_at: Inizia a begins_on: Inizia da - customer: Consumatore + customer: Cliente date: Data email: Email ends_at: Termina a @@ -319,6 +323,7 @@ it: show_n_more: Mostra %{num} di più choose: "Scegli..." please_select: Seleziona... + column_save_as_default: Salva Come Predefinito columns: Colonne actions: Azioni viewing: "Vista: %{current_view_name}" @@ -363,11 +368,10 @@ it: title: "Impostazioni Matomo" matomo_url: "URL Matomo" matomo_site_id: "Site ID Matomo" - info_html: "Matomo è una Web and Mobile Analytics. È possibile ospitare Matomo in sede o utilizzare un servizio cloud. Vedi matomo.org per maggiori informazionimatomo.org for more information." config_instructions_html: "Qui è possibile configurare l'integrazione OFN Matomo. L'URL di Matomo qui sotto dovrebbe puntare l'istanza di Matomo a cui saranno inviate le informazioni di monitoraggio dell'utente; se lasciato vuoto, il monitoraggio dell'utente da parte di Matomo sarà disabilitato. Il campo Site ID non è obbligatorio ma è utile se si sta tracciando più di un sito web su una singola istanza di Matomo; si può trovare sulla console dell'istanza di Matomo. " customers: index: - new_customer: "Nuovo cliente" + new_customer: "Nuovo Cliente" code: Codice duplicate_code: "Questo codice è già usato." bill_address: "Indirizzo di fatturazione" @@ -385,7 +389,7 @@ it: search_by_email: "Cerca per email/codice..." guest_label: 'Check-out ospite' destroy: - has_associated_orders: 'Cancellazione non riuscita: l''utente ha ordini associati al suo negozio' + has_associated_orders: 'Cancellazione fallita: l''utente ha ordini associati al negozio' contents: edit: title: Contenuto @@ -609,7 +613,7 @@ it: desc_short: Breve descrizione desc_short_placeholder: Raccontaci la tua attività in una o due frasi desc_long: Chi siamo - desc_long_placeholder: Racconta di te ai consumatori. Questa informazione comparirà nel tuo profilo pubblico. + desc_long_placeholder: Racconta di te ai tuoi clienti. Questa informazione comparirà nel tuo profilo pubblico. business_details: abn: ABN abn_placeholder: es. 99 123 456 789 @@ -661,7 +665,7 @@ it: name: Nome name_placeholder: es. Tartufi Biodinamici Alba groups: Gruppi - groups_tip: Seleziona i gruppi o le regioni di cui sei membro. Questo aiuterà i consumatori a trovare la tua azienda. + groups_tip: Seleziona i gruppi o le regioni di cui sei membro. Questo aiuterà i clienti a trovare la tua azienda. groups_placeholder: 'Inizia a digitare per trovare i gruppi ' primary_producer: Produttore primario? primary_producer_tip: Seleziona "Produttore" se sei un produttore primario di cibo @@ -670,9 +674,9 @@ it: none: Nessuno own: Proprio sells: Vende - sells_tip: "Nessuno - L'azienda non vende direttamente ai consumatori.
Proprio - L'azienda vende i propri prodotti ai consumatori.
Proprio e altrui - L'azienda può vendere prodotti propri o di altre aziende.
" + sells_tip: "Nessuno - L'azienda non vende direttamente ai clienti.
Proprio - L'azienda vende i propri prodotti ai clienti.
Proprio e altrui - L'azienda può vendere prodotti propri o di altre aziende.
" visible_in_search: Visibile nella ricerca? - visible_in_search_tip: Determina se questa azienda sarà visibile ai consumatori quando cercano nel sito. + visible_in_search_tip: Determina se questa azienda sarà visibile ai clienti quando cercano nel sito. visible: Visibile not_visible: Non visibile permalink: Permalink (nessuno spazio) @@ -683,13 +687,14 @@ it: ofn_uid_tip: Il codice univoco utilizzato per identificare l'azienda su OFN shipping_methods: name: "Nome" + applies: "Attivo?" manage: "Gestisci metodi di spedizione" create_button: "Crea un nuovo metodo di consegna" create_one_button: "Crea uno ora" no_method_yet: "Non hai ancora un metodo di consegna" shop_preferences: shopfront_requires_login: "Vetrina visibile pubblicamente?" - shopfront_requires_login_tip: "Scegli se i consumatori devono essere registrati per poter vedere la vetrina o se è visibile a tutti" + shopfront_requires_login_tip: "Scegli se i clienti devono essere registrati per poter vedere la vetrina o se è visibile a tutti." shopfront_requires_login_false: "Pubblica" shopfront_requires_login_true: "Visibile solo agli utenti registrati" recommend_require_login: "Consigliamo di richiedere la registrazione quando si dà la possibilità di modificare gli ordini." @@ -698,7 +703,7 @@ it: allow_guest_orders_false: "Richiedi il login per ordinare" allow_guest_orders_true: "Permetti acquisto come ospite" allow_order_changes: "Modifica gentili richieste" - allow_order_changes_tip: "Permetti ai consumatori di modificare le proprie richieste finché il ciclo di richieste è aperto." + allow_order_changes_tip: "Permetti ai clienti di modificare i propri ordini fino a quando il ciclo degli ordini è aperto." allow_order_changes_false: "Le gentili richieste confermate non possono essere modificate / annullate" allow_order_changes_true: "Gli utenti possono modificare / annullare le gentili richieste mentre il ciclo di richieste è aperto" enable_subscriptions: "Sottoscrizioni" @@ -707,7 +712,7 @@ it: enable_subscriptions_true: "Abilitata" shopfront_message: "Messaggio vetrina" shopfront_message_placeholder: > - Un messaggio opzionale per dare in benvenuto ai clienti e spiegare come + Un messaggio opzionale per dare il benvenuto ai clienti e spiegare come acquistare. Il testo inserito qui verrà mostrato nel tab principale della vetrina. shopfront_message_link_tooltip: "Inserisci / modifica link" @@ -735,7 +740,7 @@ it: title: Collegati con Stripe part1: Stripe è un servizio di elaborazione dei pagamenti che permette ai negozi su OFN di accettare pagamenti con carta di credito da parte dei clienti. part2: Per utilizzare questa funzione, è necessario collegare il proprio account Stripe a OFN. Cliccando su 'Accetto' qui sotto sarai reindirizzato al sito web Stripe dove potrai collegare un account Stripe esistente o crearne uno nuovo se non ne hai già uno. - part3: Questo consentirà alla piattaforma di accettare pagamenti con carta di credito da clienti di tua fiducia. Tieni presente che dovrai mantenere il tuo conto Stripe, pagare la tariffa di Strip e gestire gli eventuali rimborsi e i servizi al cliente. + part3: Questo consentirà alla piattaforma di accettare pagamenti con carta di credito da clienti di tua fiducia. Tieni presente che dovrai mantenere il tuo conto Stripe, pagare la commissione di Stripe e gestire gli eventuali rimborsi e i servizi al cliente. i_agree: Sono d'accordo cancel: Annulla tag_rules: @@ -745,7 +750,7 @@ it: add_new_button: ' + Aggiungi una nuova regola predefinita' no_tags_yet: Nessuna etichetta per questa azienda no_rules_yet: Nessuna regola per questa etichetta - for_customers_tagged: 'Per i clienti etichettati' + for_customers_tagged: 'Per i clienti etichettati:' add_new_rule: '+ Aggiungi una nuova regola' add_new_tag: '+ Aggiungi una nuova tag' users: @@ -789,7 +794,7 @@ it: producer_description_text: Aggiungi i tuoi prodotti, permettendo agli hubs di inserire i tuoi prodotti nei loro negozi. producer_shop: Negozio produttore sell_your_produce: Vendi i tuoi prodotti - producer_shop_description_text: Vendi i tuoi prodotti direttamente ai consumatori tramite la tua propria vetrina su OFN + producer_shop_description_text: Vendi i tuoi prodotti direttamente ai clienti tramite la tua personale vetrina su Open Food Network. producer_shop_description_text2: Un Negozio produttore è solo per i tuoi prodotti. Se vuoi vendere prodotti altrui, seleziona "Hub produttore". producer_hub: Hub produttore producer_hub_text: Vendi prodotti tuoi e di altri @@ -861,6 +866,7 @@ it: incoming: "In arrivo" supplier: "Fornitore" products: "Prodotti" + receival_details: "Dettagli Ricevimento" fees: "Tariffe" save: "Salva" save_and_next: "Salva e continua" @@ -872,6 +878,7 @@ it: distributor: "Distributore" products: "Prodotti" tags: "Tag" + delivery_details: "Dettagli Spedizione" fees: "Tariffe" previous: "Precedente" save: "Salva" @@ -883,7 +890,7 @@ it: incoming: "2. Prodotti in entrata" outgoing: "3. Prodotti in uscita" exchange_form: - pickup_time_tip: Quando gli ordini di questa Lista d'ordine saranno pronti per il cliente + pickup_time_tip: Quando gli ordini di questo ciclo saranno pronti per il cliente pickup_instructions_placeholder: "Istruzioni per la consegna" pickup_instructions_tip: Queste istruzioni saranno visibili agli utenti dopo che hanno completato una gentile richiesta pickup_time_placeholder: "Pronto per (es. Data / Ora)" @@ -935,12 +942,12 @@ it: simple_form: ready_for: Pronto per ready_for_placeholder: Data / Ora - customer_instructions: Istruzioni consumatori + customer_instructions: Istruzioni per i consumatori customer_instructions_placeholder: Note per ritiro / consegna products: Prodotti fees: Tariffe destroy_errors: - orders_present: Questo ciclo di richieste è stato selezionato da un consumatore e non può essere cancellato. Per evitare altri accessi, chiudi il ciclo. + orders_present: Questo ciclo di richieste è stato selezionato da un cliente e non può essere cancellato. Per prevenire altri accessi da parte dei clienti, per favore chiudi il ciclo. schedule_present: Questo ciclo di richieste è connesso a un programma e non può essere cancellato. Puoi eliminare il link o cancellare il programma prima. bulk_update: no_data: mmm, qualcosa è andato storto. Nessun dato per ciclo di richieste trovato. @@ -978,7 +985,7 @@ it: supplier_totals: Totali Ciclo di richieste fornitori supplier_totals_by_distributor: Totali Ciclo di richieste fornitori per distributore totals_by_supplier: Totali Ciclo di richieste fornitori per fornitore - customer_totals: Totali ciclo di richieste consumatori + customer_totals: Ciclo Ordini Cliente Totale all_products: Tutti i prodotti inventory: Inventario (in mano) lettuce_share: LettuceShare @@ -988,7 +995,7 @@ it: delivery: Rapporto Consegne tax_types: Tipologia tariffe tax_rates: Aliquote d'imposta - pack_by_customer: Smistato dai consumatori + pack_by_customer: Imballato dal Cliente pack_by_supplier: Smistato dai fornitori orders_and_distributors: name: Gentili richieste e distributori @@ -1002,7 +1009,7 @@ it: orders_and_fulfillment: name: Gentili richieste e resoconti di soddifazione customers: - name: Consumatori + name: Clienti products_and_inventory: name: Prodotti e inventario users_and_enterprises: @@ -1039,7 +1046,7 @@ it: enable_subscriptions_step_2: 2. In "Preferenze Negozio", attiva l'opzione Abbonamenti set_up_shipping_and_payment_methods_html: 'Imposta i metodi %{shipping_link} e %{payment_link} ' set_up_shipping_and_payment_methods_note_html: Nota con gli abbonamenti può
essere utilizzato solo il metodo Contanti - ensure_at_least_one_customer_html: 'Assicurati che esista almeno un %{customer_link} ' + ensure_at_least_one_customer_html: Assicurati che almeno un %{customer_link} esista create_at_least_one_schedule: Crea almeno un programma create_at_least_one_schedule_step_1_html: '1. Vai alla pagina %{order_cycles_link} ' create_at_least_one_schedule_step_2: 2. Crea un Ciclo di Richieste se non l'hai già fatto @@ -1065,9 +1072,9 @@ it: invalid_error: Oops! Per favore compila i campi obbligatori... allowed_payment_method_types_tip: Al momento può essere utilizzato solo il metodo di pagamento Contanti credit_card: Carta di Credito - charges_not_allowed: Non sono consentiti Oneri per questo cliente + charges_not_allowed: Non sono consentiti ricarichi per questo cliente no_default_card: Il cliente non ha carte disponibili da caricare - card_ok: il cliente ha una carta disponibile da caricare + card_ok: Il cliente ha una carta disponibile da caricare begins_at_placeholder: "Seleziona una data" ends_at_placeholder: "Facoltativo" loading_flash: @@ -1092,9 +1099,9 @@ it: cancel_failure_msg: "Ci dispiace, eliminazione non riuscita!" confirm_pause_msg: "Sei sicura/o di voler mettere in pausa questo abbonamento?" pause_failure_msg: "Spiacente, pausa fallita!" - confirm_unpause_msg: "Se hai un ciclo di richieste aperto durante questa registrazione, sarà creato un ordine per l'utente registrato. Vuoi annullare la registrazione?" + confirm_unpause_msg: "Se hai aperto un Ciclo d'Ordini durante questa sottoscrizione pianificata, un ordine per l'utente verrà creato per questo cliente. Sei sicuro di voler attivare questa sottoscrizione?" unpause_failure_msg: "Ci dispiace, ripresa non riuscita!" - confirm_cancel_open_orders_msg: "Alcune di queste richieste sono attualmente attive. I consumatori sono già stati avvisati che le richieste verranno soddisfatte. Vuoi eliminare questa/e richiesta/e o mantenerla?" + confirm_cancel_open_orders_msg: "Alcuni ordini per questa sottoscrizione sono attualmente aperti. I clienti sono già stati avvisati che le richieste verranno soddisfatte. Vuoi eliminare questa/e richiesta/e o mantenerle?" resume_canceled_orders_msg: "Alcuni ordini per questo abbonamento possono essere ripresi in questo momento. Puoi riprenderli dal menu a discesa degli ordini." yes_cancel_them: Cancella l'articolo no_keep_them: Tieni l'articolo @@ -1168,8 +1175,12 @@ it: login: "fai il login" signup: "Registrati" contact: "contatto" - require_customer_login: "Solo utenti approvati hanno accesso a questo negozio" + require_customer_login: "Solo clienti approvati hanno accesso a questo negozio" + require_login_html: "Se sei già un cliente approvato, %{login} o %{signup} per procedere." + require_login_2_html: "Vuoi iniziare a acquistare qui? Per favore %{contact}%{enterprise}e chiedi di essere aggiunto." require_customer_html: "Se vuoi iniziare a comprare, per favore %{contact} %{enterprise} per chiedere di raggiungerci." + select_oc: + select_oc_html: "Per favore scegli quando vuoi il tuo ordine , per vedere quali prodotti sono disponibili." card_could_not_be_updated: La Carta non ha potuto essere rinnovata card_could_not_be_saved: La Carta non ha potuto essere salvata spree_gateway_error_flash_for_checkout: "C'è stato un problema con le informazioni sul pagamento: %{error}" @@ -1177,7 +1188,7 @@ it: invoice_column_tax: "IVA" invoice_column_price: "Prezzo" invoice_column_item: "Articolo" - invoice_column_qty: "Qtà." + invoice_column_qty: "Qtà" invoice_column_unit_price_with_taxes: "Prezzo unitario (incl. tasse)" invoice_column_unit_price_without_taxes: "Prezzo unitario (escl. tasse)" invoice_column_price_with_taxes: "Prezzo totale (incl. tasse)" @@ -1393,14 +1404,14 @@ it: order_paid: PAGATO order_not_paid: NON PAGATO order_total: Totale dell'ordine - order_payment: "Pagamento via:" + order_payment: "Pagamento attraverso:" order_billing_address: Indirizzo di fatturazione order_delivery_on: Consegna il order_delivery_address: Indirizzo di consegna order_delivery_time: Tempo di consegna order_special_instructions: "Tue note:" order_pickup_time: Pronto per il ritiro - order_pickup_instructions: Istruzioni per la raccolta + order_pickup_instructions: Istruzioni per la Distribuzione order_produce: Produrre order_total_price: Totale order_includes_tax: (include le tasse) @@ -1426,17 +1437,17 @@ it: email_social: "Connettiti con Noi:" email_contact: "Scrivici:" email_signoff: "Saluti," - email_signature: "Team di %{sitename}" + email_signature: "Il team di %{sitename}" email_confirm_customer_greeting: "Ciao %{name}," email_confirm_customer_intro_html: "Grazie per aver acquistato presso %{distributor}!" email_confirm_customer_number_html: "Conferma dell'Ordine #%{number}" - email_confirm_customer_details_html: "Qui sono i dettagli del tuo ordine da %{distributor}:" + email_confirm_customer_details_html: "Ecco i dettagli del tuo ordine da %{distributor}:" email_confirm_customer_signoff: "Cordiali saluti," email_confirm_shop_greeting: "Ciao %{name}," email_confirm_shop_order_html: "Ben fatto! Hai un nuovo ordine per %{distributor}!" email_confirm_shop_number_html: "Conferma dell'Ordine #%{number}" email_order_summary_item: "Articolo" - email_order_summary_quantity: "Qtà." + email_order_summary_quantity: "Qtà" email_order_summary_sku: "SKU" email_order_summary_price: "Prezzo" email_order_summary_subtotal: "Subtotale:" @@ -1444,8 +1455,8 @@ it: email_order_summary_includes_tax: "(include le tasse)" email_payment_paid: PAGATO email_payment_not_paid: NON PAGATO - email_payment_summary: Riassunto del pagamento - email_payment_method: "Pagamento via:" + email_payment_summary: Riepilogo di pagamento + email_payment_method: "Pagamento attraverso:" email_so_placement_intro_html: "Hai una nuova gentile richiesta di %{distributor}" email_so_placement_details_html: "Ecco i dettagli della gentile richiesta per %{distributor}:" email_so_placement_changes: "Purtroppo alcuni prodotti richiesti non sono disponibili. Le quantità originali richieste sono barrate qui sotto." @@ -1469,13 +1480,13 @@ it: email_shipping_delivery_address: "Indirizzo di consegna" email_shipping_collection_details: Dettagli della raccolta email_shipping_collection_time: "Pronto per il ritiro:" - email_shipping_collection_instructions: "Istruzioni per la raccolta:" + email_shipping_collection_instructions: "Istruzioni per la distribuzione:" email_special_instructions: "Tue note:" email_signup_greeting: Ciao! email_signup_welcome: "Benvenuto a %{sitename}!" email_signup_confirmed_email: "Grazie di aver confermato la tua mail." email_signup_shop_html: "Puoi effettuare il log in qui: %{link}." - email_signup_text: "Grazie per esserti unito alla rete. Se sei un cliente, non vediamo l'ora di introdurti a molti produttori fantastici, distributori di cibo spettacolari e cibo delizioso! Se sei un produttore o un'impresa del cibo, siamo entusiasti di averti come parte della rete." + email_signup_text: "Grazie per esserti unito alla rete. Se sei un cliente, non vediamo l'ora di introdurti a molti produttori fantastici, distributori di cibo spettacolari e cibo delizioso! Se sei un produttore o un'impresa alimentare, siamo entusiasti di averti come parte della rete." email_signup_help_html: "Accettiamo volentieri tutte le tue domane e i tuoi suggerimenti: puoi usare il bottone Invia Feedback sul sito o scriverci a %{email}" invite_email: greeting: "Ciao!" @@ -1529,12 +1540,17 @@ it: orders_changeable_orders_alert_html: Questa gentile richiesta è stata confermata, ma puoi effettuare modifiche fino a %{oc_close}. products_clear: Pulisci products_showing: "Mostra:" + products_results_for: "Risultati per" products_or: "o" products_and: "e" + products_filters_in: "in" products_with: con + products_search: "Ricerca..." products_filter_by: "Filtra per" products_filter_selected: "selezionato" + products_filter_heading: "Filtri" products_filter_clear: "Pulisci" + products_filter_done: "Fatto" products_loading: "Caricamento prodotti..." products_updating_cart: "Aggiornamento del carrello..." products_cart_empty: "Carrello vuoto" @@ -1545,6 +1561,8 @@ it: products_update_error_msg: "Salvataggio fallito." products_update_error_data: "Salvataggio fallito per dati non validi:" products_changes_saved: "Modifiche salvate." + products_no_results_html: "Mi spiace, nessun risultato per %{query}" + products_clear_search: "Pulisci ricerca" search_no_results_html: "Mi dispiace, nessun risultato per %{query}. Vuoi provare un'altra ricerca?" components_profiles_popover: "I profili non hanno una vetrina su Open Food Network, ma potrebbero avere il proprio negozio fisico o online altrove" components_profiles_show: "Mostra profili" @@ -1900,6 +1918,7 @@ it: admin_enterprise_relationships_permits: "permessi" admin_enterprise_relationships_seach_placeholder: "Cerca" admin_enterprise_relationships_button_create: "Crea" + admin_enterprise_relationships_to: "a" admin_enterprise_groups: "Gruppi dell'azienda" admin_enterprise_groups_name: "Nome" admin_enterprise_groups_owner: "Proprietario" @@ -1960,7 +1979,7 @@ it: scheduled_for: "Programmato per" customers: "Clienti" please_select_hub: "Seleziona un hub" - loading_customers: "Clienti in caricamento" + loading_customers: "Caricamento Clienti" no_customers_found: "Nessun cliente trovato" go: "Vai" hub: "Distributore" @@ -2110,8 +2129,8 @@ it: report_header_tax_on_fees: "Oneri sulle provvigioni (%{currency_symbol})" report_header_total_tax: "Oneri totali (%{currency_symbol})" report_header_enterprise: Azienda - report_header_customer: Consumatore - report_header_customer_code: Codice cliente + report_header_customer: Cliente + report_header_customer_code: Codice Cliente report_header_product: Prodotto report_header_product_properties: Proprietà prodotto report_header_quantity: Quantità @@ -2155,10 +2174,10 @@ it: report_header_order_id: ID richiesta report_header_item_name: Nome articolo report_header_temp_controlled_items: Articolo a Temperatura Controllata - report_header_customer_name: Nome Consumatore - report_header_customer_email: Email consumatore - report_header_customer_phone: Telefono Consumatore - report_header_customer_city: Città consumatore + report_header_customer_name: Nome Cliente + report_header_customer_email: Email Cliente + report_header_customer_phone: Telefono Cliente + report_header_customer_city: Città Cliente report_header_payment_state: Stato Pagamento report_header_payment_type: Tipo Pagamento report_header_item_price: "Articolo (%{currency})" @@ -2258,12 +2277,12 @@ it: adjustments_tax_rate_error: "^Verificate che l'aliquota d'imposta per questo adeguamento sia corretta." active_distributors_not_ready_for_checkout_message_singular: >- L'hub %{distributor_names} figura in un ciclo di richieste attivo, ma non ha - metodi di consegna e di pagamento validi. Finché non li imposti, i consumatori - non potranno acquistare da questo hub. + metodi di consegna e di pagamento validi. Finché non li imposti, i clienti non + potranno acquistare da questo hub. active_distributors_not_ready_for_checkout_message_plural: >- - Gli hub %{distributor_names}figurano in un ciclo di richieste attivo, ma non - hanno metodi di consegna e di pagamento validi. Finché non li imposti, i consumatori - non potranno acquistare da questi hub. + I distributori %{distributor_names} figurano in un ciclo di richieste attivo, + ma non hanno metodi di consegna e di pagamento validi. Finché non li imposti, + i clienti non potranno acquistare da questi distributori. enterprise_fees_update_notice: Le tariffe della tua azienda sono state aggiornate. enterprise_register_package_error: "Per favore seleziona un pacchetto" enterprise_register_error: "Non abbiamo potuto completare la registrazione per %{enterprise}" @@ -2305,6 +2324,10 @@ it: resolve_errors: 'Per favore risolvi i seguenti errori:' more_items: "+ %{count} ancora" default_card_updated: Carta predefinita aggiornata + cart: + add_to_cart_failed: > + C'è stato un problema nell'aggiungere questo prodotto al carrello. Forse + non é più disponibile o il negozio sta chiudendo. admin: enterprise_limit_reached: "Hai raggiunto il limite standard di aziende per account. Scrivi a %{contact_email} se hai bisogno di aumentarlo." modals: @@ -2316,9 +2339,9 @@ it: title: Regole Tag overview: Panoramica overview_text: > - Le regole per le tag forniscono un modo per definire quali elementi - sono visibili, o a quali utenti. Gli elementi possono essere: metodi - di consegna, metodi di pagamento, prodotti e cicli di richieste. + Le regole per le tag forniscono un modo per descrivere quali elementi + sono visibili, o a quali utenti. Gli elementi possono essere: Metodi + di Consegna, Metodi di Pagamento, Prodotti e Cicli d'Ordine. by_default_rules: "Regole predefinite" by_default_rules_text: > Le regole predefinite ti permettono di nascondere gli elementi affinché @@ -2561,7 +2584,7 @@ it: edit_profile: "modifica profilo" add_products_to_inventory: "aggiungi prodotti all'inventario" resources: - could_not_delete_customer: 'Non è possibile annullare utente' + could_not_delete_customer: 'Non è possibile cancellare il cliente' product_import: confirmation: | Questo imposterà il livello delle scorte a zero su tutti i prodotti per questa @@ -2570,7 +2593,7 @@ it: create_failure: "Impossibile creare il ciclo dell'ordine" update_success: 'Il tuo ciclo di richieste è stato aggiornato' update_failure: "Impossibile aggiornare il ciclo dell'ordine" - no_distributors: Non ci sono distributori in questo ciclo dell'ordine. Questo ciclo dell'ordine non sarà visibile ai consumatori fino a quando non ne verrà aggiunto uno. Vuoi continuare a salvare questo ciclo dell'ordine? + no_distributors: Non ci sono distributori in questo ciclo d'ordine. Questo ciclo d'ordine non sarà visibile ai clienti fino a quando non ne verrà aggiunto uno. Vuoi continuare a salvare questo ciclo d'ordine? enterprises: producer: "Produttore" non_producer: "Non-produttore" @@ -2696,7 +2719,7 @@ it: fee_type: "Tipo di tariffa" enterprise_name: "Proprietario dell'azienda" fee_name: "Nome della tariffa" - customer_name: "Consumatore" + customer_name: "Cliente" fee_placement: "Posizionamento della tariffa" fee_calculated_on_transfer_through_name: "Calcolo della commissione sul trasferimento tramite" tax_category_name: "Categoria d'imposta" @@ -2706,7 +2729,7 @@ it: fee_type: "Tipo di tariffa" enterprise_name: "Proprietario dell'azienda" fee_name: "Nome della tariffa" - customer_name: "Consumatore" + customer_name: "Cliente" fee_placement: "Posizionamento della tariffa" fee_calculated_on_transfer_through_name: "Calcolo della commissione sul trasferimento tramite" tax_category_name: "Categoria d'imposta" @@ -2715,7 +2738,7 @@ it: order: "Gentile Richiesta" distribution: "Distribuzione" order_details: "Dettagli ordine" - customer_details: "Dettagli cliente" + customer_details: "Dettagli Cliente" adjustments: "Regolazioni" payments: "Pagamenti" payment: "Pagamento" @@ -2764,8 +2787,8 @@ it: cannot_set_shipping_method_without_address: "Impossibile impostare il metodo di spedizione finché non vengono forniti i dettagli del cliente." no_tracking_present: "Nessun dettaglio di tracciamento fornito." order_total: "Ordine totale" - customer_details: "Dettagli cliente" - customer_search: "Ricerca clienti" + customer_details: "Dettagli Cliente" + customer_search: "Ricerca Clienti" choose_a_customer: "Scegli un cliente" account: "Account" billing_address: "Indirizzo di fatturazione" @@ -2783,12 +2806,18 @@ it: use_billing_address: "Utilizzare l'indirizzo di fatturazione" adjustments: "Regolazioni" continue: "Continua" - fill_in_customer_info: "Si prega di compilare le informazioni del cliente" + fill_in_customer_info: "Per favore compila le informazioni del cliente" new_payment: "Nuovo pagamento" capture: "Cattura" void: "vuoto" login: "Login" password: "Password" + signature: "Firma" + solution: "Soluzione" + landing_page: "Landing Page" + server: "Server" + test_mode: "Modalità di Test" + logourl: "Logourl" configurations: "Configurazioni" general_settings: "Impostazioni generali" site_name: "Nome del sito" @@ -2930,7 +2959,7 @@ it: order_cycles: "Cicli di richieste" enterprises: "Aziende" enterprise_relationships: "permessi" - customers: "Consumatori" + customers: "Clienti" groups: "Gruppi" product_properties: index: @@ -3006,12 +3035,13 @@ it: completed_at: "Completo al" number: "Numero" state: "Stato" - email: "Mail consumatore" + email: "E-mail Cliente" invoice: issued_on: "Emesso il" tax_invoice: "FATTURA DELLE TASSE" code: "Codice" from: "Da" + to: "Pagamento a" shipping: "Spedizione" form: distribution_fields: @@ -3031,7 +3061,7 @@ it: other: "Hai il %{count} di prodotti disponibili" order_cycles: order_cycles: "Cicli di richieste" - order_cycles_tip: "I cicli di richieste determinano dove e quando i tuoi prodotti sono disponibili per i consumatori." + order_cycles_tip: "I cicli di richieste determinano dove e quando i tuoi prodotti sono disponibili per i clienti." you_have_active: zero: "Non hai nessun ciclo di richieste attivo." one: "Hai un ciclo di richieste attivo." @@ -3046,6 +3076,8 @@ it: zone: "Zone" calculator: "Calcolatrice" display: "Visualizza" + both: "Entrambi Checkout e Back office" + back_end: "Solo Back office" no_shipping_methods_found: "Nessun metodo di spedizione trovato" new: new_shipping_method: "Nuovo metodo di spedizione" @@ -3057,6 +3089,9 @@ it: form: categories: "categorie" zones: "Zone" + both: "Entrambi Checkout e Back Office" + back_end: "Solo Back office" + deactivation_warning: "Disattivare un metodo di spedizione può far sparire il metodo di spedizione dalla tua lista. Alternativamente, puoi nascondere il metodo di spedizione dalla pagina di checkout impostando l'opzione 'Visualizza' su 'Solo Back office'." payment_methods: index: payment_methods: "Metodi di pagamento" @@ -3068,8 +3103,11 @@ it: display: "Visualizza" active: "Attivo" both: "Entrambi" + front_end: "Solo checkout" + back_end: "Solo Back office" active_yes: "Sì" active_no: "No" + no_payment_methods_found: "Nessun metodo di pagamento trovato" new: new_payment_method: "Nuovo metodo di pagamento" back_to_payment_methods_list: "Torna all'elenco dei metodi di pagamento" @@ -3098,7 +3136,11 @@ it: active: "Attivo" active_yes: "Sì" active_no: "No" + both: "Entrambi Checkout e Back Office" + front_end: "Solo checkout" + back_end: "Solo Back office" tags: "Tag" + deactivation_warning: "Disattivare un metodo di pagamento può far sparire il metodo di pagamento dalla tua lista. Alternativamente, puoi nascondere il metodo di pagamento dalla pagina di checkout impostando l'opzione 'Visualizza' su 'Solo Back office'." providers: provider: "Provider" payments: @@ -3158,7 +3200,7 @@ it: bulk_coop_supplier_report: 'Totali per fornitore - tabella' bulk_coop_allocation: 'Assegnazione - tabella' bulk_coop_packing_sheets: 'Imballaggio - tabella' - bulk_coop_customer_payments: 'Pagamenti clienti - tabella' + bulk_coop_customer_payments: 'Bulk Co-op - Pagamenti Clienti' users: index: listing_users: "Elenco Utenti" @@ -3200,7 +3242,10 @@ it: price: "Prezzo" display_as: "Visualizza come" display_name: "Nome da visualizzare" + display_as_placeholder: 'es. 2 kg' + display_name_placeholder: 'es. Pomodori' autocomplete: + out_of_stock: "Esaurito" producer_name: "Produttore" unit: "Unità" shared: @@ -3238,6 +3283,7 @@ it: format: '%Y-%m-%d' js_format: 'aa-mm-gg' orders: + error_flash_for_unavailable_items: "Un oggetto nel tuo carrello è diventato non disponibile, Per favore aggiorna le quantità selezionate." edit: login_to_view_order: "Effettua il login per visualizzare il tuo ordine." bought: @@ -3265,6 +3311,14 @@ it: invalid: invalido order_mailer: cancel_email: + customer_greeting: "Caro %{name}," + instructions_html: "Il tuo ordine con %{distributor} è stato CANCELLATO. Per favore conserva questa informazione per i tuoi dati." + dont_cancel: "Se hai cambiato idea o non desideri annullare questo ordine, ti preghiamo di contattare%{email}" + order_summary_canceled_html: "Riepilogo Ordine #%{number} [CANCELLATO]" + details: "Qui ci sono i dettagli di quello che hai ordinato:" + unpaid_order: "Il tuo ordine risulta pendente nessun rimborso è stato eseguito" + paid_order: "Il tuo ordine era già stato pagato così %{distributor} ha rimborsato l'intero costo" + credit_order: "Il tuo ordine è stato pagato, quindi il tuo acconto è stato accreditato" subject: "Cancellazione dell'ordine" confirm_email: subject: "Conferma dell'ordine" diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 073ed2c232..f25465f87e 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -368,7 +368,6 @@ nb: title: "Matomo Innstillinger" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo er en web- og mobilanalyse. Du kan enten hoste Matomo selv eller bruke en skytjeneste. Se matomo.org for mer informasjon." config_instructions_html: "Her kan du konfigurere OFN-Matomo integrasjonen. URL til Matomo nedenfor skal peke på Matomo-instansen der brukersporingsinformasjonen skal sendes til; Hvis den er tom, blir Matomo-brukersporing deaktivert. Site-ID feltet er ikke obligatorisk, men nyttig hvis du sporer mer enn ett nettsted på en enkelt Matomo-instans; den kan bli funnet på Matomo-konsollen." customers: index: @@ -3206,6 +3205,7 @@ nb: display_as_placeholder: 'f.eks. 2 kg' display_name_placeholder: 'f.eks. Tomater' autocomplete: + out_of_stock: "Ikke på Lager" producer_name: "Produsent" unit: "Enhet" shared: diff --git a/config/locales/nl_BE.yml b/config/locales/nl_BE.yml index d2aa82ed37..952d7a5579 100644 --- a/config/locales/nl_BE.yml +++ b/config/locales/nl_BE.yml @@ -354,7 +354,6 @@ nl_BE: title: "Matomo instellingen" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo is een Web en Mobile Analytics. U kunt Matomo on-premises hosten of gebruik maken van een cloud-hosted service. Zie matomo.org voor meer informatie." config_instructions_html: "Hier kunt u de OFN Matomo integratie configureren. De Matomo URL hieronder zou moeten verwijzen naar de Matomo instantie waar de gebruiker tracking informatie naartoe wordt gestuurd; als deze leeg wordt gelaten, wordt Matomo gebruiker tracking uitgeschakeld. Het veld Site ID is niet verplicht, maar handig als je meer dan één website volgt op één Matomo instance; het is te vinden op de Matomo instance console. Vertaald met www.DeepL.com/Translator" customers: index: @@ -3030,6 +3029,7 @@ nl_BE: price: "Prijs" display_as: "Weergeven als" autocomplete: + out_of_stock: "Geen voorraad" producer_name: "Producent" unit: "Unit" shared: diff --git a/config/locales/pt.yml b/config/locales/pt.yml index d7328b6e33..1e8b8f7efe 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -347,7 +347,6 @@ pt: title: "Configurações Matomo" matomo_url: "URL Matomo" matomo_site_id: "Site ID Matomo" - info_html: "Matomo é uma ferramenta de análise web e mobile. Pode instalar o Matomo no seu servidor ou utilizar um serviço na cloud. Veja matomo.org para mais informações." config_instructions_html: "Aqui pode configurar a integração com Matomo. O URL Matomo em baixo deve apontar para o serviror para onde a informação de tracking de utilizadores será enviada; se deixado vazio, o tracking de utilizadores através do Matomo ficará desactivado. O campo Site ID não é obrigatório mas útil se estive a fazer tracking de mais do que um website numa instância única do Matomo; pode ser encontrado na consola da instância Matomo." customers: index: @@ -2967,6 +2966,7 @@ pt: price: "Preço" display_as: "Mostrar como" autocomplete: + out_of_stock: "Sem Stock" producer_name: "Produtor" unit: "Unidade" shared: diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index daab978405..3c2ac7d748 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -368,7 +368,6 @@ pt_BR: title: "Configurações do Matomo" matomo_url: "Matomo URL" matomo_site_id: "Matomo Site ID" - info_html: "Matomo é uma Web e Mobile Analytics. Você pode hospedar o Matomo localmente ou usar um serviço hospedado na nuvem. Veja matomo.org para mais informações." config_instructions_html: "Aqui você pode configurar a integração do OFN Matomo. O URL do Matomo abaixo deve apontar para a instância do Matomo para onde as informações de rastreamento do usuário serão enviadas; se for deixado em branco, o rastreamento de usuários do Matomo será desativado. O campo ID do site não é obrigatório, mas é útil se você estiver controlando mais de um site em uma única instância do Matomo. ele pode ser encontrado no console da instância Matomo." customers: index: @@ -3230,6 +3229,7 @@ pt_BR: display_as_placeholder: 'ex. 2 kg' display_name_placeholder: 'ex. Tomates' autocomplete: + out_of_stock: "Sem estoque" producer_name: "Produtor" unit: "Unidade" shared: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 09160deaa4..825fab2b41 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -368,7 +368,6 @@ tr: title: "Matomo Ayarları" matomo_url: "Matomo URL'si" matomo_site_id: "Matomo Site Kimliği" - info_html: "Matomo bir Web ve Mobil Analitik programıdır. Matomo'yu şirket içinde kullanabilir veya bulutta saklanan bir hizmet olarak kullanabilirsiniz. Daha fazla bilgi için matomo.org adresini ziyaret edin." config_instructions_html: "Burada OFN Matomo entegrasyonunu yapılandırabilirsiniz. Aşağıdaki Matomo URL'si, kullanıcı izleme bilgilerinin gönderileceği Matomo örneğini göstermelidir; boş bırakılırsa Matomo kullanıcı takibi devre dışı bırakılır. Site Kimliği alanı zorunlu değildir, ancak tek bir Matomo örneğinde birden fazla web sitesini izliyorsanız yararlıdır; Matomo örnek konsolunda bulunabilir." customers: index: @@ -2297,7 +2296,7 @@ tr: order_cycles_no_permission_to_coordinate_error: "Hiçbir işletmenizin sipariş dönemini koordine etme izni yok" order_cycles_no_permission_to_create_error: "Bu işletme tarafından koordine edilen bir sipariş dönemi oluşturma izniniz yok" back_to_orders_list: "Sipariş listesine geri dön" - no_orders_found: "Sipariş bulunamadı" + no_orders_found: "SİPARİŞ BULUNAMADI" order_information: "Sipariş Bilgisi" date_completed: "Tamamlanma Tarihi" amount: "Tutar" @@ -2810,6 +2809,12 @@ tr: void: "Geçersiz" login: "Oturum aç" password: "Parola" + signature: "İmza" + solution: "Çözüm" + landing_page: "Ana Sayfa" + server: "Server" + test_mode: "Test Modu" + logourl: "Logourl" configurations: "yapılandırmalar" general_settings: "Genel Ayarlar" site_name: "Site adı" @@ -2887,7 +2892,7 @@ tr: default: "varsayılan" calculator: "Hesaplama" zone: "bölge" - display: "Görüntüle" + display: "GÖSTER" environment: "çevre" active: "Aktif" nore: "Daha fazla" @@ -2937,7 +2942,7 @@ tr: admin: tab: dashboard: "KONTROL PANELİ" - orders: "Siparişler" + orders: "SİPARİŞLER" bulk_order_management: "Toplu Sipariş Yönetimi" subscriptions: "Üyelikler" products: "Ürünler" @@ -2976,7 +2981,7 @@ tr: index: new_return_authorization: "Yeni İade Yetkisi" return_authorizations: "İade Yetkileri" - back_to_orders_list: "Siparişler Listesine Geri Dön" + back_to_orders_list: "SİPARİŞLER LİSTESİNE GERİ DÖN" rma_number: "RMA Numarası" status: "Durum" amount: "Miktar" @@ -3005,7 +3010,7 @@ tr: canceled: "İptal edildi" orders: index: - listing_orders: "Siparişler Listeleniyor" + listing_orders: "SİPARİŞLER LİSTELENİYOR" new_order: "Yeni Sipariş" capture: "Tahsilat" ship: "Teslimat" @@ -3017,7 +3022,7 @@ tr: previous: "Önceki" next: "Sonraki" loading: "Yükleniyor" - no_orders_found: "Sipariş Bulunamadı" + no_orders_found: "SİPARİŞ BULUNAMADI" results_found: "%{number} Sonuç bulundu." viewing: "%{start} - %{end} görüntüleniyor." print_invoices: "Faturaları Yazdır" @@ -3067,7 +3072,7 @@ tr: products_distributor: "Dağıtımcı" zone: "bölge" calculator: "Hesaplama" - display: "Görüntüle" + display: "GÖSTER" both: "Ödeme Sayfası ve Panel" back_end: "Sadece panel" no_shipping_methods_found: "Hiçbir teslimat yöntemi bulunamadı" @@ -3091,13 +3096,15 @@ tr: name: "İSİM" products_distributor: "Dağıtımcı" provider: "Sağlayıcı" - environment: "çevre" - display: "Görüntüle" + environment: "Çevre" + display: "GÖSTER" active: "Aktif" both: "Her ikisi de" + front_end: "Sadece Ödeme" back_end: "Sadece panel" active_yes: "Evet" active_no: "Hayır" + no_payment_methods_found: "Ödeme yöntemi bulunamadı" new: new_payment_method: "Yeni Ödeme Yöntemi" back_to_payment_methods_list: "Ödeme Yöntemleri Listesine Geri Dön" @@ -3121,14 +3128,16 @@ tr: form: name: "İSİM" description: "Açıklama" - environment: "çevre" - display: "Görüntüle" + environment: "Çevre" + display: "GÖSTER" active: "Aktif" active_yes: "Evet" active_no: "Hayır" both: "Ödeme Sayfası ve Panel" + front_end: "Sadece Ödeme" back_end: "Sadece panel" tags: "Etiketler" + deactivation_warning: "Bir ödeme yöntemini kaldırmak listenizden silinmesine sebep olabilir. Alternatif olarak, ödeme yöntemi ayarını 'Göster' yerine 'Sadece Panel' olarak değiştirebilirsiniz. " providers: provider: "Sağlayıcı" payments: @@ -3233,6 +3242,7 @@ tr: display_as_placeholder: 'örn. 2 kg' display_name_placeholder: 'örn. Domates' autocomplete: + out_of_stock: "Stok tükendi" producer_name: "Üretici" unit: "Birim" shared: @@ -3350,14 +3360,14 @@ tr: account_settings: Hesap Ayarları show: tabs: - orders: Siparişler + orders: SİPARİŞLER cards: Kredi kartları transactions: İşlemler settings: Hesap ayarları unconfirmed_email: "Bekleyen e-posta onayı: %{unconfirmed_email}. Yeni e-posta onaylandıktan sonra e-posta adresiniz güncellenecektir." orders: - open_orders: Açık Siparişler - past_orders: Geçmiş Siparişler + open_orders: AÇIK SİPARİŞLER + past_orders: GEÇMİŞ SİPARİŞLER transactions: transaction_history: İşlem Geçmişi open_orders: diff --git a/config/routes/spree.rb b/config/routes/spree.rb index 0c05dd2fbb..ca5993aca5 100644 --- a/config/routes/spree.rb +++ b/config/routes/spree.rb @@ -133,7 +133,7 @@ Spree::Core::Engine.routes.draw do # Configuration section resource :general_settings - resource :mail_method, :only => [:edit, :update] do + resource :mail_methods, :only => [:edit, :update] do post :testmail, :on => :collection end diff --git a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee index 4feff89868..d483bec6a8 100644 --- a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee @@ -903,8 +903,8 @@ describe "AdminProductEditCtrl", -> $scope.categoryFilter = "6" $scope.resetSelectFilters() expect($scope.query).toBe "" - expect($scope.producerFilter).toBe "0" - expect($scope.categoryFilter).toBe "0" + expect($scope.producerFilter).toBeUndefined + expect($scope.categoryFilter).toBeUndefined describe "converting arrays of objects with ids to an object with ids as keys", -> diff --git a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee index 82c26397ca..c95fbdf81b 100644 --- a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee @@ -1,7 +1,7 @@ describe "Enterprises service", -> Enterprises = $rootScope = null CurrentHubMock = {} - Geo = + GmapsGeo = OK: 'ok' succeed: true geocode: (query, callback) -> @@ -31,7 +31,7 @@ describe "Enterprises service", -> module 'Darkswarm' module ($provide)-> $provide.value "CurrentHub", CurrentHubMock - $provide.value "Geo", Geo + $provide.value "GmapsGeo", GmapsGeo null angular.module('Darkswarm').value('enterprises', enterprises) angular.module('Darkswarm').value('taxons', taxons) @@ -118,12 +118,12 @@ describe "Enterprises service", -> spyOn(Enterprises, "setDistanceFrom") it "calculates distance for all enterprises when geocoding succeeds", -> - Geo.succeed = true + GmapsGeo.succeed = true Enterprises.calculateDistanceGeo('query') expect(Enterprises.setDistanceFrom).toHaveBeenCalledWith("location") it "resets distance when geocoding fails", -> - Geo.succeed = false + GmapsGeo.succeed = false spyOn(Enterprises, "resetDistance") Enterprises.calculateDistanceGeo('query') expect(Enterprises.setDistanceFrom).not.toHaveBeenCalled() diff --git a/spec/javascripts/unit/darkswarm/services/map_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/map_spec.js.coffee index fb4def8342..eed215dbe1 100644 --- a/spec/javascripts/unit/darkswarm/services/map_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/map_spec.js.coffee @@ -1,7 +1,7 @@ describe "Hubs service", -> OfnMap = null CurrentHubMock = {} - Geo = {} + GmapsGeo = {} enterprises = [ { id: 2 @@ -54,7 +54,7 @@ describe "Hubs service", -> angular.module('Darkswarm').value('enterprises', enterprises) module ($provide)-> $provide.value "CurrentHub", CurrentHubMock - $provide.value "Geo", Geo + $provide.value "GmapsGeo", GmapsGeo null inject ($injector)-> OfnMap = $injector.get("OfnMap") diff --git a/spec/javascripts/unit/darkswarm/services/products_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/products_spec.js.coffee index 62c8c0a071..88ff585f00 100644 --- a/spec/javascripts/unit/darkswarm/services/products_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/products_spec.js.coffee @@ -12,7 +12,7 @@ describe 'Products service', -> productWithImage = null properties = null taxons = null - Geo = {} + GmapsGeo = {} endpoint = "/api/order_cycles/1/products?distributor=1" beforeEach -> @@ -53,7 +53,7 @@ describe 'Products service', -> $provide.value "currentOrder", currentOrder $provide.value "taxons", taxons $provide.value "properties", properties - $provide.value "Geo", Geo + $provide.value "GmapsGeo", GmapsGeo $provide.value "OrderCycle", OrderCycle $provide.value "railsFlash", null null diff --git a/spec/models/spree/calculator/price_sack_spec.rb b/spec/models/spree/calculator/price_sack_spec.rb index 921b657f88..05c7a8cb8a 100644 --- a/spec/models/spree/calculator/price_sack_spec.rb +++ b/spec/models/spree/calculator/price_sack_spec.rb @@ -49,6 +49,32 @@ describe Spree::Calculator::PriceSack do end end + context "minimal amount is float" do + before do + calculator.preferred_minimal_amount = 16.5 + calculator.preferred_normal_amount = 5 + calculator.preferred_discount_amount = 1 + line_item.quantity = 2 + end + + context "with price bellow minimal amount" do + let(:price) { 8 } + + it "returns the correct value of cost" do + expect(calculator.compute(line_item)).to eq(5) + end + end + + context "with price above minimal amount" do + let(:price) { 8.5 } + + it "returns the correct value of cost" do + expect(calculator.compute(line_item)).to eq(1) + end + end + + end + context "extends LocalizedNumber" do it_behaves_like "a model using the LocalizedNumber module", [:preferred_minimal_amount, :preferred_normal_amount, :preferred_discount_amount] end diff --git a/spec/models/spree/product_spec.rb b/spec/models/spree/product_spec.rb index cb6bf45f0f..bae53d89e8 100644 --- a/spec/models/spree/product_spec.rb +++ b/spec/models/spree/product_spec.rb @@ -257,6 +257,37 @@ module Spree end end + describe "in_distributors" do + let!(:distributor1) { create(:distributor_enterprise) } + let!(:distributor2) { create(:distributor_enterprise) } + let!(:product1) { create(:product) } + let!(:product2) { create(:product) } + let!(:product3) { create(:product) } + let!(:product4) { create(:product) } + let!(:order_cycle1) { + create(:order_cycle, distributors: [distributor1], + variants: [product1.variants.first, product2.variants.first]) + } + let!(:order_cycle2) { + create(:order_cycle, distributors: [distributor2], + variants: [product3.variants.first]) + } + + it "returns distributed products for a given Enterprise AR relation" do + distributors_relation = Enterprise.where(id: [distributor1.id, distributor2.id]) + + expect(Product.in_distributors(distributors_relation)).to include product1, product2, product3 + expect(Product.in_distributors(distributors_relation)).to_not include product4 + end + + it "returns distributed products for a given array of enterprise ids" do + distributors_ids = [distributor1.id, distributor2.id] + + expect(Product.in_distributors(distributors_ids)).to include product1, product2, product3 + expect(Product.in_distributors(distributors_ids)).to_not include product4 + end + end + describe "in_supplier_or_distributor" do it "shows products in supplier" do s1 = create(:supplier_enterprise) @@ -579,57 +610,6 @@ module Spree end end - describe "stock filtering" do - it "considers products that are on_demand as being in stock" do - product = create(:simple_product, on_demand: true) - product.master.update_attribute(:on_hand, 0) - expect(product.has_stock?).to eq(true) - end - - describe "finding products in stock for a particular distribution" do - it "returns on-demand products" do - p = create(:simple_product, on_demand: true) - p.variants.first.update_attributes!(on_hand: 0, on_demand: true) - d = create(:distributor_enterprise) - oc = create(:simple_order_cycle, distributors: [d]) - oc.exchanges.outgoing.first.variants << p.variants.first - - expect(p).to have_stock_for_distribution(oc, d) - end - - it "returns products with in-stock variants" do - p = create(:simple_product) - v = create(:variant, product: p) - v.update_attribute(:on_hand, 1) - d = create(:distributor_enterprise) - oc = create(:simple_order_cycle, distributors: [d]) - oc.exchanges.outgoing.first.variants << v - - expect(p).to have_stock_for_distribution(oc, d) - end - - it "returns products with on-demand variants" do - p = create(:simple_product) - v = create(:variant, product: p, on_demand: true) - v.update_attribute(:on_hand, 0) - d = create(:distributor_enterprise) - oc = create(:simple_order_cycle, distributors: [d]) - oc.exchanges.outgoing.first.variants << v - - expect(p).to have_stock_for_distribution(oc, d) - end - - it "does not return products that have stock not in the distribution" do - p = create(:simple_product) - p.master.update_attribute(:on_hand, 1) - d = create(:distributor_enterprise) - oc = create(:simple_order_cycle, distributors: [d]) - - expect(p).not_to have_stock_for_distribution(oc, d) - end - end - end - describe "taxons" do let(:taxon1) { create(:taxon) } let(:taxon2) { create(:taxon) } diff --git a/spec/services/bulk_invoice_service_spec.rb b/spec/services/bulk_invoice_service_spec.rb index 4056a1b88f..687e680bcc 100644 --- a/spec/services/bulk_invoice_service_spec.rb +++ b/spec/services/bulk_invoice_service_spec.rb @@ -47,4 +47,25 @@ describe BulkInvoiceService do expect(filepath).to eq 'tmp/invoices/1234567.pdf' end end + + describe "#orders_from" do + let(:renderer) { InvoiceRenderer.new } + + before do + allow(InvoiceRenderer).to receive(:new).and_return(renderer) + end + + it "orders with completed desc" do + order_old = create(:order_with_distributor, :completed, completed_at: 2.minutes.ago) + order_oldest = create(:order_with_distributor, :completed, completed_at: 4.minutes.ago) + order_older = create(:order_with_distributor, :completed, completed_at: 3.minutes.ago) + + expect(renderer).to receive(:render_to_string).with(order_old).ordered.and_return("") + expect(renderer).to receive(:render_to_string).with(order_older).ordered.and_return("") + expect(renderer).to receive(:render_to_string).with(order_oldest).ordered.and_return("") + + order_ids = [order_oldest, order_old, order_older].map(&:id) + service.start_pdf_job_without_delay(order_ids) + end + end end