1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-17 11:54:22 +01:00

Merge branch 'dev' for release 6.0.2

This commit is contained in:
Sylvain 2023-04-05 11:35:10 +02:00
commit cf026ef5b3
40 changed files with 1443 additions and 931 deletions

View File

@ -1,5 +1,16 @@
# Changelog Fab-manager
## v6.0.2 2023 April 05
- Italian language support (credits to https://crowdin.com/profile/olazzari)
- Improved error message on payzen misconfigured currency
- Improved reporting error messages in UI, from ruby exceptions
- Fix a bug: unable to subscribe with a payment schedule using PayZen
- Fix a bug: unable to list supporting documents types for a deleted group
- Fix a bug: notification is broken when updating payzen currency
- Fix a bug: broken notifications
- Fix a bug: unable to bulk update settings
## v6.0.1 2023 April 03
- Fix a bug: unable to write the configuration of the auth provider

View File

@ -0,0 +1,5 @@
# frozen_string_literal: true
# Raised when Fab-manager is misconfigured
class ConfigurationError < StandardError
end

View File

@ -27,19 +27,22 @@ client.interceptors.response.use(function (response) {
function extractHumanReadableMessage (error: string|Error): string {
if (typeof error === 'string') {
if (error.match(/^<!DOCTYPE html>/)) {
// parse ruby error pages
// parse ruby error pages (when an unhandled exception is raised)
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(error, 'text/html');
if (htmlDoc.querySelectorAll('h2').length > 2) {
return htmlDoc.querySelector('h2').textContent;
} else {
if (htmlDoc.querySelector('.exception-message .message')) {
return htmlDoc.querySelector('.exception-message .message').textContent;
}
return htmlDoc.querySelector('h1').textContent;
}
}
return error;
}
// parse Rails errors (as JSON) or API errors
// parse Rails errors (as JSON) or API errors (i.e. the API returns a JSON like {error: ...})
let message = '';
if (error instanceof Object) {
// API errors

View File

@ -549,7 +549,7 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I
* Callback triggered when the PayZen currency was successfully updated
*/
$scope.alertPayZenCurrencyUpdated = function (currency) {
growl.success(_t('app.admin.invoices.payment.payzen.currency_updated', { CURRENCY: currency }));
growl.success(_t('app.admin.invoices.payment.payzen_settings.currency_updated', { CURRENCY: currency }));
};
/**

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -4,7 +4,9 @@
class SupportingDocumentTypeService
def self.list(filters = {})
if filters[:group_id].present?
group = Group.find(filters[:group_id])
group = Group.find_by(id: filters[:group_id])
return nil if group.nil?
group.supporting_document_types.includes(:groups)
else
SupportingDocumentType.all

View File

@ -1,4 +1,4 @@
# frozen_string_literal: true
json.title notification.notification_type
json.description t('.order_paid_html', { ID: notification.attached_object.order_id })
json.description t('.order_paid_html', ID: notification.attached_object.order_id)

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
json.title notification.notification_type
json.description "#{t('.auto_cancelled_training', {
json.description "#{t('.auto_cancelled_training', **{
TRAINING: notification.attached_object.trainings.first.name,
DATE: I18n.l(notification.attached_object.start_at.to_date)
})} #{notification.meta_data['auto_refund'] ? t('.auto_refund') : t('.manual_refund')}"

View File

@ -1,4 +1,4 @@
# frozen_string_literal: true
json.title notification.notification_type
json.description t('.training_authorization_revoked', { MACHINES: notification.attached_object.machines.map(&:name).join(', ') })
json.description t('.training_authorization_revoked', **{ MACHINES: notification.attached_object.machines.map(&:name).join(', ') })

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
json.title notification.notification_type
json.description "#{t('.auto_cancelled_training', {
json.description "#{t('.auto_cancelled_training', **{
TRAINING: notification.attached_object.reservation.reservable.name,
DATE: I18n.l(notification.attached_object.slot.start_at.to_date)
})} #{notification.meta_data['auto_refund'] ? t('.auto_refund') : ''}"

View File

@ -1,4 +1,4 @@
# frozen_string_literal: true
json.title notification.notification_type
json.description t('.invalidated', { MACHINES: notification.attached_object.machines.map(&:name).join(', ') })
json.description t('.invalidated', **{ MACHINES: notification.attached_object.machines.map(&:name).join(', ') })

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
json.settings @settings.each do |setting|
if setting.errors.keys.count.positive?
if setting.errors.count.positive?
json.error setting.errors.full_messages
json.id setting.id
json.name setting.name

View File

@ -30,7 +30,6 @@ class FabManager::Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
config.active_support.cache_format_version = 6.1
config.action_dispatch.cookies_serializer = :hybrid
config.active_record.verify_foreign_keys_for_fixtures = false
# prevent this new behavior with rails >= 5.0
# see https://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#active-record-belongs-to-required-by-default-option

View File

@ -7,6 +7,7 @@ I18n.config.available_locales += %i[de de-AT de-CH de-DE
es es-419 es-AR es-CL es-CO es-CR es-DO es-EC es-ES es-MX es-PA es-PE es-US es-VE
no
pt pt-BR
it it-CH
zu]
# we allow the Zulu locale (zu) as it is used for In-Context translation
# @see https://support.crowdin.com/in-context-localization/

View File

@ -2,81 +2,81 @@ it:
app:
admin:
edit_destroy_buttons:
deleted: "Successfully deleted."
unable_to_delete: "Unable to delete: "
delete_item: "Delete the {TYPE}"
confirm_delete: "Delete"
delete_confirmation: "Are you sure you want to delete this {TYPE}?"
deleted: "Eliminato con successo."
unable_to_delete: "Impossibile eliminare: "
delete_item: "Elimina il {TYPE}"
confirm_delete: "Elimina"
delete_confirmation: "Sei sicuro di voler eliminare questo {TYPE}?"
machines:
the_fablab_s_machines: "The FabLab's machines"
all_machines: "All machines"
add_a_machine: "Add a new machine"
manage_machines_categories: "Manage machines categories"
machines_settings: "Settings"
the_fablab_s_machines: "Le macchine del FabLab"
all_machines: "Tutte le macchine"
add_a_machine: "Aggiungi una nuova macchina"
manage_machines_categories: "Gestisci categorie macchine"
machines_settings: "Impostazioni"
machines_settings:
title: "Settings"
generic_text_block: "Editorial text block"
generic_text_block_info: "Displays an editorial block above the list of machines visible to members."
generic_text_block_switch: "Display editorial block"
cta_switch: "Display a button"
cta_label: "Button label"
title: "Impostazioni"
generic_text_block: "Casella di testo"
generic_text_block_info: "Visualizza un blocco di testo sopra l'elenco delle macchine visibili ai membri."
generic_text_block_switch: "Visualizza blocco editoriale"
cta_switch: "Mostra un pulsante"
cta_label: "Etichetta pulsante"
cta_url: "url"
save: "Save"
successfully_saved: "Your banner was successfully saved."
save: "Salva"
successfully_saved: "Il tuo banner è stato salvato correttamente."
machine_categories_list:
machine_categories: "Machines categories"
add_a_machine_category: "Add a machine category"
name: "Name"
machines_number: "Number of machines"
machine_category: "Machine category"
machine_categories: "Categorie macchine"
add_a_machine_category: "Aggiungi una categoria macchina"
name: "Nome"
machines_number: "Numero di macchine"
machine_category: "Categoria macchina"
machine_category_modal:
new_machine_category: "New category"
edit_machine_category: "Edit category"
successfully_created: "The new machine category has been successfully created."
unable_to_create: "Unable to delete the machine category: "
successfully_updated: "The machine category has been successfully updated."
unable_to_update: "Unable to modify the machine category: "
new_machine_category: "Nuova categoria"
edit_machine_category: "Modifica categoria"
successfully_created: "La nuova categoria di macchine è stata creata con successo."
unable_to_create: "Impossibile eliminare la categoria della macchina: "
successfully_updated: "La categoria macchina è stata aggiornata con successo."
unable_to_update: "Impossibile modificare la categoria della macchina: "
machine_category_form:
name: "Name of category"
assigning_machines: "Assign machines to this category"
save: "Save"
name: "Nome della categoria"
assigning_machines: "Assegna macchine a questa categoria"
save: "Salva"
machine_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} machine"
watch_out_when_creating_a_new_machine_its_prices_are_initialized_at_0_for_all_subscriptions: "Watch out! When creating a new machine, its prices are initialized at 0 for all subscriptions."
consider_changing_them_before_creating_any_reservation_slot: "Consider changing them before creating any reservation slot."
description: "Description"
name: "Name"
illustration: "Visual"
technical_specifications: "Technical specifications"
category: "Category"
attachments: "Attachments"
attached_files_pdf: "Attached files (pdf)"
add_an_attachment: "Add an attachment"
settings: "Settings"
disable_machine: "Disable machine"
disabled_help: "When disabled, the machine won't be reservable and won't appear by default in the machines list."
reservable: "Can this machine be reserved?"
reservable_help: "When disabled, the machine will be shown in the default list of machines, but without the reservation button. If you already have created some availability slots for this machine, you may want to remove them: do it from the admin agenda."
save: "Save"
create_success: "The machine was created successfully"
update_success: "The machine was updated successfully"
ACTION_title: "{ACTION, select, create{Nuova} other{Aggiorna la}} macchina"
watch_out_when_creating_a_new_machine_its_prices_are_initialized_at_0_for_all_subscriptions: "Attenzione! Quando si crea una nuova macchina, i prezzi sono impostati a 0 per tutti gli abbonamenti."
consider_changing_them_before_creating_any_reservation_slot: "Considera di cambiarli prima di creare qualsiasi slot di prenotazione."
description: "Descrizione"
name: "Nome"
illustration: "Illustrazione"
technical_specifications: "Specifiche tecniche"
category: "Categoria"
attachments: "Allegati"
attached_files_pdf: "File allegati (pdf)"
add_an_attachment: "Aggiungi un allegato"
settings: "Impostazioni"
disable_machine: "Disabilita macchina"
disabled_help: "Se disabilitata, la macchina non sarà prenotabile e non apparirà di default nell'elenco macchine."
reservable: "Questa macchina può essere prenotata?"
reservable_help: "Se disabilitata, la macchina verrà visualizzata nella lista predefinita delle macchine, ma senza il pulsante di prenotazione. Se hai già creato alcuni slot di disponibilità per questa macchina, potresti volerli rimuovere: fallo dall'agenda dell'amministratore."
save: "Salva"
create_success: "La macchina è stata creata con successo"
update_success: "La macchina è stata aggiornata correttamente"
training_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} training"
beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Beware, when creating a training, its reservation prices are initialized at zero."
dont_forget_to_change_them_before_creating_slots_for_this_training: "Don't forget to change them before creating slots for this training."
description: "Description"
name: "Name"
illustration: "Illustration"
add_a_new_training: "Add a new training"
validate_your_training: "Validate your training"
settings: "Settings"
associated_machines: "Associated machines"
associated_machines_help: "If you associate a machine to this training, the members will need to successfully pass this training before being able to reserve the machine."
default_seats: "Default number of seats"
public_page: "Show in training lists"
public_help: "When unchecked, this option will prevent the training from appearing in the trainings list."
disable_training: "Disable the training"
disabled_help: "When disabled, the training won't be reservable and won't appear by default in the trainings list."
ACTION_title: "{ACTION, select, create{Nuovo} other{Aggiorna il}} corso di addestramento"
beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Attenzione, quando si crea un addestramento, i suoi prezzi di prenotazione sono inizializzati a zero."
dont_forget_to_change_them_before_creating_slots_for_this_training: "Non dimenticare di cambiarli prima di creare slot per questo addestramento."
description: "Descrizione"
name: "Nome"
illustration: "Illustrazione"
add_a_new_training: "Aggiungi un nuovo addestramento"
validate_your_training: "Convalida il tuo addestramento"
settings: "Impostazioni"
associated_machines: "Macchine associate"
associated_machines_help: "Se si associa una macchina a questo addestramento, i membri dovranno superare con successo questo addestramento prima di essere in grado di prenotare la macchina."
default_seats: "Numero predefinito di posti"
public_page: "Mostra nelle liste di addestramento"
public_help: "Se deselezionata, questa opzione impedirà all'addestramento di comparire nella omonima lista."
disable_training: "Disabilita l'addestramento"
disabled_help: "Quando disabilitato, l'addestramento non sarà prenotabile e non apparirà di default nella relativa lista."
automatic_cancellation: "Automatic cancellation"
automatic_cancellation_info: "If you edit specific conditions here, the general cancellation conditions will no longer be taken into account. You will be notified if a session is cancelled. Credit notes and refunds will be automatic if the wallet is enabled. Otherwise you will have to do it manually."
automatic_cancellation_switch: "Activate automatic cancellation for this training"
@ -284,14 +284,14 @@ it:
machine_edit: "Edit a machine"
#manage the trainings & machines slots
calendar:
calendar_management: "Calendar management"
trainings: "Trainings"
machines: "Machines"
spaces: "Spaces"
events: "Events"
availabilities: "Availabilities"
availabilities_notice: "Export to an Excel workbook every slots available for reservation, and their occupancy rate."
select_a_slot: "Please select a slot"
calendar_management: "Gestione calendario"
trainings: "Certificazioni"
machines: "Macchine"
spaces: "Spazi"
events: "Eventi"
availabilities: "Disponibilità"
availabilities_notice: "Esporta in una foglio di calcolo ogni slot disponibile per la prenotazione, e il loro tasso di occupazione."
select_a_slot: "Seleziona uno slot"
info: "Info"
tags: "Tags"
slot_duration: "Slot duration: {DURATION} minutes"
@ -372,13 +372,13 @@ it:
delete_this_slot: "Only this slot"
delete_this_and_next: "This slot and the following"
delete_all: "All slots"
event_in_the_past: "Create a slot in the past"
confirm_create_event_in_the_past: "You are about to create a slot in the past. Are you sure you want to do this? Members will not be able to book this slot."
event_in_the_past: "Crea uno slot nel passato"
confirm_create_event_in_the_past: "Stai per creare uno slot nel passato. Sei sicuro di voler farlo? I membri non saranno in grado di prenotare questo slot."
edit_event: "Edit the event"
view_reservations: "View reservations"
legend: "Legend"
legend: "Legenda"
and: "and"
external_sync: "Calendar synchronization"
external_sync: "Sincronizzazione del calendario"
divide_this_availability: "Divide this availability in"
slots: "slots"
slots_of: "of"
@ -633,31 +633,31 @@ it:
update_success: "The events settings were successfully updated"
#subscriptions, prices, credits and coupons management
pricing:
pricing_management: "Pricing management"
subscriptions: "Subscriptions"
trainings: "Trainings"
list_of_the_subscription_plans: "List of the subscription plans"
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
add_a_new_subscription_plan: "Add a new subscription plan"
name: "Name"
duration: "Duration"
group: "Group"
category: "Category"
prominence: "Prominence"
price: "Price"
machine_hours: "Machine slots"
pricing_management: "Gestione listino prezzi"
subscriptions: "Abbonamenti"
trainings: "Abilitazioni"
list_of_the_subscription_plans: "Elenco dei piani di abbonamento"
disabled_plans_info_html: "<p><strong>Attenzione:</strong> gli abbonamenti sono disabilitati su questa applicazione.</p><p>Puoi ancora crearne alcuni, ma non saranno disponibili fino all'attivazione del modulo dei piani, dalla sezione «Personalizzazione».</p>"
add_a_new_subscription_plan: "Aggiungi un nuovo piano abbonamenti"
name: "Nome"
duration: "Durata"
group: "Gruppo"
category: "Categoria"
prominence: "Importanza"
price: "Prezzo"
machine_hours: "Slot macchina"
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly."
machines: "Machines"
credits: "Credits"
subscription: "Subscription"
related_trainings: "Related trainings"
add_a_machine_credit: "Add a machine credit"
machine: "Machine"
hours: "Slots (default {DURATION} minutes)"
related_subscriptions: "Related subscriptions"
machines: "Macchine"
credits: "Crediti"
subscription: "Abbonamento"
related_trainings: "Certificazione abbinata"
add_a_machine_credit: "Aggiungi un credito macchina"
machine: "Macchina"
hours: "Slot (predefinito {DURATION} minuti)"
related_subscriptions: "Abbonamenti correlati"
please_specify_a_number: "Please specify a number."
none: "None" #grammar concordance with training.
none: "Nessuno" #grammar concordance with training.
an_error_occurred_while_saving_the_number_of_credits: "An error occurred while saving the number of credits."
an_error_occurred_while_deleting_credit_with_the_TRAINING: "An error occurred while deleting credit with the {TRAINING}."
an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred: unable to find the credit to revoke."
@ -670,18 +670,18 @@ it:
do_you_really_want_to_delete_this_subscription_plan: "Do you really want to delete this subscription plan?"
subscription_plan_was_successfully_deleted: "Subscription plan was successfully deleted."
unable_to_delete_the_specified_subscription_an_error_occurred: "Unable to delete the specified subscription, an error occurred."
coupons: "Coupons"
list_of_the_coupons: "List of the coupons"
discount: "Discount"
nb_of_usages: "Number of usages"
status: "Status"
add_a_new_coupon: "Add a new coupon"
display_more_coupons: "Display the next coupons"
disabled: "Disabled"
expired: "Expired"
sold_out: "Sold out"
active: "Active"
all: "Display all"
coupons: "Buoni acquisto"
list_of_the_coupons: "Elenco dei buoni"
discount: "Sconto"
nb_of_usages: "Numero di utilizzi"
status: "Stato"
add_a_new_coupon: "Aggiungi un nuovo buono"
display_more_coupons: "Mostra i successivi buoni"
disabled: "Disattivati"
expired: "Scaduti"
sold_out: "Esauriti"
active: "Attivi"
all: "Mostra tutti"
confirmation_required: "Confirmation required"
do_you_really_want_to_delete_this_coupon: "Do you really want to delete this coupon?"
coupon_was_successfully_deleted: "Coupon was successfully deleted."
@ -699,31 +699,31 @@ it:
once: "Just once"
forever: "Each use"
valid_until: "Valid until (included)"
spaces: "Spaces"
spaces: "Spazi"
these_prices_match_space_hours_rates_html: "The prices below match one hour of space usage, <strong>without subscription</strong>."
add_a_space_credit: "Add a Space credit"
space: "Space"
add_a_space_credit: "Aggiungi un credito spazio"
space: "Spazio"
error_a_credit_linking_this_space_with_that_subscription_already_exists: "Error: a credit linking this space with that subscription already exists."
status_enabled: "Enabled"
status_disabled: "Disabled"
status_all: "All"
status_enabled: "Disponibili"
status_disabled: "Disabilitati"
status_all: "Tutti"
spaces_pricing:
prices_match_space_hours_rates_html: "The prices below match one hour of space reservation, <strong>without subscription</strong>."
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly."
extended_prices: "Moreover, you can define extended prices which will apply in priority over the hourly rate below. Extended prices allow you, for example, to set a favorable price for a booking of several hours."
spaces: "Spaces"
prices_match_space_hours_rates_html: "I prezzi qui sotto corrispondono a un'ora di utilizzo della macchina, <strong>senza abbonamento</strong>."
prices_calculated_on_hourly_rate_html: "Tutti i prezzi saranno calcolati automaticamente in base alla tariffa oraria definita qui.<br/><em>Per esempio</em>, se definisci una tariffa oraria a {RATE}: per uno slot di {DURATION} minuti, verranno addebitati <strong>{PRICE}</strong>."
you_can_override: "È possibile sovrascrivere questa durata per ogni disponibilità che si crea nell'agenda. Il prezzo sarà quindi regolato di conseguenza."
extended_prices: "Inoltre, è possibile definire i prezzi estesi che si applicheranno in via prioritaria sulla tariffa oraria qui sotto. I prezzi estesi consentono ad esempio di fissare un prezzo favorevole per una prenotazione di diverse ore."
spaces: "Spazi"
price_updated: "Price successfully updated"
machines_pricing:
prices_match_machine_hours_rates_html: "The prices below match one hour of machine usage, <strong>without subscription</strong>."
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly."
machines: "Machines"
prices_match_machine_hours_rates_html: "I prezzi qui sotto corrispondono a un'ora di utilizzo della macchina, <strong>senza abbonamento</strong>."
prices_calculated_on_hourly_rate_html: "Tutti i prezzi saranno calcolati automaticamente in base alla tariffa oraria definita qui.<br/><em>Per esempio</em>, se definisci una tariffa oraria a {RATE}: uno slot di {DURATION} minuti, verranno addebitati <strong>{PRICE}</strong>."
you_can_override: "È possibile sovrascrivere questa durata per ogni disponibilità che si crea nell'agenda. Il prezzo sarà quindi regolato di conseguenza."
machines: "Macchine"
price_updated: "Price successfully updated"
configure_packs_button:
pack: "prepaid pack"
packs: "Prepaid packs"
no_packs: "No packs for now"
packs: "Pacchetti prepagati"
no_packs: "Nessun pacchetto per ora"
pack_DURATION: "{DURATION} hours"
delete_confirmation: "Are you sure you want to delete this prepaid pack? This won't be possible if the pack was already bought by users."
edit_pack: "Edit the pack"
@ -2014,14 +2014,14 @@ it:
title: "Calendar"
content: "From this screen, you can plan the slots during which training, machines and spaces will be bookable by members."
agenda:
title: "The calendar"
content: "Click in the calendar to start creating a new availability range. You can directly select the entire time range desired by maintaining your click."
title: "Il calendario"
content: "Clicca sul calendario per iniziare a creare un nuovo intervallo di disponibilità. È possibile selezionare direttamente l'intero intervallo di tempo desiderato tenendo premuto."
export:
title: "Export"
content: "Start generating an Excel file, listing all the availability slots created in the calendar."
title: "Esporta"
content: "Generare un foglio di calcolo che elenchi tutti gli slot di disponibilità creati nel calendario."
import:
title: "Import external calendars"
content: "Allows you to import calendars from an external source in iCal format."
title: "Importa calendari esterni"
content: "Consente di importare calendari da una sorgente esterna in formato iCal."
members:
welcome:
title: "Users"
@ -2098,23 +2098,23 @@ it:
title: "Subscriptions & Prices"
content: "Manage subscription plans and prices for the various services you offer to your members."
new_plan:
title: "New subscription plan"
content: "Create subscription plans to offer preferential prices on machines and spaces to regular users."
title: "Nuovo piano abbonamenti"
content: "Creare piani di abbonamento per offrire prezzi preferenziali su macchine e spazi agli utenti abituali."
trainings:
title: "Trainings"
content: "Define training prices here, by user group."
title: "Abilitazioni"
content: "Definire i prezzi per le abilitazioni qui, per gruppo di utenti."
machines:
title: "Machines"
content: "Define here the prices of the machine slots, by user group. These prices will be applied to users who do not have subscriptions."
title: "Macchine"
content: "Definisci qui i prezzi degli slot macchina, per gruppo di utenti. Questi prezzi saranno applicati agli utenti che non hanno abbonamenti."
spaces:
title: "Spaces"
content: "In the same way, define here the prices of the spaces slots, for the users without subscriptions."
title: "Spazi"
content: "Allo stesso modo, definisci qui i prezzi degli slot per gli spazi, per gli utenti senza abbonamento."
credits:
title: "Credits"
content: "<p>Credits allow you to give certain services for free to users who subscribe to a plan.</p><p>You can, for example, offer 2 hours of 3D printer for all annual subscriptions; or training of your choice for student subscribers, etc.</p>"
title: "Crediti"
content: "<p>I crediti consentono di fornire determinati servizi gratuitamente agli utenti che si iscrivono a un piano.</p><p>È possibile, ad esempio, offrire 2 ore di stampante 3D per tutti gli abbonamenti annuali; o certificazioni di vostra scelta per gli studenti iscritti, ecc.</p>"
coupons:
title: "Coupons"
content: "Create and manage promotional coupons allowing to offer punctual discounts to their holders."
title: "Buoni acquisto"
content: "Crea e gestisci coupon promozionali che permettono di offrire sconti puntuali ai titolari."
events:
welcome:
title: "Events"
@ -2437,13 +2437,13 @@ it:
date: "Changed at"
operator: "By"
editorial_block_form:
content: "Content"
content: "Contenuto"
content_is_required: "You must provide a content. If you wish to disable the banner, toggle the switch above this field."
label_is_required: "You must provide a label. If you wish to disable the button, toggle the switch above this field."
url_is_required: "You must provide a link for your button."
url_must_be_safe: "The button link should start with http://... or https://..."
title: "Banner"
switch: "Display the banner"
title: "Titolo"
switch: "Mostra il titolo"
cta_switch: "Display a button"
cta_label: "Button label"
cta_url: "Button link"

View File

@ -325,7 +325,7 @@ de:
cancelled: "Storniert"
ticket: "{NUMBER, plural, one{Ticket} other{Tickets}}"
make_a_gift_of_this_reservation: "Diese Reservierung verschenken"
thank_you_your_payment_has_been_successfully_registered: "Vielen Dank. Ihre Zahlung wurde erfolgreich gebucht!"
thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "Sie finden die Reservierungsdetails in Ihrem"
dashboard: "Dashboard"
you_booked_DATE: "Sie haben gebucht ({DATE}):"

View File

@ -325,7 +325,7 @@ en:
cancelled: "Cancelled"
ticket: "{NUMBER, plural, one{ticket} other{tickets}}"
make_a_gift_of_this_reservation: "Make a gift of this reservation"
thank_you_your_payment_has_been_successfully_registered: "Tank you. Your payment has been successfully registered!"
thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "You can find your reservation's details on your"
dashboard: "dashboard"
you_booked_DATE: "You booked ({DATE}):"

View File

@ -325,7 +325,7 @@ es:
cancelled: "Cancelado"
ticket: "{NUMBER, plural, one{ticket} other{tickets}}"
make_a_gift_of_this_reservation: "Regalar esta reserva"
thank_you_your_payment_has_been_successfully_registered: "Tank you. Your payment has been successfully registered!"
thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "Puede encontrar los detalles de su reserva en"
dashboard: "panel"
you_booked_DATE: "You booked ({DATE}):"

View File

@ -3,566 +3,566 @@ it:
public:
#header and "about" page
common:
about_the_fablab: "About {GENDER, select, male{the} female{the} neutral{} other{the}} {NAME}"
return: "Return"
about_the_fablab: "Riguardo {GENDER, select, male{il} female{il} neutral{} other{il}} {NAME}"
return: "Indietro"
#cookies
cookies:
about_cookies: "This website uses cookies for audience measurement purposes."
learn_more: "Learn more"
accept: "Accept cookies"
decline: "Refuse"
about_cookies: "Questo sito web utilizza cookie."
learn_more: "Ulteriori informazioni"
accept: "Accetta i cookie"
decline: "Rifiuta"
#dashboard sections
dashboard: "Dashboard"
my_profile: "My Profile"
my_settings: "My Settings"
my_supporting_documents_files: "My supporting documents"
my_projects: "My Projects"
my_trainings: "My Trainings"
my_reservations: "My reservations"
my_events: "My Events"
my_invoices: "My Invoices"
my_payment_schedules: "My payment schedules"
my_orders: "My orders"
my_wallet: "My Wallet"
dashboard: "Scrivania"
my_profile: "Il mio profilo"
my_settings: "Le mie impostazioni"
my_supporting_documents_files: "I miei documenti"
my_projects: "I miei progetti"
my_trainings: "Le mie abilitazioni"
my_reservations: "Le mie prenotazioni"
my_events: "I miei eventi"
my_invoices: "Le mie fatture"
my_payment_schedules: "Le mie scadenze di pagamento"
my_orders: "I miei ordini"
my_wallet: "Il mio portafoglio"
#contextual help
help: "Help"
help: "Aiuto"
#login/logout
sign_out: "Sign Out"
sign_up: "Sign Up"
sign_in: "Sign In"
sign_out: "Esci"
sign_up: "Registrati"
sign_in: "Accedi"
#left menu
notifications: "Notifications"
admin: "Admin"
notifications: "Notifiche"
admin: "Amministratore"
manager: "Manager"
reduce_panel: "Reduce panel"
reduce_panel: "Riduci pannello"
#left menu (public)
home: "Home"
reserve_a_machine: "Reserve a Machine"
trainings_registrations: "Trainings registrations"
events_registrations: "Events registrations"
reserve_a_space: "Reserve a Space"
projects_gallery: "Projects gallery"
subscriptions: "Subscriptions"
public_calendar: "Calendar"
fablab_store: "Store"
reserve_a_machine: "Prenota una macchina"
trainings_registrations: "Abilitazioni"
events_registrations: "Iscriviti agli eventi"
reserve_a_space: "Prenota uno spazio"
projects_gallery: "Galleria progetti"
subscriptions: "Abbonamenti"
public_calendar: "Calendario"
fablab_store: "Negozio"
#left menu (admin)
trainings_monitoring: "Trainings"
manage_the_calendar: "Calendar"
manage_the_users: "Users"
manage_the_invoices: "Invoices"
subscriptions_and_prices: "Subscriptions and Prices"
manage_the_events: "Events"
manage_the_machines: "Machines"
manage_the_store: "Store"
manage_the_spaces: "Spaces"
projects: "Projects"
statistics: "Statistics"
customization: "Customization"
open_api_clients: "OpenAPI clients"
trainings_monitoring: "Abilitazioni"
manage_the_calendar: "Calendario"
manage_the_users: "Utenti"
manage_the_invoices: "Fatture"
subscriptions_and_prices: "Iscrizioni e prezzi"
manage_the_events: "Eventi"
manage_the_machines: "Macchine"
manage_the_store: "Negozio"
manage_the_spaces: "Spazi"
projects: "Progetti"
statistics: "Statistiche"
customization: "Personalizzazione"
open_api_clients: "Client OpenAPI"
#account creation modal
create_your_account: "Create your account"
man: "Man"
woman: "Woman"
gender_is_required: "Gender is required."
your_first_name: "Your first name"
first_name_is_required: "First name is required."
your_surname: "Your surname"
surname_is_required: "Surname is required."
your_pseudonym: "Your pseudonym"
pseudonym_is_required: "Pseudonym is required."
your_email_address: "Your e-mail address"
email_is_required: "E-mail address is required."
your_password: "Your password"
password_is_required: "Password is required."
password_is_too_short: "Password is too short (minimum 12 characters)"
password_is_too_weak: "Password is too weak:"
password_is_too_weak_explanations: "minimum 12 characters, at least one uppercase letter, one lowercase letter, one number and one special character"
type_your_password_again: "Type your password again"
password_confirmation_is_required: "Password confirmation is required."
password_does_not_match_with_confirmation: "Password does not match with confirmation."
i_am_an_organization: "I am an organization"
name_of_your_organization: "Name of your organization"
organization_name_is_required: "Organization name is required."
address_of_your_organization: "Address of your organization"
organization_address_is_required: "Organization address is required."
your_user_s_profile: "Your user's profile"
user_s_profile_is_required: "User's profile is required."
birth_date: "Birth date"
birth_date_is_required: "Birth date is required."
phone_number: "Phone number"
phone_number_is_required: "Phone number is required."
address: "Address"
address_is_required: "Address is required"
i_authorize_Fablab_users_registered_on_the_site_to_contact_me: "I authorize users, registered on the site, to contact me"
i_accept_to_receive_information_from_the_fablab: "I accept to receive information from the FabLab"
i_ve_read_and_i_accept_: "I've read and I accept"
_the_fablab_policy: "the terms of use"
field_required: "Field required"
profile_custom_field_is_required: "{FEILD} is required"
user_supporting_documents_required: "Warning!<br>You have declared to be \"{GROUP}\", supporting documents may be requested."
unexpected_error_occurred: "An unexpected error occurred. Please try again later."
used_for_statistics: "This data will be used for statistical purposes"
used_for_invoicing: "This data will be used for billing purposes"
used_for_reservation: "This data will be used in case of change on one of your bookings"
used_for_profile: "This data will only be displayed on your profile"
public_profile: "You will have a public profile and other users will be able to associate you in their projects"
you_will_receive_confirmation_instructions_by_email_detailed: "If your e-mail address is valid, you will receive an email with instructions about how to confirm your account in a few minutes."
create_your_account: "Crea il tuo account"
man: "Uomo"
woman: "Donna"
gender_is_required: "Il genere è un campo obbligatorio."
your_first_name: "Nome"
first_name_is_required: "È necessario inserire il nome."
your_surname: "Cognome"
surname_is_required: "È necessario inserire il cognome."
your_pseudonym: "Nome utente"
pseudonym_is_required: "Il nome utente è obbligatorio."
your_email_address: "Indirizzo e-mail"
email_is_required: "L'indirizzo e-mail è obbligatorio."
your_password: "Password"
password_is_required: "La password è obbligatoria."
password_is_too_short: "La password è troppo corta (minimo 12 caratteri)"
password_is_too_weak: "La password è troppo debole:"
password_is_too_weak_explanations: "minimo 12 caratteri, almeno una lettera maiuscola, una lettera minuscola, un numero e un carattere speciale"
type_your_password_again: "Digita nuovamente la password"
password_confirmation_is_required: "La conferma della password è obbligatoria."
password_does_not_match_with_confirmation: "La password non corrisponde."
i_am_an_organization: "Sono un'organizzazione"
name_of_your_organization: "Nome della tua organizzazione"
organization_name_is_required: "Il nome dell'organizzazione è obbligatorio."
address_of_your_organization: "Indirizzo della tua organizzazione"
organization_address_is_required: "L'indirizzo dell'organizzazione è obbligatorio."
your_user_s_profile: "Profilo del tuo utente"
user_s_profile_is_required: "Il profilo dell'utente è obbligatorio."
birth_date: "Data di nascita"
birth_date_is_required: "La data di nascita è obbligatoria."
phone_number: "Numero di telefono"
phone_number_is_required: "Il numero di telefono è obbligatorio."
address: "Indirizzo"
address_is_required: "L'indirizzo è obbligatorio"
i_authorize_Fablab_users_registered_on_the_site_to_contact_me: "Autorizzo gli utenti, registrati sul sito, a contattarmi"
i_accept_to_receive_information_from_the_fablab: "Autorizzo FabLab all'invio di informative"
i_ve_read_and_i_accept_: "Ho letto e accetto"
_the_fablab_policy: "le condizioni di utilizzo"
field_required: "Campo obbligatorio"
profile_custom_field_is_required: "{FEILD} è obbligatorio"
user_supporting_documents_required: "Attenzione!<br>Hai dichiarato di essere \"{GROUP}\", potrebbe essere necessario fornire documenti aggiuntivi."
unexpected_error_occurred: "Si è verificato un errore imprevisto. Riprovare più tardi."
used_for_statistics: "Questi dati saranno utilizzati a fini statistici"
used_for_invoicing: "Questi dati saranno utilizzati per la fatturazione"
used_for_reservation: "Questi dati saranno utilizzati in caso di modifica di una delle tue prenotazioni"
used_for_profile: "Questi dati saranno visualizzati solo sul tuo profilo"
public_profile: "Avrai un profilo pubblico e altri utenti saranno in grado di associarti ai loro progetti"
you_will_receive_confirmation_instructions_by_email_detailed: "Se il tuo indirizzo e-mail è valido, riceverai un'email con le istruzioni su come confermare il tuo account in pochi minuti."
#password modification modal
change_your_password: "Change your password"
your_new_password: "Your new password"
your_password_was_successfully_changed: "Your password was successfully changed."
change_your_password: "Modifica la password"
your_new_password: "La tua nuova password"
your_password_was_successfully_changed: "La tua password è stata cambiata correttamente."
#connection modal
connection: "Connection"
password_forgotten: "Forgotten password?"
confirm_my_account: "Confirm my e-mail"
not_registered_to_the_fablab: "Not yet registered?"
create_an_account: "Create an account"
wrong_email_or_password: "Wrong e-mail or password."
caps_lock_is_on: "Caps lock key is on."
connection: "Accedi"
password_forgotten: "Password dimenticata?"
confirm_my_account: "Conferma la mia e-mail"
not_registered_to_the_fablab: "Non sei ancora registrato?"
create_an_account: "Crea un account"
wrong_email_or_password: "Email o password sbagliate."
caps_lock_is_on: "Blocco maiuscole attivo."
#confirmation modal
you_will_receive_confirmation_instructions_by_email: "You will receive confirmation instructions by email."
you_will_receive_confirmation_instructions_by_email: "Riceverai istruzioni di conferma via email."
#forgotten password modal
you_will_receive_in_a_moment_an_email_with_instructions_to_reset_your_password: "If your e-mail address is valid, you will receive in a moment an e-mail with instructions to reset your password."
you_will_receive_in_a_moment_an_email_with_instructions_to_reset_your_password: "Se il tuo indirizzo e-mail è valido, riceverai a breve un'e-mail con le istruzioni per reimpostare la password."
#Fab-manager's version
version: "Version:"
upgrade_fabmanager: "Upgrade Fab-manager"
current_version: "You are currently using version {VERSION} of Fab-manager."
upgrade_to: "A new release is available. You can upgrade up to version {VERSION}."
read_more: "View the details of this release"
security_version_html: "<strong>Your current version is vulnerable!</strong><br> A later version, currently available, includes security fixes. Upgrade as soon as possible!"
how_to: "How to upgrade?"
version: "Versione:"
upgrade_fabmanager: "Aggiorna Fab-manager"
current_version: "Attualmente stai usando la versione {VERSION} di Fab-manager."
upgrade_to: "È disponibile una nuova versione. Puoi aggiornare alla versione {VERSION}."
read_more: "Visualizza i dettagli di questa release"
security_version_html: "<strong>La tua versione attuale è vulnerabile!</strong><br> Una versione successiva, attualmente disponibile, include correzioni per la sicurezza. Aggiorna il prima possibile!"
how_to: "Come aggiornare?"
#Notifications
and_NUMBER_other_notifications: "and {NUMBER, plural, =0{no other notifications} =1{one other notification} other{{NUMBER} other notifications}}..."
and_NUMBER_other_notifications: "e {NUMBER, plural, one {}=0{nessun'altra notifica} =1{un'altra notifica} other{{NUMBER} altre notifiche}}..."
#about page
about:
read_the_fablab_policy: "Terms of use"
read_the_fablab_s_general_terms_and_conditions: "Read the general terms and conditions"
your_fablab_s_contacts: "Contact us"
privacy_policy: "Privacy policy"
read_the_fablab_policy: "Termini e condizioni d'uso"
read_the_fablab_s_general_terms_and_conditions: "Leggi i termini e le condizioni generali"
your_fablab_s_contacts: "Contattaci"
privacy_policy: "Informativa sulla privacy"
#'privacy policy' page
privacy:
title: "Privacy policy"
dpo: "Data protection officer"
last_update: "Last update,"
title: "Informativa sulla privacy"
dpo: "Responsabile della protezione dei dati"
last_update: "Ultimo aggiornamento"
#home page
home:
latest_documented_projects: "The latest documented projects"
follow_us: "Follow us"
latest_tweets: "The latest tweets"
latest_registered_members: "Latest registered members"
create_an_account: "Create an account"
discover_members: "Discover members"
latest_documented_projects: "Ultimi progetti documentati"
follow_us: "Seguici"
latest_tweets: "Tweet recenti"
latest_registered_members: "Ultimi membri registrati"
create_an_account: "Crea un account"
discover_members: "Cerca i membri"
#next events summary on the home page
fablab_s_next_events: "Next events"
every_events: "Every events"
fablab_s_next_events: "Prossimi eventi"
every_events: "Tutti gli eventi"
event_card:
on_the_date: "On the {DATE}"
from_date_to_date: "From {START} to {END}"
from_time_to_time: "From {START} to {END}"
all_day: "All day"
still_available: "Available place(s): "
event_full: "Event full"
without_reservation: "Without reservation"
free_admission: "Free admission"
full_price: "Full price: "
on_the_date: "Il {DATE}"
from_date_to_date: "Da {START} a {END}"
from_time_to_time: "Da {START} a {END}"
all_day: "Tutto il giorno"
still_available: "Spazi disponibili: "
event_full: "Evento completo"
without_reservation: "Senza prenotazione"
free_admission: "Ingresso libero"
full_price: "Prezzo intero: "
#projects gallery
projects_list:
the_fablab_projects: "The projects"
add_a_project: "Add a project"
the_fablab_projects: "Progetti"
add_a_project: "Aggiungi un progetto"
network_search: "Fab-manager network"
tooltip_openlab_projects_switch: "The search over the whole network lets you search over the projects of every Fab-manager using this feature !"
openlab_search_not_available_at_the_moment: "Search over the whole network is not available at the moment. You still can search over the projects of this platform."
project_search_result_is_empty: "Sorry, we found no results matching your search criteria."
reset_all_filters: "Clear all"
keywords: "Keywords"
all_projects: "All projects"
my_projects: "My projects"
projects_to_whom_i_take_part_in: "Projects to whom I take part in"
all_machines: "All machines"
all_themes: "All themes"
all_materials: "All materials"
load_next_projects: "Load next projects"
rough_draft: "Rough draft"
tooltip_openlab_projects_switch: "La ricerca in rete ti permette di vedere i progetti di ogni Fab-manager utilizzando questa funzione!"
openlab_search_not_available_at_the_moment: "La ricerca in rete non è disponibile al momento. Puoi cercare tra progetti di questa piattaforma."
project_search_result_is_empty: "Siamo spiacenti, non abbiamo trovato alcun risultato corrispondente ai criteri di ricerca."
reset_all_filters: "Elimina tutto"
keywords: "Termini per la ricerca"
all_projects: "Tutti i progetti"
my_projects: "I miei progetti"
projects_to_whom_i_take_part_in: "Progetti a cui partecipo"
all_machines: "Tutte le macchine"
all_themes: "Tutti i temi"
all_materials: "Tutti i materiali"
load_next_projects: "Carica i progetti successivi"
rough_draft: "Bozza preliminare"
status_filter:
all_statuses: "All statuses"
select_status: "Select a status"
all_statuses: "Tutti gli stati"
select_status: "Seleziona uno stato"
#details of a projet
projects_show:
rough_draft: "Draft"
project_description: "Project description"
by_name: "By {NAME}"
step_N: "Step {INDEX}"
share_on_facebook: "Share on Facebook"
share_on_twitter: "Share on Twitter"
deleted_user: "Deleted user"
posted_on_: "Posted on"
CAD_file_to_download: "{COUNT, plural, =0{No CAD files} =1{CAD file to download} other{CAD files to download}}"
machines_and_materials: "Machines and materials"
collaborators: "Collaborators"
licence: "Licence"
confirmation_required: "Confirmation required"
report_an_abuse: "Report an abuse"
unauthorized_operation: "Unauthorized operation"
your_report_was_successful_thanks: "Your report was successful. Thank you."
an_error_occured_while_sending_your_report: "An error occurred while sending your report."
your_first_name: "Your first name"
your_first_name_is_required: "Your first name is required."
your_surname: "Your surname"
your_surname_is_required: "Your surname is required."
your_email_address: "Your email address"
your_email_address_is_required: "Your email address is required."
tell_us_why_this_looks_abusive: "Tell us why this looks abusive"
message_is_required: "Message is required."
report: "Report"
do_you_really_want_to_delete_this_project: "Do you really want to delete this project?"
status: "Status"
rough_draft: "Bozza"
project_description: "Descrizione del progetto"
by_name: "Per {NAME}"
step_N: "Fase {INDEX}"
share_on_facebook: "Condividi su Facebook"
share_on_twitter: "Condividi su Twitter"
deleted_user: "Utente eliminato"
posted_on_: "Pubblicato su"
CAD_file_to_download: "{COUNT, plural, one {}=0{Nessun file CAD} =1{File CAD da scaricare} other{File CAD da scaricare}}"
machines_and_materials: "Macchine e materiali"
collaborators: "Collaboratori"
licence: "Licenza"
confirmation_required: "Conferma richiesta"
report_an_abuse: "Segnala un abuso"
unauthorized_operation: "Azione non autorizzata"
your_report_was_successful_thanks: "Il messaggio è stato inviato - grazie."
an_error_occured_while_sending_your_report: "Si è verificato un errore durante l'invio del messaggio."
your_first_name: "Nome"
your_first_name_is_required: "Il nome è obbligatorio."
your_surname: "Cognome"
your_surname_is_required: "Il cognome è obbligatorio."
your_email_address: "Il tuo indirizzo email"
your_email_address_is_required: "L'indirizzo email è obbligatorio."
tell_us_why_this_looks_abusive: "Spiega il perché della segnalazione"
message_is_required: "È necessario inserire un messaggio."
report: "Segnalazione"
do_you_really_want_to_delete_this_project: "Vuoi davvero eliminare questo progetto?"
status: "Stato"
#list of machines
machines_list:
the_fablab_s_machines: "The machines"
add_a_machine: "Add a machine"
new_availability: "Open reservations"
book: "Book"
_or_the_: " or the "
the_fablab_s_machines: "Le macchine"
add_a_machine: "Aggiungi una nuova macchina"
new_availability: "Prenotazioni aperte"
book: "Prenota"
_or_the_: " o il "
store_ad:
title: "Discover our store"
buy: "Check out products from members' projects along with consumable related to the different machines and tools of the workshop."
sell: "If you also want to sell your creations, please let us know."
link: "To the store"
title: "Scopri il negozio"
buy: "Scopri i prodotti impiegati nei progetti dai soci e quelli di consumo relativi alle diverse macchine/utensili del laboratorio."
sell: "Se volete anche vendere le vostre creazioni, fatecelo sapere."
link: "Vai al negozio"
machines_filters:
show_machines: "Show machines:"
status_enabled: "Enabled"
status_disabled: "Disabled"
status_all: "All"
filter_by_machine_category: "Filter by category:"
all_machines: "All machines"
show_machines: "Mostra le macchine:"
status_enabled: "Abilitate"
status_disabled: "Disabilitate"
status_all: "Tutte"
filter_by_machine_category: "Filtra per categoria:"
all_machines: "Tutte le macchine"
machine_card:
book: "Book"
consult: "Consult"
book: "Prenota"
consult: "Guarda"
#details of a machine
machines_show:
book_this_machine: "Book this machine"
technical_specifications: "Technical specifications"
files_to_download: "Files to download"
projects_using_the_machine: "Projects using the machine"
_or_the_: " or the "
confirmation_required: "Confirmation required"
do_you_really_want_to_delete_this_machine: "Do you really want to delete this machine?"
unauthorized_operation: "Unauthorized operation"
the_machine_cant_be_deleted_because_it_is_already_reserved_by_some_users: "The machine can't be deleted because it's already reserved by some users."
book_this_machine: "Modifica questa macchina"
technical_specifications: "Caratteristiche tecniche"
files_to_download: "File da scaricare"
projects_using_the_machine: "Progetti che utilizzano la macchina"
_or_the_: " o il "
confirmation_required: "Conferma richiesta"
do_you_really_want_to_delete_this_machine: "Vuoi davvero eliminare questa macchina?"
unauthorized_operation: "Operazione non autorizzata"
the_machine_cant_be_deleted_because_it_is_already_reserved_by_some_users: "La macchina non può essere cancellata perché è già prenotata da alcuni utenti."
#list of trainings
trainings_list:
book: "Book"
the_trainings: "The trainings"
book: "Prenota"
the_trainings: "Abilitazioni all'uso delle macchine"
#details of a training
training_show:
book_this_training: "Book this training"
do_you_really_want_to_delete_this_training: "Do you really want to delete this training?"
unauthorized_operation: "Unauthorized operation"
confirmation_required: "Confirmation required"
the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users: "The training can't be deleted because it's already reserved by some users."
book_this_training: "Prenota questa abilitazione"
do_you_really_want_to_delete_this_training: "Vuoi davvero eliminare questa abilitazione?"
unauthorized_operation: "Operazione non autorizzata"
confirmation_required: "Conferma richiesta"
the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users: "L'abilitazione non può essere eliminata perché è già prenotata da alcuni utenti."
plan_card:
AMOUNT_per_month: "{AMOUNT} / month"
i_subscribe_online: "I subscribe online"
more_information: "More information"
i_choose_that_plan: "I choose that plan"
i_already_subscribed: "I already subscribed"
AMOUNT_per_month: "{AMOUNT} / mese"
i_subscribe_online: "Sottoscrivi online"
more_information: "Ulteriori informazioni"
i_choose_that_plan: "Scelgo quel piano"
i_already_subscribed: "Ho già sottoscritto"
#summary of the subscriptions
plans:
subscriptions: "Subscriptions"
your_subscription_expires_on_the_DATE: "Your subscription expires on the {DATE}"
no_plans: "No plans are available for your group"
my_group: "My group"
his_group: "User's group"
he_wants_to_change_group: "Change group"
change_my_group: "Validate group change"
summary: "Summary"
your_subscription_has_expired_on_the_DATE: "Your subscription has expired on the {DATE}"
subscription_price: "Subscription price"
you_ve_just_payed_the_subscription_html: "You've just paid the <strong>subscription</strong>:"
thank_you_your_subscription_is_successful: "Thank you. Your subscription is successful!"
your_invoice_will_be_available_soon_from_your_dashboard: "Your invoice will be available soon from your dashboard"
your_group_was_successfully_changed: "Your group was successfully changed."
the_user_s_group_was_successfully_changed: "The user's group was successfully changed."
an_error_prevented_your_group_from_being_changed: "An error prevented your group from being changed."
an_error_prevented_to_change_the_user_s_group: "An error prevented to change the user's group."
subscriptions: "Abbonamenti"
your_subscription_expires_on_the_DATE: "Il tuo abbonamento scade il {DATE}"
no_plans: "Nessun piano disponibile per il tuo gruppo"
my_group: "Il mio gruppo"
his_group: "Gruppo utente"
he_wants_to_change_group: "Cambia gruppo"
change_my_group: "Convalida modifica gruppo"
summary: "Riepilogo"
your_subscription_has_expired_on_the_DATE: "Il tuo abbonamento è scaduto il {DATE}"
subscription_price: "Prezzo dell'abbonamento"
you_ve_just_payed_the_subscription_html: "Hai appena pagato <strong>l'abbonamento</strong>:"
thank_you_your_subscription_is_successful: "Grazie. Il tuo abbonamento è confermato!"
your_invoice_will_be_available_soon_from_your_dashboard: "La tua fattura sarà disponibile presto dalla tua scrivania"
your_group_was_successfully_changed: "Il tuo gruppo è stato modificato con successo."
the_user_s_group_was_successfully_changed: "Il gruppo dell'utente è stato modificato con successo."
an_error_prevented_your_group_from_being_changed: "Un errore ha impedito la modifica del tuo gruppo."
an_error_prevented_to_change_the_user_s_group: "Un errore ha impedito di cambiare il gruppo dell'utente."
plans_filter:
i_am: "I am"
select_group: "select a group"
i_want_duration: "I want to subscribe for"
all_durations: "All durations"
select_duration: "select a duration"
i_am: "Io sono"
select_group: "seleziona un gruppo"
i_want_duration: "Voglio iscrivermi a"
all_durations: "Tutte"
select_duration: "seleziona una durata"
#Fablab's events list
events_list:
the_fablab_s_events: "The events"
all_categories: "All categories"
for_all: "For all"
sold_out: "Sold Out"
cancelled: "Cancelled"
free_admission: "Free admission"
still_available: "available place(s)"
without_reservation: "Without reservation"
add_an_event: "Add an event"
load_the_next_events: "Load the next events..."
full_price_: "Full price:"
to_date: "to" #e.g. from 01/01 to 01/05
all_themes: "All themes"
the_fablab_s_events: "Gli eventi"
all_categories: "Tutte le categorie"
for_all: "Per tutti"
sold_out: "Esaurito"
cancelled: "Annullato"
free_admission: "Ingresso libero"
still_available: "luogo(i) disponibile(i)"
without_reservation: "Senza prenotazione"
add_an_event: "Aggiungi un evento"
load_the_next_events: "Carica gli eventi successivi..."
full_price_: "Prezzo intero:"
to_date: "a" #e.g. from 01/01 to 01/05
all_themes: "Tutti i temi"
#details and booking of an event
events_show:
event_description: "Event description"
downloadable_documents: "Downloadable documents"
information_and_booking: "Information and booking"
dates: "Dates"
beginning: "Beginning:"
ending: "Ending:"
opening_hours: "Opening hours:"
all_day: "All day"
from_time: "From" #e.g. from 18:00 to 21:00
to_time: "to" #e.g. from 18:00 to 21:00
full_price_: "Full price:"
tickets_still_availables: "Tickets still available:"
sold_out: "Sold out."
without_reservation: "Without reservation"
cancelled: "Cancelled"
ticket: "{NUMBER, plural, one{ticket} other{tickets}}"
make_a_gift_of_this_reservation: "Make a gift of this reservation"
thank_you_your_payment_has_been_successfully_registered: "Tank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "You can find your reservation's details on your"
dashboard: "dashboard"
you_booked_DATE: "You booked ({DATE}):"
canceled_reservation_SEATS: "Reservation canceled ({SEATS} seats)"
book: "Book"
confirm_and_pay: "Confirm and pay"
confirm_payment_of_html: "{ROLE, select, admin{Cash} other{Pay}}: {AMOUNT}" #(contexte : validate a payment of $20,00)
online_payment_disabled: "Payment by credit card is not available. Please contact us directly."
please_select_a_member_first: "Please select a member first"
change_the_reservation: "Change the reservation"
you_can_shift_this_reservation_on_the_following_slots: "You can shift this reservation on the following slots:"
confirmation_required: "Confirmation required"
do_you_really_want_to_delete_this_event: "Do you really want to delete this event?"
delete_recurring_event: "You're about to delete a periodic event. What do you want to do?"
delete_this_event: "Only this event"
delete_this_and_next: "This event and the following"
delete_all: "All events"
event_successfully_deleted: "Event successfully deleted."
events_deleted: "The event, and {COUNT, plural, =1{one other} other{{COUNT} others}}, have been deleted"
unable_to_delete_the_event: "Unable to delete the event, it may be booked by a member"
events_not_deleted: "On {TOTAL} events, {COUNT, plural, =1{one was not deleted} other{{COUNT} were not deleted}}. Some reservations may exists on {COUNT, plural, =1{it} other{them}}."
cancel_the_reservation: "Cancel the reservation"
do_you_really_want_to_cancel_this_reservation_this_apply_to_all_booked_tickets: "Do you really want to cancel this reservation? This apply to ALL booked tickets."
reservation_was_successfully_cancelled: "Reservation was successfully cancelled."
cancellation_failed: "Cancellation failed."
event_is_over: "The event is over."
thanks_for_coming: "Thanks for coming!"
view_event_list: "View events to come"
share_on_facebook: "Share on Facebook"
share_on_twitter: "Share on Twitter"
event_description: "Descrizione dell'evento"
downloadable_documents: "Documenti scaricabili"
information_and_booking: "Informazioni e prenotazioni"
dates: "Date"
beginning: "Inizio:"
ending: "Fine:"
opening_hours: "Orari di apertura:"
all_day: "Tutto il giorno"
from_time: "Da" #e.g. from 18:00 to 21:00
to_time: "a" #e.g. from 18:00 to 21:00
full_price_: "Prezzo intero:"
tickets_still_availables: "Biglietti ancora disponibili:"
sold_out: "Esaurito."
without_reservation: "Senza prenotazione"
cancelled: "Annullato"
ticket: "{NUMBER, plural, one{biglietto} other{biglietti}}"
make_a_gift_of_this_reservation: "Regala questa prenotazione"
thank_you_your_payment_has_been_successfully_registered: "Grazie. Il tuo pagamento è stato registrato con successo!"
you_can_find_your_reservation_s_details_on_your_: "Puoi trovare i dettagli della tua prenotazione nella tua"
dashboard: "scrivania"
you_booked_DATE: "Hai prenotato ({DATE}):"
canceled_reservation_SEATS: "Prenotazione annullata ({SEATS} posti)"
book: "Prenota"
confirm_and_pay: "Conferma e paga"
confirm_payment_of_html: "{ROLE, select, admin{Contanti} other{Paga}}: {AMOUNT}" #(contexte : validate a payment of $20,00)
online_payment_disabled: "Il pagamento con carta di credito non è disponibile. Contattaci direttamente."
please_select_a_member_first: "Prima seleziona un membro"
change_the_reservation: "Modificare la prenotazione"
you_can_shift_this_reservation_on_the_following_slots: "È possibile spostare questa prenotazione sui seguenti slot:"
confirmation_required: "Conferma richiesta"
do_you_really_want_to_delete_this_event: "Volete davvero cancellare questo evento?"
delete_recurring_event: "Stai per eliminare un evento multiplo. Cosa vuoi fare?"
delete_this_event: "Solo questo evento"
delete_this_and_next: "Questo evento e il successivo"
delete_all: "Tutti gli eventi"
event_successfully_deleted: "Evento eliminato correttamente."
events_deleted: "L'evento, e {COUNT, plural, =1{un altro} other{{COUNT} altri}}, sono stati eliminati"
unable_to_delete_the_event: "Impossibile eliminare l'evento, può darsi che sia prenotato da un membro"
events_not_deleted: "Su {TOTAL} eventi, {COUNT, plural, =1{uno non è stato cancellato} other{{COUNT} non sono stati cancellati}}. Alcune prenotazioni potrebbero esistere su {COUNT, plural,=1{di esso} other{alcuni}}."
cancel_the_reservation: "Annulla la prenotazione"
do_you_really_want_to_cancel_this_reservation_this_apply_to_all_booked_tickets: "Vuoi davvero annullare questa prenotazione? Questo si applica a TUTTI i biglietti prenotati."
reservation_was_successfully_cancelled: "La prenotazione è stata annullata correttamente."
cancellation_failed: "Annullamento fallito."
event_is_over: "L'evento è finito."
thanks_for_coming: "Grazie per aver partecipato!"
view_event_list: "Visualizza gli eventi in programma"
share_on_facebook: "Condividi su Facebook"
share_on_twitter: "Condividi su Twitter"
#public calendar
calendar:
calendar: "Calendar"
show_unavailables: "Show unavailable slots"
filter_calendar: "Filter calendar"
trainings: "Trainings"
machines: "Machines"
spaces: "Spaces"
events: "Events"
externals: "Other calendars"
choose_a_machine: "Choose a machine"
cancel: "Cancel"
calendar: "Calendario"
show_unavailables: "Mostra gli slot non disponibili"
filter_calendar: "Filtro sul calendario"
trainings: "Abilitazioni"
machines: "Macchine"
spaces: "Spazi"
events: "Eventi"
externals: "Altri calendari"
choose_a_machine: "Scegli una macchina"
cancel: "Annulla"
#list of spaces
spaces_list:
the_spaces: "The spaces"
new_availability: "Open reservations"
add_a_space: "Add a space"
status_enabled: "Enabled"
status_disabled: "Disabled"
status_all: "All"
book: "Book"
the_spaces: "Gli spazi"
new_availability: "Prenotazioni aperte"
add_a_space: "Aggiungi uno spazio"
status_enabled: "Disponibili"
status_disabled: "Non disponibili"
status_all: "Tutti"
book: "Prenota"
#display the details of a space
space_show:
book_this_space: "Book this space"
unauthorized_operation: "Unauthorized operation"
confirmation_required: "Confirmation required"
do_you_really_want_to_delete_this_space: "Do you really want to delete this space?"
the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users: "Unable to delete this space, because it is already reserved by some users."
characteristics: "Characteristics"
files_to_download: "Files to download"
projects_using_the_space: "Projects using the space"
book_this_space: "Prenota questo spazio"
unauthorized_operation: "Operazione non autorizzata"
confirmation_required: "Conferma richiesta"
do_you_really_want_to_delete_this_space: "Vuoi davvero eliminare questo spazio?"
the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users: "Impossibile eliminare questo spazio, perché è già prenotato da alcuni utenti."
characteristics: "Caratteristiche"
files_to_download: "File da scaricare"
projects_using_the_space: "Progetti che utilizzano lo spazio"
#public store
store:
fablab_store: "Store"
unexpected_error_occurred: "An unexpected error occurred. Please try again later."
add_to_cart_success: "Product added to the cart."
fablab_store: "Negozio"
unexpected_error_occurred: "Si è verificato un errore imprevisto. Riprova più tardi."
add_to_cart_success: "Prodotto aggiunto al carrello."
products:
all_products: "All the products"
filter: "Filter"
filter_clear: "Clear all"
filter_apply: "Apply"
filter_categories: "Categories"
filter_machines: "By machines"
filter_keywords_reference: "By keywords or reference"
in_stock_only: "Available products only"
all_products: "Tutti i prodotti"
filter: "Filtro"
filter_clear: "Elimina tutto"
filter_apply: "Applica"
filter_categories: "Categorie"
filter_machines: "Per macchina"
filter_keywords_reference: "Per parole chiave o riferimento"
in_stock_only: "Solo prodotti disponibili"
sort:
name_az: "A-Z"
name_za: "Z-A"
price_low: "Price: low to high"
price_high: "Price: high to low"
price_low: "Prezzo: dal più basso al più alto"
price_high: "Prezzo: dal più alto al più basso"
store_product:
ref: "ref: {REF}"
add_to_cart_success: "Product added to the cart."
unexpected_error_occurred: "An unexpected error occurred. Please try again later."
show_more: "Display more"
show_less: "Display less"
documentation: "Documentation"
minimum_purchase: "Minimum purchase: "
add_to_cart: "Add to cart"
stock_limit: "You have reached the current stock limit"
add_to_cart_success: "Prodotto aggiunto al carrello."
unexpected_error_occurred: "Si è verificato un errore imprevisto. Riprova più tardi."
show_more: "Mostra di più"
show_less: "Mostra meno"
documentation: "Documentazione"
minimum_purchase: "Acquisto minimo: "
add_to_cart: "Aggiungi al carrello"
stock_limit: "Hai raggiunto il limite attuale delle scorte"
stock_status:
available: "Available"
limited_stock: "Limited stock"
out_of_stock: "Out of stock"
available: "Disponibile"
limited_stock: "Scorte limitate"
out_of_stock: "Esaurito"
store_product_item:
minimum_purchase: "Minimum purchase: "
add: "Add"
add_to_cart: "Add to cart"
stock_limit: "You have reached the current stock limit"
minimum_purchase: "Acquisto minimo: "
add: "Aggiungi"
add_to_cart: "Aggiungi al carrello"
stock_limit: "Hai raggiunto il limite attuale delle scorte"
product_price:
per_unit: "/ unit"
free: "Free"
per_unit: "/ unità"
free: "Gratis"
cart:
my_cart: "My Cart"
my_cart: "Il Mio Carrello"
cart_button:
my_cart: "My Cart"
my_cart: "Il Mio Carrello"
store_cart:
checkout: "Checkout"
cart_is_empty: "Your cart is empty"
pickup: "Pickup your products"
checkout_header: "Total amount for your cart"
checkout_products_COUNT: "Your cart contains {COUNT} {COUNT, plural, =1{product} other{products}}"
checkout_products_total: "Products total"
checkout_gift_total: "Discount total"
checkout_coupon: "Coupon"
checkout_total: "Cart total"
checkout_error: "An unexpected error occurred. Please contact the administrator."
checkout_success: "Purchase confirmed. Thanks!"
select_user: "Please select a user before continuing."
checkout: "Vai alla cassa"
cart_is_empty: "Il tuo carrello è vuoto"
pickup: "Ritira i tuoi prodotti"
checkout_header: "Importo totale per il tuo carrello"
checkout_products_COUNT: "Il tuo carrello contiene {COUNT} {COUNT, plural, =1{un prodotto} other{i prodotti}}"
checkout_products_total: "Totale prodotti"
checkout_gift_total: "Sconto totale"
checkout_coupon: "Buono acquisto"
checkout_total: "Totale carrello"
checkout_error: "Si è verificato un errore imprevisto. Contatta l'amministratore."
checkout_success: "Acquisto confermato. Grazie!"
select_user: "Seleziona un utente prima di continuare."
abstract_item:
offer_product: "Offer the product"
total: "Total"
offer_product: "Offri il prodotto"
total: "Totale"
errors:
unauthorized_offering_product: "You can't offer anything to yourself"
unauthorized_offering_product: "Non puoi offrire nulla a te stesso"
cart_order_product:
reference_short: "ref:"
minimum_purchase: "Minimum purchase: "
stock_limit: "You have reached the current stock limit"
unit: "Unit"
update_item: "Update"
minimum_purchase: "Acquisto minimo: "
stock_limit: "Hai raggiunto il limite attuale delle scorte"
unit: "Unità"
update_item: "Aggiorna"
errors:
product_not_found: "This product is no longer available, please remove it from your cart."
out_of_stock: "This product is out of stock, please remove it from your cart."
stock_limit_QUANTITY: "Only {QUANTITY} {QUANTITY, plural, =1{unit} other{units}} left in stock, please adjust the quantity of items."
quantity_min_QUANTITY: "Minimum number of product was changed to {QUANTITY}, please adjust the quantity of items."
price_changed_PRICE: "The product price was modified to {PRICE}"
product_not_found: "Questo prodotto non è più disponibile, si prega di rimuoverlo dal carrello."
out_of_stock: "Questo prodotto è esaurito, si prega di rimuoverlo dal carrello."
stock_limit_QUANTITY: "Solo {QUANTITY} {QUANTITY, plural, =1{unità} other{unità}} rimanenti in magazzino, si prega di regolare la quantità degli oggetti."
quantity_min_QUANTITY: "Il numero minimo di prodotti è stato modificato a {QUANTITY}, si prega di regolare la quantità degli oggetti."
price_changed_PRICE: "Il prezzo del prodotto è stato modificato a {PRICE}"
cart_order_reservation:
reservation: "Reservation"
offer_reservation: "Offer the reservation"
reservation: "Prenotazione"
offer_reservation: "Offri la prenotazione"
slot: "{DATE}: {START} - {END}"
offered: "offered"
offered: "offerto"
orders_dashboard:
heading: "My orders"
heading: "I miei ordini"
sort:
newest: "Newest first"
oldest: "Oldest first"
newest: "Più recenti in alto"
oldest: "Meno recenti in alto"
member_select:
select_a_member: "Select a member"
start_typing: "Start typing..."
select_a_member: "Seleziona un membro"
start_typing: "Iniziare a digitare..."
tour:
conclusion:
title: "Thank you for your attention"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on « ? Help » from the user's menu.</p><p>If you need additional help, you can <a href='http://guide-fr.fab.mn' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
title: "Grazie per la vostra attenzione"
content: "<p>Se vuoi riavviare questo aiuto contestuale, premi <strong>F1</strong> in qualsiasi momento o clicca su « ? Aiuto » dal menu dell'utente.</p><p>Se hai bisogno di aiuto aggiuntivo, puoi <a href='http://guide-fr.fab.mn' target='_blank'>controllare la guida utente</a> (solo in francese per ora).</p><p>Il team di Fab-manager fornisce anche supporto personalizzato (aiuto per iniziare, nell'installazione, personalizzazione, ecc.), <a href='mailto:contact@fab-manager.com'>contattateci</a> per ulteriori informazioni.</p>"
welcome:
welcome:
title: "Welcome to Fab-manager"
content: "To help you get started with the application, we are going to take a quick tour of the features."
title: "Benvenuto in Fab-manager"
content: "Per aiutarvi a iniziare con l'applicazione, faremo un rapido tour delle caratteristiche."
home:
title: "Home page"
content: "Clicking here will take you back to the home page where you are currently."
content: "Cliccando qui tornerai alla home page dove ti trovi attualmente."
machines:
title: "Machines"
content: "<p>This page will allow you to consult the list of all machines and reserve a slot on behalf of a member.</p><p>A machine can be, for example, a 3D printer.</p><p>Members can also access this page and reserve a machine themselves, if credit card payment is enabled, or if some prices are equal to 0.</p>"
title: "Macchine"
content: "<p>Questa pagina vi permetterà di consultare l'elenco di tutte le macchine e di prenotare uno slot per conto di un membro.</p><p>Una macchina può essere, ad esempio, una stampante 3D.</p><p>I membri possono anche accedere a questa pagina e prenotare una macchina da soli; se il pagamento con carta di credito è abilitato, o se il costo è nullo.</p>"
trainings:
title: "Trainings"
content: "<p>This page will allow you to consult the list of all training sessions and to register a member for a training session.</p><p>Trainings can be set as prerequisites before allowing reservation of certain machines.</p><p>Members can also access this page and register for a training session themselves, if credit card payment is enabled, or if some prices are equal to 0.</p>"
title: "Abilitazioni"
content: "<p>Questa pagina ti permetterà di consultare l'elenco di tutte le sessioni di abilitazione e di registrare un membro.</p><p>L'abilitazione può essere impostata come prerequisito prima di consentire la prenotazione di alcune macchine.</p><p>I membri possono anche accedere a questa pagina e registrarsi per un'abilitazione, se il pagamento con carta di credito è abilitato, o se il costo è nullo.</p>"
spaces:
title: "Spaces"
content: "<p>This page will allow you to consult the list of all available spaces and to reserve a place on a slot, on behalf of a member.</p><p>A space can be, for example, a woodshop or a meeting room.</p><p>Their particularity is that they can be booked by several people at the same time.</p><p>Members can also access this page and reserve a machine themselves, if credit card payment is enabled, or if some prices are equal to 0.</p>"
title: "Spazi"
content: "<p>Questa pagina ti permetterà di consultare l'elenco di tutti gli spazi disponibili e di prenotare un posto su uno slot, a nome di un membro.</p><p>Uno spazio può essere, ad esempio, un tavolo da lavoro di legno o una sala riunioni.</p><p>La loro particolarità è che possono essere prenotati da più persone allo stesso tempo.</p><p>I membri possono anche accedere a questa pagina e riservare una macchina da soli; se il pagamento con carta di credito è abilitato, o il costo è nullo.</p>"
events:
title: "Events"
content: "<p>An open house evening or an internship to make your desk lamp? It's over here!</p><p>Events can be free or paid (with different prices), with or without reservation.</p><p>Again, members can access this page and book themselves places for free events, or paid events if credit card payment is enabled.</p>"
title: "Eventi"
content: "<p>Una serata o uno stage per costruire la tua lampada da scrivania? Ecco l'occasione!</p><p>Gli eventi possono essere gratuiti o a pagamento (a vari prezzi), con o senza prenotazione.</p><p>Inoltre, i membri possono accedere a questa pagina e prenotare luoghi per eventi gratuiti, o eventi a pagamento se il pagamento con carta di credito è abilitato.</p>"
calendar:
title: "Agenda"
content: "Visualize at a glance everything that is scheduled for the next coming weeks (events, training, machines available, etc.)."
title: "Calendario"
content: "Visualizza a colpo d'occhio tutto ciò che è in programma per le prossime settimane (eventi, abilitazioni, macchine disponibili, ecc.)."
projects:
title: "Projects"
content: "<p>Document and share all your creations with the community.</p><p>If you use OpenLab, you will also be able to consult the projects of the entire Fab-manager network. <a href='mailto:contact@fab-manager.com'>Contact-us</a> to get your access, it's free!</p>"
title: "Progetti"
content: "<p>Documenta e condividi tutte le tue creazioni con la comunità.</p><p>Se utilizzi OpenLab, potrai anche consultare i progetti dell'intera rete Fab-manager. <a href='mailto:contact@fab-manager.com'>Contattateci</a> per ottenere il vostro accesso, è gratuito!</p>"
plans:
title: "Subscriptions"
content: "Subscriptions provide a way to segment your prices and provide benefits to regular users."
title: "Abbonamenti"
content: "Gli abbonamenti forniscono un modo per segmentare i prezzi e fornire benefici agli utenti."
admin:
title: "{ROLE} section"
content: "<p>All of the elements below are only accessible to administrators and managers. They allow you to manage and configure Fab-manager.</p><p>At the end of this visit, click on one of them to find out more.</p>"
title: "{ROLE} sezione"
content: "<p>Tutti gli elementi sottostanti sono accessibili solo agli amministratori e ai manager. Consentono di gestire e configurare Fab-manager.</p><p>Alla fine di questa visita, clicca su uno di loro per saperne di più.</p>"
about:
title: "About"
content: "A page that you can fully customize, to present your activity and your structure."
title: "Informazioni su"
content: "Una pagina che puoi personalizzare completamente, per presentare la tua attività e la tua struttura."
notifications:
title: "Notifications center"
content: "<p>Every time something important happens (reservations, creation of accounts, activity of your members, etc.), you will be notified here.</p><p>Your members also receive notifications there.</p>"
title: "Centro notifiche"
content: "<p>Ogni volta che succede qualcosa di importante (prenotazioni, creazione di account, attività dei tuoi membri, ecc.), sarai avvisato qui.</p><p>Anche i tuoi membri ricevono le notifiche qui.</p>"
profile:
title: "User's menu"
content: "<p>Find your personal information here as well as all your activity on Fab-manager.</p><p>This space is also available for all your members.</p>"
title: "Menu utente"
content: "<p>Cerca qui le tue informazioni personali e tutte le tue attività su Fab-manager.</p><p>Questo spazio è disponibile anche per tutti i tuoi membri.</p>"
news:
title: "News"
content: "<p>This space allows you to display the latest news from your structure.</p><p>You can easily change its content from « Customization », « Home page ».</p>"
content: "<p>Questo spazio ti permette di visualizzare le ultime news dalla tua struttura.</p><p>Puoi facilmente cambiare il suo contenuto da « Personalizzazione », « Home page ».</p>"
last_projects:
title: "Last projects"
content: "<p>This carousel scrolls through the latest projects documented by your members.</p>"
title: "Ultimi progetti"
content: "<p>Questo carosello scorre mostrando gli ultimi progetti documentati dai tuoi membri.</p>"
last_tweet:
title: "Last tweet"
content: "<p>The last tweet of your Tweeter feed can be shown here.</p><p>Configure it from « Customization », « Home page ».</p>"
title: "Tweet recenti"
content: "<p>L'ultimo tweet del tuo feed Tweeter può essere mostrato qui.</p><p>Configuralo da « Personalizzazione », « Home page ».</p>"
last_members:
title: "Last members"
content: "The last registered members who have validated their address and agreed to be contacted will be shown here."
title: "Ultimi membri"
content: "Gli ultimi iscritti che hanno convalidato il loro indirizzo e hanno accettato di essere contattati saranno mostrati qui."
next_events:
title: "Upcoming events"
content: "The next three scheduled events are displayed in this space."
title: "Eventi in programma"
content: "I prossimi tre eventi programmati sono visualizzati in questo spazio."
customize:
title: "Customize the home page"
content: "<p>This page can be fully personalized.</p><p>You can <a href='mailto:contact@fab-manager.com'>contact-us</a> to make a tailored customization of the home page.</p>"
title: "Personalizza la home page"
content: "<p>Questa pagina può essere completamente personalizzata.</p><p>Puoi <a href='mailto:contact@fab-manager.com'>contattarci</a> per effettuare una personalizzazione della home page.</p>"
version:
title: "Application version"
content: "Hover your cursor over this icon to find out the version of Fab-manager. If you are not up to date, this will be reported here and you'll be able to get details by clicking on it."
title: "Versione dell'applicazione"
content: "Passa il cursore su questa icona per scoprire la versione di Fab-manager. Se la versione non è aggiornata, verrà segnalato qui e sarai in grado di ottenere i dettagli cliccandoci sopra."
machines:
welcome:
title: "Machines"
content: "<p>Machines are the tools available for your users. You must create here the machines which can then be reserved by the members.</p><p>You can also create entries for non-bookable or free access machines, then you just need to not associate availability slots with them.</p>"
title: "Macchine"
content: "<p>Le macchine sono gli strumenti disponibili per i tuoi utenti. È necessario creare qui le macchine che possono essere poi prenotate dai membri.</p><p>È anche possibile creare voci per macchine ad accesso libero o non prenotabili, quindi è sufficiente non associare loro nessuno slot.</p>"
welcome_manager:
title: "Machines"
content: "Machines are the tools available for the users to reserve."
title: "Macchine"
content: "Le macchine sono gli utensili a disposizione degli utenti da prenotare."
view:
title: "View"
content: "To modify or delete a machine, click here first. You will not be able to delete a machine that has already been associated with availability slots, but you can deactivate it."
title: "Visualizza"
content: "Per modificare o eliminare una macchina, prima clicca qui. Non sarai in grado di eliminare una macchina che è già stata associata a uno slot, ma potrai disattivarla."
reserve:
title: "Reserve"
content: "Click here to access an agenda showing free slots. This will let you book this machine for an user and manage existing reservations."
title: "Prenota"
content: "Clicca qui per accedere a un calendario che mostra slot liberi. Questo ti permetterà di prenotare questa macchina per un utente e di gestire le prenotazioni esistenti."
spaces:
welcome:
title: "Spaces"
content: "<p>Spaces are places available for your users. For example, a meeting room or a woodshop. You must create here the spaces which can then be reserved by members.</p><p>The specificity of the spaces is that they can be reserved by several users at the same time.</p>"
title: "Spazi"
content: "<p>Gli spazi sono posti a disposizione per i tuoi utenti. Ad esempio, una sala riunioni o un tavolo da lavoro. È necessario creare qui gli spazi che possono poi essere prenotati dai membri.</p><p>La particolarità degli spazi è che possono essere prenotati da più utenti contemporaneamente.</p>"
welcome_manager:
title: "Spaces"
content: "<p>Spaces are places available to users, by reservation. For example, a meeting room or a woodshop.</p><p>The specificity of the spaces is that they can be reserved by several users at the same time.</p>"
title: "Spazi"
content: "<p>Gli spazi sono posti a disposizione degli utenti, su prenotazione. Ad esempio, una sala riunioni o un tavolo da lavoro.</p><p>La particolarità degli spazi è che possono essere prenotati da più utenti contemporaneamente.</p>"
view:
title: "View"
content: "To modify or delete a space, click here first. You will not be able to delete a space that has already been associated with availability slots, but you can deactivate it."
title: "Visualizza"
content: "Per modificare o eliminare uno spazio, prima clicca qui. Non potrai eliminare uno spazio che è già stato associato a uno slot, ma potrai disattivarlo."
reserve:
title: "Reserve"
content: "Click here to access an agenda showing free slots. This will let you book this space for an user and manage existing reservations."
title: "Prenota"
content: "Clicca qui per accedere a un calendario che mostra slot liberi. Questo ti permetterà di prenotare questo spazio per un utente e di gestire le prenotazioni esistenti."

View File

@ -325,7 +325,7 @@
cancelled: "Avslyst"
ticket: "{NUMBER, plural, one{Billett} other{Billetter}}"
make_a_gift_of_this_reservation: "Gi denne reservasjonen som gave"
thank_you_your_payment_has_been_successfully_registered: "Tusen takk, betalingen din er registrert!"
thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "Du kan finne reservasjonens detaljer på din"
dashboard: "kontrollpanel"
you_booked_DATE: "Du booket ({DATE}):"

View File

@ -325,7 +325,7 @@ pt:
cancelled: "Cancelado"
ticket: "{NUMBER, plural, one{ingresso} other{ingressos}}"
make_a_gift_of_this_reservation: "Doe esta reserva"
thank_you_your_payment_has_been_successfully_registered: "Obrigado. Seu pagamento foi registrado com sucesso!"
thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered!"
you_can_find_your_reservation_s_details_on_your_: "Você pode encontrar detalhes da sua reserva em seu"
dashboard: "painel de controle"
you_booked_DATE: "Sua reserva ({DATE}):"

View File

@ -325,7 +325,7 @@ zu:
cancelled: "crwdns28310:0crwdne28310:0"
ticket: "crwdns28312:0NUMBER={NUMBER}crwdne28312:0"
make_a_gift_of_this_reservation: "crwdns28314:0crwdne28314:0"
thank_you_your_payment_has_been_successfully_registered: "crwdns28316:0crwdne28316:0"
thank_you_your_payment_has_been_successfully_registered: "crwdns37605:0crwdne37605:0"
you_can_find_your_reservation_s_details_on_your_: "crwdns28318:0crwdne28318:0"
dashboard: "crwdns28320:0crwdne28320:0"
you_booked_DATE: "crwdns28322:0{DATE}crwdne28322:0"

View File

@ -4,18 +4,18 @@ it:
#translations of common buttons
buttons:
confirm_changes: "Confirm changes"
consult: "Consult"
edit: "Edit"
consult: "Guarda"
edit: "Modifica"
change: "Change"
delete: "Delete"
browse: "Browse"
cancel: "Cancel"
cancel: "Annulla"
close: "Close"
clear: "Clear"
today: "Today"
confirm: "Confirm"
confirm: "Conferma"
save: "Save"
"yes": "Yes"
"yes": "Si"
"no": "No"
apply: "Apply"
messages:
@ -163,8 +163,8 @@ it:
do_not_subscribe: "do not subscribe"
#admin: choose a member to interact with
member_select:
select_a_member: "Select a member"
start_typing: "Start typing..."
select_a_member: "Seleziona un membro"
start_typing: "Iniziare a digitare..."
member_not_validated: "Warning:<br> The member was not validated."
#payment modal
abstract_payment_modal:
@ -370,9 +370,9 @@ it:
user_validation_required_alert: "Warning!<br>Your administrator must validate your account. Then, you'll then be able to access all the booking features."
#feature-tour modal
tour:
previous: "Previous"
next: "Next"
end: "End the tour"
previous: "Indietro"
next: "Avanti"
end: "Termina il tour"
#help modal
help:
title: "Help"
@ -529,13 +529,13 @@ it:
stock_external: "Public stock"
calendar:
calendar: "Calendar"
show_unavailables: "Show complete slots"
filter_calendar: "Filter calendar"
trainings: "Trainings"
machines: "Machines"
spaces: "Spaces"
events: "Events"
externals: "Other calendars"
show_unavailables: "Mostra tutti gli slot"
filter_calendar: "Esegui filtro"
trainings: "Addestramento"
machines: "Macchine"
spaces: "Spazi"
events: "Eventi"
externals: "Altri calendari"
show_reserved_uniq: "Show only slots with reservations"
machine:
machine_uncategorized: "Uncategorized machines"

View File

@ -1,5 +1,5 @@
de:
time:
formats:
# See http://apidock.com/ruby/DateTime/strftime for a list of available directives
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%I:%M %p"

View File

@ -1,5 +1,5 @@
es:
time:
formats:
# See http://apidock.com/ruby/DateTime/strftime for a list of available directives
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%I:%M %p"

View File

@ -1,5 +1,5 @@
fr:
time:
formats:
# Liste des directives disponibles sur http://apidock.com/ruby/DateTime/strftime
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%H:%M"

View File

@ -0,0 +1,5 @@
it:
time:
formats:
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%I:%M %p"

View File

@ -1,5 +1,5 @@
"no":
time:
formats:
# See http://apidock.com/ruby/DateTime/strftime for a list of available directives
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%H:%M"

View File

@ -1,5 +1,5 @@
pt:
time:
formats:
# See http://apidock.com/ruby/DateTime/strftime for a list of available directives
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%H:%M"

View File

@ -1,5 +1,5 @@
zu:
time:
formats:
# See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "%I:%M %p"
#See http://apidock.com/ruby/DateTime/strftime for a list of available directives
hour_minute: "crwdns37607:0%I:%Mcrwdnd37607:0%pcrwdne37607:0"

View File

@ -2,34 +2,34 @@ it:
#subscription plan duration
duration:
year:
one: 'one year'
other: '%{count} years'
one: 'un anno'
other: '%{count} anni'
month:
one: 'one month'
other: '%{count} months'
one: 'un mese'
other: '%{count} mesi'
week:
one: 'one week'
other: '%{count} weeks'
one: 'una settimana'
other: '%{count} settimane'
activerecord:
attributes:
product:
amount: "The price"
amount: "Il prezzo"
slug: "URL"
errors:
#CarrierWave
messages:
carrierwave_processing_error: "failed to be processed"
carrierwave_integrity_error: "is not of an allowed file type"
carrierwave_download_error: "could not be downloaded"
extension_whitelist_error: "You are not allowed to upload %{extension} files, allowed types: %{allowed_types}"
extension_blacklist_error: "You are not allowed to upload %{extension} files, prohibited types: %{prohibited_types}"
content_type_whitelist_error: "You are not allowed to upload %{content_type} files, allowed types: %{allowed_types}"
carrierwave_processing_error: "errore di elaborazione"
carrierwave_integrity_error: "non è di un tipo di file consentito"
carrierwave_download_error: "download fallito"
extension_whitelist_error: "Non sei autorizzato a caricare file %{extension}, tipi consentiti: %{allowed_types}"
extension_blacklist_error: "Non sei autorizzato a caricare file %{extension}, tipi vietati: %{prohibited_types}"
content_type_whitelist_error: "Non sei autorizzato a caricare file %{content_type}, tipi consentiti: %{allowed_types}"
rmagick_processing_error: "Failed to manipulate with rmagick, maybe it is not an image?"
mime_types_processing_error: "Failed to process file with MIME::Types, maybe not valid content-type?"
mime_types_processing_error: "Impossibile elaborare il file con MIME::Types, forse non è un tipo di contenuto valido?"
mini_magick_processing_error: "Failed to manipulate the file, maybe it is not an image?"
wrong_size: "is the wrong size (should be %{file_size})"
size_too_small: "is too small (should be at least %{file_size})"
size_too_big: "is too big (should be at most %{file_size})"
wrong_size: "è la dimensione sbagliata (dovrebbe essere %{file_size})"
size_too_small: "è troppo piccolo (dovrebbe essere almeno %{file_size})"
size_too_big: "è troppo grande (dovrebbe essere al massimo %{file_size})"
export_not_found: "Requested export was not found. It was probably deleted, please generate a new export."
percentage_out_of_range: "Percentage must be included between 0 and 100"
cannot_be_blank_at_same_time: "cannot be blank when %{field} is blank too"
@ -699,7 +699,7 @@ it:
trainings_invalidation_rule_period: "Grace period before invalidating a training"
#statuses of projects
statuses:
new: "New"
pending: "Pending"
done: "Done"
abandoned: "Abandoned"
new: "Nuovo"
pending: "In corso"
done: "Completato"
abandoned: "Abbandonato"

View File

@ -1,422 +1,422 @@
it:
layouts:
notifications_mailer:
see_you_later: "See you soon on {GENDER, select, neutral{} other{the}}" #messageFormat interpolation
sincerely: "Sincerely,"
signature: "The Fab Lab team."
do_not_reply: "Please do not reply to this email."
see_you_later: "Ci vediamo presto {GENDER, select, neutral{} other{il}}" #messageFormat interpolation
sincerely: "Cordialmente,"
signature: "Il team del Fab Lab."
do_not_reply: "Non rispondere a questa email."
users_mailer:
notify_user_account_created:
subject: "Your FabLab account has been successfully created"
subject: "Il tuo account FabLab è stato creato con successo"
body:
hello: "Hello %{NAME},"
intro: "The FabLab team has just created an account for you, on {GENDER, select, neutral{} other{the}} {FABLAB} website:" #messageFormat interpolation
connection_parameters: "Here are your connection parameters:"
account_name: "Account name:"
hello: "Ciao %{NAME},"
intro: "Il team del FabLab ha appena creato un account per te, il {GENDER, select, neutral{} other{il}} {FABLAB} sito web:" #messageFormat interpolation
connection_parameters: "Ecco i parametri di connessione:"
account_name: "Nome account:"
password: "Password:"
temporary_password: "This is a temporary password, you can modify it in your «My account» screen."
keep_advantages: "With this account, you keep all the advantages linked to your Fab Lab user profile (trainings, subscriptions plans)."
to_use_platform: "To use the website, please"
logon_or_login: "create a new account or log in by clicking here."
token_if_link_problem: "If you experience issues with the link, you can enter the following code at your first connection attempt:"
temporary_password: "Questa è una password temporanea, puoi modificarla nella sezione «Il mio account»."
keep_advantages: "Con questo account, mantieni tutti i vantaggi legati al tuo profilo utente FabLab (corsi di formazione, piani di abbonamento)."
to_use_platform: "Per utilizzare il sito web, si prega di"
logon_or_login: "crea un nuovo account o accedi cliccando qui."
token_if_link_problem: "Se si verificano problemi con il link, è possibile inserire il seguente codice al primo tentativo di connessione:"
notifications_mailer:
notify_user_user_group_changed:
subject: "You have changed group"
subject: "Hai cambiato gruppo"
body:
warning: "You have changed group. Inspections can be conducted at the lab to verify the legitimacy of this change."
user_invalidated: "Your account was invalidated, please upload your new supporting documents to validate your account."
warning: "Hai cambiato gruppo. Verifichermo la legittimità del cambiamento."
user_invalidated: "Il tuo account è stato invalidato, carica nuovi documenti di supporto per convalidare il tuo account."
notify_admin_user_group_changed:
subject: "A member has changed group"
subject: "Un membro ha cambiato gruppo"
body:
user_changed_group_html: "User <em><strong>%{NAME}</strong></em> has changed group."
previous_group: "Previous group:"
new_group: "New group:"
user_invalidated: "The user's account was invalidated."
user_changed_group_html: "L'utente <em><strong>%{NAME}</strong></em> ha cambiato gruppo."
previous_group: "Gruppo precedente:"
new_group: "Nuovo gruppo:"
user_invalidated: "L'account dell'utente è stato invalidato."
notify_admin_subscription_extended:
subject: "A subscription has been extended"
subject: "Un abbonamento è stato esteso"
body:
subscription_extended_html: "Subscription <strong><em>{PLAN}</em></strong> for user <strong><em>{NAME}</strong></em> has been extended {FREE, select, true{for free} other{}} until {DATE}." #messageFormat interpolation
subscription_extended_html: "L'abbonamento <strong><em>{PLAN}</em></strong> per l'utente <strong><em>{NAME}</strong></em> è stato esteso {FREE, select, true{gratis} other{}} fino a {DATE}." #messageFormat interpolation
notify_member_subscription_extended:
subject: "Your subscription plan has been extended"
subject: "Il tuo abbonamento è stato esteso"
body:
your_plan: "Your subscription plan"
has_been_extended: "has been extended"
free: "for free"
until: "until"
your_plan: "Il tuo abbonamento"
has_been_extended: "è stato esteso"
free: "gratis"
until: "fino a"
notify_partner_subscribed_plan:
subject: "A subscription plan has been purchased"
subject: "Un abbonamento è stato acquistato"
body:
a_plan: "A subscription plan"
was_purchased_by_member: "has been purchased by user"
a_plan: "Un piano di abbonamento"
was_purchased_by_member: "è stato acquistato dall'utente"
notify_admin_when_project_published:
subject: "A project has been published"
subject: "Un progetto è stato pubblicato"
body:
new_project_published: "A new project has been published:"
new_project_published: "È stato pubblicato un nuovo progetto:"
notify_project_collaborator_to_valid:
subject: "Invitation to collaborate on a project"
subject: "Invito a collaborare a un progetto"
body:
your_are_invited_to_take_part_in_a_project: "You are invited to join this project:"
to_accept_the_invitation_click_on_following_link: "To accept this invitation, please click on the following link:"
your_are_invited_to_take_part_in_a_project: "Sei invitato a partecipare a questo progetto:"
to_accept_the_invitation_click_on_following_link: "Per accettare questo invito, clicca il seguente link:"
notify_project_author_when_collaborator_valid:
subject: "New collaborator in your project"
subject: "Nuova collaborazione al tuo progetto"
body:
the_member: "the user"
accepted_your_invitation_to_take_part_in_the_project: "has accepted your invitation to join your project:"
the_member: "l'utente"
accepted_your_invitation_to_take_part_in_the_project: "ha accettato il tuo invito a partecipare al tuo progetto:"
notify_user_training_valid:
subject: "Your training has been validated"
subject: "La tua abilitazione è stata convalidata"
body:
your_training: "Your training"
has_been_validated: "has been validated"
your_training: "Le tue abilitazioni"
has_been_validated: "è stato convalidato"
notify_member_subscribed_plan:
subject: "Your subscription has been successfully purchased"
subject: "Il tuo abbonamento è stato acquistato con successo"
body:
plan_subscribed_html: "You have subscribed the plan: <strong><em>%{PLAN}</em></strong>."
rolling_subscription_stops_on: "Your subscription will end %{DURATION} after your first training. Otherwise, it will stop on %{DATE}."
subscription_stops_on: "Your subscription will end on %{DATE}."
plan_subscribed_html: "Hai sottoscritto il piano: <strong><em>%{PLAN}</em></strong>."
rolling_subscription_stops_on: "Il tuo abbonamento terminerà %{DURATION} dopo al tua prima abilitazione. Altrimenti, si fermerà il %{DATE}."
subscription_stops_on: "Il tuo abbonamento terminerà il %{DATE}."
notify_member_create_reservation:
subject: "Your reservation has been successfully saved"
subject: "La tua prenotazione è stata salvata con successo"
body:
reservation_saved_html: "You reservation <strong><em>%{RESERVATION}</em></strong> has been successfully saved"
your_reserved_slots: "Your reserved slots are:"
reservation_saved_html: "La prenotazione <strong><em>%{RESERVATION}</em></strong> è stata salvata con successo"
your_reserved_slots: "I tuoi slot riservati sono:"
notify_member_subscribed_plan_is_changed:
subject: "Your subscription has been updated"
subject: "Il tuo abbonamento è stato aggiornato"
body:
new_plan_html: "You have changed your plan to <strong><em>%{PLAN}</em></strong>."
new_plan_html: "Hai cambiato il tuo piano in <strong><em>%{PLAN}</em></strong>."
notify_admin_member_create_reservation:
subject: "New reservation"
subject: "Nuova prenotazione"
body:
member_reserved_html: "User %{NAME} has reserved <strong><em>%{RESERVABLE}</em></strong>."
reserved_slots: "Reserved slots are:"
member_reserved_html: "L'utente %{NAME} ha riservato <strong><em>%{RESERVABLE}</em></strong>."
reserved_slots: "Gli slot riservati sono:"
notify_member_slot_is_modified:
subject: "Your reservation slot has been successfully changed"
subject: "Il tuo slot di prenotazione è stato modificato con successo"
body:
reservation_changed_to: "Your reservation slot has been changed to:"
previous_date: "Previous date:"
reservation_changed_to: "Il tuo slot di prenotazione è stato cambiato in:"
previous_date: "Data precedente:"
notify_admin_slot_is_modified:
subject: "A reservation slot has been modified"
subject: "Uno slot di prenotazione è stato modificato"
body:
slot_modified: "User %{NAME} had modified his reservation slot"
new_date: "New slot"
old_date: "Previous slot"
slot_modified: "L'utente %{NAME} ha modificato il suo slot di prenotazione"
new_date: "Nuovo slot"
old_date: "Slot precedente"
notify_admin_when_user_is_created:
subject: "A user account has been created"
subject: "Un account utente è stato creato"
body:
new_account_created: "A new user account has been created on the website:"
user_of_group_html: "The user has registered in the group <strong>%{GROUP}</strong>"
account_for_organization: "This account manage an organization:"
new_account_created: "Un nuovo account utente è stato creato sul sito:"
user_of_group_html: "L'utente si è registrato al gruppo <strong>%{GROUP}</strong>"
account_for_organization: "Questo account gestisce un'organizzazione:"
notify_admin_subscribed_plan:
subject: "A subscription has been purchased"
subject: "Un abbonamento è stato acquistato"
body:
plan_subscribed_html: "A plan <strong><em>%{PLAN}</em></strong> has been subscribed by user <strong><em>%{NAME}</strong></em>."
plan_subscribed_html: "Un piano <strong><em>%{PLAN}</em></strong> è stato sottoscritto dall'utente <strong><em>%{NAME}</strong></em>."
notify_member_invoice_ready:
subject: "Your FabLab's invoice"
subject: "La fattura del tuo FabLab"
body:
please_find_attached_html: "Please find as attached file your invoice from {DATE}, with an amount of {AMOUNT} concerning your {TYPE, select, Reservation{reservation} OrderItem{order} other{subscription}}." #messageFormat interpolation
invoice_in_your_dashboard_html: "You can access your invoice in %{DASHBOARD} on the Fab Lab website."
your_dashboard: "your dashboard"
please_find_attached_html: "Si veda la fattura allegata del {DATE}, con un importo di {AMOUNT} per quanto riguarda {TYPE, select, Reservation{la tua prenotazione} OrderItem{il tuo ordine} other{il tuo abbonamento}}." #messageFormat interpolation
invoice_in_your_dashboard_html: "Puoi accedere alla tua fattura dalla %{DASHBOARD} sul sito web del Fab Lab."
your_dashboard: "tua scrivania"
notify_member_reservation_reminder:
subject: "Reservation reminder"
subject: "Promemoria di prenotazione"
body:
this_is_a_reminder_about_your_reservation_RESERVABLE_to_be_held_on_DATE_html: "This is a reminder about your reservation <strong>%{RESERVABLE}</strong> to be held on <em>%{DATE}</em>"
this_reservation_concerns_the_following_slots: "This reservation concerns the following slots:"
this_is_a_reminder_about_your_reservation_RESERVABLE_to_be_held_on_DATE_html: "Questo è un promemoria sulla tua prenotazione <strong>%{RESERVABLE}</strong> fatta per il <em>%{DATE}</em>"
this_reservation_concerns_the_following_slots: "Questa prenotazione riguarda i seguenti slot orari:"
notify_member_avoir_ready:
subject: "Your FabLab's refund invoice"
subject: "La fattura di rimborso del tuo Fab Lab"
body:
please_find_attached_html: "Please find as attached file your refund invoice from {DATE}, with an amount of {AMOUNT} concerning your {TYPE, select, Reservation{reservation} WalletTransaction{wallet credit} other{subscription}}." #messageFormat interpolation
invoice_in_your_dashboard_html: "You can access your refund invoice in %{DASHBOARD} on the Fab Lab website."
your_dashboard: "your dashboard"
please_find_attached_html: "Si veda la fattura allegata del {DATE}, con un importo di {AMOUNT} per quanto riguarda {TYPE, select, Reservation{la tua prenotazione} WalletTransaction{il tuo ordine} other{il tuo abbonamento}}." #messageFormat interpolation
invoice_in_your_dashboard_html: "Puoi accedere alla tua fattura di rimborso dalla %{DASHBOARD} sul sito web di Fab Lab."
your_dashboard: "tua scrivania"
notify_member_subscription_will_expire_in_7_days:
subject: "Your subscription expires in 7 days"
subject: "Il tuo abbonamento scade tra 7 giorni"
body:
your_plan: "you plan"
expires_in_7_days: "will expire in 7 days."
to_renew_your_plan_follow_the_link: "Please, follow this link to renew your plan"
your_plan: "il tuo abbonamento"
expires_in_7_days: "scadrà tra 7 giorni."
to_renew_your_plan_follow_the_link: "Segui questo link per rinnovare il tuo abbonamento"
notify_member_training_authorization_expired:
subject: "Your authorization was revoked"
subject: "La tua autorizzazione è stata revocata"
body:
training_expired_html: "<p>You took the %{TRAINING} training, on %{DATE}.</p><p>Your authorization for this training, valid for %{PERIOD} months, has expired.</p><p>Please validate it again in order to be able to reserve the %{MACHINES}</p>."
training_expired_html: "<p>Hai ottenuto la certificazione per %{TRAINING}, il %{DATE}.</p><p>La tua certificazione valida per %{PERIOD} mesi, è scaduta.</p><p>Si prega di convalidarla di nuovo per poter prenotare il %{MACHINES}</p>."
notify_member_training_auto_cancelled:
subject: "Your training session was cancelled"
subject: "La tua sessione per la certificazione è stata annullata"
body:
cancelled_training: "The %{TRAINING} training session scheduled for %{DATE}, from %{START} to %{END} has been canceled due to an insufficient number of participants."
auto_refund: "You were refunded on your wallet and a credit note should be available."
cancelled_training: "La sessione di certificazione %{TRAINING} prevista per %{DATE}, da %{START} a %{END} è stata annullata a causa di un numero insufficiente di partecipanti."
auto_refund: "Sei stato rimborsato sul tuo portafoglio e una nota di credito dovrebbe essere disponibile."
notify_member_training_invalidated:
subject: "Your authorization was invalidated"
subject: "La tua autorizzazione è stata invalidata"
body:
training_invalidated_html: "<p>You took the %{TRAINING} training, on %{DATE} giving you access to the %{MACHINES}.</p><p>Due to the lack of reservations for one of these machines during the last %{PERIOD} months, your authorization has been invalidated.</p><p>Please validate the training again in order to continue reserving these machines.</p>."
training_invalidated_html: "<p>Hai preso la certificazione %{TRAINING}, il %{DATE} che ti permette di usare %{MACHINES}.</p><p>A causa della mancanza di prenotazioni per una di queste macchine durante gli ultimi %{PERIOD} mesi, la tua autorizzazione è stata invalidata.</p><p>Si prega di convalidare nuovamente l'addestramento per continuare a prenotare queste macchine.</p>."
notify_member_subscription_is_expired:
subject: "Your subscription has expired"
subject: "La tua iscrizione è scaduta"
body:
your_plan: "You plan"
has_expired: "has expired."
you_can_go_to: "Please go to"
to_renew_your_plan: "to renew you plan"
your_plan: "Il tuo abbonamento"
has_expired: "è scaduto."
you_can_go_to: "Per favore, vai a"
to_renew_your_plan: "per rinnovare il piano"
notify_admin_subscription_will_expire_in_7_days:
subject: "A member subscription expires in 7 days"
subject: "Un abbonamento membro scade tra 7 giorni"
body:
subscription_will_expire_html: "Subscription plan for user %{NAME} <strong><em>%{PLAN}</em></strong> will expire in 7 days."
subscription_will_expire_html: "Il piano di abbonamento per l'utente %{NAME} <strong><em>%{PLAN}</em></strong> scadrà tra 7 giorni."
notify_admin_training_auto_cancelled:
subject: "A training was automatically cancelled"
subject: "Una certificazione è stata annullata automaticamente"
body:
cancelled_training: "The %{TRAINING} training session scheduled for %{DATE}, from %{START} to %{END} has been automatically canceled due to an insufficient number of participants."
auto_refund: "The members who have booked this training session were automatically refunded on their wallet and credit notes was generated."
manual_refund: "Please manually refund all members who have booked this training session and generate the credit notes."
cancelled_training: "La sessione di certificazione %{TRAINING} prevista per %{DATE}, da %{START} a %{END} è stata annullata a causa di un numero insufficiente di partecipanti."
auto_refund: "I membri che hanno prenotato questa certificazione sono stati automaticamente rimborsati sul loro portafoglio e le note di credito sono state generate."
manual_refund: "Si prega di rimborsare manualmente tutti i membri che hanno prenotato questa sessione di allenamento e generare le note di credito."
notify_admin_subscription_is_expired:
subject: "A member subscription has expired"
subject: "L'iscrizione di un membro è scaduta"
body:
subscription_expired_html: "Subscription plan for user %{NAME} <strong><em>%{PLAN}</em></strong> is now expired."
subscription_expired_html: "Il piano di abbonamento per l'utente %{NAME} <strong><em>%{PLAN}</em></strong> è scaduto ora."
notify_admin_subscription_canceled:
subject: "A member subscription has been cancelled"
subject: "L'abbonamento di un membro è stato annullato"
body:
subscription_canceled_html: "Subscription <strong><em>%{PLAN}</em></strong> for user %{NAME} has been cancelled."
subscription_canceled_html: "L'abbonamento <strong><em>%{PLAN}</em></strong> per l'utente %{NAME} è stato annullato."
notify_member_subscription_canceled:
subject: "Your subscription has been cancelled"
subject: "La tua iscrizione è stato annullata"
body:
your_plan_was_canceled: "Your subscription plan has been cancelled."
your_plan: "your subscription plan"
end_at: "ends on"
your_plan_was_canceled: "La tua iscrizione è stato annullata."
your_plan: "il tuo abbonamento"
end_at: "termina il"
notify_member_slot_is_canceled:
subject: "Your reservation has been canceled"
subject: "La tua prenotazione è stata annullata"
body:
reservation_canceled: "Your reservation for %{RESERVABLE} has been canceled"
reservation_canceled: "La tua prenotazione per %{RESERVABLE} è stata annullata"
notify_admin_slot_is_canceled:
subject: "A reservation has been cancelled"
subject: "Una prenotazione è stata annullata"
body:
member_cancelled: "User %{NAME} has cancelled his reservation"
item_details: "%{START} - %{END}, concerning %{RESERVABLE}"
generate_refund: "Do not forget to generate a credit note or a refund for this cancellation."
member_cancelled: "L'utente %{NAME} ha annullato la sua prenotazione"
item_details: "%{START} - %{END}, relativo a %{RESERVABLE}"
generate_refund: "Non dimenticare di generare una nota di credito o un rimborso per questa cancellazione."
notify_admin_when_user_is_imported:
subject: "A user account has been imported from the SSO"
subject: "Un account utente è stato importato dall'SSO"
body:
new_account_imported: "A new user account (ID: %{ID}) has been imported to the website via %{PROVIDER}."
provider_uid: "its provider ID is: "
known_information: "Here is what we know about this provider:"
address_already_used: "This address is already associated with another user"
no_more_info_available: "No other info about this user can be provided before he completes his profile."
new_account_imported: "Un nuovo account utente (ID: %{ID}) è stato importato sul sito web tramite %{PROVIDER}."
provider_uid: "il suo ID provider è: "
known_information: "Ecco cosa sappiamo di questo fornitore:"
address_already_used: "Questo indirizzo è già associato ad un altro utente"
no_more_info_available: "Nessuna altra informazione su questo utente può essere fornita prima che questi completi il suo profilo."
notify_user_profile_complete:
subject: "You now have access to the whole website"
subject: "Ora hai accesso a tutto il sito web"
body:
message: "Your account informations has been correctly updated, you now have access to the whole website."
message: "Le informazioni del tuo account sono state correttamente aggiornate, ora hai accesso all'intero sito web."
notify_user_auth_migration:
subject: "Important change to your FabLab account"
subject: "Modifica importante al tuo account FabLab"
body:
the_platform: "the website"
is_changing_its_auth_system_and_will_now_use: "is actually changing its user identification system and will use"
instead_of: "instead of"
consequence_of_the_modification: "Because of this change you won't be able to login to the website with your actual usernames"
to_use_the_platform_thanks_for: "To keep on using the website, please"
create_an_account_on: "create an account on"
or_use_an_existing_account_clicking_here: "or use an existing account by clicking here"
in_case_of_problem_enter_the_following_code: "In case of problem with this link, you can enter the following code at your first connection attempt in order to migrate your actual account into the new authentification system:"
the_platform: "il sito web"
is_changing_its_auth_system_and_will_now_use: "sta effettivamente cambiando il suo sistema di identificazione degli utenti e userà"
instead_of: "invece di"
consequence_of_the_modification: "A causa di questa modifica non sarai in grado di accedere al sito web con i tuoi attuali nomi utente"
to_use_the_platform_thanks_for: "Per continuare a utilizzare il sito web, si prega di"
create_an_account_on: "crea un account su"
or_use_an_existing_account_clicking_here: "o utilizzare un account esistente cliccando qui"
in_case_of_problem_enter_the_following_code: "In caso di problema con questo link, è possibile inserire il seguente codice al primo tentativo di connessione al fine di migrare il proprio account nel nuovo sistema di autenticazione:"
notify_admin_user_merged:
subject: "An imported account has been merged with an existing account"
subject: "Un account importato è stato unito con un account esistente"
body:
imported_account_merged: "A previously imported user account via %{PROVIDER) has been merged with the existing account %{NAME}"
provider_uid: "its provider ID is:"
imported_account_merged: "Un account utente precedentemente importato tramite %{PROVIDER) è stato unito con l'account esistente %{NAME}"
provider_uid: "il suo ID provider è:"
notify_admin_profile_complete:
subject: "An imported account has completed its profile"
subject: "Un account importato ha completato il suo profilo"
body:
account_completed: "An user account has completed its profile:"
imported_account_completed: "An user account, previously imported through %{PROVIDER}, has completed its profile:"
provider_id: "its provider ID is:"
account_completed: "Un account importato ha completato il suo profilo:"
imported_account_completed: "Un account utente, precedentemente importato attraverso %{PROVIDER}, ha completato il suo profilo:"
provider_id: "il suo ID provider è:"
notify_admin_abuse_reported:
subject: "An abusive content has been reported"
subject: "È stato segnalato un contenuto inappropriato"
body:
intro: "A user has flagged a content as abusive"
signaled_content: "flagged content:"
signaled_by: "flagged by:"
signaled_on: "flagged on:"
message: "Message:"
visit_management_interface: "Refer to the Reporting Management Interface for more information."
intro: "Un utente ha contrassegnato un contenuto come abusivo"
signaled_content: "contenuto contrassegnato:"
signaled_by: "segnalato da:"
signaled_on: "contrassegnato su:"
message: "Messaggio:"
visit_management_interface: "Consultare l'interfaccia di gestione delle segnalazioni per maggiori informazioni."
notify_user_wallet_is_credited:
subject: "Your wallet has been credited"
subject: "Il tuo portafoglio è stato accreditato"
body:
wallet_credit_html: "Your wallet has been credited %{AMOUNT} by administrator."
wallet_credit_html: "Il tuo portafoglio è stato accreditato %{AMOUNT} dall'amministratore."
notify_admin_user_wallet_is_credited:
subject: "The wallet of an user has been credited"
subject: "Il portafoglio di un utente è stato accreditato"
body:
wallet_credit_html: "The wallet of member %{USER} has been credited %{AMOUNT} by administrator %{ADMIN}."
wallet_credit_html: "Il portafoglio del membro %{USER} è stato accreditato %{AMOUNT} dall'amministratore %{ADMIN}."
notify_admin_export_complete:
subject: "Export completed"
subject: "Esportazione completata"
body:
you_asked_for_an_export: "You asked for an export"
statistics_global: "of all the statistics"
statistics_account: "of the registration statistics"
statistics_event: "of statistics about events"
statistics_machine: "of statistics about machine slots"
statistics_project: "of statistics about projects"
statistics_subscription: "of subscription statistics"
statistics_training: "of statistics about trainings"
statistics_space: "of statistics about spaces"
users_members: "of the members' list"
users_subscriptions: "of the subscriptions' list"
users_reservations: "of the reservations' list"
availabilities_index: "of the reservations availabilities"
accounting_acd: "of the accounting data to ACD"
accounting_vat: "of the collected VAT data"
click_to_download: "Excel file generated successfully. To download it, click"
here: "here"
you_asked_for_an_export: "Hai richiesto un'esportazione"
statistics_global: "di tutte le statistiche"
statistics_account: "delle statistiche sulle registrazioni"
statistics_event: "delle statistiche sugli eventi"
statistics_machine: "delle statistiche sugli slot macchina"
statistics_project: "delle statistiche sui progetti"
statistics_subscription: "delle statistiche delle sottoscrizioni"
statistics_training: "delle statistiche sulle certificazioni"
statistics_space: "delle statistiche sugli spazi"
users_members: "dell'elenco dei membri"
users_subscriptions: "della lista degli abbonamenti"
users_reservations: "della lista delle prenotazioni"
availabilities_index: "della disponibilità delle prenotazioni"
accounting_acd: "dei dati contabili verso ACD"
accounting_vat: "dei dati IVA raccolti"
click_to_download: "Foglio di calcolo generato con successo. Per scaricarlo, fare clic su"
here: "qui"
file_type:
xlsx: "Excel"
xlsx: "xlsx"
csv: "CSV"
notify_admin_import_complete:
subject: "Import completed"
subject: "Importazione completata"
body:
you_made_an_import: "You have initiated an import %{CATEGORY}"
category_members: "of the members"
click_to_view_results: "Click here to view results"
you_made_an_import: "Hai avviato un'importazione %{CATEGORY}"
category_members: "dei membri"
click_to_view_results: "Clicca qui per vedere i risultati"
notify_admin_low_stock_threshold:
subject: "Low stock alert"
subject: "Avviso scorte ridotte"
body:
low_stock: "A new stock movement of %{PRODUCT} has exceeded the low stock threshold."
stocks_state_html: "Current stock status: <ul><li>internal: %{INTERNAL}</li><li>external: %{EXTERNAL}</li></ul>"
manage_stock: "Manage stocks for this product"
low_stock: "Un nuovo movimento di magazzino di %{PRODUCT} ha superato la soglia inferiore di stock."
stocks_state_html: "Stato attuale del magazzino: <ul><li>interno: %{INTERNAL}</li><li>esterno: %{EXTERNAL}</li></ul>"
manage_stock: "Gestisci scorte per questo prodotto"
notify_member_about_coupon:
subject: "Coupon"
subject: "Buono acquisto"
body:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Enjoy a discount of %{PERCENT}% on the whole site with the code %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Enjoy a discount of %{AMOUNT} on the whole site with the code %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "This coupon is valid {USAGE, plural, =1{just once} other{many times}}: for all your purchases {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, from now {DATE, select, NO-DATE{and without time limit} other{and until {DATE}}}."
enjoy_a_discount_of_PERCENT_with_code_CODE: "Goditi uno sconto di %{PERCENT}% su tutto il sito con il codice %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Goditi uno sconto di %{AMOUNT}% su tutto il sito con il codice %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Questo buono è valido {USAGE, plural, =1{just once} other{many times}}: per tutti i tuoi acquisti {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, da adesso {DATE, select, NO-DATE{and without time limit} other{e fino al {DATE}}}."
notify_admin_free_disk_space:
subject: "Low disk space"
body: "Warning: available disk space on the server hosting Fab-manager is less than %{THRESHOLD} MiB. This can affect its operation and prevent saving some data. Currently, %{AVAILABLE} MiB of free disk space remains available on the mount point."
subject: "Spazio su disco in esaurimento"
body: "Attenzione: lo spazio su disco disponibile sul server che ospita Fab-manager è inferiore a %{THRESHOLD} MiB. Questo può influenzare il suo funzionamento e impedire il salvataggio di alcuni dati. Attualmente, %{AVAILABLE} MiB di spazio libero su disco rimane disponibile nel punto di montaggio."
notify_admin_close_period_reminder:
subject: "Remind to close your accounting periods"
subject: "Ricorda di chiudere i tuoi periodi contabili"
body:
warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}."
warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}."
warning_last_closed_period_over_1_year: "Ricorda di chiudere periodicamente i tuoi esercizi contabili. L'ultimo periodo chiuso è terminato il %{LAST_END}."
warning_no_closed_periods: "Ricorda di chiudere periodicamente i tuoi esercizi contabili. Devi chiudere i periodi dal %{FIRST_DATE}."
notify_admin_archive_complete:
subject: "Archiving completed"
subject: "Archiviazione completata"
body:
archive_complete: "You have closed the accounting period from %{START} to %{END}. Archiving of data is now complete."
click_to_download: "To download the ZIP archive, click"
here: "here."
save_on_secured: "Remember that you must save this archive on a secured external support, which may be requested by the tax authorities during a check."
archive_complete: "Hai chiuso il periodo contabile dal %{START} al %{END}. L'archiviazione dei dati è ora completa."
click_to_download: "Per scaricare l'archivio ZIP, fare clic"
here: "qui."
save_on_secured: "Ricorda che è necessario salvare questo archivio su un supporto esterno sicuro, può essere richiesto dalle autorità fiscali durante un controllo."
notify_privacy_policy_changed:
subject: "Privacy policy updated"
subject: "Informativa sulla privacy aggiornata"
body:
content_html: "<p>We wish to inform you that we have just updated our privacy policy.</p><p>We may change our privacy policy regularly. In accordance with the regulations, you will receive a notification for each update.</p><p>By accessing or using our services after the privacy policy update, we will consider that you agree its terms, updates included.</p>"
link_to_policy: "Click here to view the privacy policy."
content_html: "<p>Ti informiamo che abbiamo appena aggiornato la nostra politica sulla privacy.</p><p>Possiamo modificare regolarmente la nostra politica sulla privacy. In conformità con le regole, riceverai una notifica per ogni aggiornamento.</p><p>Accedendo o utilizzando i nostri servizi dopo l'aggiornamento dell'informativa sulla privacy, considereremo accettati i suoi termini, aggiornamenti inclusi.</p>"
link_to_policy: "Clicca qui per leggere l'informativa sulla privacy."
notify_admin_refund_created:
subject: "A refund has been generated"
subject: "Un rimborso è stato generato"
body:
refund_created: "A refund of %{AMOUNT} has been generated on invoice %{INVOICE} of user %{USER}"
wallet_refund_created: "A refund of %{AMOUNT} has been generated for the credit of the wallet of user %{USER}"
download: "Click here to download this refund invoice"
refund_created: "È stato generato un rimborso di %{AMOUNT} sulla fattura %{INVOICE} dell'utente %{USER}"
wallet_refund_created: "È stato generato un rimborso di %{AMOUNT} per il credito del portafoglio dell'utente %{USER}"
download: "Clicca qui per scaricare questa fattura di rimborso"
notify_admins_role_update:
subject: "The role of a user has changed"
subject: "Il ruolo di un utente è cambiato"
body:
user_role_changed_html: "The role of the user <em><strong>%{NAME}</strong></em> has changed."
previous_role: "Previous role:"
new_role: "New role:"
user_role_changed_html: "Il ruolo dell'utente <em><strong>%{NAME}</strong></em> è cambiato."
previous_role: "Ruolo precedente:"
new_role: "Nuovo ruolo:"
notify_user_role_update:
subject: "Your role has changed"
subject: "Il tuo ruolo è cambiato"
body:
role_changed_html: "Your role at {GENDER, select, male{the} female{the} neutral{} other{the}} {NAME} has changed. You are now <strong>{ROLE}</strong>.<br/>With great power comes great responsibility, use your new privileges fairly and respectfully."
role_changed_html: "Il tuo ruolo su {GENDER, select, male{il} female{il} neutral{} other{il}} {NAME} è cambiato. Ora sei <strong>{ROLE}</strong><br/>Da grandi poteri derivano grandi responsabilità, usa i tuoi nuovi privilegi in modo saggio e rispettoso."
notify_admin_objects_stripe_sync:
subject: "Stripe synchronization"
subject: "Sincronizzazione Stripe"
body:
objects_sync: "All members, coupons, machines, trainings, spaces and plans were successfully synchronized on Stripe."
objects_sync: "Tutti i membri, buoni, macchine, certificazioni, spazi e piani sono stati sincronizzati con successo su Stripe."
notify_admin_order_is_paid:
subject: "New order"
subject: "Nuovo ordine"
body:
order_placed: "A new order (%{REFERENCE}) has been placed and paid by %{USER}."
order_placed: "Un nuovo ordine (%{REFERENCE}) è stato effettuato e pagato da %{USER}."
view_details: ""
notify_member_payment_schedule_ready:
subject: "Your payment schedule"
subject: "Il tuo programma di pagamento"
body:
please_find_attached_html: "Please find attached your payment schedule, issued on {DATE}, with an amount of {AMOUNT} concerning your {TYPE, select, Reservation{reservation} other{subscription}}." #messageFormat interpolation
schedule_in_your_dashboard_html: "You can find this payment schedule at any time from %{DASHBOARD} on the Fab Lab's website."
your_dashboard: "your dashboard"
please_find_attached_html: "Si veda il programma di pagamento allegato, emesso il {DATE}, con un importo di {AMOUNT} per quanto riguarda {TYPE, select, Reservation{la tua prenotazione} other{il tuo abbonamento}}." #messageFormat interpolation
schedule_in_your_dashboard_html: "Puoi avvedere al programma di pagamento in qualsiasi momento dalla %{DASHBOARD} sul sito web di Fab Lab."
your_dashboard: "tua scrivania"
notify_admin_payment_schedule_error:
subject: "[URGENT] Card debit error"
subject: "[URGENT] Errore carta di debito"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, an error occurred and this card debit was unable to complete successfully."
action: "Please then consult the %{GATEWAY} dashboard and contact the member as soon as possible to resolve the problem."
remember: "In conformità con il calendario dei pagamenti di %{REFERENCE}, un addebito tramite carta di %{AMOUNT} è stato programmato per il %{DATE}."
error: "Sfortunatamente, si è verificato un errore e questo addebito su carta non è stato portato a termine con successo."
action: "Si prega di consultare il pannello %{GATEWAY} e contattare il membro al più presto per risolvere il problema."
notify_member_payment_schedule_error:
subject: "[URGENT] Card debit error"
subject: "[URGENT] Errore carta di debito"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, an error occurred and this card debit was unable to complete successfully."
action: "Please contact a manager as soon as possible to resolve the problem."
remember: "In conformità con il tuo programma dei pagamenti in %{REFERENCE}, un addebito su carta di %{AMOUNT} è stato programmato per il %{DATE}."
error: "Sfortunatamente, si è verificato un errore e questo addebito su carta non è stato completato con successo."
action: "Si prega di contattare un manager il prima possibile per risolvere il problema."
notify_admin_payment_schedule_failed:
subject: "[URGENT] Card debit failure"
subject: "[URGENT] Carte di debito fallita"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, this card debit was unable to complete successfully."
action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled."
remember: "In conformità con il calendario dei pagamenti di %{REFERENCE}, un addebito su carta di %{AMOUNT} è stato programmato per il %{DATE}."
error: "Sfortunatamente, questo addebito su carta non è stato completato con successo."
action: "Si prega di contattare il membro il prima possibile, quindi andare all'interfaccia di gestione delle scadenze dei pagamento per risolvere il problema. Dopo un certo periodo di tempo, l'abbonamento alla carta potrebbe essere annullato."
notify_member_payment_schedule_failed:
subject: "[URGENT] Card debit failure"
subject: "[URGENT] Carte di debito fallita"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, this card debit was unable to complete successfully."
action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted."
your_dashboard: "your dashboard"
remember: "In conformità con il tuo programma dei pagamenti in %{REFERENCE}, un addebito su carta di %{AMOUNT} è stato programmato per il %{DATE}."
error: "Sfortunatamente, questo addebito su carta non è stato completato con successo."
action_html: "Controlla %{DASHBOARD} o contatta rapidamente un manager, altrimenti il tuo abbonamento potrebbe essere interrotto."
your_dashboard: "tua scrivania"
notify_admin_payment_schedule_gateway_canceled:
subject: "[URGENT] Payment schedule canceled by the payment gateway"
subject: "[URGENT] Programma di pagamento annullato dal gateway dei pagamenti"
body:
error: "The payment schedule %{REFERENCE} was canceled by the payment gateway (%{GATEWAY}). No further debits will be made on this payment mean."
action: "Please consult the payment schedule management interface and contact the member as soon as possible to resolve the problem."
error: "Il pagamento programmato %{REFERENCE} è stato annullato dal gateway dei pagamenti (%{GATEWAY}). Nessun ulteriore addebito sarà effettuato su questo mezzo di pagamento."
action: "Si prega di consultare l'interfaccia di gestione dei pagamenti programmati e contattare il membro al più presto per risolvere il problema."
notify_member_payment_schedule_gateway_canceled:
subject: "[URGENT] Payment schedule canceled by the payment gateway"
subject: "[URGENT] Programma di pagamento annullato dal gateway dei pagamenti"
body:
error: "Your payment schedule %{REFERENCE} was canceled by the payment gateway. No further debits will be made on this payment mean."
action: "Please contact a manager as soon as possible to resolve the problem."
error: "Il tuo pagamento programmato %{REFERENCE} è stato annullato dal gateway dei pagamenti. Nessun ulteriore addebito sarà effettuato su questo mezzo di pagamento."
action: "Si prega di contattare un manager il prima possibile per risolvere il problema."
notify_admin_payment_schedule_check_deadline:
subject: "Payment deadline"
subject: "Termine per il pagamento"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}."
date: "This is a reminder to cash the scheduled check as soon as possible."
confirm: "Do not forget to confirm the receipt in your payment schedule management interface, so that the corresponding invoice will be generated."
remember: "In conformità con il calendario dei pagamenti di %{REFERENCE}, %{AMOUNT} doveva essere addebitato il %{DATE}."
date: "Questo è un promemoria per incassare il controllo programmato il più presto possibile."
confirm: "Non dimenticate di confermare la ricevuta nella vostra interfaccia di gestione del programma dei pagamenti, in modo che la fattura corrispondente venga generata."
notify_member_payment_schedule_transfer_deadline:
subject: "Payment deadline"
subject: "Termine per il pagamento"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}."
date: "This is a reminder to verify that the direct bank debit was successfull."
confirm: "Please confirm the receipt of funds in your payment schedule management interface, so that the corresponding invoice will be generated."
remember: "In conformità con il tuo programma dei pagamenti in %{REFERENCE}, %{AMOUNT} doveva essere addebitato il %{DATE}."
date: "Questo è un promemoria per verificare che l'addebito bancario diretto sia andato a buon fine."
confirm: "Si prega di confermare la ricezione dei fondi nell'interfaccia di gestione dei pagamenti programmati, in modo che la fattura corrispondente venga generata."
notify_member_reservation_limit_reached:
subject: "Daily reservation limit reached"
subject: "Limite giornaliero per la prenotazione raggiunto"
body:
limit_reached: "For %{DATE}, you have reached your daily limit of %{HOURS} hours of %{ITEM} reservation."
limit_reached: "Per %{DATE} hai raggiunto il limite giornaliero di %{HOURS} ore di prenotazione per %{ITEM}."
notify_admin_user_supporting_document_files_created:
subject: "Supporting documents uploaded by a member"
subject: "Documenti aggiuntivi caricati da un membro"
body:
supporting_document_files_uploaded_below: "Member %{NAME} has uploaded the following supporting documents:"
validate_user: "Please validate this account"
supporting_document_files_uploaded_below: "Il membro %{NAME} ha caricato i seguenti documenti di supporto:"
validate_user: "Convalida questo account"
notify_admin_user_supporting_document_files_updated:
subject: "Member's supporting documents have changed"
subject: "I documenti aggiuntivi del membro sono stati modificati"
body:
user_update_supporting_document_file: "Member %{NAME} has modified the supporting documents below:"
validate_user: "Please validate this account"
user_update_supporting_document_file: "Il membro %{NAME} ha modificato i documenti aggiuntivi qui sotto:"
validate_user: "Convalida questo account"
notify_user_is_validated:
subject: "Account validated"
subject: "Account convalidato"
body:
account_validated: "Your account was validated. Now, you have access to booking features."
account_validated: "Il tuo account è stato convalidato. Ora hai accesso alle funzionalità di prenotazione."
notify_user_is_invalidated:
subject: "Account invalidated"
subject: "Account invalidato"
body:
account_invalidated: "Your account was invalidated. You won't be able to book anymore, until your account is validated again."
account_invalidated: "Il tuo account è stato invalidato. Non sarai più in grado di prenotare finché il tuo account non sarà nuovamente convalidato."
notify_user_supporting_document_refusal:
subject: "Your supporting documents were refused"
subject: "I tuoi documenti aggiuntivi sono stati rifiutati"
body:
user_supporting_document_files_refusal: "Your supporting documents were refused:"
action: "Please re-upload some new supporting documents."
user_supporting_document_files_refusal: "I tuoi documenti aggiuntivi sono stati rifiutati:"
action: "Si prega di ricaricare nuovi documenti di supporto."
notify_admin_user_supporting_document_refusal:
subject: "A member's supporting documents were refused"
subject: "I documenti aggiuntivi di un membro sono stati rifiutati"
body:
user_supporting_document_files_refusal: "Member %{NAME}'s supporting documents were rejected by %{OPERATOR}:"
user_supporting_document_files_refusal: "I documenti aggiuntivi del membro %{NAME} sono stati rifiutati da %{OPERATOR}:"
shared:
hello: "Hello %{user_name}"
hello: "Ciao %{user_name}"
notify_user_order_is_ready:
subject: "Your command is ready"
subject: "Il tuo comando è pronto"
body:
notify_user_order_is_ready: "Your command %{REFERENCE} is ready:"
notify_user_order_is_ready: "Il tuo comando %{REFERENCE} è pronto:"
notify_user_order_is_canceled:
subject: "Your command was canceled"
subject: "Il tuo comando è stato annullato"
body:
notify_user_order_is_canceled: "Your command %{REFERENCE} was canceled."
notify_user_order_is_canceled: "Il tuo comando %{REFERENCE} è stato annullato."
notify_user_order_is_refunded:
subject: "Your command was refunded"
subject: "Il tuo comando è stato rimborsato"
body:
notify_user_order_is_refunded: "Your command %{REFERENCE} was refunded."
notify_user_order_is_refunded: "Il tuo comando %{REFERENCE} è stato rimborsato."

View File

@ -0,0 +1,215 @@
it-CH:
activerecord:
errors:
messages:
record_invalid: 'Validazione fallita: %{errors}'
restrict_dependent_destroy:
has_one: Il record non può essere cancellato perchè esiste un %{record} dipendente
has_many: Il record non può essere cancellato perchè esistono %{record} dipendenti
date:
abbr_day_names:
- Dom
- Lun
- Mar
- Mer
- Gio
- Ven
- Sab
abbr_month_names:
-
- Gen
- Feb
- Mar
- Apr
- Mag
- Giu
- Lug
- Ago
- Set
- Ott
- Nov
- Dic
day_names:
- Domenica
- Lunedì
- Martedì
- Mercoledì
- Giovedì
- Venerdì
- Sabato
formats:
default: "%d-%m-%Y"
long: "%d %B %Y"
short: "%d %b"
month_names:
-
- Gennaio
- Febbraio
- Marzo
- Aprile
- Maggio
- Giugno
- Luglio
- Agosto
- Settembre
- Ottobre
- Novembre
- Dicembre
order:
- :day
- :month
- :year
datetime:
distance_in_words:
about_x_hours:
one: circa un'ora
other: circa %{count} ore
about_x_months:
one: circa un mese
other: circa %{count} mesi
about_x_years:
one: circa un anno
other: circa %{count} anni
almost_x_years:
one: circa %{count} anno
other: circa %{count} anni
half_a_minute: mezzo minuto
less_than_x_seconds:
one: meno di un secondo
other: meno di %{count} secondi
less_than_x_minutes:
one: meno di un minuto
other: meno di %{count} minuti
over_x_years:
one: oltre un anno
other: oltre %{count} anni
x_seconds:
one: "%{count} secondo"
other: "%{count} secondi"
x_minutes:
one: "%{count} minuto"
other: "%{count} minuti"
x_days:
one: "%{count} giorno"
other: "%{count} giorni"
x_months:
one: "%{count} mese"
other: "%{count} mesi"
x_years:
one: "%{count} anno"
other: "%{count} anni"
prompts:
second: Secondi
minute: Minuto
hour: Ora
day: Giorno
month: Mese
year: Anno
errors:
format: "%{attribute} %{message}"
messages:
accepted: deve essere accettata
blank: non può essere lasciato in bianco
confirmation: non coincide con %{attribute}
empty: non può essere vuoto
equal_to: deve essere uguale a %{count}
even: deve essere pari
exclusion: è riservato
greater_than: deve essere superiore a %{count}
greater_than_or_equal_to: deve essere superiore o uguale a %{count}
inclusion: non è incluso nella lista
invalid: non è valido
less_than: deve essere meno di %{count}
less_than_or_equal_to: deve essere meno o uguale a %{count}
model_invalid: 'Validazione fallita: %{errors}'
not_a_number: non è un numero
not_an_integer: non è un intero
odd: deve essere dispari
other_than: devono essere di numero diverso da %{count}
present: deve essere lasciato in bianco
required: deve esistere
taken: è già presente
wrong_content_type: "questo tipo di contenuto non è consentito"
too_long:
one: è troppo lungo (il massimo è %{count} carattere)
other: è troppo lungo (il massimo è %{count} caratteri)
too_short:
one: è troppo corto (il minimo è %{count} carattere)
other: è troppo corto (il minimo è %{count} caratteri)
wrong_length:
one: è della lunghezza sbagliata (deve essere di %{count} carattere)
other: è della lunghezza sbagliata (deve essere di %{count} caratteri)
template:
body: 'Per favore ricontrolla i seguenti campi:'
header:
one: 'Non posso salvare questo %{model}: %{count} errore'
other: 'Non posso salvare questo %{model}: %{count} errori.'
helpers:
select:
prompt: Per favore, seleziona
submit:
create: Crea %{model}
submit: Invia %{model}
update: Aggiorna %{model}
number:
currency:
format:
delimiter: "'"
format: "%u %n"
precision: 2
separator: "."
significant: false
strip_insignificant_zeros: false
unit: CHF
format:
delimiter: ","
precision: 2
separator: "."
significant: false
strip_insignificant_zeros: false
human:
decimal_units:
format: "%n %u"
units:
billion: Miliardi
million: Milioni
quadrillion: Biliardi
thousand: Mila
trillion: Bilioni
unit: ''
format:
delimiter: ''
precision: 1
significant: true
strip_insignificant_zeros: true
storage_units:
format: "%n %u"
units:
byte:
one: Byte
other: Byte
eb: EB
gb: GB
kb: KB
mb: MB
pb: PB
tb: TB
percentage:
format:
delimiter: ''
format: "%n%"
precision:
format:
delimiter: ''
support:
array:
last_word_connector: " e "
two_words_connector: " e "
words_connector: ", "
time:
am: am
formats:
default: "%a %d %b %Y, %H:%M:%S %z"
long: "%d %B %Y %H:%M"
short: "%d %b %H:%M"
pm: pm

215
config/locales/rails.it.yml Normal file
View File

@ -0,0 +1,215 @@
it:
activerecord:
errors:
messages:
record_invalid: 'Validazione fallita: %{errors}'
restrict_dependent_destroy:
has_one: Il record non può essere cancellato perchè esiste un %{record} dipendente
has_many: Il record non può essere cancellato perchè esistono %{record} dipendenti
date:
abbr_day_names:
- dom
- lun
- mar
- mer
- gio
- ven
- sab
abbr_month_names:
-
- gen
- feb
- mar
- apr
- mag
- giu
- lug
- ago
- set
- ott
- nov
- dic
day_names:
- domenica
- lunedì
- martedì
- mercoledì
- giovedì
- venerdì
- sabato
formats:
default: "%d/%m/%Y"
long: "%d %B %Y"
short: "%d %b"
month_names:
-
- gennaio
- febbraio
- marzo
- aprile
- maggio
- giugno
- luglio
- agosto
- settembre
- ottobre
- novembre
- dicembre
order:
- :day
- :month
- :year
datetime:
distance_in_words:
about_x_hours:
one: circa un'ora
other: circa %{count} ore
about_x_months:
one: circa un mese
other: circa %{count} mesi
about_x_years:
one: circa un anno
other: circa %{count} anni
almost_x_years:
one: quasi un anno
other: quasi %{count} anni
half_a_minute: mezzo minuto
less_than_x_seconds:
one: meno di un secondo
other: meno di %{count} secondi
less_than_x_minutes:
one: meno di un minuto
other: meno di %{count} minuti
over_x_years:
one: oltre un anno
other: oltre %{count} anni
x_seconds:
one: "%{count} secondo"
other: "%{count} secondi"
x_minutes:
one: "%{count} minuto"
other: "%{count} minuti"
x_days:
one: "%{count} giorno"
other: "%{count} giorni"
x_months:
one: "%{count} mese"
other: "%{count} mesi"
x_years:
one: "%{count} anno"
other: "%{count} anni"
prompts:
second: Secondi
minute: Minuto
hour: Ora
day: Giorno
month: Mese
year: Anno
errors:
format: "%{attribute} %{message}"
messages:
accepted: deve essere accettata
blank: non può essere lasciato in bianco
confirmation: non coincide con %{attribute}
empty: non può essere vuoto
equal_to: deve essere uguale a %{count}
even: deve essere pari
exclusion: è riservato
greater_than: deve essere maggiore di %{count}
greater_than_or_equal_to: deve essere maggiore o uguale a %{count}
inclusion: non è compreso tra le opzioni disponibili
invalid: non è valido
less_than: deve essere minore di %{count}
less_than_or_equal_to: deve essere minore o uguale a %{count}
model_invalid: 'Validazione fallita: %{errors}'
not_a_number: non è un numero
not_an_integer: non è un numero intero
odd: deve essere dispari
other_than: devono essere di numero diverso da %{count}
present: deve essere lasciato in bianco
required: deve esistere
taken: è già presente
wrong_content_type: "questo tipo di contenuto non è consentito"
too_long:
one: è troppo lungo (il massimo è %{count} carattere)
other: è troppo lungo (il massimo è %{count} caratteri)
too_short:
one: è troppo corto (il minimo è %{count} carattere)
other: è troppo corto (il minimo è %{count} caratteri)
wrong_length:
one: è della lunghezza sbagliata (deve essere di %{count} carattere)
other: è della lunghezza sbagliata (deve essere di %{count} caratteri)
template:
body: 'Ricontrolla i seguenti campi:'
header:
one: 'Non posso salvare questo %{model}: %{count} errore'
other: 'Non posso salvare questo %{model}: %{count} errori.'
helpers:
select:
prompt: Seleziona...
submit:
create: Crea %{model}
submit: Invia %{model}
update: Aggiorna %{model}
number:
currency:
format:
delimiter: "."
format: "%n %u"
precision: 2
separator: ","
significant: false
strip_insignificant_zeros: false
unit: "€"
format:
delimiter: "."
precision: 2
separator: ","
significant: false
strip_insignificant_zeros: false
human:
decimal_units:
format: "%n %u"
units:
billion: Miliardi
million: Milioni
quadrillion: Biliardi
thousand: Mila
trillion: Bilioni
unit: ''
format:
delimiter: ''
precision: 3
significant: true
strip_insignificant_zeros: true
storage_units:
format: "%n %u"
units:
byte:
one: Byte
other: Byte
eb: EB
gb: GB
kb: KB
mb: MB
pb: PB
tb: TB
percentage:
format:
delimiter: ''
format: "%n%"
precision:
format:
delimiter: ''
support:
array:
last_word_connector: " e "
two_words_connector: " e "
words_connector: ", "
time:
am: am
formats:
default: "%a %d %b %Y, %H:%M:%S %z"
long: "%d %B %Y %H:%M"
short: "%d %b %H:%M"
pm: pm

View File

@ -196,7 +196,7 @@ Please, be aware that **the configured locale will imply the CURRENCY symbol use
_Eg.: configuring **es-ES** will set the currency symbol to **€** but **es-MX** will set **$** as currency symbol, so setting the `RAILS_LOCALE` to simple **es** (without country indication) will probably not do what you expect._
Available values: `en, en-AU-CA, en-GB, en-IE, en-IN, en-NZ, en-US, en-ZA, fr, fr-CA, fr-CH, fr-CM, fr-FR, es, es-419, es-AR, es-CL, es-CO, es-CR, es-DO, es-EC, es-ES, es-MX, es-MX, es-PA, es-PE, es-US, es-VE, no, pt, pt-BR, zu`.
Available values: `en, en-AU-CA, en-GB, en-IE, en-IN, en-NZ, en-US, en-ZA, fr, fr-CA, fr-CH, fr-CM, fr-FR, es, es-419, es-AR, es-CL, es-CO, es-CR, es-DO, es-EC, es-ES, es-MX, es-MX, es-PA, es-PE, es-US, es-VE, no, pt, pt-BR, it, it-CH, zu`.
When not defined, it defaults to **en**.
If your locale is not present in that list or any locale doesn't have your exact expectations, please open a pull request to share your modifications with the community and obtain a rebuilt docker image.

View File

@ -28,7 +28,7 @@ class PayZen::Service < Payment::Service
params[:initial_amount] = payzen_amount(first_item.amount)
params[:initial_amount_number] = 1
end
pz_subscription = client.create_subscription(params)
pz_subscription = client.create_subscription(**params)
# save payment token
pgo_tok = PaymentGatewayObject.new(
@ -113,6 +113,8 @@ class PayZen::Service < Payment::Service
def payzen_amount(amount)
currency = Setting.get('payzen_currency')
raise ConfigurationError, 'PayZen currency is not configured. Unable to process online payments.' if currency.nil?
return amount / 100 if zero_decimal_currencies.any? { |s| s.casecmp(currency).zero? }
return amount * 10 if three_decimal_currencies.any? { |s| s.casecmp(currency).zero? }

View File

@ -1,6 +1,6 @@
{
"name": "fab-manager",
"version": "6.0.1",
"version": "6.0.2",
"description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.",
"keywords": [
"fablab",

View File

@ -843,3 +843,12 @@ history_value_99:
created_at: '2022-12-20 14:38:40.000421'
updated_at: '2022-12-20 14:38:40.000421'
invoicing_profile_id: 1
history_value_100:
id: 100
setting_id: 99
value: 'background-color: white;'
created_at: 2023-04-05 09:16:08.000511500 Z
updated_at: 2023-04-05 09:16:08.000511500 Z
invoicing_profile_id: 1

View File

@ -580,3 +580,9 @@ setting_98:
name: machines_module
created_at: 2020-04-15 14:38:40.000421500 Z
updated_at: 2020-04-15 14:38:40.000421500 Z
setting_99:
id: 99
name: home_css
created_at: 2023-04-05 09:16:08.000511500 Z
updated_at: 2023-04-05 09:16:08.000511500 Z

View File

@ -31,6 +31,45 @@ class SettingsTest < ActionDispatch::IntegrationTest
assert_includes setting.history_values.map(&:value), 'Test Fablab', 'current parameter was not saved'
end
test 'bulk update some settings' do
patch '/api/settings/bulk_update',
params: {
settings: [
{ name: 'fablab_name', value: 'Test Fablab' },
{ name: 'name_genre', value: 'male' },
{ name: 'main_color', value: '#ea519a' }
]
}
assert_equal 200, response.status
assert_match Mime[:json].to_s, response.content_type
resp = json_response(response.body)
assert(resp[:settings].any? { |s| s[:name] == 'fablab_name' && s[:value] == 'Test Fablab' })
assert(resp[:settings].any? { |s| s[:name] == 'name_genre' && s[:value] == 'male' })
assert(resp[:settings].any? { |s| s[:name] == 'main_color' && s[:value] == '#ea519a' })
end
test 'transactional bulk update fails' do
old_css = Setting.get('home_css')
old_color = Setting.get('main_color')
patch '/api/settings/bulk_update?transactional=true',
params: {
settings: [
{ name: 'home_css', value: 'INVALID CSS{{!!' },
{ name: 'main_color', value: '#ea519a' }
]
}
assert_equal 200, response.status
assert_match Mime[:json].to_s, response.content_type
resp = json_response(response.body)
assert_not_nil resp[:settings].first[:error]
assert_match(/Error: Invalid CSS after/, resp[:settings].first[:error].first)
# Check values havn't changed
assert_equal old_css, Setting.get('home_css')
assert_equal old_color, Setting.get('main_color')
end
test 'update setting with wrong name' do
put '/api/settings/does_not_exists',
params: {