mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-14 18:56:49 +00:00
Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f6b3498bd | ||
|
|
0b9881b9d3 | ||
|
|
348364814d | ||
|
|
dbf647f700 | ||
|
|
ef2b0b8383 | ||
|
|
f75b865be8 | ||
|
|
7670d01c6d | ||
|
|
61300a62c2 | ||
|
|
a3fa6db5a9 | ||
|
|
dae883c68d | ||
|
|
808f7b12c7 | ||
|
|
82c9cdd874 | ||
|
|
a257febc79 | ||
|
|
17b129ff4f | ||
|
|
6ce552727b | ||
|
|
dadc02fb11 | ||
|
|
bbd2427493 | ||
|
|
82457d2b63 | ||
|
|
9e14186431 | ||
|
|
d422283b76 | ||
|
|
13115d4a2d | ||
|
|
1005c299a2 | ||
|
|
3788ec590f | ||
|
|
7dd23d20c8 | ||
|
|
231dd7b6a2 | ||
|
|
8a783bbb7d | ||
|
|
9375318c4b | ||
|
|
dc76b3922b | ||
|
|
40506685ef | ||
|
|
f5ad950bc3 | ||
|
|
ba37db7ccc | ||
|
|
401052be68 | ||
|
|
330e7d71af | ||
|
|
94cc8bb980 | ||
|
|
2c588847df | ||
|
|
3c36d2d1a6 | ||
|
|
fa9d61c7fd | ||
|
|
92b5f9a313 | ||
|
|
9588138eb0 | ||
|
|
d8dd84e64e | ||
|
|
ae1831241b | ||
|
|
91f30d5427 | ||
|
|
3ce7bc54e3 | ||
|
|
977c8f6203 | ||
|
|
1600067383 | ||
|
|
3fad51d271 | ||
|
|
5f0075f8b7 | ||
|
|
716e952117 | ||
|
|
092122969c | ||
|
|
f27a624687 | ||
|
|
7afc999689 | ||
|
|
4fc66356cb | ||
|
|
a7f1ed660b | ||
|
|
9840467b8a | ||
|
|
fa68dd0bcc | ||
|
|
4d757dde78 | ||
|
|
f3f18d8338 | ||
|
|
128ca3b1ef | ||
|
|
b64327fbb3 | ||
|
|
5c6624e1d1 | ||
|
|
4953c69123 | ||
|
|
01dc51c84b | ||
|
|
64063f305b | ||
|
|
db61a2bb17 | ||
|
|
8017921e89 | ||
|
|
3743cf1bc3 | ||
|
|
7a34c6e3f0 | ||
|
|
fdc14ab44e | ||
|
|
8a11dc3c33 | ||
|
|
23deb37876 | ||
|
|
526317c373 | ||
|
|
7d27d1325e | ||
|
|
24dca5e51f | ||
|
|
689aed7080 | ||
|
|
6c92fdf167 | ||
|
|
aef73aef38 | ||
|
|
11eda94949 |
12
Gemfile.lock
12
Gemfile.lock
@@ -253,11 +253,11 @@ GEM
|
||||
fog (~> 1.0)
|
||||
rails (~> 3.0)
|
||||
debugger-linecache (1.2.0)
|
||||
delayed_job (4.0.4)
|
||||
activesupport (>= 3.0, < 4.2)
|
||||
delayed_job_active_record (4.0.2)
|
||||
activerecord (>= 3.0, < 4.2)
|
||||
delayed_job (>= 3.0, < 4.1)
|
||||
delayed_job (4.1.4)
|
||||
activesupport (>= 3.0, < 5.2)
|
||||
delayed_job_active_record (4.1.2)
|
||||
activerecord (>= 3.0, < 5.2)
|
||||
delayed_job (>= 3.0, < 5)
|
||||
devise (2.2.8)
|
||||
bcrypt-ruby (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
@@ -640,7 +640,7 @@ GEM
|
||||
shellany (0.0.1)
|
||||
shoulda-matchers (2.8.0)
|
||||
activesupport (>= 3.0.0)
|
||||
skylight (1.5.0)
|
||||
skylight (1.6.0)
|
||||
activesupport (>= 3.0.0)
|
||||
spinjs-rails (1.3)
|
||||
rails (>= 3.1)
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
angular.module("ofn.admin", ["ngResource", "ngAnimate", "admin.utils", "admin.indexUtils", "admin.dropdown", "admin.products", "admin.taxons", "infinite-scroll"]).config ($httpProvider) ->
|
||||
angular.module("ofn.admin", [
|
||||
"ngResource",
|
||||
"mm.foundation",
|
||||
"angularFileUpload",
|
||||
"ngAnimate",
|
||||
"admin.utils",
|
||||
"admin.indexUtils",
|
||||
"admin.dropdown",
|
||||
"admin.products",
|
||||
"admin.taxons",
|
||||
"infinite-scroll"
|
||||
]).config ($httpProvider) ->
|
||||
$httpProvider.defaults.headers.common["X-CSRF-Token"] = $("meta[name=csrf-token]").attr("content")
|
||||
$httpProvider.defaults.headers.common["Accept"] = "application/json, text/javascript, */*"
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
//= require textAngular.min.js
|
||||
//= require i18n/translations
|
||||
//= require darkswarm/i18n.translate.js
|
||||
//
|
||||
//= require moment
|
||||
//= require moment/en-gb.js
|
||||
//= require moment/es.js
|
||||
@@ -60,5 +59,7 @@
|
||||
//= require moment/nb.js
|
||||
//= require moment/pt-br.js
|
||||
//= require moment/sv.js
|
||||
//= require ../shared/mm-foundation-tpls-0.8.0.min.js
|
||||
//= require angularjs-file-upload
|
||||
|
||||
//= require_tree .
|
||||
|
||||
@@ -12,7 +12,7 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
|
||||
|
||||
$scope.$watch "shop_id", ->
|
||||
if $scope.shop_id?
|
||||
CurrentShop.shop = $filter('filter')($scope.shops, {id: $scope.shop_id})[0]
|
||||
CurrentShop.shop = $filter('filter')($scope.shops, {id: parseInt($scope.shop_id)}, true)[0]
|
||||
Customers.index({enterprise_id: $scope.shop_id}).then (data) ->
|
||||
pendingChanges.removeAll()
|
||||
$scope.customers_form.$setPristine()
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
angular.module("admin.enterprises")
|
||||
.controller "enterpriseCtrl", ($scope, $window, NavigationCheck, enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) ->
|
||||
.controller "enterpriseCtrl", ($scope, $http, $window, NavigationCheck, enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) ->
|
||||
$scope.Enterprise = enterprise
|
||||
$scope.PaymentMethods = EnterprisePaymentMethods.paymentMethods
|
||||
$scope.ShippingMethods = EnterpriseShippingMethods.shippingMethods
|
||||
$scope.navClear = NavigationCheck.clear
|
||||
$scope.menu = SideMenu
|
||||
$scope.newManager = { id: '', email: (t('add_manager')) }
|
||||
$scope.newManager = { id: null, email: (t('add_manager')) }
|
||||
$scope.StatusMessage = StatusMessage
|
||||
|
||||
$scope.$watch 'enterprise_form.$dirty', (newValue) ->
|
||||
@@ -26,7 +26,7 @@ angular.module("admin.enterprises")
|
||||
# from a directive "nav-check" in the page - if we pass it here it will be called in the test suite,
|
||||
# and on all new uses of this contoller, and we might not want that.
|
||||
enterpriseNavCallback = ->
|
||||
if $scope.enterprise_form.$dirty
|
||||
if $scope.enterprise_form != undefined && $scope.enterprise_form.$dirty
|
||||
t('admin.unsaved_confirm_leave')
|
||||
|
||||
# Register the NavigationCheck callback
|
||||
@@ -38,16 +38,29 @@ angular.module("admin.enterprises")
|
||||
return
|
||||
for i, user of $scope.Enterprise.users when user.id == manager.id
|
||||
$scope.Enterprise.users.splice i, 1
|
||||
if $scope.enterprise_form?
|
||||
$scope.enterprise_form.$setDirty()
|
||||
$scope.enterprise_form?.$setDirty()
|
||||
|
||||
$scope.addManager = (manager) ->
|
||||
if manager.id? and manager.email?
|
||||
if manager.id? and angular.isNumber(manager.id) and manager.email?
|
||||
manager =
|
||||
id: manager.id
|
||||
email: manager.email
|
||||
confirmed: manager.confirmed
|
||||
if (user for user in $scope.Enterprise.users when user.id == manager.id).length == 0
|
||||
$scope.Enterprise.users.push manager
|
||||
$scope.enterprise_form?.$setDirty()
|
||||
else
|
||||
alert ("#{manager.email}" + " " + t("is_already_manager"))
|
||||
|
||||
$scope.inviteManager = ->
|
||||
$scope.invite_errors = $scope.invite_success = null
|
||||
email = $scope.newUser
|
||||
|
||||
$http.post("/admin/manager_invitations", {email: email, enterprise_id: $scope.Enterprise.id}).success (data)->
|
||||
$scope.addManager({id: data.user, email: email})
|
||||
$scope.invite_success = t('user_invited', email: email)
|
||||
.error (data) ->
|
||||
$scope.invite_errors = data.errors
|
||||
|
||||
$scope.resetModal = ->
|
||||
$scope.newUser = $scope.invite_errors = $scope.invite_success = null
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
angular.module("ofn.admin").controller "ProductImageCtrl", ($scope, ProductImageService) ->
|
||||
$scope.imageUploader = ProductImageService.imageUploader
|
||||
$scope.imagePreview = ProductImageService.imagePreview
|
||||
|
||||
$scope.$watch 'product.image_url', (newValue) ->
|
||||
$scope.imagePreview = newValue if newValue
|
||||
@@ -0,0 +1,6 @@
|
||||
angular.module("ofn.admin").directive "imageModal", ($modal, ProductImageService) ->
|
||||
restrict: 'C'
|
||||
link: (scope, elem, attrs, ctrl) ->
|
||||
elem.on "click", (ev) =>
|
||||
scope.uploadModal = $modal.open(templateUrl: 'admin/modals/image_upload.html', controller: ctrl, scope: scope, windowClass: 'product-image-upload')
|
||||
ProductImageService.configure(scope.product)
|
||||
@@ -0,0 +1,15 @@
|
||||
angular.module("ofn.admin").factory "ProductImageService", (FileUploader, SpreeApiKey) ->
|
||||
new class ProductImageService
|
||||
imagePreview: null
|
||||
|
||||
imageUploader: new FileUploader
|
||||
headers:
|
||||
'X-Spree-Token': SpreeApiKey
|
||||
autoUpload: true
|
||||
|
||||
configure: (product) =>
|
||||
@imageUploader.url = "/api/product_images/#{product.id}"
|
||||
@imagePreview = product.image_url
|
||||
@imageUploader.onSuccessItem = (image, response) =>
|
||||
product.thumb_url = response.thumb_url
|
||||
product.image_url = response.image_url
|
||||
@@ -12,7 +12,7 @@ angular.module("admin.utils").directive "variantAutocomplete", ($timeout) ->
|
||||
if Spree.routes
|
||||
element.parent().children(".options_placeholder").attr "id", element.parent().data("index")
|
||||
element.select2
|
||||
placeholder: "Select a variant"
|
||||
placeholder: t('admin.orders.select_variant')
|
||||
minimumInputLength: 3
|
||||
quietMillis: 300
|
||||
ajax:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
window.Darkswarm = angular.module("Darkswarm", ["ngResource",
|
||||
window.Darkswarm = angular.module("Darkswarm", [
|
||||
'ngResource',
|
||||
'mm.foundation',
|
||||
'LocalStorageModule',
|
||||
'infinite-scroll',
|
||||
@@ -10,7 +11,7 @@ window.Darkswarm = angular.module("Darkswarm", ["ngResource",
|
||||
'duScroll',
|
||||
'angularFileUpload',
|
||||
'angularSlideables'
|
||||
]).config ($httpProvider, $tooltipProvider, $locationProvider, $anchorScrollProvider) ->
|
||||
]).config ($httpProvider, $tooltipProvider, $locationProvider, $anchorScrollProvider) ->
|
||||
$httpProvider.defaults.headers['common']['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr('content')
|
||||
$httpProvider.defaults.headers['common']['X-Requested-With'] = 'XMLHttpRequest'
|
||||
$httpProvider.defaults.headers.common.Accept = "application/json, text/javascript, */*"
|
||||
|
||||
@@ -4,5 +4,5 @@ Darkswarm.filter 'products', (Matcher) ->
|
||||
text ?= ""
|
||||
return products if text == ""
|
||||
products.filter (product) =>
|
||||
propertiesToMatch = [product.name, product.variant_names, product.supplier.name, product.primary_taxon.name]
|
||||
propertiesToMatch = [product.name, product.variant_names, product.supplier.name, product.primary_taxon.name, product.meta_keywords]
|
||||
Matcher.matchBeginning propertiesToMatch, text
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
%a.close-reveal-modal{"ng-click" => "$close()"}
|
||||
%i.fa.fa-times-circle{'aria-hidden' => "true"}
|
||||
|
||||
%form#image_upload{ name: 'form', novalidate: true, enctype: 'multipart/form-data', multipart: true, ng: { controller: "ProductImageCtrl" } }
|
||||
%div.image-preview
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg", ng: { hide: "!imageUploader.isUploading" }}
|
||||
%img.preview{ng: {src: "{{imagePreview}}", class: "{'faded': imageUploader.isUploading}"}}
|
||||
|
||||
%label{for: 'image-upload', class: 'button'} #{t('admin.products.bulk_edit.upload_an_image')}
|
||||
%input#image-upload{hidden: true, type: 'file', 'nv-file-select' => true, uploader: "imageUploader"}
|
||||
@@ -0,0 +1,19 @@
|
||||
#invite-manager-modal{ng: {app: 'admin.enterprises', controller: 'enterpriseCtrl'}}
|
||||
|
||||
.margin-bottom-30.text-center
|
||||
.text-big
|
||||
= t('js.admin.modals.invite_title')
|
||||
|
||||
%p.alert-box.ok{ng: {show: 'invite_success'}}
|
||||
{{invite_success}}
|
||||
|
||||
%p.alert-box.error{ng: {show: 'invite_errors'}}
|
||||
{{invite_errors}}
|
||||
|
||||
%input#invite_email.fullwidth.margin-bottom-20{ng: {model: 'newUser'}}
|
||||
|
||||
.margin-bottom-20.text-center
|
||||
%button.text-center.margin-top-10{ng: {show: '!invite_success', click: 'inviteManager()'}}
|
||||
= t('js.admin.modals.invite')
|
||||
%button.text-center.margin-top-10{ng: {show: 'invite_success', click: 'resetModal(); close()'}}
|
||||
= t('js.admin.modals.close')
|
||||
198
app/assets/stylesheets/admin/modals.css.scss
Normal file
198
app/assets/stylesheets/admin/modals.css.scss
Normal file
@@ -0,0 +1,198 @@
|
||||
.reveal-modal-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: black;
|
||||
z-index: 1004;
|
||||
display: none;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.reveal-modal, dialog {
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1005;
|
||||
width: 100vw;
|
||||
top: 0;
|
||||
border-radius: 0.4em;
|
||||
border: 0px none;
|
||||
left: 0;
|
||||
background-color: white;
|
||||
padding: 1.25rem;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
|
||||
padding: 1.875rem;
|
||||
}
|
||||
|
||||
.reveal-modal .column, dialog .column, .reveal-modal .columns, dialog .columns {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.reveal-modal > :first-child, dialog > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.reveal-modal > :last-child, dialog > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 40.063em) {
|
||||
.reveal-modal, dialog {
|
||||
width: 80%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
.reveal-modal.radius, dialog.radius {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.reveal-modal.round, dialog.round {
|
||||
border-radius: 1000px;
|
||||
}
|
||||
|
||||
.reveal-modal.collapse, dialog.collapse {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.reveal-modal.full, dialog.full {
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
height: 100vh;
|
||||
min-height: 100vh;
|
||||
max-width: none !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.reveal-modal .close-reveal-modal, dialog .close-reveal-modal {
|
||||
font-size: 2.5rem;
|
||||
line-height: 1;
|
||||
position: absolute;
|
||||
top: 0.625rem;
|
||||
right: 1.375rem;
|
||||
color: #aaaaaa;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
dialog::backdrop, dialog + .backdrop {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: black;
|
||||
background: rgba(0, 0, 0, 0.45);
|
||||
z-index: auto;
|
||||
display: none;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
dialog[open] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media print {
|
||||
dialog, .reveal-modal, dialog {
|
||||
display: none;
|
||||
background: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
// ANIMATION CLASSES
|
||||
|
||||
.fade {
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity 0.15s linear;
|
||||
transition: opacity 0.15s linear;
|
||||
}
|
||||
|
||||
.fade.in {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.reveal-modal.fade {
|
||||
-webkit-transition: -webkit-transform 0.2s ease-out;
|
||||
-moz-transition: -moz-transform 0.2s ease-out;
|
||||
-o-transition: -o-transform 0.2s ease-out;
|
||||
transition: transform 0.2s ease-out;
|
||||
-webkit-transform: translate(0, -25%);
|
||||
-ms-transform: translate(0, -25%);
|
||||
transform: translate(0, -25%);
|
||||
}
|
||||
|
||||
.reveal-modal.in {
|
||||
-webkit-transform: translate(0, 0);
|
||||
-ms-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
.reveal-modal-bg.fade {
|
||||
filter: alpha(opacity = 0);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.reveal-modal-bg.in {
|
||||
filter: alpha(opacity = 50);
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 40em) {
|
||||
.reveal-modal, dialog {
|
||||
min-height: 100vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 40.063em) {
|
||||
.reveal-modal, dialog {
|
||||
top: 6.25rem;
|
||||
}
|
||||
.reveal-modal.tiny, dialog.tiny {
|
||||
width: 30%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.reveal-modal.small, dialog.small {
|
||||
width: 40%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.reveal-modal.medium, dialog.medium {
|
||||
width: 60%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.reveal-modal.large, dialog.large {
|
||||
width: 70%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.reveal-modal.xlarge, dialog.xlarge {
|
||||
width: 95%;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.reveal-modal.full, dialog.full {
|
||||
width: 100vw;
|
||||
max-width: 62.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,7 @@
|
||||
input[type="submit"], input[type="button"], button, .button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ table#listing_products.bulk {
|
||||
margin-bottom: 60px;
|
||||
|
||||
colgroup col {
|
||||
&.image {
|
||||
width: 1%;
|
||||
}
|
||||
&.producer {
|
||||
width: 18%;
|
||||
}
|
||||
@@ -62,6 +65,21 @@ table#listing_products.bulk {
|
||||
}
|
||||
}
|
||||
|
||||
td.image {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
img {
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0.4em;
|
||||
}
|
||||
img:hover {
|
||||
opacity: 0.8;
|
||||
cursor: pointer;
|
||||
background-color: #fbfbfb;
|
||||
border: 1px solid #e4e4e4;
|
||||
}
|
||||
}
|
||||
|
||||
td.unit {
|
||||
input, select {
|
||||
width: 100%;
|
||||
@@ -77,3 +95,46 @@ table#listing_products.bulk {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.reveal-modal.product-image-upload {
|
||||
width: 300px;
|
||||
a.close-reveal-modal {
|
||||
font-size: 23px;
|
||||
color: #de6060;
|
||||
right: 0.45rem;
|
||||
top: 0.35rem;
|
||||
:hover {
|
||||
color: #bf4545;
|
||||
}
|
||||
}
|
||||
div.image-preview {
|
||||
//float: left;
|
||||
}
|
||||
label {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
form#image_upload {
|
||||
text-align: center;
|
||||
.spinner {
|
||||
width: 160px;
|
||||
height: 65%;
|
||||
position: absolute;
|
||||
//background-color: rgba(255, 255, 255, 0.75);
|
||||
padding: 32px;
|
||||
margin: 0px -80px;
|
||||
left: 50%;
|
||||
z-index: 100;
|
||||
}
|
||||
.preview {
|
||||
width: 240px;
|
||||
}
|
||||
.faded {
|
||||
opacity: 0.25;
|
||||
}
|
||||
.button:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -133,8 +133,6 @@
|
||||
font-size: 0.875rem;
|
||||
margin-bottom: 0.75rem;
|
||||
|
||||
5rem {}
|
||||
|
||||
color: $dark-grey;
|
||||
}
|
||||
|
||||
|
||||
39
app/controllers/admin/manager_invitations_controller.rb
Normal file
39
app/controllers/admin/manager_invitations_controller.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
module Admin
|
||||
class ManagerInvitationsController < Spree::Admin::BaseController
|
||||
def create
|
||||
@email = params[:email]
|
||||
@enterprise = Enterprise.find(params[:enterprise_id])
|
||||
|
||||
authorize! :edit, @enterprise
|
||||
|
||||
existing_user = Spree::User.find_by_email(@email)
|
||||
|
||||
if existing_user
|
||||
render json: { errors: t('admin.enterprises.invite_manager.user_already_exists') }, status: :unprocessable_entity
|
||||
return
|
||||
end
|
||||
|
||||
new_user = create_new_manager
|
||||
|
||||
if new_user
|
||||
render json: { user: new_user.id }, status: :ok
|
||||
else
|
||||
render json: { errors: t('admin.enterprises.invite_manager.error') }, status: 500
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_new_manager
|
||||
password = Devise.friendly_token
|
||||
new_user = Spree::User.create(email: @email, unconfirmed_email: @email, password: password)
|
||||
new_user.reset_password_token = Devise.friendly_token
|
||||
new_user.save!
|
||||
|
||||
@enterprise.users << new_user
|
||||
Delayed::Job.enqueue ManagerInvitationJob.new(@enterprise.id, new_user.id)
|
||||
|
||||
new_user
|
||||
end
|
||||
end
|
||||
end
|
||||
19
app/controllers/api/product_images_controller.rb
Normal file
19
app/controllers/api/product_images_controller.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
module Api
|
||||
class ProductImagesController < Spree::Api::BaseController
|
||||
respond_to :json
|
||||
|
||||
def update_product_image
|
||||
@product = Spree::Product.find(params[:product_id])
|
||||
authorize! :update, @product
|
||||
|
||||
if @product.images.first.nil?
|
||||
@image = Spree::Image.create(attachment: params[:file], viewable_id: @product.master.id, viewable_type: 'Spree::Variant')
|
||||
respond_with(@image, status: 201)
|
||||
else
|
||||
@image = @product.images.first
|
||||
@image.update_attributes(attachment: params[:file])
|
||||
respond_with(@image, status: 200)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -38,6 +38,10 @@ class UserConfirmationsController < DeviseController
|
||||
'not_confirmed'
|
||||
end
|
||||
|
||||
if resource.reset_password_token.present?
|
||||
return spree.edit_spree_user_password_path(reset_password_token: resource.reset_password_token)
|
||||
end
|
||||
|
||||
path = (session[:confirmation_return_url] || login_path).to_s
|
||||
path += path.include?('?') ? '&' : '?'
|
||||
path + "validation=#{result}"
|
||||
|
||||
7
app/jobs/manager_invitation_job.rb
Normal file
7
app/jobs/manager_invitation_job.rb
Normal file
@@ -0,0 +1,7 @@
|
||||
ManagerInvitationJob = Struct.new(:enterprise_id, :user_id) do
|
||||
def perform
|
||||
enterprise = Enterprise.find enterprise_id
|
||||
user = Spree::User.find user_id
|
||||
EnterpriseMailer.manager_invitation(enterprise, user).deliver
|
||||
end
|
||||
end
|
||||
@@ -12,6 +12,18 @@ class EnterpriseMailer < Spree::BaseMailer
|
||||
:subject => subject)
|
||||
end
|
||||
|
||||
def manager_invitation(enterprise, user)
|
||||
@enterprise = enterprise
|
||||
@instance = Spree::Config[:site_name]
|
||||
@instance_email = from_address
|
||||
|
||||
subject = t('enterprise_mailer.invite_manager.subject', enterprise: @enterprise.name)
|
||||
|
||||
mail(to: user.email,
|
||||
from: from_address,
|
||||
subject: subject)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_enterprise(enterprise)
|
||||
|
||||
@@ -32,8 +32,8 @@ class ProducerMailer < Spree::BaseMailer
|
||||
|
||||
def line_items_from(order_cycle, producer)
|
||||
Spree::LineItem.
|
||||
joins(order: :order_cycle, variant: :product).
|
||||
where('order_cycles.id = ?', order_cycle).
|
||||
from_order_cycle(order_cycle).
|
||||
sorted_by_name_and_unit_value.
|
||||
merge(Spree::Product.in_supplier(producer)).
|
||||
merge(Spree::Order.by_state('complete'))
|
||||
end
|
||||
|
||||
@@ -7,8 +7,11 @@ Spree::BaseMailer.class_eval do
|
||||
|
||||
protected
|
||||
|
||||
# This method copies the one defined in Spree's mailers. It should be removed
|
||||
# once in Spree v2.0 and Spree's BaseMailer class lands in our codebase.
|
||||
# Then, we'll be able to rely on its #from_address.
|
||||
def from_address
|
||||
Spree::Config[:mails_from] || 'test@example.com'
|
||||
Spree::MailMethod.current.preferred_mails_from
|
||||
end
|
||||
|
||||
def roadie_options
|
||||
|
||||
@@ -4,8 +4,6 @@ Spree::AppConfiguration.class_eval do
|
||||
# we can allow to be modified in the UI by adding appropriate form
|
||||
# elements to existing or new configuration pages.
|
||||
|
||||
preference :mails_from, :string, default: 'no-reply@example.com'
|
||||
|
||||
# Embedded Shopfronts
|
||||
preference :enable_embedded_shopfronts, :boolean, default: false
|
||||
preference :embedded_shopfronts_whitelist, :text, default: nil
|
||||
|
||||
@@ -32,6 +32,15 @@ Spree::LineItem.class_eval do
|
||||
end
|
||||
}
|
||||
|
||||
# Find line items that are from order sorted by variant name and unit value
|
||||
scope :sorted_by_name_and_unit_value, joins(variant: :product).
|
||||
reorder('lower(spree_products.name) asc, lower(spree_variants.display_name) asc, spree_variants.unit_value asc')
|
||||
|
||||
scope :from_order_cycle, lambda { |order_cycle|
|
||||
joins(order: :order_cycle).
|
||||
where('order_cycles.id = ?', order_cycle)
|
||||
}
|
||||
|
||||
scope :supplied_by, lambda { |enterprise|
|
||||
joins(:product).
|
||||
where('spree_products.supplier_id = ?', enterprise)
|
||||
|
||||
@@ -61,7 +61,7 @@ Spree::ShippingMethod.class_eval do
|
||||
end
|
||||
|
||||
def adjustment_label
|
||||
'Shipping'
|
||||
I18n.t('shipping')
|
||||
end
|
||||
|
||||
# Checks whether the shipping method is of delivery type, meaning that it
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/ insert_bottom "[data-hook='admin_product_tabs']"
|
||||
|
||||
- klass = current == 'SEO' ? 'active' : ''
|
||||
- klass = current == t(:Search) ? 'active' : ''
|
||||
%li{:class => klass}
|
||||
= link_to_with_icon 'icon-tasks', t('admin.products.seo'), seo_admin_product_url(@product)
|
||||
= link_to_with_icon 'icon-tasks', t(:Search), seo_admin_product_url(@product)
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
class Api::Admin::ProductSerializer < ActiveModel::Serializer
|
||||
attributes :id, :name, :sku, :variant_unit, :variant_unit_scale, :variant_unit_name, :on_demand, :inherits_properties
|
||||
|
||||
attributes :on_hand, :price, :available_on, :permalink_live, :tax_category_id
|
||||
attributes :on_hand, :price, :available_on, :permalink_live, :tax_category_id, :image_url, :thumb_url
|
||||
|
||||
has_one :supplier, key: :producer_id, embed: :id
|
||||
has_one :primary_taxon, key: :category_id, embed: :id
|
||||
has_many :variants, key: :variants, serializer: Api::Admin::VariantSerializer # embed: ids
|
||||
has_one :master, serializer: Api::Admin::VariantSerializer
|
||||
|
||||
def image_url
|
||||
object.images.present? ? object.images.first.attachment.url(:product) : "/assets/noimage/product.png"
|
||||
end
|
||||
|
||||
def thumb_url
|
||||
object.images.present? ? object.images.first.attachment.url(:mini) : "/assets/noimage/mini.png"
|
||||
end
|
||||
|
||||
def on_hand
|
||||
object.on_hand.nil? ? 0 : object.on_hand.to_f.finite? ? object.on_hand : I18n.t(:on_demand)
|
||||
end
|
||||
|
||||
@@ -36,7 +36,7 @@ class Api::CachedProductSerializer < ActiveModel::Serializer
|
||||
#delegate :cache_key, to: :object
|
||||
include ActionView::Helpers::SanitizeHelper
|
||||
|
||||
attributes :id, :name, :permalink
|
||||
attributes :id, :name, :permalink, :meta_keywords
|
||||
attributes :on_demand, :group_buy, :notes, :description, :description_html
|
||||
attributes :properties_with_values
|
||||
|
||||
|
||||
34
app/services/create_mail_method.rb
Normal file
34
app/services/create_mail_method.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
# Configures Rails to use the specified mail settings. It does so creating
|
||||
# a Spree::MailMethod and applying its configuration.
|
||||
class CreateMailMethod
|
||||
# Constructor
|
||||
#
|
||||
# @param attributes [Hash] MailMethod attributes
|
||||
def initialize(attributes)
|
||||
@attributes = attributes
|
||||
end
|
||||
|
||||
def call
|
||||
persist_attributes
|
||||
initialize_mail_settings
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :attributes
|
||||
|
||||
# Updates the created mail method's attributes with the ones specified
|
||||
def persist_attributes
|
||||
mail_method.update_attributes(attributes)
|
||||
end
|
||||
|
||||
# Creates a new Spree::MailMethod for the current environment
|
||||
def mail_method
|
||||
Spree::MailMethod.create(environment: attributes[:environment])
|
||||
end
|
||||
|
||||
# Makes Spree apply the specified mail settings
|
||||
def initialize_mail_settings
|
||||
Spree::Core::MailSettings.init
|
||||
end
|
||||
end
|
||||
@@ -3,7 +3,6 @@
|
||||
-# So we use onchange and have to get the scope to access the ng controller
|
||||
= form_for [main_app, :admin, @enterprise], html: { name: "enterprise_form",
|
||||
"ng-controller" => 'enterpriseCtrl',
|
||||
'onchange' => 'angular.element(enterprise_form).scope().setFormDirty()',
|
||||
"ng-cloak" => true } do |f|
|
||||
|
||||
%save-bar{ dirty: "enterprise_form.$dirty", persist: "true" }
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
%tr
|
||||
%td
|
||||
- # Ignore this input in the submit
|
||||
= hidden_field_tag :ignored, :new_manager, class: "select2 fullwidth", 'user-select' => 'newManager', 'ng-model' => 'newManager'
|
||||
= hidden_field_tag :ignored, nil, class: "select2 fullwidth", 'user-select' => 'newManager', 'ng-model' => 'newManager'
|
||||
%td.actions
|
||||
%a{ 'ng-click' => 'addManager(newManager)', :class => "icon-plus no-text" }
|
||||
%tr.animate-repeat{ id: "manager-{{manager.id}}", ng: { repeat: 'manager in Enterprise.users' }}
|
||||
@@ -60,3 +60,16 @@
|
||||
- @enterprise.users.each do |manager|
|
||||
= manager.email
|
||||
%br
|
||||
|
||||
- if full_permissions
|
||||
%form
|
||||
.row
|
||||
.three.columns.alpha
|
||||
%label
|
||||
= t('.invite_manager')
|
||||
%div{'ofn-with-tip' => t('.invite_manager_tip')}
|
||||
%a= t('admin.whats_this')
|
||||
.eight.columns.omega
|
||||
.row
|
||||
%a.button.help-modal{template: 'admin/modals/invite_manager.html'}
|
||||
= t('.add_unregistered_user')
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
object @image
|
||||
attributes(*image_attributes)
|
||||
attributes :viewable_type, :viewable_id
|
||||
node( :thumb_url ) { @product.images.first.attachment.url(:mini) }
|
||||
node( :image_url ) { @product.images.first.attachment.url(:product) }
|
||||
16
app/views/enterprise_mailer/manager_invitation.html.haml
Normal file
16
app/views/enterprise_mailer/manager_invitation.html.haml
Normal file
@@ -0,0 +1,16 @@
|
||||
%h3
|
||||
= t('invite_email.greeting')
|
||||
%p.lead
|
||||
= t('invite_email.invited_to_manage', enterprise: @enterprise.name, instance: @instance)
|
||||
|
||||
%p
|
||||
= t('invite_email.confirm_your_email')
|
||||
%p
|
||||
= t('invite_email.mistakenly_sent', owner_email: @enterprise.owner.email, instance: @instance, instance_email: @instance_email)
|
||||
|
||||
%p
|
||||
= t :email_help
|
||||
|
||||
= render 'shared/mailers/signoff'
|
||||
|
||||
= render 'shared/mailers/social_and_contact'
|
||||
@@ -60,12 +60,12 @@
|
||||
= t 'powered_by'
|
||||
%a{href: '/'}
|
||||
= t 'title'
|
||||
- if I18n.available_locales.count > 1
|
||||
- if OpenFoodNetwork::I18nConfig.selectable_locales.count > 1
|
||||
%li.language-switcher.has-dropdown
|
||||
%a{href: '#'}
|
||||
%i.ofn-i_071-globe
|
||||
%ul.dropdown
|
||||
- I18n.available_locales.each do |l|
|
||||
- OpenFoodNetwork::I18nConfig.selectable_locales.each do |l|
|
||||
%li
|
||||
%a{href: "?locale=#{l.to_s}" }= t('language_name', locale: l)
|
||||
- if spree_current_user.nil?
|
||||
|
||||
@@ -40,13 +40,13 @@
|
||||
%span.nav-primary
|
||||
%i.ofn-i_036-producers
|
||||
= t 'label_producers'
|
||||
- if I18n.available_locales.count > 1
|
||||
- if OpenFoodNetwork::I18nConfig.selectable_locales.count > 1
|
||||
%li.language-switcher.li-menu
|
||||
%a
|
||||
%i.ofn-i_071-globe
|
||||
= t('language_name')
|
||||
%ul
|
||||
- I18n.available_locales.each do |l|
|
||||
- OpenFoodNetwork::I18nConfig.selectable_locales.each do |l|
|
||||
- if I18n.locale != l
|
||||
%li
|
||||
%a{href: "?locale=#{l.to_s}" }= t('language_name', locale: l)
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
.row{"data-hook" => "admin_product_meta_form"}
|
||||
.alpha.eleven.columns
|
||||
= f.field_container :meta_description do
|
||||
= f.label :meta_keywords, t(:meta_keywords)
|
||||
= f.field_container :meta_keywords do
|
||||
= f.label :meta_keywords, t(:product_search_keywords)
|
||||
%span.icon-question-sign{ 'ofn-with-tip' => t('admin.products.product_search_tip') }
|
||||
%br/
|
||||
= f.text_field :meta_keywords, :class => 'fullwidth', :rows => 6
|
||||
= f.field_container :meta_description do
|
||||
= f.label :meta_description, t(:meta_description)
|
||||
= f.label :meta_description, t(:SEO_keywords)
|
||||
%span.icon-question-sign{ 'ofn-with-tip' => t('admin.products.seo_tip') }
|
||||
%br/
|
||||
= f.text_field :meta_description, :class => 'fullwidth', :rows => 6
|
||||
.alpha.eleven.columns
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
%colgroup
|
||||
%col.actions
|
||||
%col.image{ ng: { show: 'columns.image.visible' } }
|
||||
%col.producer{ ng: { show: 'columns.producer.visible' } }
|
||||
%col.sku{ ng: { show: 'columns.sku.visible' } }
|
||||
%col.name{ ng: { show: 'columns.name.visible' } }
|
||||
@@ -21,6 +22,7 @@
|
||||
%th.left-actions
|
||||
%a{ 'ng-click' => 'toggleShowAllVariants()', :style => 'color: red; cursor: pointer' }
|
||||
= t(:expand_all)
|
||||
%th.image{ 'ng-show' => 'columns.image.visible' }
|
||||
%th.producer{ 'ng-show' => 'columns.producer.visible' }=t('admin.producer')
|
||||
%th.sku{ 'ng-show' => 'columns.sku.visible' }=t('admin.sku')
|
||||
%th.name{ 'ng-show' => 'columns.name.visible' }=t('.name')
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
%td.left-actions
|
||||
%a{ 'ofn-toggle-variants' => 'true', :class => "view-variants", 'ng-show' => 'hasVariants(product)' }
|
||||
%a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
|
||||
%td.image{ 'ng-show' => 'columns.image.visible' }
|
||||
%a{class: 'image-modal'}
|
||||
%img{'ng-src' => '{{ product.thumb_url }}'}
|
||||
%td.producer{ 'ng-show' => 'columns.producer.visible' }
|
||||
%select.select2.fullwidth{ 'ng-model' => 'product.producer_id', :name => 'producer_id', 'ofn-track-product' => 'producer_id', 'ng-options' => 'producer.id as producer.name for producer in producers' }
|
||||
%td.sku{ 'ng-show' => 'columns.sku.visible' }
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
%td.left-actions
|
||||
%a{ :class => "variant-item icon-caret-right", 'ng-hide' => "$last" }
|
||||
%a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "$last", 'ofn-with-tip' => t('.new_variant') }
|
||||
%td{ 'ng-show' => 'columns.image.visible' }
|
||||
%td{ 'ng-show' => 'columns.producer.visible' }
|
||||
%td{ 'ng-show' => 'columns.sku.visible' }
|
||||
%input{ 'ng-model' => "variant.sku", :name => 'variant_sku', 'ofn-track-variant' => 'sku', :type => 'text' }
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
= render :partial => 'spree/admin/shared/product_sub_menu'
|
||||
= render :partial => 'spree/admin/shared/product_tabs', :locals => { :current => 'SEO' }
|
||||
= render :partial => 'spree/admin/shared/product_tabs', :locals => { :current => t(:Search) }
|
||||
= render :partial => 'spree/shared/error_messages', :locals => { :target => @product }
|
||||
|
||||
= form_for [:admin, @product], :method => :put, :html => { :multipart => true } do |f|
|
||||
%fieldset.no-border-top
|
||||
= render :partial => 'seo_form', :locals => { :f => f }
|
||||
= render :partial => 'spree/admin/shared/edit_resource_links'
|
||||
%div{ 'ng-app' => 'ofn.admin' }
|
||||
= form_for [:admin, @product], :method => :put, :html => { :multipart => true } do |f|
|
||||
%fieldset.no-border-top
|
||||
= render :partial => 'seo_form', :locals => { :f => f }
|
||||
= render :partial => 'spree/admin/shared/edit_resource_links'
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
%h4
|
||||
= t :email_order_summary_price
|
||||
%tbody
|
||||
- @order.line_items.each do |item|
|
||||
- @order.line_items.sorted_by_name_and_unit_value.each do |item|
|
||||
%tr
|
||||
%td
|
||||
= render 'spree/shared/line_item_name', line_item: item
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
- if @order.payments.first.andand.payment_method.andand.type == "Spree::PaymentMethod::Check" and @order.payments.first.andand.payment_method.andand.description
|
||||
%p.callout
|
||||
%span{:style => "float:right;"}
|
||||
- if @order.paid?
|
||||
= t :email_payment_paid
|
||||
- else
|
||||
= t :email_payment_not_paid
|
||||
%strong
|
||||
= t :email_payment_summary
|
||||
%h4
|
||||
= t :email_payment_method
|
||||
%strong= @order.payments.first.andand.payment_method.andand.name.andand.html_safe
|
||||
%p
|
||||
%em= @order.payments.first.andand.payment_method.andand.description.andand.html_safe
|
||||
%p
|
||||
%p.callout
|
||||
%span{:style => "float:right;"}
|
||||
- if @order.paid?
|
||||
= t :email_payment_paid
|
||||
- else
|
||||
= t :email_payment_not_paid
|
||||
%strong
|
||||
= t :email_payment_summary
|
||||
%h4
|
||||
= t :email_payment_method
|
||||
%strong= @order.payments.first.andand.payment_method.andand.name.andand.html_safe
|
||||
%p
|
||||
%em= @order.payments.first.andand.payment_method.andand.description.andand.html_safe
|
||||
%p
|
||||
|
||||
@@ -35,13 +35,13 @@
|
||||
%td.text-right
|
||||
%span.order-total.item-total= display_checkout_subtotal(@order)
|
||||
%td
|
||||
|
||||
%tr
|
||||
%td.text-right{colspan:"3"}
|
||||
= t :orders_form_admin
|
||||
%td.text-right
|
||||
%span.order-total.distribution-total= display_checkout_admin_and_handling_adjustments_total_for(@order)
|
||||
%td
|
||||
-if display_checkout_admin_and_handling_adjustments_total_for(@order) != Spree::Money.new(0 , currency: @order.currency)
|
||||
%tr
|
||||
%td.text-right{colspan:"3"}
|
||||
= t :orders_form_admin
|
||||
%td.text-right
|
||||
%span.order-total.distribution-total= display_checkout_admin_and_handling_adjustments_total_for(@order)
|
||||
%td
|
||||
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item, :admin_and_handling]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
%tr.order-adjustment
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
%th.text-right.total
|
||||
%span= t(:total)
|
||||
%tbody{"data-hook" => ""}
|
||||
- order.line_items.each do |item|
|
||||
- order.line_items.sorted_by_name_and_unit_value.each do |item|
|
||||
%tr.line_item{"data-hook" => "order_details_line_item_row", class: "variant-#{item.variant.id}" }
|
||||
%td(data-hook = "order_item_description")
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
require_relative 'boot'
|
||||
|
||||
require 'rails/all'
|
||||
require_relative "../lib/open_food_network/i18n_config"
|
||||
|
||||
if defined?(Bundler)
|
||||
# If you precompile assets before deploying to production, use this line
|
||||
@@ -104,9 +105,8 @@ module Openfoodnetwork
|
||||
|
||||
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
||||
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||
config.i18n.default_locale = ENV["LOCALE"] || ENV["I18N_LOCALE"] || "en"
|
||||
config.i18n.available_locales = ENV["AVAILABLE_LOCALES"].andand.split(/[\s,]/).andand.map(&:strip) || []
|
||||
config.i18n.available_locales = (config.i18n.available_locales + [config.i18n.default_locale, 'en']).uniq
|
||||
config.i18n.default_locale = OpenFoodNetwork::I18nConfig.default_locale
|
||||
config.i18n.available_locales = OpenFoodNetwork::I18nConfig.available_locales
|
||||
I18n.locale = config.i18n.locale = config.i18n.default_locale
|
||||
|
||||
# Setting this to true causes a performance regression in Rails 3.2.17
|
||||
|
||||
@@ -22,6 +22,13 @@ CURRENCY: AUD
|
||||
# See: config/schedule.rb
|
||||
#SCHEDULE_NOTIFICATIONS: admin@example.com
|
||||
|
||||
# Mail settings
|
||||
MAIL_HOST: 'example.com'
|
||||
MAIL_DOMAIN: 'example.com'
|
||||
MAIL_PORT: 25
|
||||
SMTP_USERNAME: 'ofn'
|
||||
SMTP_PASSWORD: 'f00d'
|
||||
|
||||
# SingleSignOn login for Discourse
|
||||
#
|
||||
# DISCOURSE_SSO_SECRET should be a random string. It must be the same as provided to your Discourse instance.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
de_DE:
|
||||
language_name: "Englisch"
|
||||
language_name: "Deutsch"
|
||||
activerecord:
|
||||
attributes:
|
||||
spree/order:
|
||||
@@ -8,6 +8,8 @@ de_DE:
|
||||
completed_at: Erfolgt am
|
||||
number: Nummer
|
||||
email: E-Mail des Kunden
|
||||
spree/payment:
|
||||
amount: Menge
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -43,25 +45,23 @@ de_DE:
|
||||
send_instructions: "Sie erhalten in einigen Minuten eine E-Mail mit Anweisungen zur Bestätigung Ihres Kontos."
|
||||
failed_to_send: "Beim Senden der Bestätigungs-E-Mail ist ein Fehler aufgetreten."
|
||||
resend_confirmation_email: "Bestätigungsmail erneut senden."
|
||||
confirmed: "Danke für die Bestätigung Ihrer E-Mail! Sie können sich jetzt einloggen."
|
||||
not_confirmed: "Ihre E-Mail-Adresse konnte nicht bestätigt werden. Vielleicht haben Sie diesen Schritt bereits abgeschlossen?"
|
||||
user_registrations:
|
||||
spree_user:
|
||||
signed_up_but_unconfirmed: "Eine Nachricht mit einem Bestätigungslink wurde an Ihre E-Mail-Adresse gesendet. Bitte öffnen Sie den Link, um Ihr Konto zu aktivieren."
|
||||
failure:
|
||||
invalid: |
|
||||
Ungültige E-Mail-Adresse oder Passwort.
|
||||
Hast du als Gast bestellt? Vielleicht brauchst du ein neues Konto oder musst dein Passwort zurücksetzen.
|
||||
Ungültige E-Mail-Adresse oder Passwort.
|
||||
Hast du als Gast bestellt? Vielleicht brauchst du ein neues Konto oder musst dein Passwort zurücksetzen.
|
||||
unconfirmed: "Sie müssen Ihr Konto bestätigen, bevor Sie fortfahren."
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Danke, deine E-Mail-Adresse wurde bestätigt.
|
||||
not_confirmed: Ihre E-Mail-Adresse konnte nicht bestätigt werden. Haben Sie dies vielleicht schon getan?
|
||||
confirmation_sent: "Eine Bestätigungs-E-Mail wurde versandt."
|
||||
confirmation_not_sent: "Die Bestätigungs-E-Mail konnte nicht geschickt werden."
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Bitte bestätige die E-Mail-Adresse für %{enterprise}"
|
||||
welcome:
|
||||
subject: "%{enterprise} ist jetzt auf %{sitename}"
|
||||
invite_manager:
|
||||
subject: "%{enterprise} hat Sie eingeladen, ein Manager zu sein"
|
||||
producer_mailer:
|
||||
order_cycle:
|
||||
subject: "Bestellungszyklusreport für %{producer}"
|
||||
@@ -204,6 +204,7 @@ de_DE:
|
||||
phone: Telefonnummer
|
||||
price: Preis
|
||||
producer: Produzent
|
||||
image: Bild
|
||||
product: Produkt
|
||||
quantity: Menge
|
||||
schedule: Zeitplan
|
||||
@@ -357,6 +358,15 @@ de_DE:
|
||||
manages: verwaltet
|
||||
products:
|
||||
unit_name_placeholder: 'z.B. Trauben'
|
||||
bulk_edit:
|
||||
unit: Einheit
|
||||
display_as: Darstellen als
|
||||
category: Kategorie
|
||||
tax_category: Steuerkategorie
|
||||
inherits_properties?: Vererbt Eigenschaften?
|
||||
available_on: Verfügbar auf
|
||||
av_on: "Ein V. Auf"
|
||||
upload_an_image: Lade ein Bild hoch
|
||||
properties:
|
||||
property_name: Name des Anwesens
|
||||
inherited_property: Vererbte Eigenschaft
|
||||
@@ -416,6 +426,7 @@ de_DE:
|
||||
max_fulfilled_units: "Max erfüllte Einheiten"
|
||||
order_error: "Einige Fehler müssen behoben werden, bevor Sie Aufträge aktualisieren können.\nFelder mit roten Rahmen enthalten Fehler."
|
||||
variants_without_unit_value: "WARNUNG: Einige Varianten haben keinen Einheitswert"
|
||||
select_variant: "Wählen Sie eine Variante"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Wählen Sie ausgehende OC-Produkte aus
|
||||
enterprises:
|
||||
@@ -577,6 +588,9 @@ de_DE:
|
||||
notifications_note: 'Hinweis: Eine neue E-Mail-Adresse muss möglicherweise vor der Verwendung bestätigt werden'
|
||||
managers: Manager
|
||||
managers_tip: Die anderen Benutzer mit der Berechtigung, dieses Unternehmen zu verwalten.
|
||||
invite_manager: "Einladungsmanager"
|
||||
invite_manager_tip: "Laden Sie einen nicht registrierten Benutzer ein, sich anzumelden und ein Manager dieses Unternehmens zu werden."
|
||||
add_unregistered_user: "Fügen Sie einen nicht registrierten Benutzer hinzu"
|
||||
email_confirmed: "E-Mail bestätigt"
|
||||
email_not_confirmed: "E-Mail nicht bestätigt"
|
||||
actions:
|
||||
@@ -636,6 +650,9 @@ de_DE:
|
||||
welcome_text: Sie haben erfolgreich eine erstellt
|
||||
next_step: Nächster Schritt
|
||||
choose_starting_point: 'Wählen Sie Ihren Ausgangspunkt:'
|
||||
invite_manager:
|
||||
user_already_exists: "Benutzer existiert bereits"
|
||||
error: "Etwas ist schief gelaufen"
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Erweiterte Einstellungen
|
||||
@@ -839,6 +856,7 @@ de_DE:
|
||||
confirm_unpause_msg: Möchten Sie dieses Abonnement wirklich wieder aktivieren?
|
||||
unpause_failure_msg: 'Entschuldigung, fehlgeschlagen!'
|
||||
confirm_cancel_open_orders_msg: "Einige Bestellungen für dieses Abonnement sind derzeit geöffnet. Der Kunde wurde bereits darüber informiert, dass die Bestellung aufgegeben wird. Möchten Sie diese Bestellung (en) stornieren oder behalten?"
|
||||
resume_canceled_orders_msg: "Einige Bestellungen für dieses Abonnement können jetzt fortgesetzt werden. Sie können sie aus dem Dropdown-Menü für Bestellungen wiederherstellen."
|
||||
yes_cancel_them: Annulliere sie
|
||||
no_keep_them: Behalte sie
|
||||
yes_i_am_sure: Ja, ich bin mir sicher
|
||||
@@ -1173,6 +1191,12 @@ de_DE:
|
||||
email_signup_shop_html: "Sie können sich jetzt unter %{link} anmelden."
|
||||
email_signup_text: "Danke, dass Sie dem Netzwerk beigetreten sind. Wenn Sie ein Kunde sind, freuen wir uns, Ihnen viele fantastische Bauern, wunderbare Essenszentren und leckeres Essen vorzustellen! Wenn Sie ein Produzent oder ein Lebensmittelunternehmen sind, freuen wir uns, Sie als Teil des Netzwerks zu haben."
|
||||
email_signup_help_html: "Wir begrüßen alle Ihre Fragen und Rückmeldungen; Sie können die Schaltfläche <em> Feedback senden </ em> auf der Website verwenden oder uns eine E-Mail an %{email} senden"
|
||||
invite_email:
|
||||
greeting: "Hallo!"
|
||||
invited_to_manage: "Sie wurden eingeladen, %{enterprise} auf %{instance} zu verwalten."
|
||||
confirm_your_email: "Sie werden in Kürze eine E-Mail erhalten, um Ihre Registrierung zu bestätigen."
|
||||
set_a_password: "Sie werden dann aufgefordert, ein Kennwort festzulegen, bevor Sie das Unternehmen verwalten können."
|
||||
mistakenly_sent: "Nicht sicher, warum Sie diese E-Mail erhalten haben? Bitte kontaktieren Sie %{owner_email} für weitere Informationen, oder kontaktieren Sie %{instance} unter %{instance_email}."
|
||||
producer_mail_greeting: "Liebe/r"
|
||||
producer_mail_text_before: "Wir haben jetzt alle Verbraucherbestellungen für den nächsten Essenstropfen."
|
||||
producer_mail_order_text: "Hier finden Sie eine Zusammenfassung der Bestellungen für Ihre Produkte:"
|
||||
@@ -1361,8 +1385,8 @@ de_DE:
|
||||
orders_could_not_cancel: "Entschuldigung, die Bestellung konnte nicht storniert werden"
|
||||
orders_cannot_remove_the_final_item: "Der letzte Artikel aus einer Bestellung kann nicht entfernt werden. Bitte stornieren Sie stattdessen die Bestellung."
|
||||
orders_bought_items_notice:
|
||||
one: Für diesen Bestellzyklus ist bereits eine zusätzliche Position bestätigt
|
||||
other: '%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden'
|
||||
one: "Für diesen Bestellzyklus ist bereits eine zusätzliche Position bestätigt"
|
||||
other: "%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden"
|
||||
orders_bought_edit_button: Bestätigte Artikel bearbeiten
|
||||
orders_bought_already_confirmed: "* schon bestätigt"
|
||||
orders_confirm_cancel: Sind Sie sicher, dass Sie diese Bestellung stornieren möchten?
|
||||
@@ -1435,6 +1459,7 @@ de_DE:
|
||||
password_reset_sent: "Eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts wurde gesendet!"
|
||||
reset_password: "Passwort zurücksetzen"
|
||||
who_is_managing_enterprise: "Wer ist verantwortlich für die Verwaltung von %{enterprise}?"
|
||||
update_and_recalculate_fees: "Aktualisieren und Gebühren neu berechnen"
|
||||
enterprise:
|
||||
registration:
|
||||
modal:
|
||||
@@ -1946,7 +1971,8 @@ de_DE:
|
||||
products_unsaved: "Änderungen an %{n} Produkten bleiben ungesichert."
|
||||
is_already_manager: "ist schon ein Manager!"
|
||||
no_change_to_save: " Keine Änderung zum Speichern"
|
||||
add_manager: "Fügen Sie einen Manager hinzu"
|
||||
user_invited: "%{email} wurde eingeladen, dieses Unternehmen zu verwalten"
|
||||
add_manager: "Fügen Sie einen vorhandenen Benutzer hinzu"
|
||||
users: "Benutzer"
|
||||
about: "Über"
|
||||
images: "Bilder"
|
||||
@@ -1957,6 +1983,7 @@ de_DE:
|
||||
social: "Sozial"
|
||||
business_details: "Geschäftsdetails"
|
||||
properties: "Eigenschaften"
|
||||
shipping: "Versand"
|
||||
shipping_methods: "Lieferoptionen"
|
||||
payment_methods: "Zahlungsarten"
|
||||
payment_method_fee: "Transaktionsgebühr"
|
||||
@@ -2007,6 +2034,8 @@ de_DE:
|
||||
order_cycles_email_to_producers_notice: 'E-Mails, die an die Produzenten gesendet werden sollen, wurden zum Senden in die Warteschlange gestellt.'
|
||||
order_cycles_no_permission_to_coordinate_error: "Keines Ihrer Unternehmen ist berechtigt, einen Bestellzyklus zu koordinieren"
|
||||
order_cycles_no_permission_to_create_error: "Sie sind nicht berechtigt, einen von diesem Unternehmen koordinierten Bestellzyklus zu erstellen"
|
||||
back_to_orders_list: "Zurück zur Bestellliste"
|
||||
amount: "Menge"
|
||||
js:
|
||||
saving: 'Speichern ...'
|
||||
changes_saved: 'Änderungen gespeichert'
|
||||
@@ -2024,8 +2053,8 @@ de_DE:
|
||||
choose: Wählen
|
||||
resolve_errors: Bitte beheben Sie die folgenden Fehler
|
||||
more_items: "+ %{count} Mehr"
|
||||
closes: schließt
|
||||
admin:
|
||||
enterprise_limit_reached: "Sie haben die Standardgrenze für Unternehmen pro Konto erreicht. Schreiben Sie an %{contact_email}, wenn Sie es erhöhen müssen."
|
||||
modals:
|
||||
got_it: Ich habs
|
||||
tag_rule_help:
|
||||
@@ -2186,8 +2215,8 @@ de_DE:
|
||||
could_not_delete_customer: 'Der Kunde konnte nicht gelöscht werden'
|
||||
product_import:
|
||||
confirmation: |
|
||||
Dadurch wird der Lagerbestand für alle Produkte auf Null gesetzt
|
||||
Unternehmen, die in der hochgeladenen Datei nicht vorhanden sind.
|
||||
Dadurch wird der Lagerbestand für alle Produkte auf Null gesetzt
|
||||
Unternehmen, die in der hochgeladenen Datei nicht vorhanden sind.
|
||||
order_cycles:
|
||||
update_success: 'Ihr Bestellzyklus wurde aktualisiert.'
|
||||
no_distributors: In diesem Bestellzyklus gibt es keine Distributoren. Dieser Bestellzyklus ist für Kunden erst sichtbar, wenn Sie einen hinzufügen. Möchten Sie diesen Bestellzyklus weiterhin speichern?
|
||||
@@ -2197,6 +2226,10 @@ de_DE:
|
||||
customers:
|
||||
select_shop: 'Bitte wählen Sie zuerst ein Geschäft aus'
|
||||
could_not_create: Es tut uns leid! Konnte nicht ... Erstellen
|
||||
subscriptions:
|
||||
closes: schließt
|
||||
closed: geschlossen
|
||||
close_date_not_set: Abschlussdatum nicht eingestellt
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Beginnen Sie mit einem kostenlosen Profil und erweitern Sie es, wenn Sie fertig sind!"
|
||||
@@ -2347,11 +2380,11 @@ de_DE:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
Es wurde angefragt, das Passwort zurückzusetzen. Falls dies nicht der Fall ist, bitten wir dieses Email zu ignorieren.
|
||||
Es wurde angefragt, das Passwort zurückzusetzen. Falls dies nicht der Fall ist, bitten wir dieses Email zu ignorieren.
|
||||
link_text: >
|
||||
Möchtest Du das Passwort zurücksetzen? Bitte den Link unten auszuwählen.
|
||||
issue_text: |
|
||||
Falls die URL unten nicht funktionieren sollte, versuche die Adresse mit Hilfe von "copy and paste" in dein Browserfenster zu übertragen.
|
||||
Falls die URL unten nicht funktionieren sollte, versuche die Adresse mit Hilfe von "copy and paste" in dein Browserfenster zu übertragen.
|
||||
confirmation_instructions:
|
||||
subject: Bitte bestätigen Sie Ihren OFN-Account
|
||||
weight: Gewicht (pro kg)
|
||||
|
||||
@@ -64,6 +64,8 @@ en:
|
||||
completed_at: Completed At
|
||||
number: Number
|
||||
email: Customer E-Mail
|
||||
spree/payment:
|
||||
amount: Amount
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -114,6 +116,8 @@ en:
|
||||
subject: "Please confirm the email address for %{enterprise}"
|
||||
welcome:
|
||||
subject: "%{enterprise} is now on %{sitename}"
|
||||
invite_manager:
|
||||
subject: "%{enterprise} has invited you to be a manager"
|
||||
producer_mailer:
|
||||
order_cycle:
|
||||
subject: "Order cycle report for %{producer}"
|
||||
@@ -265,6 +269,7 @@ en:
|
||||
phone: Phone
|
||||
price: Price
|
||||
producer: Producer
|
||||
image: Image
|
||||
product: Product
|
||||
quantity: Quantity
|
||||
schedule: Schedule
|
||||
@@ -436,6 +441,20 @@ en:
|
||||
|
||||
products:
|
||||
unit_name_placeholder: 'eg. bunches'
|
||||
bulk_edit:
|
||||
unit: Unit
|
||||
display_as: Display As
|
||||
category: Category
|
||||
tax_category: Tax Category
|
||||
inherits_properties?: Inherits Properties?
|
||||
available_on: Available On
|
||||
av_on: "Av. On"
|
||||
upload_an_image: Upload an image
|
||||
product_search_keywords: Product Search Keywords
|
||||
product_search_tip: Type words to help search your products in the shops. Use space to separate each keyword.
|
||||
SEO_keywords: SEO Keywords
|
||||
seo_tip: Type words to help search your products in the web. Use space to separate each keyword.
|
||||
Search: Search
|
||||
properties:
|
||||
property_name: Property Name
|
||||
inherited_property: Inherited Property
|
||||
@@ -443,7 +462,6 @@ en:
|
||||
to_order_tip: "Items made to order do not have a set stock level, such as loaves of bread made fresh to order."
|
||||
product_distributions: "Product Distributions"
|
||||
group_buy_options: "Group Buy Options"
|
||||
seo: "SEO"
|
||||
back_to_products_list: "Back to products list"
|
||||
|
||||
variant_overrides:
|
||||
@@ -496,6 +514,7 @@ en:
|
||||
max_fulfilled_units: "Max Fulfilled Units"
|
||||
order_error: "Some errors must be resolved before you can update orders.\nAny fields with red borders contain errors."
|
||||
variants_without_unit_value: "WARNING: Some variants do not have a unit value"
|
||||
select_variant: "Select a variant"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Select outgoing OC products from
|
||||
|
||||
@@ -655,6 +674,9 @@ en:
|
||||
notifications_note: 'Note: A new email address may need to be confirmed prior to use'
|
||||
managers: Managers
|
||||
managers_tip: The other users with permission to manage this enterprise.
|
||||
invite_manager: "Invite Manager"
|
||||
invite_manager_tip: "Invite an unregistered user to sign up and become a manager of this enterprise."
|
||||
add_unregistered_user: "Add an unregistered user"
|
||||
email_confirmed: "Email confirmed"
|
||||
email_not_confirmed: "Email not confirmed"
|
||||
actions:
|
||||
@@ -714,6 +736,9 @@ en:
|
||||
welcome_text: You have successfully created a
|
||||
next_step: Next step
|
||||
choose_starting_point: 'Choose your starting point:'
|
||||
invite_manager:
|
||||
user_already_exists: "User already exists"
|
||||
error: "Something went wrong"
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Advanced Settings
|
||||
@@ -1309,6 +1334,13 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
If you are a producer or food enterprise, we are excited to have you as a part of the network."
|
||||
email_signup_help_html: "We welcome all your questions and feedback; you can use the <em>Send Feedback</em> button on the site or email us at %{email}"
|
||||
|
||||
invite_email:
|
||||
greeting: "Hello!"
|
||||
invited_to_manage: "You have been invited to manage %{enterprise} on %{instance}."
|
||||
confirm_your_email: "You will receive an email shortly to confirm your registration."
|
||||
set_a_password: "You will then be prompted to set a password before you are able to administer the enterprise."
|
||||
mistakenly_sent: "Not sure why you have received this email? Please contact %{owner_email} for more information, or you can contact %{instance} at %{instance_email}."
|
||||
|
||||
producer_mail_greeting: "Dear"
|
||||
producer_mail_text_before: "We now have all the consumer orders for the next food drop."
|
||||
producer_mail_order_text: "Here is a summary of the orders for your products:"
|
||||
@@ -1600,6 +1632,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
reset_password: "Reset password"
|
||||
registration_greeting: "Greetings!"
|
||||
who_is_managing_enterprise: "Who is responsible for managing %{enterprise}?"
|
||||
update_and_recalculate_fees: "Update And Recalculate Fees"
|
||||
enterprise:
|
||||
registration:
|
||||
modal:
|
||||
@@ -2123,10 +2156,10 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
unsaved_changes_confirmation: "Unsaved changes will be lost. Continue anyway?"
|
||||
one_product_unsaved: "Changes to one product remain unsaved."
|
||||
products_unsaved: "Changes to %{n} products remain unsaved."
|
||||
add_manager: "Add a manager"
|
||||
is_already_manager: "is already a manager!"
|
||||
no_change_to_save: " No change to save"
|
||||
add_manager: "Add a manager"
|
||||
user_invited: "%{email} has been invited to manage this enterprise"
|
||||
add_manager: "Add an existing user"
|
||||
users: "Users"
|
||||
about: "About"
|
||||
images: "Images"
|
||||
@@ -2138,6 +2171,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
social: "Social"
|
||||
business_details: "Business Details"
|
||||
properties: "Properties"
|
||||
shipping: "Shipping"
|
||||
shipping_methods: "Shipping Methods"
|
||||
payment_methods: "Payment Methods"
|
||||
payment_method_fee: "Transaction fee"
|
||||
@@ -2188,6 +2222,14 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
order_cycles_email_to_producers_notice: 'Emails to be sent to producers have been queued for sending.'
|
||||
order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle"
|
||||
order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise"
|
||||
back_to_orders_list: "Back to order list"
|
||||
order_information: "Order Information"
|
||||
date_completed: "Date Completed"
|
||||
amount: "Amount"
|
||||
state_names:
|
||||
ready: Ready
|
||||
pending: Pending
|
||||
shipped: Shipped
|
||||
js:
|
||||
saving: 'Saving...'
|
||||
changes_saved: 'Changes saved.'
|
||||
@@ -2209,6 +2251,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
enterprise_limit_reached: "You have reached the standard limit of enterprises per account. Write to %{contact_email} if you need to increase it."
|
||||
modals:
|
||||
got_it: Got it
|
||||
close: "Close"
|
||||
invite: "Invite"
|
||||
invite_title: "Invite an unregistered user"
|
||||
tag_rule_help:
|
||||
title: Tag Rules
|
||||
overview: Overview
|
||||
@@ -2380,6 +2425,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
# TODO: remove 'account_updated' key once we get to Spree 2.0
|
||||
account_updated: "Account updated!"
|
||||
my_account: "My account"
|
||||
date: "Date"
|
||||
time: "Time"
|
||||
admin:
|
||||
orders:
|
||||
invoice:
|
||||
|
||||
@@ -16,14 +16,8 @@ en_GB:
|
||||
devise:
|
||||
failure:
|
||||
invalid: |
|
||||
Invalid email or password.
|
||||
Were you a guest last time? Perhaps you need to create an account or reset your password.
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Thank you, your email address has been confirmed.
|
||||
not_confirmed: Your email address could not be confirmed. Perhaps you have already completed this step?
|
||||
confirmation_sent: "Confirmation email sent!"
|
||||
confirmation_not_sent: "Could not send a confirmation email."
|
||||
Invalid email or password.
|
||||
Were you a guest last time? Perhaps you need to create an account or reset your password.
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Please confirm the email address for %{enterprise}"
|
||||
@@ -660,6 +654,11 @@ en_GB:
|
||||
description: Invoices for import into Xero
|
||||
packing:
|
||||
name: Packing Reports
|
||||
subscriptions:
|
||||
review:
|
||||
details: Details
|
||||
address: Address
|
||||
products: Products
|
||||
stripe_connect_settings:
|
||||
edit:
|
||||
title: "Stripe Connect"
|
||||
@@ -1150,8 +1149,8 @@ en_GB:
|
||||
orders_could_not_cancel: "Sorry, the order could not be cancelled"
|
||||
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
|
||||
orders_bought_items_notice:
|
||||
one: An additional item is already confirmed for this order cycle
|
||||
other: '%{count} additional items already confirmed for this order cycle'
|
||||
one: "An additional item is already confirmed for this order cycle"
|
||||
other: "%{count} additional items already confirmed for this order cycle"
|
||||
orders_bought_edit_button: Edit confirmed items
|
||||
orders_bought_already_confirmed: "* already confirmed"
|
||||
orders_confirm_cancel: Are you sure you want to cancel this order?
|
||||
@@ -1968,8 +1967,8 @@ en_GB:
|
||||
could_not_delete_customer: 'Could not delete customer'
|
||||
product_import:
|
||||
confirmation: |
|
||||
This will set stock level to zero on all products for this
|
||||
enterprise that are not present in the uploaded file.
|
||||
This will set stock level to zero on all products for this
|
||||
enterprise that are not present in the uploaded file.
|
||||
order_cycles:
|
||||
update_success: 'Your order cycle has been updated.'
|
||||
no_distributors: There are no distributors in this order cycle. This order cycle will not be visible to customers until you add one. Would you like to continue saving this order cycle?'
|
||||
@@ -2120,13 +2119,13 @@ en_GB:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
A request to reset your password has been made.
|
||||
If you did not make this request, simply ignore this email.
|
||||
A request to reset your password has been made.
|
||||
If you did not make this request, simply ignore this email.
|
||||
link_text: >
|
||||
If you did make this request just click the link below:
|
||||
issue_text: |
|
||||
If the above URL does not work try copying and pasting it into your browser.
|
||||
If you continue to have problems please feel free to contact us.
|
||||
If the above URL does not work try copying and pasting it into your browser.
|
||||
If you continue to have problems please feel free to contact us.
|
||||
weight: Weight (per kg)
|
||||
zipcode: Postcode
|
||||
users:
|
||||
|
||||
@@ -16,14 +16,8 @@ en_US:
|
||||
devise:
|
||||
failure:
|
||||
invalid: |
|
||||
Invalid email or password.
|
||||
Were you a guest last time? Perhaps you need to create an account or reset your password.
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Thank you, your email address has been confirmed.
|
||||
not_confirmed: Your email address could not be confirmed. Perhaps you have already completed this step?
|
||||
confirmation_sent: "Confirmation email sent!"
|
||||
confirmation_not_sent: "Could not send a confirmation email."
|
||||
Invalid email or password.
|
||||
Were you a guest last time? Perhaps you need to create an account or reset your password.
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Please confirm the email address for %{enterprise}"
|
||||
@@ -660,6 +654,11 @@ en_US:
|
||||
description: Invoices for import into Xero
|
||||
packing:
|
||||
name: Packing Reports
|
||||
subscriptions:
|
||||
review:
|
||||
details: Details
|
||||
address: Address
|
||||
products: Products
|
||||
stripe_connect_settings:
|
||||
edit:
|
||||
title: "Stripe Connect"
|
||||
@@ -1962,8 +1961,8 @@ en_US:
|
||||
could_not_delete_customer: 'Could not delete customer'
|
||||
product_import:
|
||||
confirmation: |
|
||||
This will set stock level to zero on all products for this
|
||||
enterprise that are not present in the uploaded file.
|
||||
This will set stock level to zero on all products for this
|
||||
enterprise that are not present in the uploaded file.
|
||||
order_cycles:
|
||||
update_success: 'Your order cycle has been updated.'
|
||||
no_distributors: There are no distributors in this order cycle. This order cycle will not be visible to customers until you add one. Would you like to continue saving this order cycle?'
|
||||
@@ -2114,13 +2113,13 @@ en_US:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
A request to reset your password has been made.
|
||||
If you did not make this request, simply ignore this email.
|
||||
A request to reset your password has been made.
|
||||
If you did not make this request, simply ignore this email.
|
||||
link_text: >
|
||||
If you did make this request just click the link below.
|
||||
issue_text: |
|
||||
If the above URL does nor work, try to copy and paste it into your browser.
|
||||
If you continue to have problems please feel free to contact us.
|
||||
If the above URL does nor work, try to copy and paste it into your browser.
|
||||
If you continue to have problems please feel free to contact us.
|
||||
weight: Weight (per lb)
|
||||
zipcode: Zipcode
|
||||
users:
|
||||
|
||||
@@ -8,6 +8,8 @@ es:
|
||||
completed_at: Completado en
|
||||
number: Número
|
||||
email: E-mail del consumidor
|
||||
spree/payment:
|
||||
amount: Cantidad
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -58,6 +60,8 @@ es:
|
||||
subject: "Confirma la dirección de correo electrónico de %{enterprise}"
|
||||
welcome:
|
||||
subject: "%{enterprise} está ahora en %{sitename}"
|
||||
invite_manager:
|
||||
subject: "%{enterprise} te ha invitado a ser administrador"
|
||||
producer_mailer:
|
||||
order_cycle:
|
||||
subject: "Informe Ciclo de Pedido para %{producer}"
|
||||
@@ -200,6 +204,7 @@ es:
|
||||
phone: Teléfono
|
||||
price: Precio
|
||||
producer: Productora
|
||||
image: Imagen
|
||||
product: Producto
|
||||
quantity: Cantidad
|
||||
schedule: Programación
|
||||
@@ -353,6 +358,14 @@ es:
|
||||
manages: Gestionan
|
||||
products:
|
||||
unit_name_placeholder: 'ej. manojos'
|
||||
bulk_edit:
|
||||
unit: Unidad
|
||||
display_as: Mostrar como
|
||||
category: Categoría
|
||||
tax_category: Categoría de impuestos
|
||||
inherits_properties?: ¿Hereda propiedades?
|
||||
available_on: Disponible en
|
||||
upload_an_image: Subir una imagen
|
||||
properties:
|
||||
property_name: Nombre de la Propiedad
|
||||
inherited_property: Propiedad Heredada
|
||||
@@ -412,6 +425,7 @@ es:
|
||||
max_fulfilled_units: "Max Unidades Completadas"
|
||||
order_error: "Algunos errores deberán ser resueltos antes de que puedas actualizar los pedidos.\nTodos los campos con borde rojo contienen errores."
|
||||
variants_without_unit_value: "CUIDADO: Algunas variedades no tienen un valor unitario "
|
||||
select_variant: "Seleccione una variante"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Selecciona los productos OC que salgan de
|
||||
enterprises:
|
||||
@@ -573,6 +587,9 @@ es:
|
||||
notifications_note: 'Nota: Una nueva dirección de correo debe ser confirmada. '
|
||||
managers: Gestoras
|
||||
managers_tip: Otras usuarias con permiso para gestionar esta organización.
|
||||
invite_manager: "Invitar administrador"
|
||||
invite_manager_tip: "Invite a un usuario no registrado a registrarse y convertirse en administrador de esta organización."
|
||||
add_unregistered_user: "Agregar un usuario no registrado"
|
||||
email_confirmed: "Correo electrónico confirmado"
|
||||
email_not_confirmed: "Correo electrónico no confirmado"
|
||||
actions:
|
||||
@@ -632,6 +649,9 @@ es:
|
||||
welcome_text: Has creado correctamente un
|
||||
next_step: Siguiente paso
|
||||
choose_starting_point: 'Elige tu punto de partida:'
|
||||
invite_manager:
|
||||
user_already_exists: "El usuario ya existe"
|
||||
error: "Algo salió mal"
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Configuración Avanzada
|
||||
@@ -1170,6 +1190,12 @@ es:
|
||||
email_signup_shop_html: "Ahora puedes iniciar sesión en %{link}."
|
||||
email_signup_text: "Gracias por unirte a la red. Si eres un comprador, ¡esperamos presentarte a muchos agricultores, grupos de consumo y deliciosa comida! Si eres una productora o formas parte de una organización de alimentos, estamos emocionados de que formes parte de la red."
|
||||
email_signup_help_html: "Agradecemos todas tus preguntas y feedback; puedes usar el botón de <em>Enviar Feedback</em> en el sitio o escribir un email a %{email}"
|
||||
invite_email:
|
||||
greeting: "¡Hola!"
|
||||
invited_to_manage: "Ha sido invitado a administrar %{enterprise} en %{instance}."
|
||||
confirm_your_email: "En breve recibirá un correo electrónico para confirmar su registro."
|
||||
set_a_password: "Luego se le pedirá que establezca una contraseña antes de poder administrar la organización."
|
||||
mistakenly_sent: "¿No está seguro de por qué ha recibido este correo electrónico? Por favor, póngase en contacto con %{owner_email} para obtener más información, o puede ponerse en contacto con %{instance} en %{instance_email}."
|
||||
producer_mail_greeting: "Estimada"
|
||||
producer_mail_text_before: "Ahora tenemos todas los pedidos de las consumidoras para la siguiente ronda."
|
||||
producer_mail_order_text: "Se muestra un resumen de los pedidos de tus productos:"
|
||||
@@ -1432,6 +1458,7 @@ es:
|
||||
password_reset_sent: "¡Le enviamos un correo electrónico con instrucciones para restaurar la contraseña!"
|
||||
reset_password: "Restaurar contraseña"
|
||||
who_is_managing_enterprise: "¿Quién es responsable de administrar %{enterprise}?"
|
||||
update_and_recalculate_fees: "Actualizar y recalcular tarifas"
|
||||
enterprise:
|
||||
registration:
|
||||
modal:
|
||||
@@ -1625,7 +1652,7 @@ es:
|
||||
outstanding_balance: "Saldo extraordinario"
|
||||
admin_entreprise_relationships: "Relaciones de la Organización"
|
||||
admin_entreprise_relationships_everything: "Marcar todos"
|
||||
admin_entreprise_relationships_permits: "Permisos"
|
||||
admin_entreprise_relationships_permits: "Permite"
|
||||
admin_entreprise_relationships_seach_placeholder: "Buscar"
|
||||
admin_entreprise_relationships_button_create: "Crear"
|
||||
admin_entreprise_groups: "Redes de organizaciones"
|
||||
@@ -1943,7 +1970,8 @@ es:
|
||||
products_unsaved: "Los cambios de %{n} productos aún no se han guardado."
|
||||
is_already_manager: "¡Ya eres un administrador!"
|
||||
no_change_to_save: "No hay cambios para guardar"
|
||||
add_manager: "Añadir a un administrador"
|
||||
user_invited: "%{email} ha sido invitado a administrar esta organización"
|
||||
add_manager: "Agrega un usuario existente"
|
||||
users: "Usuarias"
|
||||
about: "Acerca de"
|
||||
images: "Imagenes"
|
||||
@@ -1954,6 +1982,7 @@ es:
|
||||
social: "Social"
|
||||
business_details: "Detalles de la Organización"
|
||||
properties: "Propiedades"
|
||||
shipping: "Envío"
|
||||
shipping_methods: "Métodos de envío"
|
||||
payment_methods: "Métodos de Pago"
|
||||
payment_method_fee: "Tarifa de Transacción"
|
||||
@@ -2004,6 +2033,9 @@ es:
|
||||
order_cycles_email_to_producers_notice: 'Los correos electrónicos que se enviarán a las productoras se han puesto en cola para enviarlos.'
|
||||
order_cycles_no_permission_to_coordinate_error: "Ninguna de tus organizaciones tiene permiso para coordinar un ciclo de pedido"
|
||||
order_cycles_no_permission_to_create_error: "No tienes permiso para crear un ciclo de pedido coordinado por esta empresa."
|
||||
back_to_orders_list: "Volver a la lista de pedidos"
|
||||
order_information: "información del pedido"
|
||||
amount: "Cantidad"
|
||||
js:
|
||||
saving: 'Guardando...'
|
||||
changes_saved: 'Cambios guardados.'
|
||||
@@ -2195,6 +2227,7 @@ es:
|
||||
subscriptions:
|
||||
closes: cierra
|
||||
closed: cerrado
|
||||
close_date_not_set: Fecha de cierre no establecida
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Empieze con un perfil gratuito, y amplíelo cuando esté preparado!"
|
||||
@@ -2308,14 +2341,23 @@ es:
|
||||
address: dirección
|
||||
adjustments: ajustes
|
||||
awaiting_return: Esperando retorno
|
||||
canceled: cancelado
|
||||
cart: carrito
|
||||
complete: completar
|
||||
confirm: Confirmar
|
||||
delivery: Entrega
|
||||
paused: pausado
|
||||
payment: pago
|
||||
pending: pendiente
|
||||
resumed: resumido
|
||||
returned: devuelto
|
||||
skrill: skrill
|
||||
subscription_state:
|
||||
active: activo
|
||||
pending: pendiente
|
||||
ended: terminado
|
||||
paused: pausado
|
||||
canceled: cancelado
|
||||
payment_states:
|
||||
balance_due: saldo debido
|
||||
completed: completado
|
||||
@@ -2356,6 +2398,7 @@ es:
|
||||
cards: Tarjetas de crédito
|
||||
transactions: Transacciones
|
||||
settings: Configuración de la cuenta
|
||||
unconfirmed_email: "Correo electrónico pendiente de confirmación para: %{unconfirmed_email}. Su dirección de correo electrónico se actualizará una vez que se confirme el nuevo correo electrónico."
|
||||
orders:
|
||||
open_orders: Pedidos Abiertos
|
||||
past_orders: Pedidos anteriores
|
||||
|
||||
@@ -8,6 +8,8 @@ fr:
|
||||
completed_at: 'Passée à '
|
||||
number: N° commande
|
||||
email: Email acheteur
|
||||
spree/payment:
|
||||
amount: Montant
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -43,25 +45,23 @@ fr:
|
||||
send_instructions: "Un email a été envoyé avec des instructions pour confirmer votre adresse email. Vérifiez votre boite mail!"
|
||||
failed_to_send: "Une erreur est survenue lors de l'envoi de l'email de confirmation."
|
||||
resend_confirmation_email: "Renvoyer l'email de confirmation."
|
||||
confirmed: "Merci d'avoir confirmé votre adresse email. Vous pouvez maintenant vous connecter."
|
||||
not_confirmed: "Votre adresse email n'a pas pu être confirmée. Peut-être avez-vous déjà confirmé cette adresse email?"
|
||||
user_registrations:
|
||||
spree_user:
|
||||
signed_up_but_unconfirmed: "Un message avec un lien de confirmation a été envoyé à l'adresse email indiquée. Veuillez cliquer sur ce lien pour activer votre compte."
|
||||
failure:
|
||||
invalid: |
|
||||
Email / mot de passe incorrect.
|
||||
Créez votre compte ou réinitialisez votre mot de passe.
|
||||
Email / mot de passe incorrect.
|
||||
Créez votre compte ou réinitialisez votre mot de passe.
|
||||
unconfirmed: "Veuillez valider le lien envoyé par email pour pouvoir continuer."
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Merci, votre adresse email a bien été confirmée!
|
||||
not_confirmed: Votre adresse email n'a pas pu être confirmée. Peut-être l'aviez-vous déjà confirmée?
|
||||
confirmation_sent: "Un mail de confirmation a été envoyé!"
|
||||
confirmation_not_sent: "Impossible d'envoyer le mail de confirmation."
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Confirmez l'adresse email pour %{enterprise}"
|
||||
welcome:
|
||||
subject: "%{enterprise} est maintenant sur %{sitename}"
|
||||
invite_manager:
|
||||
subject: "%{enterprise} vous a invité comme manager"
|
||||
producer_mailer:
|
||||
order_cycle:
|
||||
subject: "Rapport de cycle de vente pour %{producer}"
|
||||
@@ -204,6 +204,7 @@ fr:
|
||||
phone: N° tel
|
||||
price: Prix
|
||||
producer: Producteur
|
||||
image: Image
|
||||
product: Produit
|
||||
quantity: Quantité
|
||||
schedule: Rythme d'abonnement
|
||||
@@ -357,6 +358,15 @@ fr:
|
||||
manages: gère
|
||||
products:
|
||||
unit_name_placeholder: 'ex: botte'
|
||||
bulk_edit:
|
||||
unit: Unité
|
||||
display_as: Unité affichéé
|
||||
category: Catégorie
|
||||
tax_category: TVA applicable
|
||||
inherits_properties?: Hériter des propriétés?
|
||||
available_on: Disponible via
|
||||
av_on: "Disp. via"
|
||||
upload_an_image: Importer une image
|
||||
properties:
|
||||
property_name: Nom du label
|
||||
inherited_property: Label producteur appliqué par défaut
|
||||
@@ -416,6 +426,7 @@ fr:
|
||||
max_fulfilled_units: "Nombre max d'unités commandées"
|
||||
order_error: "Des erreurs doivent être résolues avant de pouvoir mettre à jour les commandes.\nLes champs entourés en rouge contiennent des erreurs."
|
||||
variants_without_unit_value: "ATTENTION: certaines variantes n'ont pas de nombre d'unités"
|
||||
select_variant: "Choisir une variante"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Sélectionner les produits sortants pour le cycle de vente parmi
|
||||
enterprises:
|
||||
@@ -576,6 +587,9 @@ fr:
|
||||
notifications_note: 'A noter: si vous saisissez une nouvelle adresse, un email de confirmation sera envoyé à cette adresse avec un lien de validation à cliquer.'
|
||||
managers: Managers
|
||||
managers_tip: Sélectionner ici les utilisateurs ayant la permission de gérer cette entreprise. Ils doivent avoir un compte sur Open Food France pour être sélectionnés.
|
||||
invite_manager: "Inviter un manager"
|
||||
invite_manager_tip: "Inviter un nouvel utilisateur à créer son compte et le nommer comme manager de cette entreprise."
|
||||
add_unregistered_user: "Ajouter un nouvel utilisateur"
|
||||
email_confirmed: "Email confirmé"
|
||||
email_not_confirmed: "Email non confirmé"
|
||||
actions:
|
||||
@@ -635,6 +649,9 @@ fr:
|
||||
welcome_text: 'Vous avez créé avec succès '
|
||||
next_step: Etape suivante
|
||||
choose_starting_point: 'Choisissez par où commencer:'
|
||||
invite_manager:
|
||||
user_already_exists: "Le compte existe déjà"
|
||||
error: "Un problème est survenu"
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Paramétrages avancés
|
||||
@@ -821,6 +838,12 @@ fr:
|
||||
allowed_payment_method_types_tip: Seules des méthodes de paiement de type "cash" ou "Stripe" peuvent être utilisées pour le moment
|
||||
credit_card: Carte de crédit
|
||||
no_cards_available: Pas de carte disponible
|
||||
loading_flash:
|
||||
loading: Abonnements en cours de chargement
|
||||
review:
|
||||
details: Informations
|
||||
address: Adresse
|
||||
products: Produits
|
||||
product_already_in_order: Ce produit a déjà été ajouté à la commande. Veuillez directement modifier la quantité.
|
||||
orders:
|
||||
number: Nombre
|
||||
@@ -832,6 +855,7 @@ fr:
|
||||
confirm_unpause_msg: Voulez-vous vraiment annuler la mise en pause de cet abonnement?
|
||||
unpause_failure_msg: 'Désolé, l''annulation de la mise en pause a échoué!'
|
||||
confirm_cancel_open_orders_msg: "Cet abonnement a des commandes ouvertes. Les acheteurs ont été notifiés que leur commande allait être passée. Voulez-vous annulez ces commandes ou les conserver?"
|
||||
resume_canceled_orders_msg: "Certaines commandes pour cet abonnement peuvent être réouvertes dès maintenant. Vous pouvez les réouvrir depuis la liste des commandes."
|
||||
yes_cancel_them: Les annuler
|
||||
no_keep_them: Les conserver
|
||||
yes_i_am_sure: Oui, je confirme
|
||||
@@ -1084,7 +1108,7 @@ fr:
|
||||
order_delivery_address: Adresse de livraison
|
||||
order_delivery_time: Créneau de livraison/retrait
|
||||
order_special_instructions: "Vos commentaires:"
|
||||
order_pickup_time: Prêt à être retirer
|
||||
order_pickup_time: Prêt à être retiré
|
||||
order_pickup_instructions: Instructions de retrait
|
||||
order_produce: Produit
|
||||
order_total_price: Total
|
||||
@@ -1166,6 +1190,12 @@ fr:
|
||||
email_signup_shop_html: "Vous pouvez maintenant vous connecter sur %{link}."
|
||||
email_signup_text: "Merci d'avoir rejoint le réseau. Si vous êtes un client, nous sommes impatients de vous faire découvrir de nombreux agriculteurs fantastiques, de merveilleux hubs de distribution et des plats délicieux! Si vous êtes un producteur ou autre entreprise alimentaire, nous sommes ravis de vous compter parmi les membres du réseau."
|
||||
email_signup_help_html: "Vos questions et feedbacks sont les bienvenus! Cliquez sur le bouton <em>Envoyer un commentaire</em> sur le site ou envoyez-nous un email à %{email}"
|
||||
invite_email:
|
||||
greeting: "Bonjour!"
|
||||
invited_to_manage: "Vous avez été invité(e) à gérer %{enterprise} sur %{instance}."
|
||||
confirm_your_email: "Vous avez reçu ou allez recevoir un email avec un lien de confirmation. Vous ne pourrez pas accéder au profil de l'entreprise avant d'avoir confirmé votre email."
|
||||
set_a_password: "Vous serez ensuite invité(e) à choisir un mot de passe avant de pouvoir accéder et gérer le profil de l'entreprise."
|
||||
mistakenly_sent: "Vous ne savez pas pourquoi vous recevez cet email? Veuillez contacter %{owner_email} pour toute question."
|
||||
producer_mail_greeting: "Cher(ère)"
|
||||
producer_mail_text_before: "Nous avons reçu toutes les commandes pour la prochaine livraison."
|
||||
producer_mail_order_text: "Voilà la liste et les quantités des produits commandés vous concernant:"
|
||||
@@ -1333,8 +1363,8 @@ fr:
|
||||
orders_edit_title: Panier
|
||||
orders_edit_headline: Votre panier
|
||||
orders_edit_time: Commande prête pour
|
||||
orders_edit_continue: Poursuivre mes achats
|
||||
orders_edit_checkout: Poursuivre ma commande
|
||||
orders_edit_continue: Retour à la boutique
|
||||
orders_edit_checkout: Etape suivante (coordonnées)
|
||||
orders_form_empty_cart: "Vider le panier"
|
||||
orders_form_subtotal: Sous-total
|
||||
orders_form_admin: Admin & traitements
|
||||
@@ -1354,8 +1384,8 @@ fr:
|
||||
orders_could_not_cancel: "Désolé, la commande n'a pas pu être annulée"
|
||||
orders_cannot_remove_the_final_item: "Impossible de supprimer le dernier produit d'une commande, si vous souhaitez supprimer l'ensemble des produits, veuillez annuler la commande."
|
||||
orders_bought_items_notice:
|
||||
one: Un produit ajouté a bien été confirmé pour ce cycle de vente
|
||||
other: '%{count} produits ajoutés ont été confirmés pour ce cycle de vente.'
|
||||
one: "Un produit ajouté a bien été confirmé pour ce cycle de vente"
|
||||
other: "%{count} produits ajoutés ont été confirmés pour ce cycle de vente."
|
||||
orders_bought_edit_button: Modifier les produits confirmés
|
||||
orders_bought_already_confirmed: "* déjà confirmé"
|
||||
orders_confirm_cancel: Voulez-vous vraiment annuler cette commande ?
|
||||
@@ -1428,6 +1458,7 @@ fr:
|
||||
password_reset_sent: "Un email contenant les instructions pour changer votre mot de passe a été envoyé!"
|
||||
reset_password: "Changer de mot de passe"
|
||||
who_is_managing_enterprise: "Qui gère %{enterprise}?"
|
||||
update_and_recalculate_fees: "Mettre à jour et recalculer les frais"
|
||||
enterprise:
|
||||
registration:
|
||||
modal:
|
||||
@@ -1939,7 +1970,8 @@ fr:
|
||||
products_unsaved: "Des changements sur %{n} produits n'ont pas été sauvegardés."
|
||||
is_already_manager: "est déjà manager!"
|
||||
no_change_to_save: "Pas de changement à sauvegarder"
|
||||
add_manager: "Ajouter un manager"
|
||||
user_invited: "%{email}a été invité à gérer cette entreprise"
|
||||
add_manager: "Ajouter un utilisateur existant"
|
||||
users: "Managers"
|
||||
about: "A propos"
|
||||
images: "Images"
|
||||
@@ -1950,6 +1982,7 @@ fr:
|
||||
social: "Réseaux sociaux"
|
||||
business_details: "Juridique"
|
||||
properties: "Propriétés / labels"
|
||||
shipping: "Expédition"
|
||||
shipping_methods: "Méthodes de livraison"
|
||||
payment_methods: "Méthodes de paiement"
|
||||
payment_method_fee: "Frais de transaction"
|
||||
@@ -1966,7 +1999,7 @@ fr:
|
||||
content_configuration_pricing_table: "(A FAIRE : Tableau des tarifs)"
|
||||
content_configuration_case_studies: "(A FAIRE : Etudes de Cas)"
|
||||
content_configuration_detail: "(A FAIRE : Détails)"
|
||||
enterprise_name_error: "est déjà utilisé. Si vous êtes le gérant de cette entreprise et que vous souhaitez demander le transfert du compte, merci de contacter le manager actuel du profil à %{email}."
|
||||
enterprise_name_error: "est déjà utilisé. Si vous êtes le gérant de cette entreprise et que vous souhaitez demander le transfert du compte, ou bien si vous souhaitez distribuer les produits de cette entreprise, merci de contacter le manager actuel du profil à %{email}."
|
||||
enterprise_owner_error: "^ %{email} ne peut pas créer de nouvelles entreprises (limite actuelle : %{enterprise_limit} entreprises )."
|
||||
enterprise_role_uniqueness_error: "^Ce rôle existe déjà."
|
||||
inventory_item_visibility_error: doit être vrai ou faux
|
||||
@@ -2002,6 +2035,8 @@ fr:
|
||||
order_cycles_email_to_producers_notice: 'Les emails à destination des producteurs ont été mis en file d''attente.'
|
||||
order_cycles_no_permission_to_coordinate_error: "Aucune de vos entreprises n'a les droits requis pour coordonner un cycle de vente"
|
||||
order_cycles_no_permission_to_create_error: "Vous n'avez pas les droits requis pour créer un cycle de vente coordonné par cette entreprise"
|
||||
back_to_orders_list: "Retour à la liste des commandes"
|
||||
amount: "Montant"
|
||||
js:
|
||||
saving: 'Enregistrement en cours...'
|
||||
changes_saved: 'Modifications sauvegardées.'
|
||||
@@ -2015,11 +2050,12 @@ fr:
|
||||
unavailable: Non disponible
|
||||
profile: Profil
|
||||
hub: Hub
|
||||
shop: Faire mes courses
|
||||
shop: Boutique
|
||||
choose: Choisir
|
||||
resolve_errors: Veuillez corriger les erreurs suivantes
|
||||
more_items: "+ %{count} en plus"
|
||||
admin:
|
||||
enterprise_limit_reached: "Vous avez atteint le nombre limite d'entreprises autorisées par défaut. Ecrivez à %{contact_email}si vous avez besoin d'augmenter cette limite."
|
||||
modals:
|
||||
got_it: J'ai compris
|
||||
tag_rule_help:
|
||||
@@ -2183,8 +2219,8 @@ fr:
|
||||
could_not_delete_customer: 'L''acheteur n''a pas pu être supprimé'
|
||||
product_import:
|
||||
confirmation: |
|
||||
Cette action remettra tous les niveaux de stock à zero pour cette
|
||||
entreprises pour les produits non présents dans ce fichier.
|
||||
Cette action remettra tous les niveaux de stock à zero pour cette
|
||||
entreprises pour les produits non présents dans ce fichier.
|
||||
order_cycles:
|
||||
update_success: 'Votre cycle de vente a été mis à jour.'
|
||||
no_distributors: Il n'y a pas de distributeur pour ce cycle de vente. Il ne sera pas visible aux acheteurs tant qu'il n'y aura pas de distributeur. Voulez-vous tout de même sauvegarder ce cycle de vente ?
|
||||
@@ -2194,6 +2230,10 @@ fr:
|
||||
customers:
|
||||
select_shop: 'Veuillez d''abord choisir une boutique'
|
||||
could_not_create: Oups ! Création impossible...
|
||||
subscriptions:
|
||||
closes: ferme
|
||||
closed: fermé
|
||||
close_date_not_set: Date de fin non renseignée
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !"
|
||||
@@ -2344,14 +2384,14 @@ fr:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
Votre demande de nouveau mot de passe a bien été prise en compte.
|
||||
Si vous n'avez pas demandé de nouveau mot de passe, veuillez ignorer cet e-mail.
|
||||
Votre demande de nouveau mot de passe a bien été prise en compte.
|
||||
Si vous n'avez pas demandé de nouveau mot de passe, veuillez ignorer cet e-mail.
|
||||
link_text: >
|
||||
Si vous êtes bien à l'origine de cette demande, veuillez cliquer sur le
|
||||
lien ci-dessous :
|
||||
issue_text: |
|
||||
Si le lien ne fonctionne pas, essayez de le copier - coller dans la barre d'adresse de votre navigateur.
|
||||
Si le problème persiste, n'hésitez pas à nous contacter.
|
||||
Si le lien ne fonctionne pas, essayez de le copier - coller dans la barre d'adresse de votre navigateur.
|
||||
Si le problème persiste, n'hésitez pas à nous contacter.
|
||||
confirmation_instructions:
|
||||
subject: Veuillez confirmer votre compte
|
||||
weight: Poids (au kg)
|
||||
|
||||
@@ -4,30 +4,31 @@ it:
|
||||
spree/order:
|
||||
payment_state: Stato del pagamento
|
||||
shipment_state: Stato della spedizione
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
attributes:
|
||||
email:
|
||||
taken: "Esiste già un account con questa email. Ti preghiamo di effettuare il login o impostare una nuova password."
|
||||
devise:
|
||||
failure:
|
||||
invalid: |
|
||||
Email o password non valida.
|
||||
La volta scorsa eri ospite? Forse devi creare un account o resettare la tua password.
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Grazie, il tuo indirizzo email è stato confermato.
|
||||
not_confirmed: L'indirizzo email non è stato confermato. Forse avevi già completato questo step?
|
||||
confirmation_sent: "Email di conferma inviata!"
|
||||
confirmation_not_sent: "Non è stato possibile mandare l'email di conferma."
|
||||
Email o password non valida.
|
||||
La volta scorsa eri ospite? Forse devi creare un account o resettare la tua password.
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Per favore conferma l'indirizzo email per %{enterprise}"
|
||||
welcome:
|
||||
subject: "%{enterprise} è ora su %{sitename}"
|
||||
home: "OFN"
|
||||
title: Open Food Network
|
||||
welcome_to: 'Benvenuto a'
|
||||
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: 'Produttori'
|
||||
producers_join: I Produttori sono ora invitati ad unirsi ad Open Food Network
|
||||
charges_sales_tax: Addebiti l'IVA?
|
||||
print_invoice: "Stampa fattura"
|
||||
print_ticket: "Stampa Biglietto"
|
||||
send_invoice: "Manda fattura"
|
||||
resend_confirmation: "Rimanda conferma"
|
||||
view_order: "Vedi l'ordine"
|
||||
@@ -49,6 +50,22 @@ it:
|
||||
say_yes: "Sì"
|
||||
then: poi
|
||||
sort_order_cycles_on_shopfront_by: "Ordina cicli d'ordine in vetrina per"
|
||||
select_continue: Seleziona e continua
|
||||
remove: Rimuovi
|
||||
or: o
|
||||
show_more: Mostra di più
|
||||
show_all: Mostra tutti
|
||||
show_all_with_more: "Mostra tutti (ancora %{num})"
|
||||
cancel: Annulla
|
||||
edit: Modifica
|
||||
all: Tutti
|
||||
available: Disponibile
|
||||
weight: Peso
|
||||
'yes': "Sì"
|
||||
'no': "No"
|
||||
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."
|
||||
notes: Note
|
||||
error: Eorrore
|
||||
admin:
|
||||
date: Data
|
||||
email: Email
|
||||
@@ -66,62 +83,26 @@ it:
|
||||
sku: articolo gestito a magazzino
|
||||
tags: Tag
|
||||
variant: Variante
|
||||
weight: Peso
|
||||
select_all: Seleziona tutto
|
||||
quick_search: Ricerca veloce
|
||||
clear_all: Cancella tutto
|
||||
start_date: "Data di inizio"
|
||||
end_date: "Data di fine"
|
||||
clear_filters: Cancella filtri
|
||||
clear: Pulisci
|
||||
columns: Colonne
|
||||
actions: Azioni
|
||||
viewing: "Vista: %{current_view_name}"
|
||||
description: Descrizione
|
||||
whats_this: Cos'è questo?
|
||||
tag_has_rules: "Regole esistenti per questo tag: %{num}"
|
||||
has_one_rule: "ha una regola"
|
||||
has_n_rules: "ha %{num} regole"
|
||||
unsaved_confirm_leave: "Ci sono cambiamenti non salvati in questa pagina. Continuare senza salvare?"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Account e conti"
|
||||
accounts_administration_distributor: "account amministrazione distributore"
|
||||
admin_settings: "Impostazioni"
|
||||
update_invoice: "Aggiorna fattura"
|
||||
finalise_invoice: "Finalizza le fatture"
|
||||
finalise_user_invoices: "Finalizza le fatture dell'utente"
|
||||
finalise_user_invoice_explained: "Usa questo bottone per finalizzare tutte le fatture nel sistema per il precedente mese. Questo processo può essere impostato per essere fatto automaticamente una volta al mese."
|
||||
manually_run_task: "Elabora il processo manualmente"
|
||||
update_user_invoices: "Aggiorna le fatture dell'utente"
|
||||
update_user_invoice_explained: "Usa questo bottone per aggiornare a oggi immediatamente le fatture del mese per ogni impresa del sistema. Questo processo può essere impostato per essere eseguito automaticamente ogni notte."
|
||||
auto_finalise_invoices: "Auto-finalizza le fatture il 2 di ogni mese alle 01:30"
|
||||
auto_update_invoices: "Auto-aggiorna le fatture di notte alle 01:00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Configurazione del modello di business"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Durata della prova per negozio (Giorni)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Percentuale di fatturato"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "tetto mensile (IVA esclusa)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Conto totale mensile (tasse incluse)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Aggiungi cliente"
|
||||
@@ -141,15 +122,9 @@ it:
|
||||
select_country: 'Seleziona il paese'
|
||||
select_state: 'Selezione la provincia'
|
||||
edit: 'Modifica'
|
||||
products:
|
||||
bulk_edit:
|
||||
unit: Unità
|
||||
display_as: Visualizza come
|
||||
category: Categoria
|
||||
tax_category: Categoria di imposta
|
||||
inherits_properties?: Eredita proprietà?
|
||||
available_on: Disponibile il
|
||||
av_on: "Disp. il"
|
||||
cache_settings:
|
||||
show:
|
||||
error: Eorrore
|
||||
variant_overrides:
|
||||
index:
|
||||
title: Inventario
|
||||
@@ -191,28 +166,27 @@ it:
|
||||
max_fulfilled_units: "Massime unità riempite"
|
||||
order_error: "Qualche errore deve essere risolto prima che tu possa aggiornare gli ordini.\nOgni campo con i bordi rossi contiene errori."
|
||||
variants_without_unit_value: "ATTENZIONE: Alcune varianti non hanno il valore dell'unità"
|
||||
order_cycles:
|
||||
edit:
|
||||
choose_products_from: "Scegli prodotti da:"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Seleziona prodotti OC in uscita da
|
||||
enterprises:
|
||||
index:
|
||||
producer?: Produttore?
|
||||
producer?: "Produttore?"
|
||||
package: Imballaggio
|
||||
status: Stato
|
||||
manage: Gestisci
|
||||
form:
|
||||
primary_details:
|
||||
shopfront_requires_login: "La pagina del negozio richiede il login?"
|
||||
shopfront_requires_login_tip: "Scegli se i clienti devono effettuare il login per vedere la pagina del negozio."
|
||||
shopfront_requires_login_false: "Pubblico"
|
||||
shopfront_requires_login_true: "Richiedi ai clienti di effettuare il login"
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Mostra negozi chiusi"
|
||||
hide_closed_shops: "Nascondi negozi chiusi"
|
||||
show_on_map: "Mostra tutto sulla mappa"
|
||||
stripe_connect:
|
||||
confirm_modal:
|
||||
cancel: Annulla
|
||||
users:
|
||||
contact: "Contatto"
|
||||
subscriptions:
|
||||
review:
|
||||
address: Indirizzo
|
||||
products: Prodotti
|
||||
stripe_connect_settings:
|
||||
edit:
|
||||
settings: "Impostazioni"
|
||||
shared:
|
||||
register_call:
|
||||
selling_on_ofn: "Interessato ad entrare in Open Food Network?"
|
||||
@@ -225,10 +199,10 @@ it:
|
||||
require_customer_login: "Questo negozio è solo per clienti."
|
||||
require_login_html: "Per favore, %{login} se hai già un account. Altrimenti %{register} per diventare un cliente."
|
||||
require_customer_html: "Per favore %{contact} %{enterprise} per diventare un cliente."
|
||||
invoice_column_item: "Articolo"
|
||||
invoice_column_qty: "Qtà."
|
||||
invoice_column_tax: "IVA"
|
||||
invoice_column_price: "Prezzo"
|
||||
invoice_column_item: "Articolo"
|
||||
invoice_column_qty: "Qtà."
|
||||
logo: "Logo (640x130)"
|
||||
logo_mobile: "Mobile logo (75x26)"
|
||||
logo_mobile_svg: "Mobile logo (SVG)"
|
||||
@@ -254,8 +228,8 @@ it:
|
||||
address: Indirizzo
|
||||
address2: Indirizzo (continua)
|
||||
city: Comune
|
||||
state: Stato
|
||||
postcode: CAP
|
||||
state: Stato
|
||||
country: Paese
|
||||
unauthorized: Non autorizzato
|
||||
terms_of_service: "Termini di servizio"
|
||||
@@ -278,24 +252,14 @@ it:
|
||||
label_more: "Mostra di più"
|
||||
label_less: "Mostra meno"
|
||||
label_notices: "Avvisi"
|
||||
items: "articoli"
|
||||
cart_headline: "Il tuo carrello"
|
||||
total: "Totale"
|
||||
checkout: "Paga ora"
|
||||
cart_updating: "Aggiornamento del carrello..."
|
||||
cart_empty: "Carrello vuoto"
|
||||
cart_edit: "Modifica il tuo carrello"
|
||||
card_number: Numero della carta
|
||||
card_securitycode: "Codice di sicurezza"
|
||||
card_expiry_date: Data di scadenza
|
||||
ofn_cart_headline: "Carrello attuale per:"
|
||||
ofn_cart_distributor: "Distributore:"
|
||||
ofn_cart_oc: "Ciclo d'ordine:"
|
||||
ofn_cart_from: "Da:"
|
||||
ofn_cart_to: "A:"
|
||||
ofn_cart_product: "Prodotto:"
|
||||
ofn_cart_quantitiy: "Quantità:"
|
||||
ofn_cart_send: "Comprami"
|
||||
ie_warning_headline: "Il tuo browser non è aggiornato :-("
|
||||
ie_warning_text: "Per una migliore esperienza con Open Food Network, ti raccomandiamo caldamente di aggiornare il browser:"
|
||||
ie_warning_chrome: Scarica Chrome
|
||||
@@ -405,7 +369,6 @@ it:
|
||||
email_confirmation_click_link: "Per favore clicca il link di seguito per confermare la tua email e continuare l'impostazione del tuo profilo"
|
||||
email_confirmation_link_label: "Conferma questo indirizzo email »"
|
||||
email_confirmation_help_html: "Dopo aver confermato il tuo indirizzo email puoi accedere al tuo account di amministrazione per questa impresa. Vedi il link %{link} per scoprire di più sulle funzionalità di %{sitename} e iniziare a usare il tuo profilo e il tuo negozio online."
|
||||
email_confirmation_userguide: "Guida utente"
|
||||
email_social: "Connettiti con Noi:"
|
||||
email_contact: "Scrivici:"
|
||||
email_signoff: "Saluti,"
|
||||
@@ -436,9 +399,6 @@ it:
|
||||
email_special_instructions: "Tue note:"
|
||||
email_signup_greeting: Ciao!
|
||||
email_signup_welcome: "Benvenuto a %{sitename}!"
|
||||
email_signup_login: Il tuo login
|
||||
email_signup_email: La tua email per il login è
|
||||
email_signup_shop_html: "Puoi cominciare adesso ad acquistare on-line su %{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_help_html: "Accettiamo volentieri tutte le tue domane e i tuoi suggerimenti: puoi usare il bottone <em>Invia Feedback</em> sul sito o scriverci a %{email}"
|
||||
producer_mail_greeting: "Caro"
|
||||
@@ -460,6 +420,7 @@ it:
|
||||
enterprises_next_closing: "Prossimo ordine in chiusura"
|
||||
enterprises_ready_for: "Pronto per"
|
||||
enterprises_choose: "Scegli quando vuoi il tuo ordine:"
|
||||
maps_open: "Aperto"
|
||||
hubs_buy: "Acquista per:"
|
||||
hubs_shopping_here: "Compra qui"
|
||||
hubs_orders_closed: "Ordini chiusi"
|
||||
@@ -604,7 +565,6 @@ it:
|
||||
orders_edit_checkout: Paga
|
||||
orders_form_empty_cart: "Carrello vuoto"
|
||||
orders_form_subtotal: Calcola il subtotale
|
||||
orders_form_admin: Amministrazione e trasporto
|
||||
orders_form_total: Totale
|
||||
orders_oc_expired_headline: Gli ordini sono chiusi per questo ciclo di ordini
|
||||
orders_oc_expired_text: "Spiacenti, gli ordini per questo ciclo son chiusi %{time} da! Per favore contatta direttamente il tuo hub per sapere se accettano ordini tardivi."
|
||||
@@ -614,7 +574,6 @@ it:
|
||||
orders_oc_expired_phone: "Telefono:"
|
||||
orders_show_title: Conferma dell'ordine
|
||||
orders_show_time: Ordine pronto
|
||||
orders_show_number: Conferma dell'ordine
|
||||
products_cart_distributor_choice: "Distributore per il tuo ordine:"
|
||||
products_cart_distributor_change: "Il tuo distributore per questo ordine sarà sostituito da %{name} se aggiungi questo prodotto al tuo carrello."
|
||||
products_cart_distributor_is: "Il tuo distributore per quest'ordine è %{name}."
|
||||
@@ -709,7 +668,6 @@ it:
|
||||
enterprise_about_headline: "Bello!"
|
||||
enterprise_about_message: "Adesso completiamo i dettagli su"
|
||||
enterprise_success: "Successo! %{enterprise} aggiunta ad Open Food Network"
|
||||
enterprise_registration_exit_message: "Se esci da questa guida in qualsiasi momento, dovrai cliccare sul link di conferma nell'email che riceverai. Ciò ti condurrà al tuo pannello di amministrazione dove potrai continuare l'impostazione del profilo."
|
||||
enterprise_description: "Descrizione breve"
|
||||
enterprise_description_placeholder: "Una frase corta che descriva la tua azienda"
|
||||
enterprise_long_desc: "Descrizione lunga"
|
||||
@@ -749,8 +707,6 @@ it:
|
||||
registration_finished_headline: "Finito!"
|
||||
registration_finished_thanks: "Grazie per aver riempito i dettagli per %{enterprise}."
|
||||
registration_finished_login: "Puoi cambiare o aggiornare la tua azienda ad ogni passo accedendo a Open Food Network e andando su Amministrazione."
|
||||
registration_finished_activate: "Attiva %{enterprise}."
|
||||
registration_finished_activate_instruction_html: "Abbiamo mandato un'email di conferma a <strong>%{email}</strong> se ancora non è stata ancora attivata.<br/>Per favore segui le istruzioni indicate per rendere la tua azienda visibile su Open Food Network."
|
||||
registration_finished_action: "Open Food Network home"
|
||||
registration_type_headline: "Ultimo passo per aggiungere %{enterprise}!"
|
||||
registration_type_question: "Sei un produttore?"
|
||||
@@ -844,6 +800,7 @@ it:
|
||||
supplier: "Fornitore"
|
||||
coordinator: "Coordinatore"
|
||||
distributor: "Distributore"
|
||||
enterprise_fees: "Contributi dell'azienda"
|
||||
fee_type: "Tipo di contributo"
|
||||
tax_category: "Categoria di imposta"
|
||||
calculator: "Calcolatore"
|
||||
@@ -884,18 +841,12 @@ it:
|
||||
spree_admin_enterprises_producers_order_cycles: "Prodotti in OC"
|
||||
spree_admin_enterprises_tabs_hubs: "HUBS"
|
||||
spree_admin_enterprises_tabs_producers: "PRODUTTORI"
|
||||
spree_admin_enterprises_producers_manage_order_cycles: "GESTISCI CICLI D'ORDINE"
|
||||
spree_admin_enterprises_producers_manage_products: "GESTISCI PRODOTTI"
|
||||
spree_admin_enterprises_producers_orders_cycle_text: "Non hai cicli d'ordine attivi."
|
||||
spree_admin_enterprises_any_active_products_text: "Non hai prodotti attivi."
|
||||
spree_admin_enterprises_create_new_product: "CREA UN NUOVO PRODOTTO"
|
||||
spree_admin_order_cycles: "Cicli d'ordine"
|
||||
spree_admin_order_cycles_tip: "I cicli d'ordine determinano quando e dove i tuoi prodotti saranno disponibili ai clienti."
|
||||
dashbord: "Bacheca"
|
||||
spree_admin_single_enterprise_alert_mail_confirmation: "Conferma l'indirizzo email per"
|
||||
spree_admin_single_enterprise_alert_mail_sent: "Abbiamo spedito una mail a"
|
||||
spree_admin_overview_action_required: "Azione richiesta"
|
||||
spree_admin_overview_check_your_inbox: "Per favore controlla la tua posta in arrivo per istruzioni ulteriori. Grazie!"
|
||||
change_package: "Cambia pacchetto"
|
||||
spree_admin_single_enterprise_hint: "Suggerimento: Per permettere alle persone di trovarti, abilita la tua visibilità sotto"
|
||||
your_profil_live: "Il tuo profilo è attivo"
|
||||
@@ -927,7 +878,6 @@ it:
|
||||
hub_sidebar_blue: "blu"
|
||||
hub_sidebar_red: "rosso"
|
||||
shop_trial_in_progress: "Il tuo negozio di prova scade tra %{days}."
|
||||
shop_trial_expired: "Buone notizie! Abbiamo deciso di estendere le prove dei negozi fino a nuova notifica (probabilmente intorno a marzo 2015)."
|
||||
report_customers_distributor: "Distributore"
|
||||
report_customers_supplier: "Fornitore"
|
||||
report_customers_cycle: "Ciclo d'ordine"
|
||||
@@ -945,6 +895,7 @@ it:
|
||||
report_order_cycle: "Ciclo d'ordine:"
|
||||
report_entreprises: "Aziende:"
|
||||
report_users: "Utenti:"
|
||||
report_header_weight: Peso
|
||||
initial_invoice_number: "Numero di fattura iniziale:"
|
||||
invoice_date: "Data fattura:"
|
||||
due_date: "Scadenza:"
|
||||
@@ -977,7 +928,6 @@ it:
|
||||
shipping_methods: "Metodi di Spedizione"
|
||||
payment_methods: "Metodi di pagamento"
|
||||
payment_method_fee: "Imposta di transizione"
|
||||
enterprise_fees: "Contributi dell'azienda"
|
||||
inventory_settings: "Impostazioni dell'inventario"
|
||||
tag_rules: "Regole dei tag"
|
||||
shop_preferences: "Preferenze di acquisto"
|
||||
@@ -986,13 +936,25 @@ it:
|
||||
validation_msg_product_category_cant_be_blank: "^Categoria di prodotto non può essere vuoto"
|
||||
validation_msg_tax_category_cant_be_blank: "^Categoria di tassa non può essere vuoto"
|
||||
validation_msg_is_associated_with_an_exising_customer: "è associato con un cliente esistente"
|
||||
js:
|
||||
error: Eorrore
|
||||
admin:
|
||||
panels:
|
||||
enterprise_status:
|
||||
description: Descrizione
|
||||
spree:
|
||||
shipment_states:
|
||||
backorder: ordine arretrato
|
||||
partial: parziale
|
||||
pending: in pendenza
|
||||
ready: pronto
|
||||
shipped: spedito
|
||||
order_state:
|
||||
address: indirizzo
|
||||
adjustments: aggiustamenti
|
||||
awaiting_return: restituzione attesa
|
||||
cart: carrello
|
||||
complete: completo
|
||||
confirm: conferma
|
||||
delivery: consegna
|
||||
payment: pagamento
|
||||
resumed: ripreso
|
||||
returned: restituito
|
||||
skrill: skrill
|
||||
payment_states:
|
||||
balance_due: saldo
|
||||
completed: completato
|
||||
@@ -1004,16 +966,13 @@ it:
|
||||
processing: in elaborazione
|
||||
void: vuoto
|
||||
invalid: invalido
|
||||
order_state:
|
||||
address: indirizzo
|
||||
adjustments: aggiustamenti
|
||||
awaiting_return: restituzione attesa
|
||||
canceled: cancellato
|
||||
cart: carrello
|
||||
complete: completo
|
||||
confirm: conferma
|
||||
delivery: consegna
|
||||
payment: pagamento
|
||||
resumed: ripreso
|
||||
returned: restituito
|
||||
skrill: skrill
|
||||
shipment_states:
|
||||
backorder: ordine arretrato
|
||||
partial: parziale
|
||||
pending: in pendenza
|
||||
ready: pronto
|
||||
shipped: spedito
|
||||
users:
|
||||
open_orders:
|
||||
edit: Modifica
|
||||
cancel: Annulla
|
||||
|
||||
@@ -43,20 +43,16 @@ nb:
|
||||
send_instructions: "Du vil motta en epost med instruksjoner om hvordan du bekrefter kontoen din om noen få minutter."
|
||||
failed_to_send: "Det oppsto en feil under sending av bekreftelses-eposten din."
|
||||
resend_confirmation_email: "Send bekreftelses-epost på nytt."
|
||||
confirmed: "Takk for at du bekreftet din epost! Du kan nå logge inn."
|
||||
not_confirmed: "Din epostadresse kunne ikke bekreftes. Kanskje har du allerede fullført dette trinnet?"
|
||||
user_registrations:
|
||||
spree_user:
|
||||
signed_up_but_unconfirmed: "En melding med en bekreftelseslink er sendt til epostadressen din. Vennligst åpne lenken for å aktivere kontoen din."
|
||||
failure:
|
||||
invalid: |
|
||||
Ugyldig epost eller passord.
|
||||
Var du gjest forrige gang? Kanskje du må opprette en konto eller nullstille passordet.
|
||||
Ugyldig epost eller passord.
|
||||
Var du gjest forrige gang? Kanskje du må opprette en konto eller nullstille passordet.
|
||||
unconfirmed: "Du må bekrefte kontoen din før du fortsetter."
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Takk, epostadressen din er bekreftet.
|
||||
not_confirmed: Din epostadresse kan ikke bekreftes. Kanskje du allerede har fullført dette steget?
|
||||
confirmation_sent: "Bekreftelsesepost er sendt!"
|
||||
confirmation_not_sent: "Kunne ikke sende bekreftelsesepost."
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Vennligst bekreft epostadressen til %{enterprise}"
|
||||
@@ -820,6 +816,12 @@ nb:
|
||||
allowed_payment_method_types_tip: Bare Kontant og Stripe betalingsmetoder kan brukes for øyeblikket
|
||||
credit_card: Kredittkort
|
||||
no_cards_available: Ingen kort tilgjengelig
|
||||
loading_flash:
|
||||
loading: LASTER ABONNEMENT
|
||||
review:
|
||||
details: Detaljer
|
||||
address: Adresse
|
||||
products: Produkter
|
||||
product_already_in_order: Dette produktet er allerede lagt til i bestillingen. Vennligst rediger mengden direkte.
|
||||
orders:
|
||||
number: Antall
|
||||
@@ -831,6 +833,7 @@ nb:
|
||||
confirm_unpause_msg: Er du sikker på at du vil fortsette dette abonnementet?
|
||||
unpause_failure_msg: 'Beklager, fortsettelse mislyktes!'
|
||||
confirm_cancel_open_orders_msg: "Noen bestillinger for dette abonnementet er for øyeblikket åpne. Kunden har allerede blitt varslet om at bestillingen vil bli lagt inn. Vil du avbryte disse bestillingene eller beholde dem?"
|
||||
resume_canceled_orders_msg: "Noen bestillinger for dette abonnementet kan gjenopptas akkurat nå. Du kan gjenoppta dem fra nedtrekksmenyen for bestillinger."
|
||||
yes_cancel_them: Avbryt dem
|
||||
no_keep_them: Behold dem
|
||||
yes_i_am_sure: Ja jeg er sikker
|
||||
@@ -1353,8 +1356,8 @@ nb:
|
||||
orders_could_not_cancel: "Beklager, bestillingen kunne ikke avbrytes"
|
||||
orders_cannot_remove_the_final_item: "Kan ikke fjerne den siste varen fra en bestilling, vennligst avbryt bestillingen i stedet."
|
||||
orders_bought_items_notice:
|
||||
one: Et ekstra element er allerede bekreftet for denne bestillingsperioden
|
||||
other: Ytterligere%{count} varer er allerede bekreftet for denne bestillingsrunden
|
||||
one: "Et ekstra element er allerede bekreftet for denne bestillingsperioden"
|
||||
other: "Ytterligere%{count} varer er allerede bekreftet for denne bestillingsrunden"
|
||||
orders_bought_edit_button: Rediger bekreftede varer
|
||||
orders_bought_already_confirmed: "* allerede bekreftet"
|
||||
orders_confirm_cancel: Er du sikker på at du vil avbryte denne bestillingen?
|
||||
@@ -2017,6 +2020,7 @@ nb:
|
||||
resolve_errors: Vennligst løse følgende feil
|
||||
more_items: "+ %{count} Flere"
|
||||
admin:
|
||||
enterprise_limit_reached: "Du har nådd standardgrensen for bedrifter per konto. Skriv til %{contact_email} hvis du trenger å øke den."
|
||||
modals:
|
||||
got_it: Jeg forstår
|
||||
tag_rule_help:
|
||||
@@ -2171,7 +2175,7 @@ nb:
|
||||
could_not_delete_customer: 'Kunne ikke slette kunde'
|
||||
product_import:
|
||||
confirmation: |
|
||||
Dette vil sette varebeholdning til null på alle produkter for denne virksomheten som ikke er til stede i den nedlastede filen.
|
||||
Dette vil sette varebeholdning til null på alle produkter for denne virksomheten som ikke er til stede i den nedlastede filen.
|
||||
order_cycles:
|
||||
update_success: 'Din bestillingsrunde har blitt oppdatert.'
|
||||
no_distributors: Det er ingen distributører i denne bestillingsrunden. Denne bestillingsrunden vil ikke være synlig for kundene før du legger til en. Vil du fortsette å lagre denne bestillingsrunden? '
|
||||
@@ -2181,6 +2185,10 @@ nb:
|
||||
customers:
|
||||
select_shop: 'Vennligst velg en butikk først'
|
||||
could_not_create: Beklager! Kunne ikke opprette
|
||||
subscriptions:
|
||||
closes: stenger
|
||||
closed: stengt
|
||||
close_date_not_set: Stengedato ikke angitt
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Start med en gratis profil, og utvid når du er klar!"
|
||||
@@ -2331,13 +2339,13 @@ nb:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
En forespørsel om å nullstille ditt passord er utført.
|
||||
Hvis det ikke var du som forespurte dette kan du se bort i fra denne eposten.
|
||||
En forespørsel om å nullstille ditt passord er utført.
|
||||
Hvis det ikke var du som forespurte dette kan du se bort i fra denne eposten.
|
||||
link_text: >
|
||||
Hvis det var du som forespurte dette kan du klikke nedenfor:
|
||||
issue_text: |
|
||||
Hvis URL'en ovenfor ikke fungerer prøv å kopier og lim den inn i din nettleser.
|
||||
Hvis du fortsatt har problemer vennligst ta kontakt.
|
||||
Hvis URL'en ovenfor ikke fungerer prøv å kopier og lim den inn i din nettleser.
|
||||
Hvis du fortsatt har problemer vennligst ta kontakt.
|
||||
confirmation_instructions:
|
||||
subject: Vennligst bekreft OFN-kontoen din
|
||||
weight: Vekt (per kg)
|
||||
|
||||
@@ -7,7 +7,7 @@ pt:
|
||||
shipment_state: Estado do envio
|
||||
completed_at: Completado em
|
||||
number: Número
|
||||
email: Email do cliente
|
||||
email: Email do/a consumidor/a
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -43,20 +43,16 @@ pt:
|
||||
send_instructions: "Receberá um email com instruções sobre como confirmar a sua conta em alguns minutos."
|
||||
failed_to_send: "Ocorreu um erro no envio do email de confirmação"
|
||||
resend_confirmation_email: "Reenviar email de confirmação."
|
||||
confirmed: "Obrigada por confirmar o seu email! Agora já pode fazer login."
|
||||
not_confirmed: "O seu email não pôde ser confirmado. Talvez já tenha completado este passo?"
|
||||
user_registrations:
|
||||
spree_user:
|
||||
signed_up_but_unconfirmed: "Foi enviada para o seu endereço de email uma mensagem com um link de confirmação. Por favor clique nesse link para activar a sua conta."
|
||||
signed_up_but_unconfirmed: "Foi enviada uma mensagem para o seu endereço de email com um link de confirmação. Por favor clique nesse link para activar a sua conta."
|
||||
failure:
|
||||
invalid: |
|
||||
Email ou senha incorrecto.
|
||||
Entrou como visitante da última vez? Talvez precise de criar uma conta ou de redefinir a sua senha.
|
||||
Email ou senha incorrecto.
|
||||
Entrou como visitante da última vez? Talvez precise de criar uma conta ou de redefinir a sua senha.
|
||||
unconfirmed: "Tem de confirmar a sua conta antes de continuar."
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Obrigada! O seu endereço de email está confirmado.
|
||||
not_confirmed: Não foi possível confirmar o seu endereço de email. Talvez já tenha completado este passo?
|
||||
confirmation_sent: "Email de confirmação enviado!"
|
||||
confirmation_not_sent: "Não foi possível enviar o email de confirmação."
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Por favor confirme o endereço de email da %{enterprise}"
|
||||
@@ -103,7 +99,7 @@ pt:
|
||||
home: "OFN"
|
||||
title: Open Food Network
|
||||
welcome_to: 'Bem vindo a'
|
||||
site_meta_description: "Partimos da terra. Com agricultores e produtores prontos a contarem as suas histórias verdadeiras com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que podem tomar melhores decisões no momento da compra..."
|
||||
site_meta_description: "Começamos a partir da terra. Com agricultores e produtores prontos a contarem as suas histórias com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que melhores decisões no momento da compra..."
|
||||
search_by_name: Procurar por nome ou localidade
|
||||
producers_join: Produtores e produtoras nacionais, estão convidados a juntarem-se à Open Food Network!
|
||||
charges_sales_tax: Cobra GST?
|
||||
@@ -256,13 +252,13 @@ pt:
|
||||
update_user_invoice_explained: "Use este botão para actualizar imediatamente as facturas do mês, até ao dia de hoje, para cada organização no sistema. Esta tarefa pode ser configurada para ser realizada automaticamente todas as noites."
|
||||
finalise_user_invoices: "Lançar Facturas de Utilizador"
|
||||
finalise_user_invoice_explained: "Use este botão para lançar no sistema todas as facturas relativas ao mês anterior. Esta tarefa pode ser configurada para ser realizada automaticamente uma vez por mês."
|
||||
update_user_invoices: "Atualizar Facturas de Utilizador"
|
||||
update_user_invoices: "Actualizar Facturas de Utilizador"
|
||||
errors:
|
||||
accounts_distributor: deve estar definido, se desejar criar facturas para organizações
|
||||
default_payment_method: deve estar definido se desejar criar facturas para organizações
|
||||
default_shipping_method: deve estar definido se desejar criar facturas para organizações registadas
|
||||
shopfront_settings:
|
||||
embedded_shopfront_settings: "Incorporar definições de loja"
|
||||
embedded_shopfront_settings: "Definições de loja incorporadas"
|
||||
enable_embedded_shopfronts: "Permitir lojas incorporadas"
|
||||
embedded_shopfronts_whitelist: "Whitelist de domínios externos"
|
||||
number_localization:
|
||||
@@ -292,16 +288,16 @@ pt:
|
||||
example_monthly_turnover_tip: "Exemplo de volume de negócios mensal de uma organização que será usado para calcular a conta mensal dada como exemplo abaixo."
|
||||
cap_reached?: "Atingido o limite?"
|
||||
cap_reached?_tip: "Se o \"tecto\" (limite definido à esquerda) foi atingido, dadas as definições e o volume de negócios indicado."
|
||||
included_tax: "Taxa inclusa"
|
||||
included_tax_tip: "A taxa total incluída no exemplo de conta mensal , dadas as definições e o volume de negócios indicado."
|
||||
total_monthly_bill_incl_tax: "Total de conta mensal (taxa inclusa)"
|
||||
included_tax: "Taxa incluída"
|
||||
included_tax_tip: "A taxa total incluída no exemplo de conta mensal, dadas as definições e o volume de negócios indicado."
|
||||
total_monthly_bill_incl_tax: "Total de conta mensal (taxa incluída)"
|
||||
total_monthly_bill_incl_tax_tip: "O exemplo de conta mensal total incluindo taxas, dadas as definições e o volume de negócios indicado."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Adicionar Cliente"
|
||||
new_customer: "Novo Cliente"
|
||||
customer_placeholder: "cliente@exemplo.org"
|
||||
valid_email_error: Favor usar um endereço de email válido
|
||||
valid_email_error: Por favor usar um endereço de email válido
|
||||
add_a_new_customer_for: Adicionar novo cliente para %{shop_name}
|
||||
code: Código
|
||||
duplicate_code: "Este código já está a ser usado."
|
||||
@@ -361,7 +357,7 @@ pt:
|
||||
property_name: Nome da propriedade
|
||||
inherited_property: Propriedade herdada
|
||||
variants:
|
||||
to_order_tip: "Os itens feitos por encomenda não têm um nível de estoque definido, como pão fresco, por exemplo."
|
||||
to_order_tip: "Os itens feitos por encomenda não têm um nível de stock definido, como pão fresco, por exemplo."
|
||||
product_distributions: "Distribuições de Produto"
|
||||
group_buy_options: "Opções de Compra Colectiva"
|
||||
seo: "SEO"
|
||||
@@ -385,9 +381,9 @@ pt:
|
||||
no_matching_hidden_products: Nenhum produto oculto corresponde à sua pesquisa
|
||||
no_new_products: Nenhum novo produto está disponível para ser adicionado a este inventário
|
||||
no_matching_new_products: Nenhum novo produto corresponde à sua busca
|
||||
inventory_powertip: Este é seu inventário de produtos. Para adicionar produtos ao seu inventário, selecione 'Novos Produtos' no menu Exibição
|
||||
hidden_powertip: Estes produtos foram escondidos no seu inventário e não estarão disponíveis para serem adicionados à sua loja. Você pode clicar em 'Adicionar' para adicionar um produto a seu inventário.
|
||||
new_powertip: 'Estes produtos estão disponíveis para serem adicionados ao seu inventário. Clique em ''Adicionar'' para adicionar um produto em seu inventário, ou ''Ocultar'' para escondê-lo. Você pode voltar atrás quando quiser! '
|
||||
inventory_powertip: Este é o seu inventário de produtos. Para adicionar produtos ao seu inventário, selecione 'Novos Produtos' no menu Visualizar
|
||||
hidden_powertip: Estes produtos foram escondidos no seu inventário e não estarão disponíveis para serem adicionados à sua loja. Pode clicar em 'Adicionar' para adicionar um produto ao seu inventário.
|
||||
new_powertip: 'Estes produtos estão disponíveis para serem adicionados ao seu inventário. Clique em ''Adicionar'' para adicionar um produto em seu inventário, ou ''Ocultar'' para escondê-lo. Pode voltar atrás quando quiser! '
|
||||
controls:
|
||||
back_to_my_inventory: Voltar ao inventário
|
||||
orders:
|
||||
@@ -406,15 +402,15 @@ pt:
|
||||
weight_volume: "Peso/Volume"
|
||||
ask: "Perguntar?"
|
||||
page_title: "Gestão de Pedidos a Granel"
|
||||
actions_delete: "Deletar Selecionado"
|
||||
loading: "Carregando pedidos"
|
||||
no_results: "Nenhum pedido encontrado. "
|
||||
actions_delete: "Apagar Selecionado"
|
||||
loading: "Carregando encomendas"
|
||||
no_results: "Nenhuma encomenda encontrada. "
|
||||
group_buy_unit_size: "Tamanho de Unidade para Compras de Grupo"
|
||||
total_qtt_ordered: "Quantidade Total do Pedido"
|
||||
max_qtt_ordered: "Quantidade Máxima do Pedido"
|
||||
current_fulfilled_units: "Unidades Completadas no Momento"
|
||||
max_fulfilled_units: "Máximo de Unidades Completadas "
|
||||
order_error: "Alguns erros devem ser corrigidos antes de atualizar os pedidos.\nOs campos com bordas vermelhas contém erros."
|
||||
current_fulfilled_units: "Unidades Completas no Momento"
|
||||
max_fulfilled_units: "Máximo de Unidades Completas "
|
||||
order_error: "Alguns erros devem ser corrigidos antes de actualizar os pedidos.\nOs campos com bordas vermelhas contêm erros."
|
||||
variants_without_unit_value: "AVISO: Algumas variantes não possuem unidade de valor"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: 'Selecione a saída do ciclo de pedidos '
|
||||
@@ -422,16 +418,16 @@ pt:
|
||||
index:
|
||||
title: Organizações
|
||||
new_enterprise: Nova Organização
|
||||
producer?: "Produtor?"
|
||||
producer?: "Produtor/a?"
|
||||
package: Embalagem
|
||||
status: Status
|
||||
manage: Administrar
|
||||
status: Estado
|
||||
manage: Gerir
|
||||
form:
|
||||
about_us:
|
||||
desc_short: Descrição curta
|
||||
desc_short_placeholder: Conte-nos sobre a sua organização em uma ou duas frases
|
||||
desc_long: Sobre nós
|
||||
desc_long_placeholder: Conte aos consumidores sobre você. Esta informação aparece no seu perfil público.
|
||||
desc_long_placeholder: Conte um pouco de si aos consumidores. Esta informação aparece no seu perfil público.
|
||||
business_details:
|
||||
abn: ABN
|
||||
abn_placeholder: 'ex: 99 123 456 789'
|
||||
@@ -462,92 +458,91 @@ pt:
|
||||
promo_image_note2: Qualquer imagem promocional carregada aqui será cortada para 1200 x 260.
|
||||
promo_image_note3: A imagem promocional é exibida no topo da página de perfil da organização e em janelas pop-up.
|
||||
inventory_settings:
|
||||
text1: Você pode optar por gerenciar o seu nível de estoque e preços através de seu
|
||||
inventory: inventório
|
||||
text1: Pode optar por gerir o seu nível de stock e preços através do seu
|
||||
inventory: inventário
|
||||
text2: >
|
||||
Se você está usando a ferramenta de inventário, você pode selecionar
|
||||
se novos produtos adicionados pelos seus fornecedores precisam ser adicionados
|
||||
ao seu inventário antes de serem estocados. Se você não está usando
|
||||
o inventário para gerenciar os seus produtos, você deve selecionar a
|
||||
opção 'recomendado' abaixo.
|
||||
preferred_product_selection_from_inventory_only_yes: Novos produtos podem ser colocados na minha vitrine (recomendado)
|
||||
preferred_product_selection_from_inventory_only_no: Novos produtos devem ser adicionados no meu inventário antes de serem colocados na minha vitrine
|
||||
Se está a usar a ferramenta de inventário, pode selecionar se novos
|
||||
produtos adicionados pelos seus fornecedores precisam de ser adicionados
|
||||
ao seu inventário antes de entrarem em stock. Se não está a usar o inventário
|
||||
para gerir os seus produtos, deve selecionar a opção 'recomendado' abaixo.
|
||||
preferred_product_selection_from_inventory_only_yes: Novos produtos podem ser colocados na minha montra (recomendado)
|
||||
preferred_product_selection_from_inventory_only_no: Novos produtos devem ser adicionados ao meu inventário antes de serem colocados na minha montra
|
||||
payment_methods:
|
||||
name: Nome
|
||||
applies: Aplica?
|
||||
manage: Gerenciar métodos de pagamento
|
||||
not_method_yet: Você ainda não tem nenhum método de pagamento.
|
||||
manage: Gerir métodos de pagamento
|
||||
not_method_yet: Ainda não tem nenhum método de pagamento.
|
||||
create_button: Criar novo método de pagamento
|
||||
create_one_button: 'Criar um agora '
|
||||
primary_details:
|
||||
name: 'Nome '
|
||||
name_placeholder: 'ex: Trufas Biodinâmicas do Pereira'
|
||||
groups: Grupos
|
||||
groups_tip: Seleccione grupos e regiões das quais é membro. Isso ajudará os consumidores a encontrar a sua organização.
|
||||
groups_tip: Seleccione grupos e regiões das quais é membro. Isso ajudará os consumidores a encontrarem a sua organização.
|
||||
groups_placeholder: Comece a digitar para pesquisar grupos disponíveis...
|
||||
primary_producer: Produtor primário?
|
||||
primary_producer_tip: Selecione 'produtor' se você é primeiramente um produtor de alimentos
|
||||
primary_producer_tip: Selecione 'produtor' se é acima de tudo um/a produtor/a de alimentos
|
||||
producer: Produtor
|
||||
any: Qualquer
|
||||
none: Nenhum
|
||||
own: Próprio
|
||||
sells: Vende
|
||||
sells_tip: "Nenhum - a organização não vende directamente aos consumidores. <br /> Próprio - a organização vende os seus próprios produtos aos consumidores. <br /> Qualquer - a organização vende os seus próprios produtos ou produtos de outras organizações. <br />"
|
||||
visible_in_search: Visível na busca?
|
||||
visible_in_search: Visível na pesquisa?
|
||||
visible_in_search_tip: Determina se esta organização vai estar visível para os consumidores quando estes pesquisarem no website.
|
||||
visible: Visível
|
||||
not_visible: Invisível
|
||||
permalink: Permalink (sem espaços)
|
||||
permalink_tip: "Esse link é usado para criar a URL para a sua loja: %{link}nome-loja/loja"
|
||||
permalink_tip: "Este link é usado para criar o URL para a sua loja: %{link}nome-loja/loja"
|
||||
link_to_front: Link para a loja
|
||||
link_to_front_tip: Um link direto para a sua loja no Open Food Network.
|
||||
shipping_methods:
|
||||
name: Nome
|
||||
applies: Aplica?
|
||||
manage: Gerenciar formas de envio
|
||||
manage: Gerir formas de envio
|
||||
create_button: Criar nova forma de envio
|
||||
create_one_button: Criar um agora
|
||||
no_method_yet: Você ainda não tem nenhuma forma de envio.
|
||||
no_method_yet: Ainda não tem nenhuma forma de envio.
|
||||
shop_preferences:
|
||||
shopfront_requires_login: "Mercado visível publicamente?"
|
||||
shopfront_requires_login_tip: "Escolha se os clientes precisarão fazer o login para ver os produtos do mercado, ou se eles estarão visíveis para todos."
|
||||
shopfront_requires_login_false: "Publico"
|
||||
shopfront_requires_login_true: "Disponível somente para clientes registrados"
|
||||
recommend_require_login: "Recomendamos pedir login dos usuários quando permitido que pedidos possam ser alterados."
|
||||
allow_guest_orders: "Pedidos dos convidados"
|
||||
allow_guest_orders_tip: "Permitir o checkout como convidado, ou requisitar um usuário registrado. "
|
||||
allow_guest_orders_false: "Requisitar o registro para fazer pedidos"
|
||||
shopfront_requires_login_tip: "Escolha se os consumidores vão precisar de fazer login para ver a montra da loja, ou se esta estará visível para toda a gente."
|
||||
shopfront_requires_login_false: "Público"
|
||||
shopfront_requires_login_true: "Disponível somente para clientes registados"
|
||||
recommend_require_login: "Recomendamos que peça login dos utilizadores quando é permitido que as encomendas sejam alteradas. "
|
||||
allow_guest_orders: "Encomendas de convidados"
|
||||
allow_guest_orders_tip: "Permitir o checkout como convidado, ou requisitar um utilizador registado. "
|
||||
allow_guest_orders_false: "Requisitar o registo para fazer encomendas"
|
||||
allow_guest_orders_true: "Permitir checkout de convidados"
|
||||
allow_order_changes: "Mudar pedidos"
|
||||
allow_order_changes_tip: "Permitir que os consumidores mudem seus pedidos enquanto a compra estiver aberta."
|
||||
allow_order_changes_false: "Pedidos enviados não podem ser mudados ou cancelados."
|
||||
allow_order_changes_true: "Consumidor pode mudar ou cancelar pedidos enquanto a compra estiver aberta."
|
||||
allow_order_changes: "Alterar encomendas"
|
||||
allow_order_changes_tip: "Permitir que os consumidores alterem os seus pedidos enquanto o ciclo de encomendas estiver aberto."
|
||||
allow_order_changes_false: "Encomendas submetidas não podem ser alteradas / canceladas."
|
||||
allow_order_changes_true: "Os consumidores pode alterar / cancelar encomendas enquanto o ciclo de encomendas estiver aberto."
|
||||
enable_subscriptions: "Subscrições"
|
||||
enable_subscriptions_tip: "Activar funcionalidade das subscrições?"
|
||||
enable_subscriptions_false: "Desactivado"
|
||||
enable_subscriptions_true: "Activado"
|
||||
shopfront_message: Mensagem da vitrine da loja
|
||||
enable_subscriptions_true: "Activo"
|
||||
shopfront_message: Mensagem da montra da loja
|
||||
shopfront_message_placeholder: >
|
||||
Uma breve e opcional explicação para os consumidores detalhando como
|
||||
funciona a sua loja, a ser exibida acima da lista de produtos na sua
|
||||
vitrine.
|
||||
Uma explicação breve e opcional para os consumidores a explicar como
|
||||
funciona a loja, a ser exibida acima da lista de produtos na sua montra.
|
||||
shopfront_closed_message: Mensagem de loja fechada
|
||||
shopfront_closed_message_placeholder: >
|
||||
Uma mensagem que forneça uma explicação detalhada sobre o porque de
|
||||
a loja estar fechada e quando os consumidores podem esperar que abra
|
||||
novamente, a ser exibida quando não houver nenhum ciclo de pedidos ativo.
|
||||
Uma mensagem que forneça uma explicação detalhada sobre o motivo da
|
||||
loja estar fechada e quando é que os consumidores podem esperar que
|
||||
abra novamente, a ser exibida quando não houver nenhum ciclo de encomendas
|
||||
activo.
|
||||
shopfront_category_ordering: Categoria de pedidos da loja
|
||||
open_date: Dia de abertura
|
||||
close_date: Dia de fechamento
|
||||
close_date: Dia de fecho
|
||||
social:
|
||||
twitter_placeholder: 'ex: @o_prof'
|
||||
stripe_connect:
|
||||
connect_with_stripe: "Conectar usando o Stripe"
|
||||
connect_with_stripe: "Conectar com o Stripe"
|
||||
stripe_connect_intro: "Para aceitar pagamentos com cartão de crédito, vai ser necessário ligar a sua conta Stripe à Open Food Network. Use o botão à direita para começar."
|
||||
stripe_account_connected: "Conta Stripe conectada"
|
||||
disconnect: "Desligar conta"
|
||||
confirm_modal:
|
||||
title: Conectar usando o Stripe
|
||||
title: Conectar com o Stripe
|
||||
part1: O Stripe é um serviço de processamento de pagamentos que permite às lojas OFN aceitarem pagamentos dos seus clientes com cartão de crédito.
|
||||
part2: Para usar esta funcionalidade, tem de ligar a sua conta Stripe à OFN. Ao clicar em 'Concordo' abaixo vai ser redirecionado para o website Stripe onde pode estabelecer ligação com uma conta existente, ou criar uma conta nova caso ainda não tenha uma.
|
||||
part3: Isto vai permitir à Open Food Network aceitar pagamentos dos seus clientes com cartão de crédito em seu nome. Tenha em conta que do seu lado vai ser necessário manter a sua própria conta Stripe, pagar as taxas à Stripe e lidar com quaisquer rejeições ou serviços ao cliente.
|
||||
@@ -564,7 +559,7 @@ pt:
|
||||
add_new_rule: '+ Adicionar nova regra'
|
||||
add_new_tag: '+ Adicionar nova etiqueta'
|
||||
users:
|
||||
email_confirmation_notice_html: "Confirmação de e-mail está pendente. Enviamos um e-mail de confirmação para %{email}."
|
||||
email_confirmation_notice_html: "A confirmação de e-mail está pendente. Enviamos um e-mail de confirmação para %{email}."
|
||||
resend: Reenviar
|
||||
owner: 'Proprietário'
|
||||
contact: "Contacto"
|
||||
@@ -596,22 +591,22 @@ pt:
|
||||
producer: Produtor
|
||||
change_type_form:
|
||||
producer_profile: Perfil do produtor
|
||||
connect_ofn: Conecte-se através do Open Food Network
|
||||
connect_ofn: Conectar através da Open Food Network
|
||||
always_free: SEMPRE GRATUITO
|
||||
producer_description_text: Adicione os seus produtos ao Open Food Network, permitindo que os hubs os comercialize em suas lojas.
|
||||
producer_shop: Loja do produtor
|
||||
sell_your_produce: 'Venda seus próprios produtos '
|
||||
producer_description_text: Adicione os seus produtos à Open Food Network, permitindo que os hubs os comercializem nas suas lojas.
|
||||
producer_shop: Loja de produtor
|
||||
sell_your_produce: 'Venda os seus próprios produtos '
|
||||
producer_shop_description_text: Venda os seus produtos directamente aos seus clientes através da sua própria montra Open Food Network.
|
||||
producer_shop_description_text2: Uma Loja de Produtor/a é somente para os seus produtos, se quiser vender produtos de outro local, selecione Hub de Produtores.
|
||||
producer_hub: Hub de produtor
|
||||
producer_hub_text: Venda seus próprios produtos e de outros produtores
|
||||
producer_hub_description_text: A sua organização é a espinha dorsal do seu sistema de produção e consumo local. Através dela, pode comercializar os seus próprios produtos, assim como produtos agregados de outras iniciativas e produtores, através da sua loja na Open Food Network.
|
||||
producer_hub: Hub de Produtores
|
||||
producer_hub_text: Venda os seus próprios produtos e também os de outros produtores
|
||||
producer_hub_description_text: A sua organização é a espinha dorsal de um sistema de produção e consumo local. Através dela, pode comercializar os seus próprios produtos, assim como produtos agregados de outras iniciativas e produtores, através da sua loja na Open Food Network.
|
||||
profile: Somente perfil
|
||||
get_listing: Obter uma listagem
|
||||
profile_description_text: As pessoas podem encontrá-lo e contactá-lo na Open Food Network. A sua organização ficará visível no mapa e poderá ser encontrada através do motor de pesquisa.
|
||||
hub_shop: Loja do hub
|
||||
hub_shop_text: Comercialize produtos de outros
|
||||
hub_shop_description_text: A sua organização é a espinha dorsal do seu sistema de produção e consumo local. Através dela, pode agregar produtos de outras organizações e produtores, e comercializá-los na sua loja na Open Food Network.
|
||||
hub_shop_description_text: A sua organização é a espinha dorsal de um sistema de produção e consumo local. Através dela, pode agregar produtos de outras organizações e produtores, e comercializá-los na sua loja na Open Food Network.
|
||||
choose_option: Por favor escolha uma das opções acima.
|
||||
change_now: Mudar agora
|
||||
enterprise_user_index:
|
||||
@@ -838,6 +833,7 @@ pt:
|
||||
confirm_unpause_msg: Tem a certeza que pretende parar a pausa desta subscrição?
|
||||
unpause_failure_msg: 'Desculpe, não foi possível parar a pausa!'
|
||||
confirm_cancel_open_orders_msg: "Algumas encomendas para esta subscrição estão actualmente abertas. O/a consumidor/a foi notificado que a encomenda será processada. Quer cancelar esta(s) encomenda(s) ou mantê-las?"
|
||||
resume_canceled_orders_msg: "Algumas encomendas desta subscrição podem ser retomadas neste momento. Para retomá-las, selecione no menú dropdown de encomendas."
|
||||
yes_cancel_them: Cancelá-las
|
||||
no_keep_them: Mantê-las
|
||||
yes_i_am_sure: Sim, tenho a certeza
|
||||
@@ -1033,7 +1029,7 @@ pt:
|
||||
home_shop: Compre Agora
|
||||
brandstory_headline: "Alimentos, com liberdade"
|
||||
brandstory_intro: "Às vezes, a melhor maneira de consertar o sistema é construir um novo..."
|
||||
brandstory_part1: "A gente começa por quem produz os alimentos, contando suas histórias e de seus cultivos, passando por quem distribui de modo justo e sem desperdício, até chegar em quem acredita que suas decisões de consumo podem..."
|
||||
brandstory_part1: "Começamos a partir da terra. Com agricultores e produtores prontos a contarem as suas histórias com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que melhores decisões no momento da compra podem mudar o mundo. "
|
||||
brandstory_part2: "Precisamos de uma ferramenta para empoderar a todos que produzem, vendem e compram comida. Uma maneira de contar histórias, e controlar toda a logística. "
|
||||
brandstory_part3: "Por isso construímos um mercado online, transparente, capaz de criar conexões verdadeiras. O código é aberto, e pode ser modificado para melhor se adaptar as particularidades de cada canto do planeta. "
|
||||
brandstory_part4: "Queremos de volta o controle sobre os alimentos que consumimos."
|
||||
@@ -1170,7 +1166,7 @@ pt:
|
||||
email_signup_welcome: "Bem vindo a %{sitename}!"
|
||||
email_signup_confirmed_email: "Obrigada por confirmar o seu email."
|
||||
email_signup_shop_html: "Já pode fazer log in em %{link}."
|
||||
email_signup_text: "Obrigada por se juntar à rede. Se é consumidor/a, vai ficar a conhecer vários produtores fantásticos, pontos de venda incríveis e comidas deliciosas! Se é produtor/a ou uma organização de consumo local, estamos felizes por tê-lo na nossa rede"
|
||||
email_signup_text: "Obrigada por juntar-se à rede. Se é consumidor/a, vai ficar a conhecer vários produtores fantásticos, pontos de venda incríveis e comidas deliciosas! Se é produtor/a ou uma organização de consumo local, estamos felizes por tê-lo na nossa rede"
|
||||
email_signup_help_html: "Dúvidas e comentários são sempre benvindos; você pode usar o botão <em>Enviar Comentário</em> no site, ou enviar um e-mail para %{email}"
|
||||
producer_mail_greeting: "Querido"
|
||||
producer_mail_text_before: "Agora temos todos os pedidos do cliente para a próxima entrega."
|
||||
@@ -1327,32 +1323,32 @@ pt:
|
||||
shops_text: 'A colheita é feita em ciclos, a comida é produzida em ciclos, e nós fazemos nossos pedidos em ciclos. Se você encontrar um ciclo de pedidos fechado, volte em breve para tentar novamente. '
|
||||
shops_signup_title: Registre-se como uma central
|
||||
shops_signup_headline: 'Um mercado de alimentos sem tamanho. '
|
||||
shops_signup_motivation: 'Seja qual for seu perfil, nos oferecemos suporte. Somos sem fins lucrativos, independentes, e open source. '
|
||||
shops_signup_action: Cadastre-se agora
|
||||
shops_signup_motivation: Seja qual for o seu modelo, nós ajudamos. Se houver mudanças, estamos consigo. Somos sem fins lucrativos, independentes, e open source. Somos os parceiros de software com os quais sonhou.
|
||||
shops_signup_action: Junte-se agora
|
||||
shops_signup_pricing: Contas da Organização
|
||||
shops_signup_stories: Histórias de nossas centrais.
|
||||
shops_signup_stories: Histórias dos nossos membros.
|
||||
shops_signup_help: Estamos prontos para ajudar
|
||||
shops_signup_help_text: Você precisa de mais retorno, novos compradores e parceiros de logística. Você precisa contar a sua história.
|
||||
shops_signup_help_text: Você está a precisar de melhor retorno, de novos clientes e parceiros de logística. Está a precisar que a sua história seja contada em grupos de consumo, em retalho e à mesa de jantar.
|
||||
shops_signup_detail: Aqui está o detalhe.
|
||||
orders: Encomendas
|
||||
orders_fees: Taxas...
|
||||
orders_edit_title: Carrinho de compras
|
||||
orders_edit_headline: seu carrinho de compras
|
||||
orders_edit_headline: O seu carrinho de compras
|
||||
orders_edit_time: Pedido pronto para
|
||||
orders_edit_continue: Continuar comprando
|
||||
orders_edit_continue: Continuar a comprar
|
||||
orders_edit_checkout: Fechar pedido
|
||||
orders_form_empty_cart: "Carrinho vazio"
|
||||
orders_form_subtotal: Subtotal dos produtos
|
||||
orders_form_admin: Administração & Logística
|
||||
orders_form_total: Total
|
||||
orders_oc_expired_headline: Este ciclo de pedidos está fechado para pedidos
|
||||
orders_oc_expired_text: "Desculpe, este ciclo de pedidos fechou há %{time} atrás. Favor entrar em contato diretamente com sua central para saber se podem aceitar pedidos atrasados."
|
||||
orders_oc_expired_text_others_html: "Desculpe, este ciclo de pedidos fechou há %{time} atrás. Favor entrar em contato diretamente com sua central para saber se podem aceitar pedidos atrasados <strong>%{link}</strong>."
|
||||
orders_oc_expired_text_link: "ou veja os outros ciclos de pedidos disponíveis nessa central"
|
||||
orders_oc_expired_headline: Este ciclo de encomendas está fechado para pedidos
|
||||
orders_oc_expired_text: "Desculpe, este ciclo de encomendas fechou há %{time} atrás. Por favor entre em contacto directamente com a sua central para saber se podem aceitar pedidos tardios."
|
||||
orders_oc_expired_text_others_html: "Desculpe, este ciclo de encomendas fechou há %{time} atrás. Por favor entre em contacto directamente com a sua central para saber se podem aceitar pedidos tardios <strong>%{link}</strong>."
|
||||
orders_oc_expired_text_link: "ou veja os outros ciclos de encomendas que estão disponíveis nesta central"
|
||||
orders_oc_expired_email: "Email:"
|
||||
orders_oc_expired_phone: "Telefone:"
|
||||
orders_show_title: Confimação de Pedido
|
||||
orders_show_time: Pedido pronto em
|
||||
orders_show_title: Confimação de Encomenda
|
||||
orders_show_time: Encomenda pronta em
|
||||
orders_show_order_number: "Encomenda #%{number}"
|
||||
orders_show_cancelled: Cancelada
|
||||
orders_show_confirmed: Confirmada
|
||||
@@ -1360,30 +1356,30 @@ pt:
|
||||
orders_could_not_cancel: "Pedimos desculpa, a sua encomenda não pode ser cancelada"
|
||||
orders_cannot_remove_the_final_item: "Não é possível remover o item final de uma encomenda, em vez disso, por favor cancele a encomenda."
|
||||
orders_bought_items_notice:
|
||||
one: Um item adicional já está confirmado para este ciclo de encomendas
|
||||
other: '%{count}itens adicionais já confirmados para este ciclo de encomendas '
|
||||
one: "Um item adicional já está confirmado para este ciclo de encomendas"
|
||||
other: "%{count}itens adicionais já confirmados para este ciclo de encomendas "
|
||||
orders_bought_edit_button: Editar itens confirmados
|
||||
orders_bought_already_confirmed: "* já confirmado"
|
||||
orders_confirm_cancel: Tem a certeza que quer cancelar esta encomenda?
|
||||
products_cart_distributor_choice: "Distribuidor para seu pedido:"
|
||||
products_cart_distributor_change: "O distribuidor para este pedido será trocado para %{name} se você adicionar este produto no carrinho."
|
||||
products_cart_distributor_change: "O distribuidor para esta encomenda será alterado para %{name} se adicionar este produto ao carrinho."
|
||||
products_cart_distributor_is: "O distribuidor para este pedido é %{name}."
|
||||
products_distributor_error: "Favor completar seu pedido no %{link} antes de comprar com outro distribuidor."
|
||||
products_oc: "Ciclo de pedido para seu pedido:"
|
||||
products_oc_change: "O ciclo de pedido para esse pedido será trocada para %{name} se você adicionar este produto ao carrinho."
|
||||
products_oc_is: "O ciclo de pedido para este pedido é %{name}."
|
||||
products_oc_error: "Favor completar seu pedido no %{link} antes de comprar em outro ciclo de pedido."
|
||||
products_oc_current: "seu ciclo de pedido atual"
|
||||
products_oc_current: "o seu actual ciclo de encomendas"
|
||||
products_max_quantity: Quantidade máxima
|
||||
products_distributor: Distribuidor
|
||||
products_distributor_info: Quando você selecionar um distribuidor para seu pedido, o endereço e data para retirada serão exibidos aqui.
|
||||
products_distributor_info: Quando seleccionar um distribuidor para a sua encomenda, o endereço e data de levantamento serão exibidos aqui.
|
||||
products_distribution_adjustment_label: "Distribuição de produto por %{distributor} para %{product}."
|
||||
shop_trial_expires_in: "O período de avaliação do mercado termina em "
|
||||
shop_trial_expired_notice: "Boa notícia! Decidimos extender o período avaliação do mercado até segunda ordem. "
|
||||
password: Senha
|
||||
remember_me: Lembre-me
|
||||
are_you_sure: "Tem certeza?"
|
||||
orders_open: Pedidos abertos
|
||||
orders_open: Encomendas abertas
|
||||
closing: "Fechando"
|
||||
going_back_to_home_page: "Voltando à pagina inicial"
|
||||
creating: Criando
|
||||
@@ -1392,14 +1388,14 @@ pt:
|
||||
failed_to_create_enterprise_unknown: "Falha ao criar a sua organização. \nPor favor verifique se todos os campos foram preenchidos correctamente."
|
||||
failed_to_update_enterprise_unknown: "Falha ao actualizar a sua organização. \nPor favor verifique se todos os campos foram preenchidos correctamente."
|
||||
enterprise_confirm_delete_message: "Isto também vai apagar o %{product} que esta organização fornece. Tem a certeza que deseja continuar?"
|
||||
order_not_saved_yet: "Seu pedido ainda não foi salvo. Aguarde um momento. "
|
||||
order_not_saved_yet: "A sua encomenda ainda não foi guardada. Só mais uns minutinhos para teminar! "
|
||||
filter_by: "Filtrar por"
|
||||
hide_filters: "Esconder filtros"
|
||||
one_filter_applied: "1 filtro aplicado"
|
||||
x_filters_applied: "filtros aplicados"
|
||||
submitting_order: "Processando seu pedido: favor aguardar"
|
||||
submitting_order: "A processar o seu pedido: favor aguarde"
|
||||
confirm_hub_change: "Tem certeza? Isso irá mudar a central selecionada e remover todos os ítens do carrinho de compras."
|
||||
confirm_oc_change: "Tem certeza? Isso irá mudar o ciclo de pedidos selecionado e remover todos os ítens do carrinho de compras."
|
||||
confirm_oc_change: "Tem a certeza? Isto mudará o ciclo de encomendas seleccionado e removerá todos os itens do carrinho de compras."
|
||||
location_placeholder: "Digite uma localidade..."
|
||||
error_required: "Não pode ser vazio"
|
||||
error_number: "Precisa ser um número"
|
||||
@@ -1622,7 +1618,7 @@ pt:
|
||||
Ready: "Pronto"
|
||||
ok: OK
|
||||
not_visible: não visível
|
||||
you_have_no_orders_yet: "Você ainda não tem pedidos"
|
||||
you_have_no_orders_yet: "Ainda não tem encomendas"
|
||||
running_balance: "Balanço corrente"
|
||||
outstanding_balance: "Saldo devedor"
|
||||
admin_entreprise_relationships: "Relações da Organização"
|
||||
@@ -1650,7 +1646,7 @@ pt:
|
||||
admin_entreprise_groups_web: "Recursos Web"
|
||||
admin_entreprise_groups_web_twitter: "ex. @nome_perfil"
|
||||
admin_entreprise_groups_web_website_placeholder: "ex. www.cogumelos.com.br"
|
||||
admin_order_cycles: "Ciclo de Pedidos do Administrador"
|
||||
admin_order_cycles: "Ciclos de Encomendas do Administrador"
|
||||
open: "Aberto"
|
||||
close: "Fechado"
|
||||
create: "Criar"
|
||||
@@ -1670,11 +1666,11 @@ pt:
|
||||
calculator: "Calculadora"
|
||||
calculator_values: "Valores da calculadora"
|
||||
flat_percent_per_item: "Percentual (por unidade)"
|
||||
new_order_cycles: "Novo Ciclo de Pedidos"
|
||||
new_order_cycle: "Novo ciclo de pedido"
|
||||
select_a_coordinator_for_your_order_cycle: "Escolher um coordenador para novo ciclo de pedidos"
|
||||
new_order_cycles: "Novos Ciclo de Encomendas"
|
||||
new_order_cycle: "Novo ciclo de encomendas"
|
||||
select_a_coordinator_for_your_order_cycle: "Escolher um coordenador para o seu ciclo de encomendas"
|
||||
notify_producers: 'Notificar produtores'
|
||||
edit_order_cycle: "Editar Ciclo de Pedidos"
|
||||
edit_order_cycle: "Editar Ciclo de Encomendas"
|
||||
roles: "Papeis"
|
||||
update: "Atualizar"
|
||||
delete: Apagar
|
||||
@@ -1694,7 +1690,7 @@ pt:
|
||||
price: "Preço"
|
||||
on_hand: "Disponível"
|
||||
save_changes: "Salvar Modificações"
|
||||
order_saved: "Pedido salvo"
|
||||
order_saved: "Pedido guardado"
|
||||
no_products: Sem Produtos
|
||||
spree_admin_overview_enterprises_header: "As minhas Organizações"
|
||||
spree_admin_overview_enterprises_footer: "GERIR AS MINHAS ORGANIZAÇÕES"
|
||||
@@ -1743,8 +1739,8 @@ pt:
|
||||
resend: "Re-enviar"
|
||||
trial: Experiência
|
||||
add_and_manage_products: "Adicionar e gerenciar produtos"
|
||||
add_and_manage_order_cycles: "Adicionar e enviar ciclos de pedidos"
|
||||
manage_order_cycles: "Gerenciar ciclos de pedidos"
|
||||
add_and_manage_order_cycles: "Adicionar e gerir ciclos de encomendas"
|
||||
manage_order_cycles: "Gerir ciclos de encomendas"
|
||||
manage_products: "Gerenciar produtos"
|
||||
edit_profile_details: "Editar detalhes de perfil "
|
||||
edit_profile_details_etc: "Modificar a descrição dos seu perfil, imagem, etc."
|
||||
@@ -2023,18 +2019,17 @@ pt:
|
||||
choose: Escolha
|
||||
resolve_errors: Por favor resolva os seguintes erros
|
||||
more_items: "+ %{count} Mais"
|
||||
closes: fecha
|
||||
closed: fechado
|
||||
admin:
|
||||
enterprise_limit_reached: "Atingiu o número limite de organizações por conta. Escreva para %{contact_email} se precisar de aumentá-lo."
|
||||
modals:
|
||||
got_it: Percebi
|
||||
tag_rule_help:
|
||||
title: Regras de Etiquetas
|
||||
overview: Visão geral
|
||||
overview_text: >
|
||||
As regras de tag fornecem uma maneira para descrever quais itens são
|
||||
visíveis ou não e para quais clientes, como formas de pagamento, formas
|
||||
de entrega, produtos e ciclos de pedidos.
|
||||
As regras de tag permitem descrever quais os itens que são visíveis
|
||||
ou não e para que clientes. Os itens podem ser métodos de envio, formas
|
||||
de pagamento, produtos e ciclos de encomendas.
|
||||
by_default_rules: "Regras 'Por Defeito...'"
|
||||
by_default_rules_text: >
|
||||
As regras por defeito permitem esconder itens de forma a que estes não
|
||||
@@ -2182,7 +2177,7 @@ pt:
|
||||
could_not_delete_customer: 'Não foi possível eliminar o cliente'
|
||||
product_import:
|
||||
confirmation: |
|
||||
Isto colocará a zero o stock de todos os produtos desta organização que não estejam presentes no ficheiro carregado.
|
||||
Isto colocará a zero o stock de todos os produtos desta organização que não estejam presentes no ficheiro carregado.
|
||||
order_cycles:
|
||||
update_success: 'O seu ciclo de encomendas foi actualizado.'
|
||||
no_distributors: Não existem distribuidores neste ciclo. Este ciclo de encomendas só ficará visível para os clientes quando um distribuidor for adicionado. Gostaria de continuar a guardar este ciclo de encomendas?
|
||||
@@ -2192,6 +2187,10 @@ pt:
|
||||
customers:
|
||||
select_shop: 'Por favor selecione primeiro uma loja'
|
||||
could_not_create: Perdão! Não conseguimos criar
|
||||
subscriptions:
|
||||
closes: fecha
|
||||
closed: fechado
|
||||
close_date_not_set: Data de fecho não definida
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Começa com um perfil gratuito e expande quando estiveres pronto/a!"
|
||||
@@ -2305,14 +2304,23 @@ pt:
|
||||
address: endereço
|
||||
adjustments: ajustes
|
||||
awaiting_return: aguardando retorno
|
||||
canceled: cancelado
|
||||
cart: carrinho
|
||||
complete: completo
|
||||
confirm: confirmado
|
||||
delivery: entrega
|
||||
paused: em pausa
|
||||
payment: pagamento
|
||||
pending: pendente
|
||||
resumed: retomado
|
||||
returned: retornado
|
||||
skrill: skrill
|
||||
subscription_state:
|
||||
active: activo
|
||||
pending: pendente
|
||||
ended: terminou
|
||||
paused: em pausa
|
||||
canceled: cancelado
|
||||
payment_states:
|
||||
balance_due: saldo devedor
|
||||
completed: completado
|
||||
@@ -2321,9 +2329,9 @@ pt:
|
||||
failed: falha
|
||||
paid: pago
|
||||
pending: pendente
|
||||
processing: processando
|
||||
processing: em processamento
|
||||
void: vazio
|
||||
invalid: inváliod
|
||||
invalid: inválido
|
||||
shipment_states:
|
||||
backorder: atrasos
|
||||
partial: parcial
|
||||
@@ -2333,12 +2341,14 @@ pt:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
Recebemos um pedido para redefinir a sua senha.
|
||||
Se não fez este pedido, simplesmente ignore esta mensagem.
|
||||
Recebemos um pedido para redefinir a sua senha.
|
||||
Se não fez este pedido, simplesmente ignore esta mensagem.
|
||||
link_text: >
|
||||
Se fez este pedido, clique na ligação abaixo:
|
||||
issue_text: |
|
||||
Se o endereço URL acima não funcionar, tente copiá-lo e colá-lo directamente no browser. Se continuar a ter problemas por favor entre em contacto.
|
||||
Se o endereço URL acima não funcionar, tente copiá-lo e colá-lo directamente no browser. Se continuar a ter problemas por favor entre em contacto.
|
||||
confirmation_instructions:
|
||||
subject: Por favor confirme a sua conta OFN
|
||||
weight: Peso (por kg)
|
||||
zipcode: Código postal
|
||||
users:
|
||||
@@ -2350,6 +2360,7 @@ pt:
|
||||
cards: Cartões de Crédito
|
||||
transactions: Transações
|
||||
settings: Definições de Conta
|
||||
unconfirmed_email: "Confirmação de email pendente para: %{unconfirmed_email}. O seu endereço de email será actualizado assim que o novo email esteja confirmado. "
|
||||
orders:
|
||||
open_orders: Encomendas Abertas
|
||||
past_orders: Encomendas Passadas
|
||||
|
||||
@@ -3,7 +3,7 @@ sv:
|
||||
attributes:
|
||||
spree/order:
|
||||
payment_state: Betalningstatus
|
||||
shipment_state: Leveranstatus
|
||||
shipment_state: Leveransstatus
|
||||
errors:
|
||||
models:
|
||||
spree/user:
|
||||
@@ -13,14 +13,8 @@ sv:
|
||||
devise:
|
||||
failure:
|
||||
invalid: |
|
||||
Ogiltig e-post eller lösenord.
|
||||
Var du gäst senast? Du behöver kanske skapa ett konto eller återställa ditt lösenord.
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Tack, din e-postadress har blivit bekräftad.
|
||||
not_confirmed: Din e-postadress kunde inte bekräftas. Du kanske redan har genomfört det här steget?
|
||||
confirmation_sent: "Bekräftelsemail skickat!"
|
||||
confirmation_not_sent: "Kunde ej skicka bekräftelsemail."
|
||||
Ogiltig e-post eller lösenord.
|
||||
Var du gäst senast? Du behöver kanske skapa ett konto eller återställa ditt lösenord.
|
||||
enterprise_mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Vänligen bekräfta e-postadressen för %{enterprise}"
|
||||
@@ -32,45 +26,45 @@ sv:
|
||||
home: "OFN"
|
||||
title: Open Food Network
|
||||
welcome_to: 'Välkommen till'
|
||||
site_meta_description: "dölja"
|
||||
site_meta_description: "Vi börjar från grunden. Med bönder och odlare redo att berätta sina berättelser stolt och verkligt. Med distributörer redo att ansluta människor med produkter rättvist och ärligt. Med köpare som tror att bättre veckovisa köpbeslut kan ..."
|
||||
search_by_name: Sök på ortnamn eller förort...
|
||||
producers_join: Svenska producenter kan nu gå med i Open Food Network. Välkomna!
|
||||
charges_sales_tax: Debiterar Moms?
|
||||
print_invoice: "Skriv ut faktura"
|
||||
print_ticket: "Skriv ut kvitto"
|
||||
select_ticket_printer: "Välj skrivare för bijetterna"
|
||||
select_ticket_printer: "Välj skrivare för kvitton"
|
||||
send_invoice: "Skicka faktura"
|
||||
resend_confirmation: "Skicka bekräftelse igen"
|
||||
view_order: "Se beställning"
|
||||
resend_confirmation: "Skicka om bekräftelse"
|
||||
view_order: "Granska beställning"
|
||||
edit_order: "Ändra beställning"
|
||||
ship_order: "Skicka beställning"
|
||||
cancel_order: "Ångra beställning"
|
||||
confirm_send_invoice: "En faktura på denna beställning kommer att skickas till kunden. Är du säker på att du vill fortsätta? "
|
||||
confirm_resend_order_confirmation: "Är du säker på att du vill skicka orderbekräftelsen en gång till? "
|
||||
confirm_resend_order_confirmation: "Är du säker på att du vill skicka beställningsbekräftelsen en gång till? "
|
||||
must_have_valid_business_number: "%{enterprise_name} måste ha ett giltigt organisationsnummer innan fakturor kan skickas."
|
||||
invoice: "Faktura"
|
||||
percentage_of_sales: "%{percentage} av försäljning"
|
||||
capped_at_cap: "begränsat till %{cap}"
|
||||
per_month: "per månad"
|
||||
free: "gratis"
|
||||
free_trial: "prova gratis"
|
||||
plus_tax: "plus Moms"
|
||||
free_trial: "gratis pröva-på period"
|
||||
plus_tax: "plus moms"
|
||||
min_bill_turnover_desc: "när omsättning överskrider %{mbt_amount}"
|
||||
say_no: "Nej"
|
||||
say_yes: "Ja"
|
||||
then: då
|
||||
sort_order_cycles_on_shopfront_by: "Sortera Cykler Av Ordrar På Skyltfönster Efter"
|
||||
required_fields: Fält som måste fyllas i är märkta med en asterisk
|
||||
select_continue: Välj och fortsätt
|
||||
sort_order_cycles_on_shopfront_by: "Sortera butikens beställningsomgångar efter"
|
||||
required_fields: Obligatoriska fält är märkta med en asterisk
|
||||
select_continue: Markera och fortsätt
|
||||
remove: Ta bort
|
||||
or: eller
|
||||
collapse_all: Minimera alla
|
||||
expand_all: Expandera alla
|
||||
loading: Laddning...
|
||||
loading: Laddar...
|
||||
show_more: Visa mer
|
||||
show_all: Visa alla
|
||||
show_all_with_more: "Visa alla (%{num} More)"
|
||||
cancel: Makulera
|
||||
show_all_with_more: "Visa alla (ytterligare %{num})"
|
||||
cancel: Avbryt
|
||||
edit: Redigera
|
||||
distributors: Distributörer
|
||||
distribution: Distribution
|
||||
@@ -107,22 +101,22 @@ sv:
|
||||
on_hand: På lager
|
||||
on_demand: På begäran
|
||||
on_demand?: På begäran?
|
||||
order_cycle: Ordercykel
|
||||
order_cycle: Beställningsomgång
|
||||
phone: Telefon
|
||||
price: Pris
|
||||
producer: Producent
|
||||
product: Produkt
|
||||
quantity: Kvantitet
|
||||
shop: Butik
|
||||
sku: Orderrad
|
||||
sku: SKU
|
||||
tags: Taggar
|
||||
variant: Variant
|
||||
weight: Vikt
|
||||
volume: Volym
|
||||
items: Artiklar
|
||||
select_all: Välj alla
|
||||
select_all: Markera alla
|
||||
obsolete_master: Föråldrad mästare
|
||||
quick_search: Snabb sökning
|
||||
quick_search: Snabbsökning
|
||||
clear_all: Rensa allt
|
||||
start_date: "Startdatum"
|
||||
end_date: "Slutdatum"
|
||||
@@ -170,27 +164,27 @@ sv:
|
||||
business_model_configuration_tip: "Beräkna det belopp som varje affär skall betala varje månad för användningen av OFN. "
|
||||
bill_calculation_settings: "Inställningar för beräkning av fakturor"
|
||||
bill_calculation_settings_tip: "Justera det belopp företag skall faktureras varje månad för användning av OFN."
|
||||
shop_trial_length: "Försöksperiod (Dagar)"
|
||||
shop_trial_length: "Pröva-på period (dagar)"
|
||||
shop_trial_length_tip: "Antal dagar som företag som definierats som affärer kan ha som försöksperiod."
|
||||
fixed_monthly_charge: "Bestämd månadsavgift"
|
||||
fixed_monthly_charge_tip: "En bestämd månadsavgift för alla företag som är definierade som affärer och som överskridit minsta fakturerade omsättningen (om sådan bestämts)."
|
||||
fixed_monthly_charge_tip: "En bestämd månadsavgift för alla företag som är definierade som butiker och som överskridit minsta tillåtna omsättning (om sådan bestämts)."
|
||||
percentage_of_turnover: "Procent av omsättning"
|
||||
percentage_of_turnover_tip: "När den är större än noll, denna taxa (0,0 - 1,0) kommer att läggas till den totala omsättningen för varje affär och adderas till varje bestämd avgift (till vänster) vid beräkning av månadsavgiften."
|
||||
monthly_cap_excl_tax: "månadstak (exkl. GST)"
|
||||
monthly_cap_excl_tax_tip: "När det är större än noll, kommer detta värde att användas som tak för det belopp som affärer skall faktureras varje månad."
|
||||
percentage_of_turnover_tip: "När den är större än noll, kommer denna taxa (0,0 - 1,0) att läggas till den totala omsättningen för varje affär och adderas till varje bestämd avgift (till vänster) vid beräkning av månadsavgiften."
|
||||
monthly_cap_excl_tax: "månadstak (exkl. moms)"
|
||||
monthly_cap_excl_tax_tip: "När det är större än noll, kommer detta värde att användas som tak för det belopp som butiker skall faktureras varje månad."
|
||||
tax_rate: "Skattesats"
|
||||
tax_rate_tip: "Skattesats som används på månadsfakturan som företag skall betala för att använda systemet."
|
||||
minimum_monthly_billable_turnover: "Minsta månatliga fakturerbara omsättning"
|
||||
minimum_monthly_billable_turnover_tip: "Minsta månadsomsättning i en en butiks skyltfönster får betala för att använda OFN. Företag vars omsättning understiger detta belopp under en månad behöver ej betala vare sig procentuellt eller med en fast taxa."
|
||||
minimum_monthly_billable_turnover: "Minsta månatliga omsättning"
|
||||
minimum_monthly_billable_turnover_tip: "Minsta månadsomsättning som en butik får betala för att använda OFN. Företag vars omsättning understiger detta belopp under en månad behöver ej betala vare sig procentuellt eller en fast taxa."
|
||||
example_bill_calculator: "Exempel på beräkning av en faktura"
|
||||
example_bill_calculator_legend: "Ändra omsättningen i exemplet för att åskådliggöra effekten av ändrade inställningar till vänster."
|
||||
example_monthly_turnover: "Exempel på månatlig omsättning"
|
||||
example_monthly_turnover_tip: "Ett exempel på månatlig omsättning för företaget som används för att beräkna en månatlig faktura i exemplet nedan."
|
||||
example_bill_calculator_legend: "Ändra omsättning i exemplet för att åskådliggöra effekten av ändrade inställningar."
|
||||
example_monthly_turnover: "Exempel på månadsomsättning"
|
||||
example_monthly_turnover_tip: "Ett exempel på månadsomsättning som används för att beräkna en månatlig faktura i exemplet nedan."
|
||||
cap_reached?: "Är taket nått?"
|
||||
cap_reached?_tip: "Visar om taket (specificerat till vänster) har nåtts. med de givna inställningarna och omsättningen."
|
||||
included_tax: "Skatten är inkluderad"
|
||||
included_tax_tip: "All skatt är inkluderad i exemplets månadsfaktura enligt de inställningar och den omsättning som var angiven."
|
||||
total_monthly_bill_incl_tax: "Total månadsfaktura (inkl skatt)"
|
||||
total_monthly_bill_incl_tax: "Totalt månadsfaktura (inkl moms)"
|
||||
total_monthly_bill_incl_tax_tip: "Exemplets totala månadsfaktura med skatt inkluderad enligt de inställningar och den omsättning som var angiven."
|
||||
customers:
|
||||
index:
|
||||
@@ -207,11 +201,11 @@ sv:
|
||||
update_address_error: 'Oj! Du måste fylla i alla obligatoriska fält'
|
||||
edit_bill_address: 'Ändra fakturaadress'
|
||||
edit_ship_address: 'Ändra leveransadress'
|
||||
required_fileds: 'Obligatoriska fält är markerade med en stjärna'
|
||||
required_fileds: 'Obligatoriska fält är markerade med en asterisk'
|
||||
select_country: 'Välj land'
|
||||
select_state: 'Välj län'
|
||||
edit: 'Ändra'
|
||||
update_address: 'Uppdatera Adress'
|
||||
update_address: 'Uppdatera adress'
|
||||
confirm_delete: 'Vill du verkligen radera?'
|
||||
search_by_email: "Sök via e-post/kod..."
|
||||
destroy:
|
||||
@@ -220,7 +214,7 @@ sv:
|
||||
show:
|
||||
title: Inkomst
|
||||
distributor: Distributör
|
||||
order_cycle: Ordercykel
|
||||
order_cycle: Beställningsomgång
|
||||
status: Status
|
||||
diff: Differens
|
||||
error: Fel
|
||||
@@ -253,14 +247,6 @@ sv:
|
||||
manages: hanterar
|
||||
products:
|
||||
unit_name_placeholder: 't.ex. klasar'
|
||||
bulk_edit:
|
||||
unit: Enhet
|
||||
display_as: Visa som
|
||||
category: Kategori
|
||||
tax_category: Taxområde
|
||||
inherits_properties?: Ärva egenskaper?
|
||||
available_on: 'Tillgänglig '
|
||||
av_on: "Md. På"
|
||||
properties:
|
||||
property_name: Egendomens Namn
|
||||
inherited_property: Ärvd Egendom
|
||||
@@ -340,8 +326,6 @@ sv:
|
||||
contact:
|
||||
name: Namn
|
||||
name_placeholder: ex. Gustav Persson
|
||||
email_address: E-postadress
|
||||
email_address_placeholder: ex gustav@telia.com
|
||||
phone: Telefon
|
||||
phone_placeholder: ex 123 456 789
|
||||
website: Hemsida
|
||||
@@ -448,6 +432,7 @@ sv:
|
||||
email_confirmation_notice_html: "E-post bekräftelse har inte kommit. Vi har sänt en bekräftande e-post till %{email}."
|
||||
resend: Återsänd
|
||||
owner: 'Ägare'
|
||||
contact: "Kontakt"
|
||||
owner_tip: Den primära användaren är ansvarig för detta företag.
|
||||
notifications: Meddelanden
|
||||
notifications_tip: Meddelanden om order kommer att sändas till denna e-postadress,
|
||||
@@ -517,8 +502,6 @@ sv:
|
||||
advanced_settings: Avancerade inställningar
|
||||
update_and_close: Uppdatera och Stäng
|
||||
choose_products_from: 'Välj produkter från:'
|
||||
pickup_time_tip: När beställningar från denna Beställningsomgång kommer att vara redo för kunden
|
||||
pickup_instructions_tip: Dessa instruktioner visas för kunderna efter att de har slutfört en beställning
|
||||
exchange_form:
|
||||
pickup_instructions_placeholder: "Instruktioner för upphämtning"
|
||||
pickup_time_placeholder: "Klar för (dvs. Datum/Tid)"
|
||||
@@ -633,6 +616,10 @@ sv:
|
||||
description: Fakturor för import till Xero
|
||||
packing:
|
||||
name: Förpackningsrapporter
|
||||
subscriptions:
|
||||
review:
|
||||
address: Adress
|
||||
products: Produkter
|
||||
checkout:
|
||||
already_ordered:
|
||||
cart: "vagn"
|
||||
@@ -739,7 +726,6 @@ sv:
|
||||
label_more: "Visa mer"
|
||||
label_less: "Visa mindre"
|
||||
label_notices: "Anmälan"
|
||||
items: "artiklar"
|
||||
cart_headline: "Din varukorg"
|
||||
total: "Summa "
|
||||
cart_updating: "Uppdatera din varukorg"
|
||||
@@ -765,7 +751,7 @@ sv:
|
||||
footer_sites_userguide: "Användarguide"
|
||||
footer_secure: "Säkert och anförtrott."
|
||||
footer_secure_text: "Open Food Network använder SSL-kryptering (2048 bitars RSA) överallt för att hålla din beställnings- och betalningsinformation privat. Våra servrar lagrar inte dina kreditkortsdetaljer och betalningar processeras av PCI-beskedliga tjänster."
|
||||
footer_contact_headline: "Hålla kontakten"
|
||||
footer_contact_headline: "Håll kontakten"
|
||||
footer_contact_email: "Mejla oss"
|
||||
footer_nav_headline: "Navigera"
|
||||
footer_join_headline: "Gå med oss"
|
||||
@@ -863,7 +849,6 @@ sv:
|
||||
email_confirmation_click_link: "Var vänlig att klicka på länken nedan för att bekräfta din e-postadress och fortsätt att skapa din profil."
|
||||
email_confirmation_link_label: "Bekräfta din e-postadress »"
|
||||
email_confirmation_help_html: "Sedan du bekräftat din e-postadress har du tillgång till ditt konto för denna firma. Se %{link} för att ta reda på mer om %{sitename} artiklar och börja använda din profil eller online butik."
|
||||
email_confirmation_userguide: "Användarguide"
|
||||
email_social: "Koppla ihop med Oss:"
|
||||
email_contact: "Mejla oss:"
|
||||
email_signoff: "Hälsningar,"
|
||||
@@ -894,9 +879,6 @@ sv:
|
||||
email_special_instructions: "Dina anteckningar:"
|
||||
email_signup_greeting: Hallå!
|
||||
email_signup_welcome: "Välkommen till %{sitename}!"
|
||||
email_signup_login: Din inloggning
|
||||
email_signup_email: Din e-postadress för inloggning är
|
||||
email_signup_shop_html: "Du kan starta ditt onlineköp nu på %{link}."
|
||||
email_signup_text: "Tack för att du anslutit dig till vårt nätverk. Om du är kund, vi vill introducera dig för många utmärkta odlare och ett stort urval av god mat. Om du är producent eller matföretag är vi glada att ha dig som en del av vårt nätverk.\n."
|
||||
email_signup_help_html: "Vi uppskattar alla frågor och synpunkter; du kan använda <em>Send Feedback</em> knappen på sidan eller skicka e-post till %{email}"
|
||||
producer_mail_greeting: "Kära"
|
||||
@@ -918,6 +900,8 @@ sv:
|
||||
enterprises_next_closing: "Nästa order stängs"
|
||||
enterprises_ready_for: "Klar för"
|
||||
enterprises_choose: "Välj när du vill ha din beställning:"
|
||||
maps_open: "Öppen"
|
||||
maps_closed: "Stängd"
|
||||
hubs_buy: "Handla:"
|
||||
hubs_shopping_here: "Att handla här"
|
||||
hubs_orders_closed: "Beställningar avslutade"
|
||||
@@ -1084,8 +1068,8 @@ sv:
|
||||
orders_could_not_cancel: "Tyvärr kan denna beställning inte avbrytas"
|
||||
orders_cannot_remove_the_final_item: "Det går inte att ta bort det sista varan från en beställning, var god och avbryt beställningen istället."
|
||||
orders_bought_items_notice:
|
||||
one: Ett ytterligare objekt är redan bekräftat för denna ordercykel
|
||||
other: '%{count} ytterligare artiklar är redan bekräftade för denna beställningsomgång'
|
||||
one: "Ett ytterligare objekt är redan bekräftat för denna ordercykel"
|
||||
other: "%{count} ytterligare artiklar är redan bekräftade för denna beställningsomgång"
|
||||
orders_bought_edit_button: Redigera bekräftade varor
|
||||
orders_bought_already_confirmed: "* redan bekräftad"
|
||||
orders_confirm_cancel: Är du säker på att du vill avbryta denna beställning?
|
||||
@@ -1103,7 +1087,7 @@ sv:
|
||||
products_distributor_info: När du väljer distributör för din order kommer leveranstider att visas här
|
||||
products_distribution_adjustment_label: "Distribution för %{distributor} av %{product}"
|
||||
shop_trial_expires_in: "Din försökstid för skyltfönster gå ut om"
|
||||
shop_trial_expired_notice: "Goda nyheter! Vi har beslutat utöka skyltfönstrets försökstid tills vidare. "
|
||||
shop_trial_expired_notice: "Goda nyheter! Vi har beslutat utöka butikens pröva-på period tills vidare. "
|
||||
password: Lösenord
|
||||
remember_me: Kom ihåg mig
|
||||
are_you_sure: "Är du säker?"
|
||||
@@ -1187,7 +1171,6 @@ sv:
|
||||
enterprise_about_headline: "Snygg sak"
|
||||
enterprise_about_message: "Låt oss nu bli lite mer detaljerade om"
|
||||
enterprise_success: "Succé! %{enterprise} ingår nu i Open Food Network "
|
||||
enterprise_registration_exit_message: "Om du vid något tillfälle lämnar denna guide ska du klicka på \"confirmation\" länken på den e-post du erhållit. Detta gör att du kommer till administrationsstatus där du kan fortsätta att bygga din profil."
|
||||
enterprise_description: "Kort beslrivning"
|
||||
enterprise_description_placeholder: "En kort mening som beskriver ditt företag"
|
||||
enterprise_long_desc: "Lång beskrivning"
|
||||
@@ -1228,8 +1211,6 @@ sv:
|
||||
registration_finished_headline: "Klar!"
|
||||
registration_finished_thanks: "Tack för att du fyllt i alla uppgifter för %{enterprise}."
|
||||
registration_finished_login: "Du kan ändra eller uppdatera dina uppgifter när som helst genom att logga in på Open Food Network och klicka på Admin."
|
||||
registration_finished_activate: "Aktivera %{enterprise}."
|
||||
registration_finished_activate_instruction_html: "Vi har sänt bekräftelse via e-post till <strong>%{email}</strong> om den inte varit aktiverad tidigare. <br/> Var vänlig följ instruktionerna där så att ditt företag visas på Open Food Network."
|
||||
registration_finished_action: "Open Food Network hem"
|
||||
registration_type_headline: "Sista steget för att lägga till %{enterprise}!"
|
||||
registration_type_question: "Är du en producent?"
|
||||
@@ -1670,7 +1651,6 @@ sv:
|
||||
order_cycles_email_to_producers_notice: 'E-postmeddelanden till producenter har blivit placerade i kön för att skickas.'
|
||||
order_cycles_no_permission_to_coordinate_error: "Ingen av dina företag har tillstånd att samordna en beställningsomgång"
|
||||
order_cycles_no_permission_to_create_error: "Du har inte behörighet att skapa en beställningsomgång som samordnas av företaget"
|
||||
order_cycles_no_permission_to_delete_error: "Denna beställningsomgång har valts av en kund och kan inte raderas. För att förhindra att kunder får tillgång till det, stäng det istället."
|
||||
js:
|
||||
saving: 'Sparar...'
|
||||
changes_saved: 'Ändringar sparade.'
|
||||
@@ -1839,7 +1819,7 @@ sv:
|
||||
could_not_delete_customer: 'Kunde inte radera kund'
|
||||
product_import:
|
||||
confirmation: |
|
||||
Detta kommer att ställa lagersaldot till noll på alla produkter för detta företag, som inte är närvarande i den uppladdade filen.
|
||||
Detta kommer att ställa lagersaldot till noll på alla produkter för detta företag, som inte är närvarande i den uppladdade filen.
|
||||
order_cycles:
|
||||
update_success: 'Din beställningsomgång har uppdaterats.'
|
||||
no_distributors: Det finns inga distributörer i denna beställningsomgång. Den kommer inte att vara synlig för kunderna tills du lägger till en distributör. Vill du fortsätta och spara denna beställningsomgång? '
|
||||
@@ -1907,7 +1887,6 @@ sv:
|
||||
address: adress
|
||||
adjustments: justeringar
|
||||
awaiting_return: väntar återsändning
|
||||
canceled: makulerad
|
||||
cart: kundvagn
|
||||
complete: komplett
|
||||
confirm: bekräfta
|
||||
@@ -1936,19 +1915,16 @@ sv:
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
En begäran om att återställa ditt lösenord har gjorts.
|
||||
Om du inte gjorde denna förfrågan ignorerar du bara det här e-postmeddelandet.
|
||||
En begäran om att återställa ditt lösenord har gjorts.
|
||||
Om du inte gjorde denna förfrågan ignorerar du bara det här e-postmeddelandet.
|
||||
link_text: >
|
||||
Om du gjorde denna förfrågan klickar du bara på länken nedan:
|
||||
issue_text: |
|
||||
Om den ovan nämnda webbadressen inte fungerar kan du försöka kopiera och klistra in den i webbläsaren.
|
||||
Om du får problem, var god kontakta oss.
|
||||
Om den ovan nämnda webbadressen inte fungerar kan du försöka kopiera och klistra in den i webbläsaren.
|
||||
Om du får problem, var god kontakta oss.
|
||||
weight: Vikt (kg)
|
||||
zipcode: Postkod
|
||||
users:
|
||||
show:
|
||||
open_orders: Öppna beställningar
|
||||
transaction_history: Transaktionshistorik
|
||||
open_orders:
|
||||
order: Beställningar
|
||||
shop: 'Butik '
|
||||
|
||||
@@ -113,6 +113,8 @@ Openfoodnetwork::Application.routes.draw do
|
||||
resources :tag_rules, only: [:destroy]
|
||||
end
|
||||
|
||||
resources :manager_invitations, only: [:create]
|
||||
|
||||
resources :enterprise_relationships
|
||||
resources :enterprise_roles
|
||||
|
||||
@@ -210,6 +212,8 @@ Openfoodnetwork::Application.routes.draw do
|
||||
resource :status do
|
||||
get :job_queue
|
||||
end
|
||||
|
||||
post '/product_images/:product_id', to: 'product_images#update_product_image'
|
||||
end
|
||||
|
||||
namespace :open_food_network do
|
||||
@@ -285,7 +289,6 @@ Spree::Core::Engine.routes.prepend do
|
||||
resources :orders do
|
||||
get :managed, on: :collection
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
namespace :admin do
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
class RemovePlacedAtAndConfirmedAtFromOrderCycles < ActiveRecord::Migration
|
||||
def up
|
||||
remove_column :order_cycles, :standing_orders_placed_at
|
||||
remove_column :order_cycles, :standing_orders_confirmed_at
|
||||
end
|
||||
|
||||
def down
|
||||
add_column :order_cycles, :standing_orders_placed_at, :datetime
|
||||
add_column :order_cycles, :standing_orders_confirmed_at, :datetime
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20180222231639) do
|
||||
ActiveRecord::Schema.define(:version => 20180316034336) do
|
||||
|
||||
create_table "account_invoices", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
@@ -319,10 +319,8 @@ ActiveRecord::Schema.define(:version => 20180222231639) do
|
||||
t.datetime "orders_open_at"
|
||||
t.datetime "orders_close_at"
|
||||
t.integer "coordinator_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "standing_orders_placed_at"
|
||||
t.datetime "standing_orders_confirmed_at"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
end
|
||||
|
||||
create_table "producer_properties", :force => true do |t|
|
||||
|
||||
21
db/seeds.rb
21
db/seeds.rb
@@ -29,3 +29,24 @@ states.each do |state|
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def create_mail_method
|
||||
Spree::MailMethod.destroy_all
|
||||
|
||||
CreateMailMethod.new(
|
||||
environment: Rails.env,
|
||||
preferred_enable_mail_delivery: true,
|
||||
preferred_mail_host: ENV.fetch('MAIL_HOST'),
|
||||
preferred_mail_domain: ENV.fetch('MAIL_DOMAIN'),
|
||||
preferred_mail_port: ENV.fetch('MAIL_PORT'),
|
||||
preferred_mail_auth_type: 'login',
|
||||
preferred_smtp_username: ENV.fetch('SMTP_USERNAME'),
|
||||
preferred_smtp_password: ENV.fetch('SMTP_PASSWORD'),
|
||||
preferred_secure_connection_type: 'None',
|
||||
preferred_mails_from: "no-reply@#{ENV.fetch('MAIL_DOMAIN')}",
|
||||
preferred_mail_bcc: '',
|
||||
preferred_intercept_email: ''
|
||||
).call
|
||||
end
|
||||
|
||||
create_mail_method
|
||||
|
||||
@@ -58,6 +58,7 @@ module OpenFoodNetwork
|
||||
def products_bulk_edit_columns
|
||||
node = "spree.admin.products.bulk_edit.products_head"
|
||||
{
|
||||
image: { name: I18n.t("admin.image"), visible: true },
|
||||
producer: { name: I18n.t("admin.producer"), visible: true },
|
||||
sku: { name: I18n.t("admin.sku"), visible: false },
|
||||
name: { name: I18n.t("admin.name"), visible: true },
|
||||
|
||||
27
lib/open_food_network/i18n_config.rb
Normal file
27
lib/open_food_network/i18n_config.rb
Normal file
@@ -0,0 +1,27 @@
|
||||
module OpenFoodNetwork
|
||||
# Provides access to the language settings.
|
||||
# Currently, language settings are read from the environment.
|
||||
# See: config/application.yml
|
||||
class I18nConfig
|
||||
# Locales that can be selected by users.
|
||||
def self.selectable_locales
|
||||
ENV["AVAILABLE_LOCALES"].andand.split(/[\s,]+/) || []
|
||||
end
|
||||
|
||||
# All locales that can be accessed by the application, including fallbacks.
|
||||
def self.available_locales
|
||||
(selectable_locales + [default_locale, source_locale]).uniq
|
||||
end
|
||||
|
||||
# The default locale that is used when the user doesn't have a preference.
|
||||
def self.default_locale
|
||||
ENV["LOCALE"] || ENV["I18N_LOCALE"] || source_locale
|
||||
end
|
||||
|
||||
# This locale is changed with the code and should always be complete.
|
||||
# All translations are done from this locale.
|
||||
def self.source_locale
|
||||
"en"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -13,11 +13,6 @@ namespace :openfoodnetwork do
|
||||
country = Spree::Country.find_by_iso(ENV.fetch('DEFAULT_COUNTRY_CODE'))
|
||||
state = country.states.first
|
||||
|
||||
Spree::MailMethod.create!(
|
||||
environment: Rails.env,
|
||||
preferred_mails_from: spree_user.email
|
||||
)
|
||||
|
||||
# -- Shipping / payment information
|
||||
unless Spree::Zone.find_by_name 'Australia'
|
||||
puts "[#{task_name}] Seeding shipping / payment information"
|
||||
@@ -210,6 +205,5 @@ namespace :openfoodnetwork do
|
||||
|
||||
spree_user.confirm!
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
require 'spec_helper'
|
||||
|
||||
module Admin
|
||||
describe ManagerInvitationsController, type: :controller do
|
||||
let!(:existing_user) { create(:user) }
|
||||
let!(:enterprise) { create(:enterprise) }
|
||||
let(:admin) { create(:admin_user) }
|
||||
|
||||
describe "#create" do
|
||||
context "when given email matches an existing user" do
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "returns an error" do
|
||||
spree_post :create, {email: existing_user.email, enterprise_id: enterprise.id}
|
||||
|
||||
expect(response.status).to eq 422
|
||||
expect(json_response['errors']).to eq I18n.t('admin.enterprises.invite_manager.user_already_exists')
|
||||
end
|
||||
end
|
||||
|
||||
context "signing up a new user" do
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "creates a new user, sends an invitation email, and returns the user id" do
|
||||
expect do
|
||||
spree_post :create, {email: 'un.registered@email.com', enterprise_id: enterprise.id}
|
||||
end.to enqueue_job Delayed::PerformableMethod
|
||||
|
||||
new_user = Spree::User.find_by_email('un.registered@email.com')
|
||||
|
||||
expect(new_user.reset_password_token).to_not be_nil
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response['user']).to eq new_user.id
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
36
spec/controllers/api/product_images_controller_spec.rb
Normal file
36
spec/controllers/api/product_images_controller_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
require 'spec_helper'
|
||||
require 'spree/api/testing_support/helpers'
|
||||
|
||||
module Api
|
||||
describe ProductImagesController, type: :controller do
|
||||
include AuthenticationWorkflow
|
||||
render_views
|
||||
|
||||
describe "uploading an image" do
|
||||
before do
|
||||
allow(controller).to receive(:spree_current_user) { current_api_user }
|
||||
end
|
||||
|
||||
image_path = File.open(Rails.root.join('app', 'assets', 'images', 'logo-black.png'))
|
||||
let(:image) { Rack::Test::UploadedFile.new(image_path, 'image/png') }
|
||||
let!(:product_without_image) { create(:product) }
|
||||
let!(:product_with_image) { create(:product_with_image) }
|
||||
|
||||
sign_in_as_admin!
|
||||
|
||||
it "saves a new image when none is present" do
|
||||
xhr :post, :update_product_image, product_id: product_without_image.id, file: image, use_route: :product_images
|
||||
|
||||
expect(response.status).to eq 201
|
||||
expect(product_without_image.images.first.id).to eq json_response['id']
|
||||
end
|
||||
|
||||
it "updates an existing product image" do
|
||||
xhr :post, :update_product_image, product_id: product_with_image.id, file: image, use_route: :product_images
|
||||
|
||||
expect(response.status).to eq 200
|
||||
expect(product_with_image.images.first.id).to eq json_response['id']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -25,17 +25,17 @@ describe UserConfirmationsController, type: :controller do
|
||||
end
|
||||
|
||||
context "that has not been confirmed" do
|
||||
it "redirects the user to login" do
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(response).to redirect_to login_path(validation: 'confirmed')
|
||||
end
|
||||
|
||||
it "confirms the user" do
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(unconfirmed_user.reload.confirmed_at).not_to eq(nil)
|
||||
end
|
||||
|
||||
it "redirects to previous url" do
|
||||
it "redirects the user to #/login by default" do
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(response).to redirect_to login_path(validation: 'confirmed')
|
||||
end
|
||||
|
||||
it "redirects to previous url, if present" do
|
||||
session[:confirmation_return_url] = producers_path + '#/login'
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(response).to redirect_to producers_path + '#/login?validation=confirmed'
|
||||
@@ -46,6 +46,13 @@ describe UserConfirmationsController, type: :controller do
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(response).to redirect_to registration_path + '#/signup?after_login=%2Fregister&validation=confirmed'
|
||||
end
|
||||
|
||||
it "redirects to set password page, if user needs to reset their password" do
|
||||
unconfirmed_user.reset_password_token = Devise.friendly_token
|
||||
unconfirmed_user.save!
|
||||
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
|
||||
expect(response).to redirect_to spree.edit_spree_user_password_path(reset_password_token: unconfirmed_user.reset_password_token)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -31,12 +31,16 @@ describe UserPasswordsController, type: :controller do
|
||||
end
|
||||
|
||||
it "renders Darkswarm" do
|
||||
Spree::MailMethod.create!(environment: 'test')
|
||||
clear_jobs
|
||||
|
||||
user.send_reset_password_instructions
|
||||
flush_jobs # Send the reset password instructions
|
||||
|
||||
user.reload
|
||||
spree_get :edit, reset_password_token: user.reset_password_token
|
||||
response.should render_template "user_passwords/edit"
|
||||
|
||||
expect(response).to render_template "user_passwords/edit"
|
||||
end
|
||||
|
||||
describe "via ajax" do
|
||||
|
||||
@@ -425,6 +425,13 @@ FactoryGirl.define do
|
||||
stripe_user_id "abc123"
|
||||
stripe_publishable_key "xyz456"
|
||||
end
|
||||
|
||||
factory :product_with_image, parent: :product do
|
||||
after(:create) do |product|
|
||||
image = File.open(Rails.root.join('app', 'assets', 'images', 'logo-white.png'))
|
||||
Spree::Image.create(attachment: image, viewable_id: product.master.id, viewable_type: 'Spree::Variant')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -744,4 +744,79 @@ feature %q{
|
||||
expect(v.on_hand).to eq 18
|
||||
end
|
||||
end
|
||||
|
||||
describe "Updating product image with new upload interface" do
|
||||
let!(:product) { create(:simple_product, name: "Carrots") }
|
||||
|
||||
it "displays product images and image upload modal" do
|
||||
quick_login_as_admin
|
||||
visit '/admin/products/bulk_edit'
|
||||
|
||||
within "table#listing_products tr#p_#{product.id}" do
|
||||
# Displays product images
|
||||
expect(page).to have_selector "td.image"
|
||||
|
||||
# Shows default image when no image set
|
||||
expect(page).to have_css "img[src='/assets/noimage/mini.png']"
|
||||
@old_thumb_src = page.find("a.image-modal img")['src']
|
||||
|
||||
# Click image
|
||||
page.find("a.image-modal").trigger('click')
|
||||
end
|
||||
|
||||
# Shows upload modal
|
||||
expect(page).to have_selector "div.reveal-modal.product-image-upload"
|
||||
|
||||
within "div.reveal-modal.product-image-upload" do
|
||||
# Shows preview of current image
|
||||
expect(page).to have_css "img.preview"
|
||||
old_image_src = page.find("img.preview")['src']
|
||||
|
||||
# Upload a new image file
|
||||
attach_file 'image-upload', Rails.root.join("public/500.jpg"), visible: false
|
||||
|
||||
# Shows spinner whilst loading
|
||||
expect(page).to have_css "img.spinner", visible: true
|
||||
expect(page).to_not have_css "img.spinner", visible: true
|
||||
|
||||
# Shows new image when finished
|
||||
expect(page).to have_css "img.preview"
|
||||
@new_image_src = page.find("img.preview")['src']
|
||||
expect(old_image_src) != @new_image_src
|
||||
|
||||
# Close modal
|
||||
page.find("a.close-reveal-modal").click
|
||||
end
|
||||
|
||||
expect(page).to_not have_selector "div.reveal-modal.product-image-upload"
|
||||
|
||||
within "table#listing_products tr#p_#{product.id}" do
|
||||
# New thumbnail is shown in image column
|
||||
@new_thumb_src = page.find("a.image-modal img")['src']
|
||||
expect(@old_thumb_src) != @new_thumb_src
|
||||
|
||||
page.find("a.image-modal").trigger('click')
|
||||
end
|
||||
|
||||
expect(page).to have_selector "div.reveal-modal.product-image-upload"
|
||||
|
||||
within "div.reveal-modal.product-image-upload" do
|
||||
# Upload another image file
|
||||
attach_file 'image-upload', Rails.root.join("public/422.jpg"), visible: false
|
||||
|
||||
# Overwrites existing image
|
||||
expect(page).to have_css "img.preview"
|
||||
newer_image_src = page.find("img.preview")['src']
|
||||
expect(@new_image_src) != newer_image_src
|
||||
|
||||
page.find("a.close-reveal-modal").click
|
||||
end
|
||||
|
||||
within "table#listing_products tr#p_#{product.id}" do
|
||||
# Newer thumbnail is shown in image column
|
||||
newer_thumb_src = page.find("a.image-modal img")['src']
|
||||
expect(@new_thumb_src) != newer_thumb_src
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -83,6 +83,7 @@ feature %q{
|
||||
let!(:user1) { create(:user, email: 'user1@example.com') }
|
||||
let!(:user2) { create(:user, email: 'user2@example.com') }
|
||||
let!(:user3) { create(:user, email: 'user3@example.com', confirmed_at: nil) }
|
||||
let(:new_email) { 'new@manager.com' }
|
||||
|
||||
let!(:enterprise) { create(:enterprise, name: 'Test Enterprise', owner: user1) }
|
||||
let!(:enterprise_role) { create(:enterprise_role, user_id: user2.id, enterprise_id: enterprise.id) }
|
||||
@@ -114,7 +115,9 @@ feature %q{
|
||||
|
||||
# user3 has been added and has an unconfirmed email address
|
||||
expect(page).to have_css "tr#manager-#{user3.id}"
|
||||
expect(page).to have_css 'i.unconfirmed'
|
||||
within "tr#manager-#{user3.id}" do
|
||||
expect(page).to have_css 'i.unconfirmed'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -133,6 +136,29 @@ feature %q{
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "can invite unregistered users to be managers" do
|
||||
find('a.button.help-modal').click
|
||||
expect(page).to have_css '#invite-manager-modal'
|
||||
|
||||
within '#invite-manager-modal' do
|
||||
fill_in 'invite_email', with: new_email
|
||||
click_button I18n.t('js.admin.modals.invite')
|
||||
expect(page).to have_content I18n.t('user_invited', email: new_email)
|
||||
click_button I18n.t('js.admin.modals.close')
|
||||
end
|
||||
|
||||
new_user = Spree::User.find_by_email_and_confirmed_at(new_email, nil)
|
||||
expect(Enterprise.managed_by(new_user)).to include enterprise
|
||||
|
||||
within 'table.managers' do
|
||||
expect(page).to have_content new_email
|
||||
|
||||
within "tr#manager-#{new_user.id}" do
|
||||
expect(page).to have_css 'i.unconfirmed'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -184,19 +184,17 @@ feature %q{
|
||||
product.distributors.should == [@distributors[0]]
|
||||
end
|
||||
|
||||
scenario "editing product SEO" do
|
||||
scenario "editing product Search" do
|
||||
product = product = create(:simple_product, supplier: @supplier2)
|
||||
visit spree.edit_admin_product_path product
|
||||
within('#sidebar') { click_link 'SEO' }
|
||||
fill_in "product_meta_keywords", :with => 'Meta Keywords'
|
||||
fill_in 'Meta Description', :with => 'Meta Description'
|
||||
within('#sidebar') { click_link 'Search' }
|
||||
fill_in 'Product Search Keywords', :with => 'Product Search Keywords'
|
||||
fill_in 'Notes', :with => 'Just testing Notes'
|
||||
click_button 'Update'
|
||||
flash_message.should == "Product \"#{product.name}\" has been successfully updated!"
|
||||
expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
|
||||
product.reload
|
||||
product.notes.should == 'Just testing Notes'
|
||||
product.meta_keywords.should == 'Meta Keywords'
|
||||
product.meta_description.should == 'Meta Description'
|
||||
expect(product.notes).to eq('Just testing Notes')
|
||||
expect(product.meta_keywords).to eq('Product Search Keywords')
|
||||
end
|
||||
|
||||
scenario "deleting product properties", js: true do
|
||||
|
||||
@@ -71,11 +71,10 @@ feature 'Multilingual', js: true do
|
||||
|
||||
describe "using the language switcher UI" do
|
||||
context "when there is only one language available" do
|
||||
around do |example|
|
||||
available_locales = I18n.available_locales
|
||||
I18n.available_locales = ['en']
|
||||
example.run
|
||||
I18n.available_locales = available_locales
|
||||
before do
|
||||
allow(ENV).to receive(:[]).and_call_original
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en")
|
||||
end
|
||||
|
||||
it "hides the dropdown language menu" do
|
||||
@@ -84,21 +83,29 @@ feature 'Multilingual', js: true do
|
||||
end
|
||||
end
|
||||
|
||||
it "allows switching language via the main navigation" do
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content 'SHOPS'
|
||||
|
||||
find('ul.right li.language-switcher').click
|
||||
within'ul.right li.language-switcher ul.dropdown' do
|
||||
expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en'
|
||||
expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), href: '?locale=es'
|
||||
|
||||
find('li a[href="?locale=es"]').click
|
||||
context "when there are multiple languages available" do
|
||||
before do
|
||||
allow(ENV).to receive(:[]).and_call_original
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en,es")
|
||||
end
|
||||
|
||||
expect(page.driver.browser.cookies['locale'].value).to eq 'es'
|
||||
expect(page).to have_content 'TIENDAS'
|
||||
it "allows switching language via the main navigation" do
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content 'SHOPS'
|
||||
|
||||
find('ul.right li.language-switcher').click
|
||||
within'ul.right li.language-switcher ul.dropdown' do
|
||||
expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en'
|
||||
expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), href: '?locale=es'
|
||||
|
||||
find('li a[href="?locale=es"]').click
|
||||
end
|
||||
|
||||
expect(page.driver.browser.cookies['locale'].value).to eq 'es'
|
||||
expect(page).to have_content 'TIENDAS'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,7 +28,7 @@ feature "full-page cart", js: true do
|
||||
end
|
||||
end
|
||||
|
||||
describe "fees" do
|
||||
describe "percentage fees" do
|
||||
let(:percentage_fee) { create(:enterprise_fee, calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 20)) }
|
||||
|
||||
before do
|
||||
@@ -47,6 +47,42 @@ feature "full-page cart", js: true do
|
||||
end
|
||||
end
|
||||
|
||||
describe "admin and handling flat fees" do
|
||||
context 'when there are fees' do
|
||||
let(:handling_fee) { create(:enterprise_fee, calculator: Spree::Calculator::FlatRate.new(preferred_amount: 1),
|
||||
enterprise: order_cycle.coordinator, fee_type: 'admin') }
|
||||
|
||||
before do
|
||||
add_enterprise_fee handling_fee
|
||||
add_product_to_cart order, product_fee, quantity: 3
|
||||
visit spree.cart_path
|
||||
end
|
||||
|
||||
it 'shows admin and handlings row' do
|
||||
expect(page).to have_selector('#cart-detail')
|
||||
expect(page).to have_content('Admin & Handling')
|
||||
expect(page).to have_selector '.cart-item-price', text: with_currency(0.86)
|
||||
expect(page).to have_selector '.order-total.item-total', text: with_currency(2.58)
|
||||
expect(page).to have_selector '.order-total.distribution-total', text: with_currency(1.00)
|
||||
expect(page).to have_selector '.order-total.grand-total', text: with_currency(3.58) # price * 3 + 1
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there are no admin and handling fees' do
|
||||
before do
|
||||
add_product_to_cart order, product_fee, quantity: 2
|
||||
visit spree.cart_path
|
||||
end
|
||||
|
||||
it 'hides admin and handlings row' do
|
||||
expect(page).to have_selector('#cart-detail')
|
||||
expect(page).to_not have_content('Admin & Handling')
|
||||
expect(page).to have_selector '.cart-item-price', text: with_currency(0.86)
|
||||
expect(page).to have_selector '.order-total.grand-total', text: with_currency(1.72) # price * 3
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "tax" do
|
||||
before do
|
||||
add_enterprise_fee enterprise_fee
|
||||
|
||||
@@ -12,7 +12,7 @@ feature "As a consumer I want to shop with a distributor", js: true do
|
||||
let(:supplier) { create(:supplier_enterprise) }
|
||||
let(:oc1) { create(:simple_order_cycle, distributors: [distributor], coordinator: create(:distributor_enterprise), orders_close_at: 2.days.from_now) }
|
||||
let(:oc2) { create(:simple_order_cycle, distributors: [distributor], coordinator: create(:distributor_enterprise), orders_close_at: 3.days.from_now) }
|
||||
let(:product) { create(:simple_product, supplier: supplier) }
|
||||
let(:product) { create(:simple_product, supplier: supplier, meta_keywords: "Domestic") }
|
||||
let(:variant) { product.variants.first }
|
||||
let(:order) { create(:order, distributor: distributor) }
|
||||
|
||||
@@ -169,7 +169,7 @@ feature "As a consumer I want to shop with a distributor", js: true do
|
||||
describe "after selecting an order cycle with products visible" do
|
||||
let(:variant1) { create(:variant, product: product, price: 20) }
|
||||
let(:variant2) { create(:variant, product: product, price: 30, display_name: "Badgers") }
|
||||
let(:product2) { create(:simple_product, supplier: supplier, name: "Meercats") }
|
||||
let(:product2) { create(:simple_product, supplier: supplier, name: "Meercats", meta_keywords: "Wild") }
|
||||
let(:variant3) { create(:variant, product: product2, price: 40, display_name: "Ferrets") }
|
||||
let(:exchange) { Exchange.find(oc1.exchanges.to_enterprises(distributor).outgoing.first.id) }
|
||||
|
||||
@@ -212,6 +212,10 @@ feature "As a consumer I want to shop with a distributor", js: true do
|
||||
fill_in "search", with: "Meer" # For product named "Meercats"
|
||||
page.should have_content product2.name
|
||||
page.should_not have_content product.name
|
||||
|
||||
fill_in "search", with: "Dome" # For product with meta_keywords "Domestic"
|
||||
expect(page).to have_content product.name
|
||||
expect(page).not_to have_content product2.name
|
||||
end
|
||||
|
||||
it "returns search results for products where the search term matches one of the product's variant names" do
|
||||
|
||||
@@ -10,9 +10,10 @@ describe "CustomersCtrl", ->
|
||||
null
|
||||
|
||||
shops = [
|
||||
{ name: "Shop 1", id: 1 }
|
||||
{ name: "Shop 2", id: 2 }
|
||||
{ name: "Shop 3", id: 3 }
|
||||
{ name: "Shop 1", id: 1 },
|
||||
{ name: "Shop 2", id: 12 },
|
||||
{ name: "Shop 3", id: 2 },
|
||||
{ name: "Shop 4", id: 3 }
|
||||
]
|
||||
|
||||
availableCountries = [
|
||||
@@ -39,9 +40,9 @@ describe "CustomersCtrl", ->
|
||||
beforeEach inject (pendingChanges) ->
|
||||
spyOn(pendingChanges, "removeAll")
|
||||
scope.customers_form = jasmine.createSpyObj('customers_form', ['$setPristine'])
|
||||
http.expectGET('/admin/customers.json?enterprise_id=3').respond 200, customers
|
||||
http.expectGET('/admin/customers.json?enterprise_id=2').respond 200, customers
|
||||
scope.$apply ->
|
||||
scope.shop_id = 3
|
||||
scope.shop_id = "2"
|
||||
http.flush()
|
||||
|
||||
it "sets the CurrentShop", inject (CurrentShop) ->
|
||||
@@ -81,7 +82,7 @@ describe "CustomersCtrl", ->
|
||||
{ text: 'three' }
|
||||
]
|
||||
beforeEach ->
|
||||
http.expectGET('/admin/tag_rules/map_by_tag.json?enterprise_id=3').respond 200, tags
|
||||
http.expectGET('/admin/tag_rules/map_by_tag.json?enterprise_id=2').respond 200, tags
|
||||
|
||||
it "retrieves the tag list", ->
|
||||
promise = scope.findTags('')
|
||||
|
||||
92
spec/lib/open_food_network/i18n_config_spec.rb
Normal file
92
spec/lib/open_food_network/i18n_config_spec.rb
Normal file
@@ -0,0 +1,92 @@
|
||||
require 'spec_helper'
|
||||
require 'open_food_network/i18n_config'
|
||||
|
||||
module OpenFoodNetwork
|
||||
describe I18nConfig do
|
||||
context "in default test configuration" do
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en,es")
|
||||
end
|
||||
|
||||
it "provides the source locale" do
|
||||
expect(I18nConfig.source_locale).to eq "en"
|
||||
end
|
||||
|
||||
it "provides the default locale" do
|
||||
expect(I18nConfig.default_locale).to eq "en"
|
||||
end
|
||||
|
||||
it "provides the default selectable locales" do
|
||||
expect(I18nConfig.selectable_locales).to eq ["en", "es"]
|
||||
end
|
||||
|
||||
it "provides the default available locales" do
|
||||
expect(I18nConfig.available_locales).to eq ["en", "es"]
|
||||
end
|
||||
end
|
||||
|
||||
context "without configuration" do
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return(nil)
|
||||
allow(ENV).to receive(:[]).with("I18N_LOCALE").and_return(nil)
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return(nil)
|
||||
end
|
||||
|
||||
it "provides the source locale" do
|
||||
expect(I18nConfig.source_locale).to eq "en"
|
||||
end
|
||||
|
||||
it "provides the default locale" do
|
||||
expect(I18nConfig.default_locale).to eq "en"
|
||||
end
|
||||
|
||||
it "provides the default selectable locales" do
|
||||
expect(I18nConfig.selectable_locales).to eq []
|
||||
end
|
||||
|
||||
it "provides the default available locales" do
|
||||
expect(I18nConfig.available_locales).to eq ["en"]
|
||||
end
|
||||
end
|
||||
|
||||
context "with UK configuration" do
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return("en_GB")
|
||||
allow(ENV).to receive(:[]).with("I18N_LOCALE").and_return(nil)
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en_GB")
|
||||
end
|
||||
|
||||
it "provides the source locale" do
|
||||
expect(I18nConfig.source_locale).to eq "en"
|
||||
end
|
||||
|
||||
it "provides the default locale" do
|
||||
expect(I18nConfig.default_locale).to eq "en_GB"
|
||||
end
|
||||
|
||||
it "provides the default selectable locales" do
|
||||
expect(I18nConfig.selectable_locales).to eq ["en_GB"]
|
||||
end
|
||||
|
||||
it "provides the default available locales" do
|
||||
expect(I18nConfig.available_locales).to eq ["en_GB", "en"]
|
||||
end
|
||||
end
|
||||
|
||||
context "with human syntax" do
|
||||
before do
|
||||
allow(ENV).to receive(:[]).with("LOCALE").and_return("es")
|
||||
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("es, fr ,, ,de")
|
||||
end
|
||||
|
||||
it "provides the default selectable locales" do
|
||||
expect(I18nConfig.selectable_locales).to eq ["es", "fr", "de"]
|
||||
end
|
||||
|
||||
it "provides the default available locales" do
|
||||
expect(I18nConfig.available_locales).to eq ["es", "fr", "de", "en"]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2,15 +2,29 @@ require 'spec_helper'
|
||||
|
||||
describe EnterpriseMailer do
|
||||
let!(:enterprise) { create(:enterprise) }
|
||||
let!(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
ActionMailer::Base.deliveries = []
|
||||
Spree::MailMethod.create!(environment: 'test')
|
||||
end
|
||||
|
||||
it "should send a welcome email when given an enterprise" do
|
||||
describe "#welcome" do
|
||||
it "sends a welcome email when given an enterprise" do
|
||||
EnterpriseMailer.welcome(enterprise).deliver
|
||||
ActionMailer::Base.deliveries.count.should == 1
|
||||
|
||||
mail = ActionMailer::Base.deliveries.first
|
||||
expect(mail.subject).to eq "#{enterprise.name} is now on #{Spree::Config[:site_name]}"
|
||||
expect(mail.subject)
|
||||
.to eq "#{enterprise.name} is now on #{Spree::Config[:site_name]}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "#manager_invitation" do
|
||||
it "should send a manager invitation email when given an enterprise and user" do
|
||||
EnterpriseMailer.manager_invitation(enterprise, user).deliver
|
||||
expect(ActionMailer::Base.deliveries.count).to eq 1
|
||||
mail = ActionMailer::Base.deliveries.first
|
||||
expect(mail.subject).to eq "#{enterprise.name} has invited you to be a manager"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,11 +16,11 @@ describe ProducerMailer do
|
||||
let(:s3) { create(:supplier_enterprise) }
|
||||
let(:d1) { create(:distributor_enterprise, charges_sales_tax: true) }
|
||||
let(:d2) { create(:distributor_enterprise) }
|
||||
let(:p1) { create(:product, price: 12.34, supplier: s1, tax_category: tax_category) }
|
||||
let(:p2) { create(:product, price: 23.45, supplier: s2) }
|
||||
let(:p3) { create(:product, price: 34.56, supplier: s1) }
|
||||
let(:p4) { create(:product, price: 45.67, supplier: s1) }
|
||||
let(:p5) { create(:product, price: 56.78, supplier: s1) }
|
||||
let(:p1) { create(:product, name: "Zebra", price: 12.34, supplier: s1, tax_category: tax_category) }
|
||||
let(:p2) { create(:product, name: "Aardvark", price: 23.45, supplier: s2) }
|
||||
let(:p3) { create(:product, name: "Banana", price: 34.56, supplier: s1) }
|
||||
let(:p4) { create(:product, name: "coffee", price: 45.67, supplier: s1) }
|
||||
let(:p5) { create(:product, name: "Daffodil", price: 56.78, supplier: s1) }
|
||||
let(:order_cycle) { create(:simple_order_cycle) }
|
||||
let!(:incoming_exchange) { order_cycle.exchanges.create! sender: s1, receiver: d1, incoming: true, receival_instructions: 'Outside shed.' }
|
||||
|
||||
@@ -71,7 +71,8 @@ describe ProducerMailer do
|
||||
expect(mail.cc).to eq [order_cycle.coordinator.contact.email]
|
||||
end
|
||||
|
||||
it "contains an aggregated list of produce" do
|
||||
it "contains an aggregated list of produce in alphabetical order" do
|
||||
expect(mail.body.encoded).to match(/coffee.+\n.+Zebra/)
|
||||
body_lines_including(mail, p1.name).each do |line|
|
||||
line.should include 'QTY: 3'
|
||||
line.should include '@ $10.00 = $30.00'
|
||||
@@ -80,6 +81,7 @@ describe ProducerMailer do
|
||||
.should have_selector("td", text: "$30.00")
|
||||
end
|
||||
|
||||
|
||||
it "displays tax totals for each product" do
|
||||
# Tax for p1 line items
|
||||
body_as_html(mail).find("table.order-summary tr", text: p1.name)
|
||||
|
||||
@@ -11,6 +11,8 @@ describe Spree::UserMailer do
|
||||
ActionMailer::Base.delivery_method = :test
|
||||
ActionMailer::Base.perform_deliveries = true
|
||||
ActionMailer::Base.deliveries = []
|
||||
|
||||
Spree::MailMethod.create!(environment: 'test')
|
||||
end
|
||||
|
||||
it "sends an email when given a user" do
|
||||
|
||||
@@ -14,6 +14,20 @@ module Spree
|
||||
let(:li1) { create(:line_item, order: o, product: p1) }
|
||||
let(:li2) { create(:line_item, order: o, product: p2) }
|
||||
|
||||
|
||||
let(:p3) {create(:product, name: 'Clear Honey') }
|
||||
let(:p4) {create(:product, name: 'Apricots') }
|
||||
let(:v1) {create(:variant, product: p3, unit_value: 500) }
|
||||
let(:v2) {create(:variant, product: p3, unit_value: 250) }
|
||||
let(:v3) {create(:variant, product: p4, unit_value: 500, display_name: "ZZ") }
|
||||
let(:v4) {create(:variant, product: p4, unit_value: 500, display_name: "aa") }
|
||||
let(:li3) { create(:line_item, order: o, product: p3, variant: v1) }
|
||||
let(:li4) { create(:line_item, order: o, product: p3, variant: v2) }
|
||||
let(:li5) { create(:line_item, order: o, product: p4, variant: v3) }
|
||||
let(:li6) { create(:line_item, order: o, product: p4, variant: v4) }
|
||||
|
||||
let(:oc_order) { create :order_with_totals_and_distribution }
|
||||
|
||||
it "finds line items for products supplied by a particular enterprise" do
|
||||
LineItem.supplied_by(s1).should == [li1]
|
||||
LineItem.supplied_by(s2).should == [li2]
|
||||
@@ -40,6 +54,14 @@ module Spree
|
||||
LineItem.without_tax.should == [li2]
|
||||
end
|
||||
end
|
||||
|
||||
it "finds line items sorted by name and unit_value" do
|
||||
expect(o.line_items.sorted_by_name_and_unit_value).to eq([li6,li5,li4,li3])
|
||||
end
|
||||
|
||||
it "finds line items from a given order cycle" do
|
||||
expect(LineItem.from_order_cycle(oc_order.order_cycle).first.id).to eq oc_order.line_items.first.id
|
||||
end
|
||||
end
|
||||
|
||||
describe "capping quantity at stock level" do
|
||||
|
||||
49
spec/services/create_mail_method_spec.rb
Normal file
49
spec/services/create_mail_method_spec.rb
Normal file
@@ -0,0 +1,49 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe CreateMailMethod do
|
||||
describe '#call' do
|
||||
let(:mail_method) { Spree::MailMethod.create(environment: 'test') }
|
||||
let(:mail_settings) { instance_double(Spree::Core::MailSettings) }
|
||||
let(:attributes) do
|
||||
{ preferred_smtp_username: "smtp_username", environment: "test" }
|
||||
end
|
||||
|
||||
before do
|
||||
allow(Spree::MailMethod)
|
||||
.to receive(:create).with(environment: 'test').and_return(mail_method)
|
||||
allow(Spree::Core::MailSettings).to receive(:init) { mail_settings }
|
||||
end
|
||||
|
||||
context 'unit' do
|
||||
before do
|
||||
allow(mail_method).to receive(:update_attributes).with(attributes)
|
||||
end
|
||||
|
||||
it 'creates a new MailMethod' do
|
||||
described_class.new(attributes).call
|
||||
|
||||
expect(Spree::MailMethod)
|
||||
.to have_received(:create).with(environment: 'test') { mail_method }
|
||||
end
|
||||
|
||||
it 'updates the MailMethod' do
|
||||
described_class.new(attributes).call
|
||||
|
||||
expect(mail_method)
|
||||
.to have_received(:update_attributes).with(attributes) { mail_method }
|
||||
end
|
||||
|
||||
it 'initializes the mail settings' do
|
||||
described_class.new(attributes).call
|
||||
expect(Spree::Core::MailSettings).to have_received(:init)
|
||||
end
|
||||
end
|
||||
|
||||
context 'integration' do
|
||||
it 'updates the mail method attributes' do
|
||||
described_class.new(attributes).call
|
||||
expect(mail_method.preferred_smtp_username).to eq('smtp_username')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user