1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-01-17 06:52:27 +01:00

refactoring i18n keys: trainings + modals + various missings

This commit is contained in:
Sylvain 2019-12-18 13:04:38 +01:00
parent 1124159f2e
commit 14c3abb449
51 changed files with 353 additions and 330 deletions

View File

@ -675,7 +675,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
if (items.length === 0) return `<span class="text-gray text-italic">${_t("app.admin.calendar.none")}</span>`; if (items.length === 0) return `<span class="text-gray text-italic">${_t("app.admin.calendar.none")}</span>`;
const names = items.map(function (i) { return $sce.trustAsHtml(`<strong>${i.name}</strong>`); }); const names = items.map(function (i) { return $sce.trustAsHtml(`<strong>${i.name}</strong>`); });
if (items.length > 1) return names.slice(0, -1).join(', ') + ` ${_t('and')} ` + names[names.length - 1]; if (items.length > 1) return names.slice(0, -1).join(', ') + ` ${_t('app.admin.calendar.and')} ` + names[names.length - 1];
return names[0]; return names[0];
} }

View File

@ -54,15 +54,15 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise
*/ */
$scope.saveGroup = function (data, id) { $scope.saveGroup = function (data, id) {
if (id != null) { if (id != null) {
return Group.update({ id }, { group: data }, response => growl.success(_t('group_form.changes_successfully_saved')) return Group.update({ id }, { group: data }, response => growl.success(_t('app.admin.members.group_form.changes_successfully_saved'))
, error => growl.error(_t('group_form.an_error_occurred_while_saving_changes'))); , error => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes')));
} else { } else {
return Group.save({ group: data }, function (resp) { return Group.save({ group: data }, function (resp) {
growl.success(_t('group_form.new_group_successfully_saved')); growl.success(_t('app.admin.members.group_form.new_group_successfully_saved'));
return $scope.groups[$scope.groups.length - 1].id = resp.id; return $scope.groups[$scope.groups.length - 1].id = resp.id;
} }
, function (error) { , function (error) {
growl.error(_t('.group_forman_error_occurred_when_saving_the_new_group')); growl.error(_t('app.admin.members.group_form.an_error_occurred_when_saving_the_new_group'));
return $scope.groups.splice($scope.groups.length - 1, 1); return $scope.groups.splice($scope.groups.length - 1, 1);
}); });
} }
@ -74,10 +74,10 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise
*/ */
$scope.removeGroup = index => $scope.removeGroup = index =>
Group.delete({ id: $scope.groups[index].id }, function (resp) { Group.delete({ id: $scope.groups[index].id }, function (resp) {
growl.success(_t('group_form.group_successfully_deleted')); growl.success(_t('app.admin.members.group_form.group_successfully_deleted'));
return $scope.groups.splice(index, 1); return $scope.groups.splice(index, 1);
} }
, error => growl.error(_t('group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it'))); , error => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it')));
/** /**
* Enable/disable the group at the specified index * Enable/disable the group at the specified index
@ -86,13 +86,13 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise
return $scope.toggleDisableGroup = function (index) { return $scope.toggleDisableGroup = function (index) {
const group = $scope.groups[index]; const group = $scope.groups[index];
if (!group.disabled && (group.users > 0)) { if (!group.disabled && (group.users > 0)) {
return growl.error(_t('group_form.unable_to_disable_group_with_users', { USERS: group.users })); return growl.error(_t('app.admin.members.group_form.unable_to_disable_group_with_users', { USERS: group.users }));
} else { } else {
return Group.update({ id: group.id }, { group: { disabled: !group.disabled } }, function (response) { return Group.update({ id: group.id }, { group: { disabled: !group.disabled } }, function (response) {
$scope.groups[index] = response; $scope.groups[index] = response;
return growl.success(_t('group_form.group_successfully_enabled_disabled', { STATUS: response.disabled })); return growl.success(_t('app.admin.members.group_form.group_successfully_enabled_disabled', { STATUS: response.disabled }));
} }
, error => growl.error(_t('group_form.unable_to_enable_disable_group', { STATUS: !group.disabled }))); , error => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled })));
} }
}; };
} }

View File

@ -705,8 +705,8 @@ Application.Controllers.controller('AvoirModalController', ['$scope', '$uibModal
// If a subscription was took with the current invoice, should it be canceled or not // If a subscription was took with the current invoice, should it be canceled or not
$scope.subscriptionExpireOptions = {}; $scope.subscriptionExpireOptions = {};
$scope.subscriptionExpireOptions[_t('yes')] = true; $scope.subscriptionExpireOptions[_t('app.shared.buttons.yes')] = true;
$scope.subscriptionExpireOptions[_t('no')] = false; $scope.subscriptionExpireOptions[_t('app.shared.buttons.no')] = false;
// AngularUI-Bootstrap datepicker parameters to define when to refund // AngularUI-Bootstrap datepicker parameters to define when to refund
$scope.datePicker = { $scope.datePicker = {

View File

@ -192,8 +192,8 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce',
resolve: { resolve: {
object () { object () {
return { return {
title: _t('confirmation_required'), title: _t('app.admin.members.confirmation_required'),
msg: $sce.trustAsHtml(_t('confirm_delete_member') + '<br/><br/>' + _t('this_may_take_a_while_please_wait')) msg: $sce.trustAsHtml(_t('app.admin.members.confirm_delete_member') + '<br/><br/>' + _t('app.admin.members.this_may_take_a_while_please_wait'))
}; };
} }
} }
@ -203,9 +203,9 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce',
{ id: memberId }, { id: memberId },
function () { function () {
$scope.members.splice(findItemIdxById($scope.members, memberId), 1); $scope.members.splice(findItemIdxById($scope.members, memberId), 1);
return growl.success(_t('member_successfully_deleted')); return growl.success(_t('app.admin.members.member_successfully_deleted'));
}, },
function (error) { growl.error(_t('unable_to_delete_the_member')); } function (error) { growl.error(_t('app.admin.members.unable_to_delete_the_member')); }
); );
} }
); );
@ -222,8 +222,8 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce',
resolve: { resolve: {
object () { object () {
return { return {
title: _t('confirmation_required'), title: _t('app.admin.members.confirmation_required'),
msg: $sce.trustAsHtml(_t('do_you_really_want_to_delete_this_administrator_this_cannot_be_undone') + '<br/><br/>' + _t('this_may_take_a_while_please_wait')) msg: $sce.trustAsHtml(_t('app.admin.members.do_you_really_want_to_delete_this_administrator_this_cannot_be_undone') + '<br/><br/>' + _t('app.admin.members.this_may_take_a_while_please_wait'))
}; };
} }
} }
@ -233,9 +233,9 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce',
{ id: admin.id }, { id: admin.id },
function () { function () {
admins.splice(findItemIdxById(admins, admin.id), 1); admins.splice(findItemIdxById(admins, admin.id), 1);
return growl.success(_t('administrator_successfully_deleted')); return growl.success(_t('app.admin.members.administrator_successfully_deleted'));
}, },
function (error) { growl.error(_t('unable_to_delete_the_administrator')); } function (error) { growl.error(_t('app.admin.members.unable_to_delete_the_administrator')); }
); );
} }
); );
@ -268,7 +268,7 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce',
$scope.alertExport = function (type) { $scope.alertExport = function (type) {
Export.status({ category: 'users', type }).then(function (res) { Export.status({ category: 'users', type }).then(function (res) {
if (!res.data.exists) { if (!res.data.exists) {
return growl.success(_t('export_is_running_you_ll_be_notified_when_its_ready')); return growl.success(_t('app.admin.members.export_is_running_you_ll_be_notified_when_its_ready'));
} }
}); });
}; };
@ -424,10 +424,10 @@ Application.Controllers.controller('EditMemberController', ['$scope', '$state',
{ id: subscription.id }, { id: subscription.id },
{ subscription: { expired_at: $scope.new_expired_at, free } }, { subscription: { expired_at: $scope.new_expired_at, free } },
function (_subscription) { function (_subscription) {
growl.success(_t('you_successfully_changed_the_expiration_date_of_the_user_s_subscription')); growl.success(_t('app.admin.members_edit.you_successfully_changed_the_expiration_date_of_the_user_s_subscription'));
return $uibModalInstance.close(_subscription); return $uibModalInstance.close(_subscription);
}, },
function (error) { growl.error(_t('a_problem_occurred_while_saving_the_date')); } function (error) { growl.error(_t('app.admin.members_edit.a_problem_occurred_while_saving_the_date')); }
); );
}; };
@ -471,12 +471,12 @@ Application.Controllers.controller('EditMemberController', ['$scope', '$state',
$scope.ok = function () { $scope.ok = function () {
$scope.subscription.user_id = user.id; $scope.subscription.user_id = user.id;
return Subscription.save({ }, { subscription: $scope.subscription }, function (_subscription) { return Subscription.save({ }, { subscription: $scope.subscription }, function (_subscription) {
growl.success(_t('subscription_successfully_purchased')); growl.success(_t('app.admin.members_edit.subscription_successfully_purchased'));
$uibModalInstance.close(_subscription); $uibModalInstance.close(_subscription);
return $state.reload(); return $state.reload();
} }
, function (error) { , function (error) {
growl.error(_t('a_problem_occurred_while_taking_the_subscription')); growl.error(_t('app.admin.members_edit.a_problem_occurred_while_taking_the_subscription'));
console.error(error); console.error(error);
}); });
}; };
@ -536,11 +536,11 @@ Application.Controllers.controller('EditMemberController', ['$scope', '$state',
avoir_description: $scope.description avoir_description: $scope.description
}, },
function (_wallet) { function (_wallet) {
growl.success(_t('wallet_credit_successfully')); growl.success(_t('app.shared.wallet.wallet_credit_successfully'));
return $uibModalInstance.close(_wallet); return $uibModalInstance.close(_wallet);
}, },
function (error) { function (error) {
growl.error(_t('a_problem_occurred_for_wallet_credit')); growl.error(_t('app.shared.wallet.a_problem_occurred_for_wallet_credit'));
console.error(error); console.error(error);
} }
); );
@ -750,11 +750,11 @@ Application.Controllers.controller('NewAdminController', ['$state', '$scope', 'A
{}, {},
{ admin: $scope.admin }, { admin: $scope.admin },
function () { function () {
growl.success(_t('administrator_successfully_created_he_will_receive_his_connection_directives_by_email', { GENDER: getGender($scope.admin) })); growl.success(_t('app.admin.admins_new.administrator_successfully_created_he_will_receive_his_connection_directives_by_email', { GENDER: getGender($scope.admin) }));
return $state.go('app.admin.members'); return $state.go('app.admin.members');
} }
, function (error) { , function (error) {
growl.error(_t('failed_to_create_admin') + JSON.stringify(error.data ? error.data : error)); growl.error(_t('app.admin.admins_new.failed_to_create_admin') + JSON.stringify(error.data ? error.data : error));
console.error(error); console.error(error);
} }
); );

View File

@ -528,7 +528,7 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state',
, function () { , function () {
// the admin has confirmed, delete the coupon // the admin has confirmed, delete the coupon
Coupon.delete({ id }, function (res) { Coupon.delete({ id }, function (res) {
growl.success(_t('coupon_was_successfully_deleted')); growl.success(_t('app.admin.pricing.coupon_was_successfully_deleted'));
return $scope.coupons.splice(findItemIdxById(coupons, id), 1); return $scope.coupons.splice(findItemIdxById(coupons, id), 1);
} }

View File

@ -166,7 +166,7 @@ Application.Controllers.controller('SettingsController', ['$scope', '$filter', '
Setting.update( Setting.update(
{ name: setting.name }, { name: setting.name },
{ value }, { value },
function () { growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`settings.${setting.name}`) })); }, function () { growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) })); },
function (error) { console.log(error); } function (error) { console.log(error); }
); );
}; };

View File

@ -276,8 +276,8 @@ Application.Controllers.controller('TrainingsAdminController', ['$scope', '$stat
resolve: { resolve: {
object () { object () {
return { return {
title: _t('confirmation_required'), title: _t('app.admin.trainings.confirmation_required'),
msg: _t('do_you_really_want_to_delete_this_training') msg: _t('app.admin.trainings.do_you_really_want_to_delete_this_training')
}; };
} }
} }
@ -285,10 +285,10 @@ Application.Controllers.controller('TrainingsAdminController', ['$scope', '$stat
function () { // deletion confirmed function () { // deletion confirmed
training.$delete(function () { training.$delete(function () {
$scope.trainings.splice(index, 1); $scope.trainings.splice(index, 1);
growl.info(_t('training_successfully_deleted')); growl.info(_t('app.admin.trainings.training_successfully_deleted'));
}, },
function (error) { function (error) {
growl.warning(_t('unable_to_delete_the_training_because_some_users_alredy_booked_it')); growl.warning(_t('app.admin.trainings.unable_to_delete_the_training_because_some_users_already_booked_it'));
console.error(error); console.error(error);
}); });
} }

View File

@ -149,7 +149,7 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
$uibModalInstance.close(user); $uibModalInstance.close(user);
} else { } else {
// the user was not saved in database, something wrong occurred // the user was not saved in database, something wrong occurred
growl.error(_t('unexpected_error_occurred')); growl.error(_t('app.public.common.unexpected_error_occurred'));
} }
}, function (error) { }, function (error) {
// creation failed... // creation failed...
@ -204,7 +204,7 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
}; };
}] }]
}).result['finally'](null).then(function () { }).result['finally'](null).then(function () {
growl.success(_t('your_password_was_successfully_changed')); growl.success(_t('app.public.common.your_password_was_successfully_changed'));
return Auth.login().then(function (user) { return Auth.login().then(function (user) {
$scope.setCurrentUser(user); $scope.setCurrentUser(user);
}, function (error) { }, function (error) {
@ -375,7 +375,7 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
console.error(`Authentication failed: ${JSON.stringify(error)}`); console.error(`Authentication failed: ${JSON.stringify(error)}`);
$scope.alerts = []; $scope.alerts = [];
return $scope.alerts.push({ return $scope.alerts.push({
msg: _t('wrong_email_or_password'), msg: _t('app.public.common.wrong_email_or_password'),
type: 'danger' type: 'danger'
}); });
}); });
@ -418,13 +418,13 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
$scope.alerts = []; $scope.alerts = [];
return $http.post('/users/password.json', { user: $scope.user }).then(function () { $uibModalInstance.close(); }).catch(function () { return $http.post('/users/password.json', { user: $scope.user }).then(function () { $uibModalInstance.close(); }).catch(function () {
$scope.alerts.push({ $scope.alerts.push({
msg: _t('your_email_address_is_unknown'), msg: _t('app.public.common.your_email_address_is_unknown'),
type: 'danger' type: 'danger'
}); });
}); });
}; };
}] }]
}).result['finally'](null).then(function () { growl.info(_t('you_will_receive_in_a_moment_an_email_with_instructions_to_reset_your_password')); }); }).result['finally'](null).then(function () { growl.info(_t('app.public.common.you_will_receive_in_a_moment_an_email_with_instructions_to_reset_your_password')); });
} }
}); });
// otherwise the user just closed the modal // otherwise the user just closed the modal

View File

@ -142,10 +142,10 @@ Application.Controllers.controller('EditProfileController', ['$scope', '$rootSco
$rootScope.currentUser = user; $rootScope.currentUser = user;
Auth._currentUser.group_id = user.group_id; Auth._currentUser.group_id = user.group_id;
$scope.group.change = false; $scope.group.change = false;
return growl.success(_t('edit_profile.your_group_has_been_successfully_changed')); return growl.success(_t('app.logged.dashboard.settings.your_group_has_been_successfully_changed'));
} }
, function (err) { , function (err) {
growl.error(_t('edit_profile.an_unexpected_error_prevented_your_group_from_being_changed')); growl.error(_t('app.logged.dashboard.settings.an_unexpected_error_prevented_your_group_from_being_changed'));
return console.error(err); return console.error(err);
}); });
@ -198,13 +198,13 @@ Application.Controllers.controller('EditProfileController', ['$scope', '$rootSco
resolve: { resolve: {
object () { object () {
return { return {
title: _t('confirmation_required'), title: _t('app.logged.dashboard.settings.confirmation_required'),
msg: $sce.trustAsHtml( msg: $sce.trustAsHtml(
_t('edit_profile.confirm_delete_your_account') + '<br/>' + _t('app.logged.dashboard.settings.confirm_delete_your_account') + '<br/>' +
'<strong>' + _t('edit_profile.all_data_will_be_lost') + '</strong><br/><br/>' + '<strong>' + _t('app.logged.dashboard.settings.all_data_will_be_lost') + '</strong><br/><br/>' +
_t('edit_profile.invoicing_data_kept') + '<br/>' + _t('app.logged.dashboard.settings.invoicing_data_kept') + '<br/>' +
_t('edit_profile.statistic_data_anonymized') + '<br/>' + _t('app.logged.dashboard.settings.statistic_data_anonymized') + '<br/>' +
_t('edit_profile.no_further_access_to_projects') _t('app.logged.dashboard.settings.no_further_access_to_projects')
) )
}; };
} }
@ -214,12 +214,12 @@ Application.Controllers.controller('EditProfileController', ['$scope', '$rootSco
Member.remove({ id: user.id }, () => Member.remove({ id: user.id }, () =>
Auth.logout().then(function () { Auth.logout().then(function () {
$state.go('app.public.home'); $state.go('app.public.home');
return growl.success(_t('edit_profile.your_user_account_has_been_successfully_deleted_goodbye')); return growl.success(_t('app.logged.dashboard.settings.your_user_account_has_been_successfully_deleted_goodbye'));
}) })
, function (error) { , function (error) {
console.log(error); console.log(error);
return growl.error(_t('edit_profile.an_error_occured_preventing_your_account_from_being_deleted')); return growl.error(_t('app.logged.dashboard.settings.an_error_occured_preventing_your_account_from_being_deleted'));
}) })
); );

View File

@ -99,7 +99,7 @@ Application.Controllers.controller('PlansIndexController', ['$scope', '$rootScop
const amountToPay = helpers.getAmountToPay($scope.cart.total, wallet.amount); const amountToPay = helpers.getAmountToPay($scope.cart.total, wallet.amount);
if (($scope.currentUser.role !== 'admin') && (amountToPay > 0)) { if (($scope.currentUser.role !== 'admin') && (amountToPay > 0)) {
if ($rootScope.fablabWithoutOnlinePayment) { if ($rootScope.fablabWithoutOnlinePayment) {
growl.error(_t('online_payment_disabled')); growl.error(_t('app.public.plans.online_payment_disabled'));
} else { } else {
return payByStripe(); return payByStripe();
} }
@ -323,7 +323,7 @@ Application.Controllers.controller('PlansIndexController', ['$scope', '$rootScop
if ((price.price > 0) && ($scope.walletAmount === 0)) { if ((price.price > 0) && ($scope.walletAmount === 0)) {
$scope.validButtonName = _t('app.public.plans.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) }); $scope.validButtonName = _t('app.public.plans.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) });
} else { } else {
$scope.validButtonName = _t('confirm'); $scope.validButtonName = _t('app.shared.buttons.confirm');
} }
} }

View File

@ -123,7 +123,7 @@ Application.Controllers.controller('CompleteProfileController', ['$scope', '$roo
if (err.data.error) { if (err.data.error) {
growl.error(err.data.error); growl.error(err.data.error);
} else { } else {
growl.error(_t('an_unexpected_error_occurred_check_your_authentication_code')); growl.error(_t('app.logged.profile_completion.an_unexpected_error_occurred_check_your_authentication_code'));
console.error(err); console.error(err);
} }
}); });
@ -174,7 +174,7 @@ Application.Controllers.controller('CompleteProfileController', ['$scope', '$roo
function (email) { function (email) {
// Request the server to send an auth-migration email to the current user // Request the server to send an auth-migration email to the current user
AuthProvider.send_code({ email }, AuthProvider.send_code({ email },
function (res) { growl.info(_t('code_successfully_sent_again')); }, function (res) { growl.info(_t('app.logged.profile_completion.code_successfully_sent_again')); },
function (err) { growl.error(err.data.error); } function (err) { growl.error(err.data.error); }
); );
} }

View File

@ -185,7 +185,7 @@ Application.Controllers.controller('ShowSpaceController', ['$scope', '$state', '
event.preventDefault(); event.preventDefault();
// check the permissions // check the permissions
if ($scope.currentUser.role !== 'admin') { if ($scope.currentUser.role !== 'admin') {
return console.error(_t('space_show.unauthorized_operation')); return console.error(_t('app.public.space_show.unauthorized_operation'));
} else { } else {
return dialogs.confirm({ return dialogs.confirm({
resolve: { resolve: {

View File

@ -47,15 +47,15 @@ Application.Controllers.controller('ShowTrainingController', ['$scope', '$state'
$scope.delete = function (training) { $scope.delete = function (training) {
// check the permissions // check the permissions
if ($scope.currentUser.role !== 'admin') { if ($scope.currentUser.role !== 'admin') {
console.error(_t('unauthorized_operation')); growl.error(_t('app.public.training_show.unauthorized_operation'));
} else { } else {
dialogs.confirm( dialogs.confirm(
{ {
resolve: { resolve: {
object () { object () {
return { return {
title: _t('confirmation_required'), title: _t('app.public.training_show.confirmation_required'),
msg: _t('do_you_really_want_to_delete_this_training') msg: _t('app.public.training_show.do_you_really_want_to_delete_this_training')
}; };
} }
} }
@ -65,7 +65,7 @@ Application.Controllers.controller('ShowTrainingController', ['$scope', '$state'
training.$delete( training.$delete(
function () { $state.go('app.public.trainings_list'); }, function () { $state.go('app.public.trainings_list'); },
function (error) { function (error) {
growl.warning(_t('the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users')); growl.warning(_t('app.public.training_show.the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users'));
console.error(error); console.error(error);
} }
); );
@ -208,7 +208,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta
*/ */
$scope.markSlotAsModifying = function () { $scope.markSlotAsModifying = function () {
$scope.selectedEvent.backgroundColor = '#eee'; $scope.selectedEvent.backgroundColor = '#eee';
$scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('i_change'); $scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('app.logged.trainings_reserve.i_change');
return updateCalendar(); return updateCalendar();
}; };
@ -222,7 +222,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta
} }
if (!$scope.events.placable || ($scope.events.placable._id !== $scope.selectedEvent._id)) { if (!$scope.events.placable || ($scope.events.placable._id !== $scope.selectedEvent._id)) {
$scope.selectedEvent.backgroundColor = '#bbb'; $scope.selectedEvent.backgroundColor = '#bbb';
$scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('i_shift'); $scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('app.logged.trainings_reserve.i_shift');
} }
return updateCalendar(); return updateCalendar();
}; };
@ -231,7 +231,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta
* When modifying an already booked reservation, callback when the modification was successfully done. * When modifying an already booked reservation, callback when the modification was successfully done.
*/ */
$scope.modifyTrainingSlot = function () { $scope.modifyTrainingSlot = function () {
$scope.events.placable.title = $scope.currentUser.role !== 'admin' ? $scope.events.placable.training.name + ' - ' + _t('i_ve_reserved') : $scope.events.placable.training.name; $scope.events.placable.title = $scope.currentUser.role !== 'admin' ? $scope.events.placable.training.name + ' - ' + _t('app.logged.trainings_reserve.i_ve_reserved') : $scope.events.placable.training.name;
$scope.events.placable.backgroundColor = 'white'; $scope.events.placable.backgroundColor = 'white';
$scope.events.placable.borderColor = $scope.events.modifiable.borderColor; $scope.events.placable.borderColor = $scope.events.modifiable.borderColor;
$scope.events.placable.id = $scope.events.modifiable.id; $scope.events.placable.id = $scope.events.modifiable.id;
@ -257,7 +257,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta
$scope.events.placable.backgroundColor = 'white'; $scope.events.placable.backgroundColor = 'white';
$scope.events.placable.title = $scope.events.placable.training.name; $scope.events.placable.title = $scope.events.placable.training.name;
} }
$scope.events.modifiable.title = $scope.currentUser.role !== 'admin' ? $scope.events.modifiable.training.name + ' - ' + _t('i_ve_reserved') : $scope.events.modifiable.training.name; $scope.events.modifiable.title = $scope.currentUser.role !== 'admin' ? $scope.events.modifiable.training.name + ' - ' + _t('app.logged.trainings_reserve.i_ve_reserved') : $scope.events.modifiable.training.name;
$scope.events.modifiable.backgroundColor = 'white'; $scope.events.modifiable.backgroundColor = 'white';
return updateCalendar(); return updateCalendar();
@ -329,7 +329,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta
$scope.events.paid[0].can_modify = true; $scope.events.paid[0].can_modify = true;
updateTrainingSlotId($scope.events.paid[0], reservation); updateTrainingSlotId($scope.events.paid[0], reservation);
$scope.events.paid[0].borderColor = '#b2e774'; $scope.events.paid[0].borderColor = '#b2e774';
$scope.events.paid[0].title = $scope.events.paid[0].training.name + ' - ' + _t('i_ve_reserved'); $scope.events.paid[0].title = $scope.events.paid[0].training.name + ' - ' + _t('app.logged.trainings_reserve.i_ve_reserved');
if ($scope.selectedPlan) { if ($scope.selectedPlan) {
$scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan); $scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan);

View File

@ -117,7 +117,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
return $scope.modePlans = true; return $scope.modePlans = true;
} else { } else {
// otherwise we alert, this error musn't occur when the current user hasn't the admin role // otherwise we alert, this error musn't occur when the current user hasn't the admin role
return growl.error(_t('cart.please_select_a_member_first')); return growl.error(_t('app.shared.cart.please_select_a_member_first'));
} }
}; };
@ -133,7 +133,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
const amountToPay = helpers.getAmountToPay($scope.amountTotal, wallet.amount); const amountToPay = helpers.getAmountToPay($scope.amountTotal, wallet.amount);
if (!$scope.isAdmin() && (amountToPay > 0)) { if (!$scope.isAdmin() && (amountToPay > 0)) {
if ($rootScope.fablabWithoutOnlinePayment) { if ($rootScope.fablabWithoutOnlinePayment) {
growl.error(_t('cart.online_payment_disabled')); growl.error(_t('app.shared.cart.online_payment_disabled'));
} else { } else {
return payByStripe(reservation); return payByStripe(reservation);
} }
@ -145,7 +145,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
}); });
} else { } else {
// otherwise we alert, this error musn't occur when the current user is not admin // otherwise we alert, this error musn't occur when the current user is not admin
return growl.error(_t('cart.please_select_a_member_first')); return growl.error(_t('app.shared.cart.please_select_a_member_first'));
} }
}; };
@ -173,7 +173,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
return $scope.events.modifiable = null; return $scope.events.modifiable = null;
} }
, function (err) { // failure , function (err) { // failure
growl.error(_t('cart.unable_to_change_the_reservation')); growl.error(_t('app.shared.cart.unable_to_change_the_reservation'));
return console.error(err); return console.error(err);
}); });
}; };
@ -315,19 +315,19 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
resolve: { resolve: {
object () { object () {
return { return {
title: _t('cart.confirmation_required'), title: _t('app.shared.cart.confirmation_required'),
msg: _t('cart.do_you_really_want_to_cancel_this_reservation') msg: _t('app.shared.cart.do_you_really_want_to_cancel_this_reservation')
}; };
} }
} }
}, },
function () { // cancel confirmed function () { // cancel confirmed
Slot.cancel({ id: $scope.slot.id }, function () { // successfully canceled Slot.cancel({ id: $scope.slot.id }, function () { // successfully canceled
growl.success(_t('cart.reservation_was_cancelled_successfully')); growl.success(_t('app.shared.cart.reservation_was_cancelled_successfully'));
if (typeof $scope.onSlotCancelSuccess === 'function') { return $scope.onSlotCancelSuccess(); } if (typeof $scope.onSlotCancelSuccess === 'function') { return $scope.onSlotCancelSuccess(); }
} }
, function () { // error while canceling , function () { // error while canceling
growl.error(_t('cart.cancellation_failed')); growl.error(_t('app.shared.cart.cancellation_failed'));
}); });
} }
); );
@ -403,7 +403,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
}); });
} else { } else {
// otherwise we alert, this error musn't occur when the current user is not admin // otherwise we alert, this error musn't occur when the current user is not admin
growl.warning(_t('cart.please_select_a_member_first')); growl.warning(_t('app.shared.cart.please_select_a_member_first'));
return $scope.amountTotal = null; return $scope.amountTotal = null;
} }
}; };
@ -556,12 +556,12 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
// Button label // Button label
if ($scope.amount > 0) { if ($scope.amount > 0) {
$scope.validButtonName = _t('cart.confirm_payment_of_html', { ROLE: $rootScope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) }); $scope.validButtonName = _t('app.shared.cart.confirm_payment_of_html', { ROLE: $rootScope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) });
} else { } else {
if ((price.price > 0) && ($scope.walletAmount === 0)) { if ((price.price > 0) && ($scope.walletAmount === 0)) {
$scope.validButtonName = _t('cart.confirm_payment_of_html', { ROLE: $rootScope.currentUser.role, AMOUNT: $filter('currency')(price.price) }); $scope.validButtonName = _t('app.shared.cart.confirm_payment_of_html', { ROLE: $rootScope.currentUser.role, AMOUNT: $filter('currency')(price.price) });
} else { } else {
$scope.validButtonName = _t('confirm'); $scope.validButtonName = _t('app.shared.buttons.confirm');
} }
} }
@ -576,7 +576,7 @@ Application.Directives.directive('cart', [ '$rootScope', '$uibModal', 'dialogs',
} }
, function (response) { , function (response) {
$scope.alerts = []; $scope.alerts = [];
$scope.alerts.push({ msg: _t('cart.a_problem_occurred_during_the_payment_process_please_try_again_later'), type: 'danger' }); $scope.alerts.push({ msg: _t('app.shared.cart.a_problem_occurred_during_the_payment_process_please_try_again_later'), type: 'danger' });
return $scope.attempting = false; return $scope.attempting = false;
}); });
}; };

View File

@ -53,15 +53,15 @@ Application.Directives.directive('coupon', [ '$rootScope', 'Coupon', '_t', funct
$scope.status = 'valid'; $scope.status = 'valid';
$scope.coupon = res; $scope.coupon = res;
if (res.type === 'percent_off') { if (res.type === 'percent_off') {
return $scope.messages.push({ type: 'success', message: _t('the_coupon_has_been_applied_you_get_PERCENT_discount', { PERCENT: res.percent_off }) }); return $scope.messages.push({ type: 'success', message: _t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_PERCENT_discount', { PERCENT: res.percent_off }) });
} else { } else {
return $scope.messages.push({ type: 'success', message: _t('the_coupon_has_been_applied_you_get_AMOUNT_CURRENCY', { AMOUNT: res.amount_off, CURRENCY: $rootScope.currencySymbol }) }); return $scope.messages.push({ type: 'success', message: _t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_AMOUNT_CURRENCY', { AMOUNT: res.amount_off, CURRENCY: $rootScope.currencySymbol }) });
} }
} }
, function (err) { , function (err) {
$scope.status = 'invalid'; $scope.status = 'invalid';
$scope.coupon = null; $scope.coupon = null;
return $scope.messages.push({ type: 'danger', message: _t(`unable_to_apply_the_coupon_because_${err.data.status}`) }); return $scope.messages.push({ type: 'danger', message: _t(`app.shared.coupon_input.unable_to_apply_the_coupon_because_${err.data.status}`) });
}); });
} }
}; };

View File

@ -73,7 +73,7 @@ Application.Directives.directive('stripeForm', ['Payment', 'growl', '_t',
if (response.error.statusText) { if (response.error.statusText) {
growl.error(response.error.statusText); growl.error(response.error.statusText);
} else { } else {
growl.error(`${_t('payment_card_error')} ${response.error}`); growl.error(`${_t('app.shared.messages.payment_card_error')} ${response.error}`);
} }
confirmButton.prop('disabled', false); confirmButton.prop('disabled', false);
} else if (response.requires_action) { } else if (response.requires_action) {

View File

@ -7,7 +7,7 @@
</div> </div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l"> <div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title"> <section class="heading-title">
<h1 translate>{{ 'add_an_administrator' }}</h1> <h1 translate>{{ 'app.admin.admins_new.add_an_administrator' }}</h1>
</section> </section>
</div> </div>
@ -25,7 +25,7 @@
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<input type="submit" value="{{ 'save' | translate}}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-click="saveAdmin()" ng-disabled="adminForm.$invalid"/> <input type="submit" value="{{ 'app.shared.buttons.save' | translate}}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-click="saveAdmin()" ng-disabled="adminForm.$invalid"/>
</div> </div>
</section> </section>
</form> </form>

View File

@ -176,6 +176,6 @@
</div> </div>
<div class="modal-footer" ng-show="step === 5"> <div class="modal-footer" ng-show="step === 5">
<button class="btn btn-info" ng-click="previous()" translate>{{ 'app.admin.calendar.previous' }}</button> <button class="btn btn-info" ng-click="previous()" translate>{{ 'app.admin.calendar.previous' }}</button>
<button class="btn btn-warning" ng-click="ok()" translate>{{ 'confirm' }}</button> <button class="btn btn-warning" ng-click="ok()" translate>{{ 'app.shared.buttons.confirm' }}</button>
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button> <button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -49,7 +49,7 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<span class="input-group-addon">{{ "invoices.date_" | translate }}</span> <span class="input-group-addon">{{ "app.admin.invoices.date_" | translate }}</span>
<input type="date" ng-model="searchInvoice.date" class="form-control" ng-change="handleFilterChange()"> <input type="date" ng-model="searchInvoice.date" class="form-control" ng-change="handleFilterChange()">
</div> </div>
</div> </div>
@ -193,14 +193,14 @@
</div> </div>
<div medium-editor class="invoice-text invoice-editable" ng-model="invoice.text.content" <div medium-editor class="invoice-text invoice-editable" ng-model="invoice.text.content"
options='{ options='{
"placeholder": "{{ "invoices.important_notes" | translate }}", "placeholder": "{{ "app.admin.invoices.important_notes" | translate }}",
"buttons": ["underline"] "buttons": ["underline"]
}' }'
ng-blur="textEditEnd($event)"> ng-blur="textEditEnd($event)">
</div> </div>
<div medium-editor class="invoice-legals invoice-editable" ng-model="invoice.legals.content" <div medium-editor class="invoice-legals invoice-editable" ng-model="invoice.legals.content"
options='{ options='{
"placeholder": "{{ "invoices.address_and_legal_information" | translate }}", "placeholder": "{{ "app.admin.invoices.address_and_legal_information" | translate }}",
"buttons": ["bold", "underline"] "buttons": ["bold", "underline"]
}' }'
ng-blur="legalsEditEnd($event)"> ng-blur="legalsEditEnd($event)">

View File

@ -20,8 +20,8 @@
ng-model="plan.type" ng-model="plan.type"
required="required" required="required"
ng-disabled="method == 'PATCH'"> ng-disabled="method == 'PATCH'">
<option value="Plan" ng-selected="plan.type == 'Plan'" translate>{{ 'standard' }}</option> <option value="Plan" ng-selected="plan.type == 'Plan'" translate>{{ 'app.shared.plan.standard' }}</option>
<option value="PartnerPlan" ng-selected="plan.type == 'PartnerPlan'" translate>{{ 'partner' }}</option> <option value="PartnerPlan" ng-selected="plan.type == 'PartnerPlan'" translate>{{ 'app.shared.plan.partner' }}</option>
</select> </select>
<span class="help-block error" ng-show="planForm['plan[type]'].$dirty && planForm['plan[type]'].$error.required" translate>{{ 'app.shared.plan.type_is_required' }}</span> <span class="help-block error" ng-show="planForm['plan[type]'].$dirty && planForm['plan[type]'].$error.required" translate>{{ 'app.shared.plan.type_is_required' }}</span>
</div> </div>

View File

@ -31,7 +31,7 @@
<ng-include src="'<%= asset_path "admin/plans/_form.html" %>'"></ng-include> <ng-include src="'<%= asset_path "admin/plans/_form.html" %>'"></ng-include>
<div class="input-group m-t-md"> <div class="input-group m-t-md">
<label for="plan[disabled]" class="control-label m-r-md">{{ 'plan_form.disabled' | translate }}</label> <label for="plan[disabled]" class="control-label m-r-md">{{ 'app.shared.plans.disabled' | translate }}</label>
<input bs-switch <input bs-switch
ng-model="plan.disabled" ng-model="plan.disabled"
id="plan[disabled]" id="plan[disabled]"
@ -43,7 +43,7 @@
ng-true-value="'true'" ng-true-value="'true'"
ng-false-value="'false'"/> ng-false-value="'false'"/>
<input type="hidden" name="plan[disabled]" value="{{plan.disabled}}"/> <input type="hidden" name="plan[disabled]" value="{{plan.disabled}}"/>
<span class="help-block" translate>{{ 'plan_form.disable_plan_will_not_unsubscribe_users' }}</span> <span class="help-block" translate>{{ 'app.shared.plans.disable_plan_will_not_unsubscribe_users' }}</span>
</div> </div>
<h2 class="m-t-xl" translate>{{ 'app.admin.plans.edit.prices' }}</h2> <h2 class="m-t-xl" translate>{{ 'app.admin.plans.edit.prices' }}</h2>

View File

@ -53,7 +53,7 @@
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<h4 translate>{{ 'app.admin.settings.message_of_the_machine_booking_page' }}</h4> <h4 translate>{{ 'app.admin.settings.message_of_the_machine_booking_page' }}</h4>
<div ng-model="machineExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="machineExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
@ -62,7 +62,7 @@
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<h4 translate>{{ 'app.admin.settings.warning_message_of_the_training_booking_page'}}</h4> <h4 translate>{{ 'app.admin.settings.warning_message_of_the_training_booking_page'}}</h4>
<div ng-model="trainingExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="trainingExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
@ -71,7 +71,7 @@
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<h4 translate>{{ 'app.admin.settings.information_message_of_the_training_reservation_page'}}</h4> <h4 translate>{{ 'app.admin.settings.information_message_of_the_training_reservation_page'}}</h4>
<div ng-model="trainingInformationMessage.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="trainingInformationMessage.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
@ -80,7 +80,7 @@
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<h4 translate>{{ 'app.admin.settings.message_of_the_subscriptions_page' }}</h4> <h4 translate>{{ 'app.admin.settings.message_of_the_subscriptions_page' }}</h4>
<div ng-model="subscriptionExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="subscriptionExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
</div> </div>
@ -88,7 +88,7 @@
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<h4 translate>{{ 'app.admin.settings.message_of_the_events_page' }}</h4> <h4 translate>{{ 'app.admin.settings.message_of_the_events_page' }}</h4>
<div ng-model="eventExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="eventExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
</div> </div>
@ -96,7 +96,7 @@
</div> </div>
<div class="col-md-3" ng-hide="fablabWithoutSpaces"> <div class="col-md-3" ng-hide="fablabWithoutSpaces">
<h4 translate>{{ 'app.admin.settings.message_of_the_spaces_page' }}</h4> <h4 translate>{{ 'app.admin.settings.message_of_the_spaces_page' }}</h4>
<div ng-model="spaceExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "settings.type_the_message_content" | translate }}", <div ng-model="spaceExplicationsAlert.value" medium-editor options='{"placeholder": "{{ "app.admin.settings.type_the_message_content" | translate }}",
"buttons": ["bold", "italic", "unorderedlist", "header2" ] "buttons": ["bold", "italic", "unorderedlist", "header2" ]
}'> }'>
</div> </div>
@ -125,8 +125,8 @@
<i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{cgvFile.custom_asset_file_attributes.attachment}}</span> <i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{cgvFile.custom_asset_file_attributes.attachment}}</span>
</div> </div>
<span class="input-group-addon btn btn-default btn-file"> <span class="input-group-addon btn btn-default btn-file">
<span class="fileinput-new" translate>{{ 'browse' }}</span> <span class="fileinput-new" translate>{{ 'app.shared.buttons.browse' }}</span>
<span class="fileinput-exists" translate>{{ 'change' }}</span> <span class="fileinput-exists" translate>{{ 'app.shared.buttons.change' }}</span>
<input type="file" <input type="file"
id="tnc_file" id="tnc_file"
name="custom_asset[custom_asset_file_attributes][attachment]" name="custom_asset[custom_asset_file_attributes][attachment]"
@ -149,8 +149,8 @@
<i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{cguFile.custom_asset_file_attributes.attachment}}</span> <i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{cguFile.custom_asset_file_attributes.attachment}}</span>
</div> </div>
<span class="input-group-addon btn btn-default btn-file"> <span class="input-group-addon btn btn-default btn-file">
<span class="fileinput-new" translate>{{ 'browse' }}</span> <span class="fileinput-new" translate>{{ 'app.shared.buttons.browse' }}</span>
<span class="fileinput-exists" translate>{{ 'change' }}</span> <span class="fileinput-exists" translate>{{ 'app.shared.buttons.change' }}</span>
<input type="file" <input type="file"
id="tos_file" id="tos_file"
name="custom_asset[custom_asset_file_attributes][attachment]" name="custom_asset[custom_asset_file_attributes][attachment]"

View File

@ -1,20 +1,20 @@
<div class="modal-header"> <div class="modal-header">
<h3 class="modal-title" translate>{{ 'expiration_date' }}</h3> <h3 class="modal-title" translate>{{ 'app.admin.members_edit.expiration_date' }}</h3>
</div> </div>
<div class="modal-body m-lg"> <div class="modal-body m-lg">
<div class="alert alert-danger"> <div class="alert alert-danger">
<div ng-show="free"> <div ng-show="free">
<p translate>{{ 'you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days' }}</p> <p translate>{{ 'app.admin.members_edit.you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days' }}</p>
<p translate>{{ 'credits_will_remain_unchanged' }}</p> <p translate>{{ 'app.admin.members_edit.credits_will_remain_unchanged' }}</p>
</div> </div>
<div ng-hide="free"> <div ng-hide="free">
<p translate>{{ 'you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription' }}</p> <p translate>{{ 'app.admin.members_edit.you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription' }}</p>
<p translate>{{ 'credits_will_be_reset' }}</p> <p translate>{{ 'app.admin.members_edit.credits_will_be_reset' }}</p>
</div> </div>
</div> </div>
<form role="form" name="subscriptionForm" novalidate> <form role="form" name="subscriptionForm" novalidate>
<div class="form-group"> <div class="form-group">
<label translate>{{ 'until_expiration_date' }}</label> <label translate>{{ 'app.admin.members_edit.until_expiration_date' }}</label>
<input type="text" <input type="text"
class="form-control" class="form-control"
name="subscription[expired_at]" name="subscription[expired_at]"
@ -30,6 +30,6 @@
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-warning" ng-click="ok()" ng-disabled="subscriptionForm.$invalid" translate>{{ 'confirm' }}</button> <button class="btn btn-warning" ng-click="ok()" ng-disabled="subscriptionForm.$invalid" translate>{{ 'app.shared.buttons.confirm' }}</button>
<button class="btn btn-primary" ng-click="cancel()" translate>{{ 'cancel' }}</button> <button class="btn btn-primary" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -1,14 +1,14 @@
<div class="modal-header"> <div class="modal-header">
<h3 class="modal-title" translate>{{ 'edition_of_the_description_tooltip' }}</h3> <h3 class="modal-title" translate>{{ 'app.admin.trainings.edition_of_the_description_tooltip' }}</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form name="trainingForm" novalidate> <form name="trainingForm" novalidate>
<div class="form-group" ng-class="{'has-error': trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$invalid }"> <div class="form-group" ng-class="{'has-error': trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$invalid }">
<textarea name="training[description]" class="form-control" placeholder="{{ 'describe_the_training_in_a_few_words' | translate }}" ng-model="training.description" ng-maxlength="255"></textarea> <textarea name="training[description]" class="form-control" placeholder="{{ 'app.admin.trainings.describe_the_training_in_a_few_words' | translate }}" ng-model="training.description" ng-maxlength="255"></textarea>
<span class="help-block" ng-show="trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$error.maxlength" translate>{{ 'description_is_limited_to_255_characters' }}</span> <span class="help-block" ng-show="trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$error.maxlength" translate>{{ 'app.admin.trainings.description_is_limited_to_255_characters' }}</span>
</div> </div>
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-warning" ng-disabled="trainingForm.$invalid" ng-click="save()" translate>{{ 'save' }}</button> <button class="btn btn-warning" ng-disabled="trainingForm.$invalid" ng-click="save()" translate>{{ 'app.shared.buttons.save' }}</button>
</div> </div>

View File

@ -7,7 +7,7 @@
</div> </div>
<div class="col-md-8 b-l b-r"> <div class="col-md-8 b-l b-r">
<section class="heading-title"> <section class="heading-title">
<h1 translate>{{ 'trainings_new.add_a_new_training' }}</h1> <h1 translate>{{ 'app.admin.trainings_new.add_a_new_training' }}</h1>
</section> </section>
</div> </div>
@ -22,11 +22,11 @@
<div class="col-md-9 b-r nopadding"> <div class="col-md-9 b-r nopadding">
<div class="alert alert-warning m-lg" role="alert"> <div class="alert alert-warning m-lg" role="alert">
{{ 'trainings_new.beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero' | translate }} {{ 'app.admin.trainings_new.beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero' | translate }}
{{ 'trainings_new.dont_forget_to_change_them_before_creating_slots_for_this_training' | translate }} {{ 'app.admin.trainings_new.dont_forget_to_change_them_before_creating_slots_for_this_training' | translate }}
</div> </div>
<ng-include src="'<%= asset_path 'admin/trainings/_form.html' %>'"></ng-include> <ng-include src="'<%= asset_path "admin/trainings/_form.html" %>'"></ng-include>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">

View File

@ -1,6 +1,6 @@
<div> <div>
<div class="row"> <div class="row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-purple" translate>{{ 'calendar.trainings' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-purple" translate>{{ 'app.public.calendar.trainings' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.trainings" ng-change="toggleFilter('trainings', filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.trainings" ng-change="toggleFilter('trainings', filter)">
</div> </div>
<div ng-repeat="t in trainings" class="row"> <div ng-repeat="t in trainings" class="row">
@ -10,7 +10,7 @@
</div> </div>
<div class="m-t"> <div class="m-t">
<div class="row"> <div class="row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-beige" translate>{{ 'calendar.machines' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-beige" translate>{{ 'app.public.calendar.machines' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.machines" ng-change="toggleFilter('machines', filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.machines" ng-change="toggleFilter('machines', filter)">
</div> </div>
<div ng-repeat="m in machines" class="row"> <div ng-repeat="m in machines" class="row">
@ -20,7 +20,7 @@
</div> </div>
<div class="m-t" ng-hide="fablabWithoutSpaces"> <div class="m-t" ng-hide="fablabWithoutSpaces">
<div class="row"> <div class="row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-cyan" translate>{{ 'calendar.spaces' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-cyan" translate>{{ 'app.public.calendar.spaces' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.spaces" ng-change="toggleFilter('spaces', filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.spaces" ng-change="toggleFilter('spaces', filter)">
</div> </div>
<div ng-repeat="s in spaces" class="row"> <div ng-repeat="s in spaces" class="row">
@ -29,16 +29,16 @@
</div> </div>
</div> </div>
<div class="m-t row"> <div class="m-t row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-japonica" translate>{{ 'calendar.events' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-japonica" translate>{{ 'app.public.calendar.events' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.evt" ng-change="filterAvailabilities(filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.evt" ng-change="filterAvailabilities(filter)">
</div> </div>
<div class="m-t row"> <div class="m-t row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-black" translate>{{ 'calendar.show_unavailables' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-black" translate>{{ 'app.public.calendar.show_unavailables' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.dispo" ng-change="filterAvailabilities(filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.dispo" ng-change="filterAvailabilities(filter)">
</div> </div>
<div class="m-t" ng-hide="externals.length == 0"> <div class="m-t" ng-hide="externals.length == 0">
<div class="row"> <div class="row">
<h3 class="col-md-11 col-sm-11 col-xs-11 text-black" translate>{{ 'calendar.externals' }}</h3> <h3 class="col-md-11 col-sm-11 col-xs-11 text-black" translate>{{ 'app.public.calendar.externals' }}</h3>
<input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.externals" ng-change="toggleFilter('externals', filter)"> <input class="col-md-1 col-sm-1 col-xs-1" type="checkbox" ng-model="filter.externals" ng-change="toggleFilter('externals', filter)">
</div> </div>

View File

@ -23,12 +23,12 @@
</div> </div>
<div class="cta-button"> <div class="cta-button">
<button class="btn btn-default rounded" ng-click="selectPlan(plan)" ng-class="{'bg-yellow': selectedPlan.id == plan.id}" translate>{{ 'subscribe_online' }}</button> <button class="btn btn-default rounded" ng-click="selectPlan(plan)" ng-class="{'bg-yellow': selectedPlan.id == plan.id}" translate>{{ 'app.shared.plan_subscribe.subscribe_online' }}</button>
</div> </div>
</div> </div>
<a class="m-t-lg btn btn-small btn-default pull-right" href="#" ng-click="doNotSubscribePlan($event)">{{ 'do_not_subscribe' | translate }} <i class="fa fa-long-arrow-right"></i></a> <a class="m-t-lg btn btn-small btn-default pull-right" href="#" ng-click="doNotSubscribePlan($event)">{{ 'app.shared.plan_subscribe.do_not_subscribe' | translate }} <i class="fa fa-long-arrow-right"></i></a>
</div> </div>

View File

@ -1,9 +1,9 @@
<section class="panel panel-default bg-token m-lg"> <section class="panel panel-default bg-token m-lg">
<div class="panel-body m-r"> <div class="panel-body m-r">
<h3 translate>{{ 'do_you_already_have_an_account' }}</h3> <h3 translate>{{ 'app.logged.profile_completion.do_you_already_have_an_account' }}</h3>
<p ng-hide="hasDuplicate()" translate>{{ 'do_not_fill_the_form_beside_but_specify_here_the_code_you_ve_received_by_email_to_recover_your_access' }}</p> <p ng-hide="hasDuplicate()" translate>{{ 'app.logged.profile_completion.do_not_fill_the_form_beside_but_specify_here_the_code_you_ve_received_by_email_to_recover_your_access' }}</p>
<p ng-show="hasDuplicate()" translate>{{ 'just_specify_code_here_to_recover_access' }}</p> <p ng-show="hasDuplicate()" translate>{{ 'app.logged.profile_completion.just_specify_code_here_to_recover_access' }}</p>
<p class="pull-right"><a href="#" ng-click="resendCode($event)" translate>{{ 'i_did_not_receive_the_code' }}</a></p> <p class="pull-right"><a href="#" ng-click="resendCode($event)" translate>{{ 'app.logged.profile_completion.i_did_not_receive_the_code' }}</a></p>
<div class="row"> <div class="row">
<div class="col-lg-3 col-lg-offset-1 hidden-md col-sm-3 col-sm-offset-1"></div> <div class="col-lg-3 col-lg-offset-1 hidden-md col-sm-3 col-sm-offset-1"></div>
<div class="col-lg-offset-1 col-lg-6 col-md-12 col-sm-offset-1 col-sm-6"> <div class="col-lg-offset-1 col-lg-6 col-md-12 col-sm-offset-1 col-sm-6">
@ -14,7 +14,7 @@
ng-model="user.auth_token" ng-model="user.auth_token"
class="form-control" class="form-control"
name="user[auth_token]" name="user[auth_token]"
placeholder="{{ 'authentification_code' | translate }}"/> placeholder="{{ 'app.logged.profile_completion.authentification_code' | translate }}"/>
</div> </div>
</div> </div>
</div> </div>
@ -22,9 +22,9 @@
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<input type="button" <input type="button"
value="{{ 'confirm_my_code' | translate }}" value="{{ 'app.logged.profile_completion.confirm_my_code' | translate }}"
class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c"
ng-hide="!user.auth_token" ng-hide="!user.auth_token"
ng-click="registerAuthToken()"/> ng-click="registerAuthToken()"/>
</div> </div>
</section> </section>

View File

@ -9,7 +9,7 @@
</div> </div>
<div class="col-md-8 col-sm-10 b-l"> <div class="col-md-8 col-sm-10 b-l">
<section class="heading-title"> <section class="heading-title">
<h1 translate>{{ 'confirm_your_new_account' }}</h1> <h1 translate>{{ 'app.logged.profile_completion.confirm_your_new_account' }}</h1>
</section> </section>
</div> </div>
@ -25,11 +25,11 @@
<div class="col-md-offset-2 col-md-8 m-t-md"> <div class="col-md-offset-2 col-md-8 m-t-md">
<section class="panel panel-default bg-light m-lg"> <section class="panel panel-default bg-light m-lg">
<div class="panel-body m-r"> <div class="panel-body m-r">
{{ 'you_ve_just_created_a_new_account_on_the_fablab_by_logging_from' | translate:{ GENDER: nameGenre, NAME: fablabName } }}<br/> {{ 'app.logged.profile_completion.you_ve_just_created_a_new_account_on_the_fablab_by_logging_from' | translate:{ GENDER: nameGenre, NAME: fablabName } }}<br/>
<img class="m-l v-middle" height="16" width="16" src='https://www.google.com/s2/favicons?domain={{activeProvider.domain}}' /> <img class="m-l v-middle" height="16" width="16" src='https://www.google.com/s2/favicons?domain={{activeProvider.domain}}' />
<strong class="v-middle">{{activeProvider.name}} <span ng-if="ssoEmail()">({{ssoEmail()}})</span></strong><br/> <strong class="v-middle">{{activeProvider.name}} <span ng-if="ssoEmail()">({{ssoEmail()}})</span></strong><br/>
<p class="m-t-md" ng-hide="hasDuplicate()" translate>{{ 'we_need_some_more_details' }}.</p> <p class="m-t-md" ng-hide="hasDuplicate()" translate>{{ 'app.logged.profile_completion.we_need_some_more_details' }}.</p>
<p class="m-t-md" ng-show="hasDuplicate()" translate>{{ 'your_email_is_already_used_by_another_account_on_the_platform' }}</p> <p class="m-t-md" ng-show="hasDuplicate()" translate>{{ 'app.logged.profile_completion.your_email_is_already_used_by_another_account_on_the_platform' }}</p>
</div> </div>
</section> </section>
</div> </div>
@ -37,7 +37,7 @@
<div class="row col-md-2 col-md-offset-5 hidden-sm hidden-xs" ng-hide="user.merged_at"> <div class="row col-md-2 col-md-offset-5 hidden-sm hidden-xs" ng-hide="user.merged_at">
<p class="font-felt fleche-left text-lg upper text-center"> <p class="font-felt fleche-left text-lg upper text-center">
<%= image_tag("fleche-left.png", class: 'fleche-left visible-lg visible-md fleche-left-from-top') %> <%= image_tag("fleche-left.png", class: 'fleche-left visible-lg visible-md fleche-left-from-top') %>
<span class="or" translate>{{ 'or' }}</span> <span class="or" translate>{{ 'app.logged.profile_completion.or' }}</span>
<%= image_tag("fleche-left.png", class: 'fleche-right visible-lg visible-md fleche-right-from-top') %> <%= image_tag("fleche-left.png", class: 'fleche-right visible-lg visible-md fleche-right-from-top') %>
</p> </p>
</div> </div>
@ -46,10 +46,10 @@
<div class="m-lg panel panel-default bg-light pos-rlt" ng-hide="hasDuplicate()"> <div class="m-lg panel panel-default bg-light pos-rlt" ng-hide="hasDuplicate()">
<div ng-class="{'disabling-overlay' : !!user.auth_token}"> <div ng-class="{'disabling-overlay' : !!user.auth_token}">
<div class="panel-body"> <div class="panel-body">
<h3 translate>{{ 'new_on_this_platform' }}</h3> <h3 translate>{{ 'app.logged.profile_completion.new_on_this_platform' }}</h3>
<p translate>{{ 'please_fill_the_following_form'}}.</p> <p translate>{{ 'app.logged.profile_completion.please_fill_the_following_form'}}.</p>
<p class="text-italic">{{ 'some_data_may_have_already_been_provided_by_provider_and_cannot_be_modified' | translate:{NAME:activeProvider.name} }}.<br/> <p class="text-italic">{{ 'app.logged.profile_completion.some_data_may_have_already_been_provided_by_provider_and_cannot_be_modified' | translate:{NAME:activeProvider.name} }}.<br/>
{{ 'then_click_on_' | translate }} <strong translate>{{ 'confirm_changes' }}</strong> {{ '_to_start_using_the_application' | translate }}.</p> {{ 'app.logged.profile_completion.then_click_on_' | translate }} <strong translate>{{ 'app.shared.buttons.confirm_changes' }}</strong> {{ 'app.logged.profile_completion._to_start_using_the_application' | translate }}.</p>
</div> </div>
<form role="form" <form role="form"
name="userForm" name="userForm"
@ -63,7 +63,7 @@
<div class="panel-body m-r"> <div class="panel-body m-r">
<!-- common fields --> <!-- common fields -->
<ng-include src="'<%= asset_path 'shared/_member_form.html' %>'"></ng-include> <ng-include src="'<%= asset_path "shared/_member_form.html" %>'"></ng-include>
<div class="row"> <div class="row">
<div class="col-sm-3 col-sm-offset-1"></div> <div class="col-sm-3 col-sm-offset-1"></div>
@ -73,16 +73,16 @@
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"> <span class="input-group-addon">
<i class="fa fa-users"></i> <i class="fa fa-users"></i>
<span class="exponent m-l-xs help-cursor" title="{{ 'used_for_statistics' | translate }}"> <span class="exponent m-l-xs help-cursor" title="{{ 'app.logged.profile_completion.used_for_statistics' | translate }}">
<i class="fa fa-asterisk" aria-hidden="true"></i> <i class="fa fa-asterisk" aria-hidden="true"></i>
</span> </span>
</span> </span>
<select ng-model="user.group_id" class="form-control" name="user[group_id]" required> <select ng-model="user.group_id" class="form-control" name="user[group_id]" required>
<option value=null translate>{{ 'your_user_s_profile' }}</option> <option value=null translate>{{ 'app.logged.profile_completion.your_user_s_profile' }}</option>
<option ng-repeat="group in groups" ng-value="group.id" ng-selected="group.id == user.group_id">{{group.name}}</option> <option ng-repeat="group in groups" ng-value="group.id" ng-selected="group.id == user.group_id">{{group.name}}</option>
</select> </select>
</div> </div>
<span class="help-block" ng-show="userForm['user[group_id]'].$dirty && userForm['user[group_id]'].$error.required" translate>{{ 'user_s_profile_is_required' }}</span> <span class="help-block" ng-show="userForm['user[group_id]'].$dirty && userForm['user[group_id]'].$error.required" translate>{{ 'app.logged.profile_completion.user_s_profile_is_required' }}</span>
</div> </div>
<!-- accept cgu --> <!-- accept cgu -->
@ -91,8 +91,8 @@
name="cgu" name="cgu"
ng-model="user.cgu" ng-model="user.cgu"
value="true" value="true"
ng-required="cgu != null"/> {{ 'i_ve_read_and_i_accept_' | translate }} ng-required="cgu != null"/> {{ 'app.logged.profile_completion.i_ve_read_and_i_accept_' | translate }}
<a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ '_the_fablab_policy' }}</a> <a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'app.logged.profile_completion._the_fablab_policy' }}</a>
<span class="exponent m-l-xs"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent m-l-xs"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
</div> </div>
</div> </div>
@ -103,7 +103,7 @@
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<input type="submit" <input type="submit"
value="{{ 'confirm_changes' | translate }}" value="{{ 'app.shared.buttons.confirm_changes' | translate }}"
class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c"
ng-disabled="userForm.$invalid"/> ng-disabled="userForm.$invalid"/>
</div> </div>
@ -114,21 +114,29 @@
<section class="m-lg panel panel-default bg-light pos-rlt" ng-show="hasDuplicate()"> <section class="m-lg panel panel-default bg-light pos-rlt" ng-show="hasDuplicate()">
<div ng-class="{'disabling-overlay' : !!user.auth_token}"> <div ng-class="{'disabling-overlay' : !!user.auth_token}">
<div class="panel-body"> <div class="panel-body">
<h3 translate>{{ 'new_on_this_platform' }}</h3> <h3 translate>{{ 'app.logged.profile_completion.new_on_this_platform' }}</h3>
<p class="text-italic"> <p class="text-italic">
{{ 'your_email_' | translate }} <strong>({{ssoEmail()}})</strong> {{ '_is_currently_associated_with_another_account_on_this_platform' | translate }} {{ 'app.logged.profile_completion.your_email_' | translate }}
{{ 'please_click_to_change_email_associated_with_your_PROVIDER_account' | translate:{PROVDER: activeProvider.name} }} <strong>({{ssoEmail()}})</strong>
{{ 'app.logged.profile_completion._is_currently_associated_with_another_account_on_this_platform' | translate }}
{{ 'app.logged.profile_completion.please_click_to_change_email_associated_with_your_PROVIDER_account' | translate:{PROVDER: activeProvider.name} }}
</p> </p>
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<a class="btn btn-default" ng-href="{{activeProvider.link_to_sso_profile}}" target="_blank"> <a class="btn btn-default" ng-href="{{activeProvider.link_to_sso_profile}}" target="_blank">
<i class="fa fa-edit"></i> {{ 'change_my_data' | translate }} <i class="fa fa-edit"></i> {{ 'app.logged.profile_completion.change_my_data' | translate }}
</a> </a>
<p class="text-italic">{{ 'once_your_data_are_up_to_date_' | translate }} <strong translate>{{ '_click_on_the_synchronization_button_opposite_' }}</strong> {{ 'or' | translate}} <strong translate>{{ '_disconnect_then_reconnect_' }}</strong> {{ '_for_your_changes_to_take_effect' | translate }}</p> <p class="text-italic">
{{ 'app.logged.profile_completion.once_your_data_are_up_to_date_' | translate }}
<strong translate>{{ 'app.logged.profile_completion._click_on_the_synchronization_button_opposite_' }}</strong>
{{ 'app.logged.profile_completion.or' | translate}}
<strong translate>{{ 'app.logged.profile_completion._disconnect_then_reconnect_' }}</strong>
{{ 'app.logged.profile_completion._for_your_changes_to_take_effect' | translate }}
</p>
</div> </div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<a class="btn btn-default" ng-click="syncProfile()"> <a class="btn btn-default" ng-click="syncProfile()">
<i class="fa fa-refresh"></i> {{ 'sync_my_profile' | translate }} <i class="fa fa-refresh"></i> {{ 'app.logged.profile_completion.sync_my_profile' | translate }}
</a> </a>
</div> </div>
</div> </div>
@ -138,11 +146,11 @@
</div> </div>
<div class="row col-xs-2 col-xs-offset-5 hidden-md hidden-lg"> <div class="row col-xs-2 col-xs-offset-5 hidden-md hidden-lg">
<p class="font-felt fleche-left text-lg upper text-center"> <p class="font-felt fleche-left text-lg upper text-center">
<span class="or" translate>{{ 'or' }}</span> <span class="or" translate>{{ 'app.logged.profile_completion.or' }}</span>
</p> </p>
</div> </div>
<div class="col-md-6 m-t-3xl-on-md" ng-hide="user.merged_at"> <div class="col-md-6 m-t-3xl-on-md" ng-hide="user.merged_at">
<ng-include src="'<%= asset_path 'profile/_token.html' %>'"></ng-include> <ng-include src="'<%= asset_path "profile/_token.html" %>'"></ng-include>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,11 +1,11 @@
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'send_code_again' }}</h1> <h1 translate>{{ 'app.logged.profile_completion.send_code_again' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form name="emailForm"> <form name="emailForm">
<label for="email" class="beforeAmount" translate>{{ 'email_address_associated_with_your_account' }}</label> <label for="email" class="beforeAmount" translate>{{ 'app.logged.profile_completion.email_address_associated_with_your_account' }}</label>
<div class="input-group" ng-class="{'has-error': emailForm.email.$dirty && emailForm.email.$invalid }"> <div class="input-group" ng-class="{'has-error': emailForm.email.$dirty && emailForm.email.$invalid }">
<span class="input-group-addon"><i class="fa fa-envelope"></i> </span> <span class="input-group-addon"><i class="fa fa-envelope"></i> </span>
<input class="form-control" <input class="form-control"
@ -15,12 +15,12 @@
ng-model="object.email" ng-model="object.email"
required> required>
</div> </div>
<span class="help-block error" ng-show="emailForm['email'].$dirty && emailForm['email'].$error.required" translate>{{'email_is_required'}}</span> <span class="help-block error" ng-show="emailForm['email'].$dirty && emailForm['email'].$error.required" translate>{{'app.logged.profile_completion.email_is_required'}}</span>
<span class="help-block error" ng-show="emailForm['email'].$dirty && emailForm['email'].$error.email" translate>{{'email_format_is_incorrect'}}</span> <span class="help-block error" ng-show="emailForm['email'].$dirty && emailForm['email'].$error.email" translate>{{'app.logged.profile_completion.email_format_is_incorrect'}}</span>
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-info" ng-click="ok(object.email)" ng-disabled="emailForm.$invalid" translate>{{ 'confirm' }}</button> <button class="btn btn-info" ng-click="ok(object.email)" ng-disabled="emailForm.$invalid" translate>{{ 'app.shared.buttons.confirm' }}</button>
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button> <button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -7,14 +7,14 @@
ng-model="admin.statistic_profile_attributes.gender" ng-model="admin.statistic_profile_attributes.gender"
ng-value="true" ng-value="true"
required/> required/>
<i class="fa fa-male m-l-sm"></i> {{ 'man' | translate }} <i class="fa fa-male m-l-sm"></i> {{ 'app.admin.admins_new.man' | translate }}
</label> </label>
<label class="checkbox-inline btn btn-default"> <label class="checkbox-inline btn btn-default">
<input type="radio" <input type="radio"
name="admin[statistic_profile_attributes][gender]" name="admin[statistic_profile_attributes][gender]"
ng-model="admin.statistic_profile_attributes.gender" ng-model="admin.statistic_profile_attributes.gender"
ng-value="false"/> ng-value="false"/>
<i class="fa fa-female m-l-sm"></i> {{ 'woman' | translate }} <i class="fa fa-female m-l-sm"></i> {{ 'app.admin.admins_new.woman' | translate }}
</label> </label>
<span class="exponent m-l-xs help-cursor"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent m-l-xs help-cursor"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
</div> </div>
@ -26,10 +26,10 @@
type="text" name="admin[username]" type="text" name="admin[username]"
class="form-control" class="form-control"
id="user_username" id="user_username"
placeholder="{{ 'pseudonym' | translate }}" placeholder="{{ 'app.admin.admins_new.pseudonym' | translate }}"
required> required>
</div> </div>
<span class="help-block" ng-show="adminForm['admin[username]'].$dirty && adminForm['admin[username]'].$error.required" translate>{{ 'pseudonym_is_required' }}</span> <span class="help-block" ng-show="adminForm['admin[username]'].$dirty && adminForm['admin[username]'].$error.required" translate>{{ 'app.admin.admins_new.pseudonym_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': adminForm['admin[profile_attributes][last_name]'].$dirty && adminForm['admin[profile_attributes][last_name]'].$invalid}"> <div class="form-group" ng-class="{'has-error': adminForm['admin[profile_attributes][last_name]'].$dirty && adminForm['admin[profile_attributes][last_name]'].$invalid}">
@ -40,10 +40,10 @@
name="admin[profile_attributes][last_name]" name="admin[profile_attributes][last_name]"
class="form-control" class="form-control"
id="user_last_name" id="user_last_name"
placeholder="{{ 'surname' | translate }}" placeholder="{{ 'app.admin.admins_new.surname' | translate }}"
required> required>
</div> </div>
<span class="help-block" ng-show="adminForm['admin[profile_attributes][last_name]'].$dirty && adminForm['admin[profile_attributes][last_name]'].$error.required" translate>{{ 'surname_is_required' }}</span> <span class="help-block" ng-show="adminForm['admin[profile_attributes][last_name]'].$dirty && adminForm['admin[profile_attributes][last_name]'].$error.required" translate>{{ 'app.admin.admins_new.surname_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': adminForm['admin[profile_attributes][first_name]'].$dirty && adminForm['admin[profile_attributes][first_name]'].$invalid}"> <div class="form-group" ng-class="{'has-error': adminForm['admin[profile_attributes][first_name]'].$dirty && adminForm['admin[profile_attributes][first_name]'].$invalid}">
@ -54,10 +54,10 @@
name="admin[profile_attributes][first_name]" name="admin[profile_attributes][first_name]"
class="form-control" class="form-control"
id="user_first_name" id="user_first_name"
placeholder="{{ 'first_name' | translate }}" placeholder="{{ 'app.admin.admins_new.first_name' | translate }}"
required> required>
</div> </div>
<span class="help-block" ng-show="adminForm['admin[profile_attributes][first_name]'].$dirty && adminForm['admin[profile_attributes][first_name]'].$error.required" translate>{{ 'first_name_is_required' }}</span> <span class="help-block" ng-show="adminForm['admin[profile_attributes][first_name]'].$dirty && adminForm['admin[profile_attributes][first_name]'].$error.required" translate>{{ 'app.admin.admins_new.first_name_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': adminForm['admin[email]'].$dirty && adminForm['admin[email]'].$invalid}"> <div class="form-group" ng-class="{'has-error': adminForm['admin[email]'].$dirty && adminForm['admin[email]'].$invalid}">
@ -68,10 +68,10 @@
name="admin[email]" name="admin[email]"
class="form-control" class="form-control"
id="user_email" id="user_email"
placeholder="{{ 'email_address' | translate }}" placeholder="{{ 'app.admin.admins_new.email_address' | translate }}"
required> required>
</div> </div>
<span class="help-block" ng-show="adminForm['admin[email]'].$dirty && adminForm['admin[email]'].$error.required" translate>{{ 'email_is_required' }}</span> <span class="help-block" ng-show="adminForm['admin[email]'].$dirty && adminForm['admin[email]'].$error.required" translate>{{ 'app.admin.admins_new.email_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': adminForm['admin[statistic_profile_attributes][birthday]'].$dirty && adminForm['admin[statistic_profile_attributes][birthday]'].$invalid}"> <div class="form-group" ng-class="{'has-error': adminForm['admin[statistic_profile_attributes][birthday]'].$dirty && adminForm['admin[statistic_profile_attributes][birthday]'].$invalid}">
@ -84,7 +84,7 @@
uib-datepicker-popup="{{datePicker.format}}" uib-datepicker-popup="{{datePicker.format}}"
datepicker-options="datePicker.options" datepicker-options="datePicker.options"
is-open="datePicker.opened" is-open="datePicker.opened"
placeholder="{{ 'birth_date' | translate }}" placeholder="{{ 'app.admin.admins_new.birth_date' | translate }}"
ng-click="openDatePicker($event)" ng-click="openDatePicker($event)"
/> />
<input type="hidden" <input type="hidden"
@ -104,7 +104,7 @@
name="admin[invoicing_profile_attributes][address_attributes][address]" name="admin[invoicing_profile_attributes][address_attributes][address]"
class="form-control" class="form-control"
id="user_address" id="user_address"
placeholder="{{ 'address' | translate }}"> placeholder="{{ 'app.admin.admins_new.address' | translate }}">
</div> </div>
</div> </div>
@ -115,7 +115,7 @@
type="text" type="text"
name="admin[profile_attributes][phone]" name="admin[profile_attributes][phone]"
class="form-control" id="user_phone" class="form-control" id="user_phone"
placeholder="{{ 'phone_number' | translate }}"> placeholder="{{ 'app.admin.admins_new.phone_number' | translate }}">
</div> </div>
</div> </div>
</div> </div>

View File

@ -140,7 +140,7 @@
<div class="panel-footer no-padder" ng-if="events.modifiable && events.placable"> <div class="panel-footer no-padder" ng-if="events.modifiable && events.placable">
<button class="btn btn-invalid btn-default btn-block p-l btn-lg text-u-c r-n text-base" ng-click="cancelModifySlot()" translate>{{ 'cancel' }}</button> <button class="btn btn-invalid btn-default btn-block p-l btn-lg text-u-c r-n text-base" ng-click="cancelModifySlot()" translate>{{ 'app.shared.buttons.cancel' }}</button>
<div> <div>
<button class="btn btn-valid btn-info btn-block p-l btn-lg text-u-c r-b text-base" ng-click="modifySlot()" translate>{{ 'app.shared.cart.confirm_my_modification' }}</button> <button class="btn btn-valid btn-info btn-block p-l btn-lg text-u-c r-b text-base" ng-click="modifySlot()" translate>{{ 'app.shared.cart.confirm_my_modification' }}</button>
</div> </div>

View File

@ -1,8 +1,8 @@
<div class="form-group m-b-lg" ng-show="show"> <div class="form-group m-b-lg" ng-show="show">
<a ng-click="code.input = true" ng-hide="code.input" class="b-b pointer" translate>{{ 'i_have_a_coupon' }}</a> <a ng-click="code.input = true" ng-hide="code.input" class="b-b pointer" translate>{{ 'app.shared.coupon_input.i_have_a_coupon' }}</a>
<div ng-show="code.input"> <div ng-show="code.input">
<label for="coupon_code" translate>{{ 'code_' }}</label> <label for="coupon_code" translate>{{ 'app.shared.coupon_input.code_' }}</label>
<div class="input-group m-b"> <div class="input-group m-b">
<input type="text" <input type="text"
class="form-control" class="form-control"

View File

@ -1,35 +1,35 @@
<div class="modal-header"> <div class="modal-header">
<h3 class="modal-title" translate>{{ 'plan_form.new_partner' }}</h3> <h3 class="modal-title" translate>{{ 'app.shared.plan.new_partner' }}</h3>
</div> </div>
<div class="modal-body m-lg"> <div class="modal-body m-lg">
<form name="partnerForm"> <form name="partnerForm">
<div class="form-group" ng-class="{'has-error': partnerForm['partner[first_name]'].$dirty && partnerForm['partner[first_name]'].$invalid}"> <div class="form-group" ng-class="{'has-error': partnerForm['partner[first_name]'].$dirty && partnerForm['partner[first_name]'].$invalid}">
<label for="partner[first_name]" translate>{{ 'first_name' }}</label> <label for="partner[first_name]" translate>{{ 'app.shared.plan.first_name' }}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span> <span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="text" class="form-control" required="required" ng-model="partner.first_name" id="partner[first_name]" name="partner[first_name]" /> <input type="text" class="form-control" required="required" ng-model="partner.first_name" id="partner[first_name]" name="partner[first_name]" />
</div> </div>
<span class="help-block" ng-show="partnerForm['partner[first_name]'].$dirty && partnerForm['partner[first_name]'].$error.required" translate>{{ 'first_name_is_required' }}</span> <span class="help-block" ng-show="partnerForm['partner[first_name]'].$dirty && partnerForm['partner[first_name]'].$error.required" translate>{{ 'app.shared.plan.first_name_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': partnerForm['partner[last_name]'].$dirty && partnerForm['partner[last_name]'].$invalid}"> <div class="form-group" ng-class="{'has-error': partnerForm['partner[last_name]'].$dirty && partnerForm['partner[last_name]'].$invalid}">
<label for="partner[last_name]" translate>{{ 'surname' }}</label> <label for="partner[last_name]" translate>{{ 'app.shared.plan.surname' }}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span> <span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="text" class="form-control" required="required" ng-model="partner.last_name" id="partner[last_name]" name="partner[last_name]" /> <input type="text" class="form-control" required="required" ng-model="partner.last_name" id="partner[last_name]" name="partner[last_name]" />
</div> </div>
<span class="help-block" ng-show="partnerForm['partner[last_name]'].$dirty && partnerForm['partner[last_name]'].$error.required" translate>{{ 'surname_is_required' }}</span> <span class="help-block" ng-show="partnerForm['partner[last_name]'].$dirty && partnerForm['partner[last_name]'].$error.required" translate>{{ 'app.shared.plan.surname_is_required' }}</span>
</div> </div>
<div class="form-group" ng-class="{'has-error': partnerForm['partner[email]'].$dirty && partnerForm['partner[email]'].$invalid}"> <div class="form-group" ng-class="{'has-error': partnerForm['partner[email]'].$dirty && partnerForm['partner[email]'].$invalid}">
<label for="partner[email]" translate>{{ 'email_address' }}</label> <label for="partner[email]" translate>{{ 'app.shared.plan.email_address' }}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"><i class="fa fa-envelope"></i></span> <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
<input type="email" class="form-control" required="required" ng-model="partner.email" id="partner[email]" name="partner[email]" /> <input type="email" class="form-control" required="required" ng-model="partner.email" id="partner[email]" name="partner[email]" />
</div> </div>
<span class="help-block" ng-show="partnerForm['partner[email]'].$dirty && partnerForm['partner[email]'].$error.required" translate>{{ 'email_address_is_required' }}</span> <span class="help-block" ng-show="partnerForm['partner[email]'].$dirty && partnerForm['partner[email]'].$error.required" translate>{{ 'app.shared.plan.email_address_is_required' }}</span>
</div> </div>
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" ng-click="ok()" ng-disabled="!partnerForm.$valid" translate>{{ 'confirm' }}</button> <button class="btn btn-primary" ng-click="ok()" ng-disabled="!partnerForm.$valid" translate>{{ 'app.shared.buttons.confirm' }}</button>
<button class="btn btn-warning" ng-click="cancel()" translate>{{ 'cancel' }}</button> <button class="btn btn-warning" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -1,10 +1,10 @@
<div ng-if="currentUser.role != 'admin'"> <div ng-if="currentUser.role != 'admin'">
<h3 class="m-t-xs" ng-if="walletAmount > 0 && price > 0" ng-bind-html="'you_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3> <h3 class="m-t-xs" ng-if="walletAmount > 0 && price > 0" ng-bind-html="'app.shared.wallet.you_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3>
<p ng-if="walletAmount > 0 && price > 0 && amount === 0" class="text-italic">{{'wallet_pay_reservation' | translate}}</p> <p ng-if="walletAmount > 0 && price > 0 && amount === 0" class="text-italic">{{'app.shared.wallet.wallet_pay_reservation' | translate}}</p>
<p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p> <p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'app.shared.stripe.credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p>
</div> </div>
<div ng-if="currentUser.role == 'admin'"> <div ng-if="currentUser.role == 'admin'">
<h3 class="m-t-xs" ng-if="walletAmount > 0 && price > 0" ng-bind-html="'client_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3> <h3 class="m-t-xs" ng-if="walletAmount > 0 && price > 0" ng-bind-html="'app.shared.wallet.client_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3>
<p ng-if="walletAmount > 0 && price > 0 && amount === 0" class="text-italic">{{'client_wallet_pay_reservation' | translate}}</p> <p ng-if="walletAmount > 0 && price > 0 && amount === 0" class="text-italic">{{'app.shared.wallet.client_wallet_pay_reservation' | translate}}</p>
<p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'client_credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p> <p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'app.shared.stripe.client_credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p>
</div> </div>

View File

@ -11,18 +11,18 @@
<div class="col-sm-offset-1 col-md-offset-3 col-sm-7 col-md-5 col-lg-4 m-b-lg"> <div class="col-sm-offset-1 col-md-offset-3 col-sm-7 col-md-5 col-lg-4 m-b-lg">
<span ng-bind-html="aboutBody.value"></span> <span ng-bind-html="aboutBody.value"></span>
<p ng-show="cgu"> <p ng-show="cgu">
<a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'about.read_the_fablab_policy' }}</a> <a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'app.public.about.read_the_fablab_policy' }}</a>
</p> </p>
<p ng-show="cgv"> <p ng-show="cgv">
<a href="{{cgv.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'about.read_the_fablab_s_general_terms_and_conditions' }}</a> <a href="{{cgv.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'app.public.about.read_the_fablab_s_general_terms_and_conditions' }}</a>
</p> </p>
<p ng-show="privacyPolicy.value"> <p ng-show="privacyPolicy.value">
<a ui-sref="app.public.privacy" translate>{{ 'about.privacy_policy' }}</a> <a ui-sref="app.public.privacy" translate>{{ 'app.public.about.privacy_policy' }}</a>
</p> </p>
</div> </div>
<div class="col-sm-offset-0 col-md-offset-0 col-lg-offset-1 col-sm-4 col-md-4"> <div class="col-sm-offset-0 col-md-offset-0 col-lg-offset-1 col-sm-4 col-md-4">
<h2 class="about-title-aside text-u-c" translate>{{ 'about.your_fablab_s_contacts' }}</h2> <h2 class="about-title-aside text-u-c" translate>{{ 'app.public.about.your_fablab_s_contacts' }}</h2>
<span ng-bind-html="aboutContacts.value"></span> <span ng-bind-html="aboutContacts.value"></span>
</div> </div>
</div> </div>

View File

@ -1,14 +1,14 @@
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'change_the_slot' }}</h1> <h1 translate>{{ 'app.shared.confirm_modify_slot_modal.change_the_slot' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p ng-show="currentUser.role != 'admin'" translate>{{ 'do_you_want_to_change_your_booking_slot_initially_planned_at' }} </p> <p ng-show="currentUser.role != 'admin'" translate>{{ 'app.shared.confirm_modify_slot_modal.do_you_want_to_change_your_booking_slot_initially_planned_at' }} </p>
<p ng-show="currentUser.role == 'admin'" translate translate-values="{NAME: object.user.name}">{{ 'do_you_want_to_change_NAME_s_booking_slot_initially_planned_at' }}</p> <p ng-show="currentUser.role == 'admin'" translate translate-values="{NAME: object.user.name}">{{ 'app.shared.confirm_modify_slot_modal.do_you_want_to_change_NAME_s_booking_slot_initially_planned_at' }}</p>
<p><strong>{{object.start | amDateFormat: 'LL'}} : {{object.start | amDateFormat:'LT'}} - {{object.end | amDateFormat:'LT'}}</strong></p> <p><strong>{{object.start | amDateFormat: 'LL'}} : {{object.start | amDateFormat:'LT'}} - {{object.end | amDateFormat:'LT'}}</strong></p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-warning" ng-class="{'m-b':object.cancelable&&object.movable}" ng-click="ok('cancel')" ng-show="object.cancelable" translate>{{ 'cancel_this_reservation' }}</button> <button class="btn btn-warning" ng-class="{'m-b':object.cancelable&&object.movable}" ng-click="ok('cancel')" ng-show="object.cancelable" translate>{{ 'app.shared.confirm_modify_slot_modal.cancel_this_reservation' }}</button>
<button class="btn btn-info" ng-click="ok('move')" ng-show="object.movable" translate>{{ 'i_want_to_change_date' }}</button> <button class="btn btn-info" ng-click="ok('move')" ng-show="object.movable" translate>{{ 'app.shared.confirm_modify_slot_modal.i_want_to_change_date' }}</button>
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button> <button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -1,10 +1,10 @@
<div class="cookies-consent" ng-hide="cookiesState"> <div class="cookies-consent" ng-hide="cookiesState">
<p class="cookies-infos"> <p class="cookies-infos">
<span translate>{{ 'cookies.about_cookies' }}</span> <span translate>{{ 'app.public.common.cookies.about_cookies' }}</span>
<a ng-href="{{learnMoreUrl}}" target="{{ learnMoreUrl.startsWith('http') ? '_blank' : '_self' }}" translate>{{ 'cookies.learn_more' }}</a> <a ng-href="{{learnMoreUrl}}" target="{{ learnMoreUrl.startsWith('http') ? '_blank' : '_self' }}" translate>{{ 'app.public.common.cookies.learn_more' }}</a>
</p> </p>
<div class="cookies-actions"> <div class="cookies-actions">
<button class="decline" ng-click="declineCookies()" translate>{{ 'cookies.decline' }}</button> <button class="decline" ng-click="declineCookies()" translate>{{ 'app.public.common.cookies.decline' }}</button>
<button class="accept" ng-click="acceptCookies()" translate>{{ 'cookies.accept' }}</button> <button class="accept" ng-click="acceptCookies()" translate>{{ 'app.public.common.cookies.accept' }}</button>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate> <h1 translate>
{{ 'connection' }} {{ 'app.public.common.connection' }}
</h1> </h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@ -24,7 +24,7 @@
required="required" required="required"
ng-blur="emailError = !!loginForm.email.$error.email" ng-blur="emailError = !!loginForm.email.$error.email"
ng-focus="emailError = false" ng-focus="emailError = false"
placeholder="{{ 'your_email_address' | translate }}" /> placeholder="{{ 'app.public.common.your_email_address' | translate }}" />
</div> </div>
</div> </div>
</div> </div>
@ -38,13 +38,13 @@
class="form-control" class="form-control"
ng-model="user.password" ng-model="user.password"
required="required" required="required"
placeholder="{{ 'your_password' | translate }}" placeholder="{{ 'app.public.common.your_password' | translate }}"
ng-minlength="8"/> ng-minlength="8"/>
</div> </div>
<a href="#" ng-click="openResetPassword($event)" class="text-xs">{{ 'password_forgotten' | translate }}</a> <a href="#" ng-click="openResetPassword($event)" class="text-xs">{{ 'app.public.common.password_forgotten' | translate }}</a>
<div class="alert alert-warning m-t-sm m-b-none text-xs p-sm" ng-show='isCapsLockOn' role="alert"> <div class="alert alert-warning m-t-sm m-b-none text-xs p-sm" ng-show='isCapsLockOn' role="alert">
<i class="fa fa-warning"></i> <i class="fa fa-warning"></i>
{{ 'caps_lock_is_on' | translate }} {{ 'app.public.common.caps_lock_is_on' | translate }}
</div> </div>
</div> </div>
</div> </div>
@ -53,13 +53,13 @@
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="login()" ng-disabled="loginForm.$invalid" translate>{{ 'confirm' }}</button> <button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="login()" ng-disabled="loginForm.$invalid" translate>{{ 'app.shared.buttons.confirm' }}</button>
</div> </div>
</div> </div>
<p class="text-center font-sbold"> <p class="text-center font-sbold">
<span translate>{{ 'not_registered_to_the_fablab' }}</span> <span translate>{{ 'app.public.common.not_registered_to_the_fablab' }}</span>
<br/> <br/>
<a href="#" ng-click="openSignup($event)" class="text-u-l" translate>{{ 'create_an_account' }}</a></br> <a href="#" ng-click="openSignup($event)" class="text-u-l" translate>{{ 'app.public.common.create_an_account' }}</a></br>
</p> </p>
</div> </div>

View File

@ -1,7 +1,7 @@
<div> <div>
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'change_your_password' }}</h1> <h1 translate>{{ 'app.public.common.change_your_password' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert> <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
@ -16,12 +16,12 @@
name="password" name="password"
ng-model="user.password" ng-model="user.password"
class="form-control" class="form-control"
placeholder="{{ 'your_new_password' | translate }}" placeholder="{{ 'app.public.common.your_new_password' | translate }}"
required required
ng-minlength="8"> ng-minlength="8">
</div> </div>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required" translate>{{ 'password_is_required' }}</span> <span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required" translate>{{ 'app.public.common.password_is_required' }}</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength" translate>{{ 'password_is_too_short' }}</span> <span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength" translate>{{ 'app.public.common.password_is_too_short' }}</span>
</div> </div>
</div> </div>
@ -33,20 +33,20 @@
name="password_confirmation" name="password_confirmation"
ng-model="user.password_confirmation" ng-model="user.password_confirmation"
class="form-control" class="form-control"
placeholder="{{ 'type_your_password_again' | translate }}" placeholder="{{ 'app.public.common.type_your_password_again' | translate }}"
required required
ng-minlength="8" ng-minlength="8"
match="user.password"> match="user.password">
</div> </div>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$dirty && passwordEditForm.password_confirmation.$error.required" translate>{{ 'password_confirmation_is_required' }}</span> <span class="help-block" ng-show="passwordEditForm.password_confirmation.$dirty && passwordEditForm.password_confirmation.$error.required" translate>{{ 'app.public.common.password_confirmation_is_required' }}</span>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$error.match" translate>{{ 'password_does_not_match_with_confirmation' }}</span> <span class="help-block" ng-show="passwordEditForm.password_confirmation.$error.match" translate>{{ 'app.public.common.password_does_not_match_with_confirmation' }}</span>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="changePassword()" ng-disabled="passwordEditForm.$invalid" translate>{{ 'confirm'}}</button> <button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="changePassword()" ng-disabled="passwordEditForm.$invalid" translate>{{ 'app.shared.buttons.confirm'}}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,7 +1,7 @@
<div> <div>
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'password_forgotten' }}</h1> <h1 translate>{{ 'app.public.common.password_forgotten' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert> <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
@ -19,7 +19,7 @@
required="required" required="required"
ng-blur="emailError = !!passwordNewForm.email.$error.email" ng-blur="emailError = !!passwordNewForm.email.$error.email"
ng-focus="emailError = false" ng-focus="emailError = false"
placeholder="{{ 'your_email_address' | translate }}" /> placeholder="{{ 'app.public.common.your_email_address' | translate }}" />
</div> </div>
</div> </div>
</div> </div>
@ -27,9 +27,9 @@
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="sendReset()" ng-disabled="passwordNewForm.$invalid" translate>{{ 'confirm' }}</button> <button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="sendReset()" ng-disabled="passwordNewForm.$invalid" translate>{{ 'app.shared.buttons.confirm' }}</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
<div class="row padder"> <div class="row padder">
<header class="about-picture"> <header class="about-picture">
<div class="col-sm-offset-2 col-md-offset-3 col-sm-10 col-md-8"> <div class="col-sm-offset-2 col-md-offset-3 col-sm-10 col-md-8">
<h1 class="about-title text-u-c" translate>{{ 'privacy.title' }}</h1> <h1 class="about-title text-u-c" translate>{{ 'app.public.privacy.title' }}</h1>
</div> </div>
</header> </header>
</div> </div>
@ -10,14 +10,14 @@
<div class="row padder"> <div class="row padder">
<div class="col-sm-offset-1 col-md-offset-3 col-sm-7 col-md-5 col-lg-4 m-b-lg"> <div class="col-sm-offset-1 col-md-offset-3 col-sm-7 col-md-5 col-lg-4 m-b-lg">
<div class="last-update text-gray"> <div class="last-update text-gray">
<span translate>{{ 'privacy.last_update' }}</span> <span translate>{{ 'app.public.privacy.last_update' }}</span>
<span>{{ privacyBody.last_update | amDateFormat:'LL' }}</span> <span>{{ privacyBody.last_update | amDateFormat:'LL' }}</span>
</div> </div>
<span ng-bind-html="privacyBody.value"></span> <span ng-bind-html="privacyBody.value"></span>
</div> </div>
<div class="col-sm-offset-0 col-md-offset-0 col-lg-offset-1 col-sm-4 col-md-4" ng-show="privacyDpo.value"> <div class="col-sm-offset-0 col-md-offset-0 col-lg-offset-1 col-sm-4 col-md-4" ng-show="privacyDpo.value">
<h2 class="about-title-aside text-u-c" translate>{{ 'privacy.dpo' }}</h2> <h2 class="about-title-aside text-u-c" translate>{{ 'app.public.privacy.dpo' }}</h2>
<span ng-bind-html="privacyDpo.value"></span> <span ng-bind-html="privacyDpo.value"></span>
</div> </div>
</div> </div>

View File

@ -104,7 +104,7 @@
</div> </div>
<div class="text-center"> <div class="text-center">
<span class="m-l-sm label label-success text-white">{{project.author_id == user.id ? 'author' : 'collaborator' | translate}}</span> <span class="m-l-sm label label-success text-white">{{project.author_id == user.id ? 'author' : 'app.shared.public_profile.collaborator' | translate}}</span>
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'app.shared.public_profile.rough_draft' }}</span> <span class="badge" ng-if="project.state == 'draft'" translate>{{ 'app.shared.public_profile.rough_draft' }}</span>
</div> </div>

View File

@ -1,6 +1,6 @@
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'create_your_account' }}</h1> <h1 translate>{{ 'app.public.common.create_your_account' }}</h1>
</div> </div>
<div class=""> <div class="">
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert> <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
@ -14,16 +14,16 @@
name="gender" name="gender"
ng-model="user.statistic_profile_attributes.gender" ng-model="user.statistic_profile_attributes.gender"
value="true" value="true"
required/> {{ 'man' | translate }} required/> {{ 'app.public.common.man' | translate }}
</label> </label>
<label class="checkbox-inline"> <label class="checkbox-inline">
<input type="radio" <input type="radio"
name="gender" name="gender"
ng-model="user.statistic_profile_attributes.gender" ng-model="user.statistic_profile_attributes.gender"
value="false"/> {{ 'woman' | translate }} value="false"/> {{ 'app.public.common.woman' | translate }}
</label> </label>
<span class="exponent m-l-xs help-cursor" title="{{ 'used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent m-l-xs help-cursor" title="{{ 'app.public.common.used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.gender.$dirty && signupForm.gender.$error.required" translate>{{ 'gender_is_required'}}</span> <span class="help-block" ng-show="signupForm.gender.$dirty && signupForm.gender.$error.required" translate>{{ 'app.public.common.gender_is_required'}}</span>
</div> </div>
</div> </div>
@ -34,10 +34,10 @@
name="first_name" name="first_name"
ng-model="user.profile_attributes.first_name" ng-model="user.profile_attributes.first_name"
class="form-control" class="form-control"
placeholder="{{ 'your_first_name' | translate }}" placeholder="{{ 'app.public.common.your_first_name' | translate }}"
required> required>
<span class="exponent m-l-xs help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent m-l-xs help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.first_name.$dirty && signupForm.first_name.$error.required" translate>{{ 'first_name_is_required' }}</span> <span class="help-block" ng-show="signupForm.first_name.$dirty && signupForm.first_name.$error.required" translate>{{ 'app.public.common.first_name_is_required' }}</span>
</div> </div>
<div class="m-b visible-xs"></div> <div class="m-b visible-xs"></div>
<div class="col-sm-6" ng-class="{'has-error': signupForm.last_name.$dirty && signupForm.last_name.$invalid}"> <div class="col-sm-6" ng-class="{'has-error': signupForm.last_name.$dirty && signupForm.last_name.$invalid}">
@ -45,10 +45,10 @@
name="last_name" name="last_name"
ng-model="user.profile_attributes.last_name" ng-model="user.profile_attributes.last_name"
class="form-control" class="form-control"
placeholder="{{ 'your_surname' | translate }}" placeholder="{{ 'app.public.common.your_surname' | translate }}"
required> required>
<span class="exponent m-l-xs help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent m-l-xs help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.last_name.$dirty && signupForm.last_name.$error.required" translate>{{ 'surname_is_required' }}</span> <span class="help-block" ng-show="signupForm.last_name.$dirty && signupForm.last_name.$error.required" translate>{{ 'app.public.common.surname_is_required' }}</span>
</div> </div>
</div> </div>
@ -60,11 +60,11 @@
name="username" name="username"
ng-model="user.username" ng-model="user.username"
class="form-control" class="form-control"
placeholder="{{ 'your_pseudonym' | translate }}" placeholder="{{ 'app.public.common.your_pseudonym' | translate }}"
required> required>
</div> </div>
<span class="exponent help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.username.$dirty && signupForm.username.$error.required" translate>{{ 'pseudonym_is_required' }}</span> <span class="help-block" ng-show="signupForm.username.$dirty && signupForm.username.$error.required" translate>{{ 'app.public.common.pseudonym_is_required' }}</span>
</div> </div>
</div> </div>
@ -76,11 +76,11 @@
name="email" name="email"
ng-model="user.email" ng-model="user.email"
class="form-control" class="form-control"
placeholder="{{ 'your_email_address' | translate }}" placeholder="{{ 'app.public.common.your_email_address' | translate }}"
required> required>
</div> </div>
<span class="exponent help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent help-cursor" title="{{ 'app.public.common.used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.email.$dirty && signupForm.email.$error.required" translate>{{ 'email_is_required' }}</span> <span class="help-block" ng-show="signupForm.email.$dirty && signupForm.email.$error.required" translate>{{ 'app.public.common.email_is_required' }}</span>
</div> </div>
</div> </div>
@ -92,13 +92,13 @@
name="password" name="password"
ng-model="user.password" ng-model="user.password"
class="form-control" class="form-control"
placeholder="{{ 'your_password' | translate }}" placeholder="{{ 'app.public.common.your_password' | translate }}"
required required
ng-minlength="8"> ng-minlength="8">
</div> </div>
<span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.required" translate>{{ 'password_is_required' }}</span> <span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.required" translate>{{ 'app.public.common.password_is_required' }}</span>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.minlength" translate>{{ 'password_is_too_short' }}</span> <span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.minlength" translate>{{ 'app.public.common.password_is_too_short' }}</span>
</div> </div>
</div> </div>
@ -110,13 +110,13 @@
name="password_confirmation" name="password_confirmation"
ng-model="user.password_confirmation" ng-model="user.password_confirmation"
class="form-control" class="form-control"
placeholder="{{ 'type_your_password_again' | translate }}" placeholder="{{ 'app.public.common.type_your_password_again' | translate }}"
required ng-minlength="8" required ng-minlength="8"
match="user.password"> match="user.password">
</div> </div>
<span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.password_confirmation.$dirty && signupForm.password_confirmation.$error.required" translate>{{ 'password_confirmation_is_required' }}</span> <span class="help-block" ng-show="signupForm.password_confirmation.$dirty && signupForm.password_confirmation.$error.required" translate>{{ 'app.public.common.password_confirmation_is_required' }}</span>
<span class="help-block" ng-show="signupForm.password_confirmation.$error.match" translate>{{ 'password_does_not_match_with_confirmation' }}</span> <span class="help-block" ng-show="signupForm.password_confirmation.$error.match" translate>{{ 'app.public.common.password_does_not_match_with_confirmation' }}</span>
</div> </div>
</div> </div>
@ -127,7 +127,7 @@
id="organization" id="organization"
ng-model="user.organization" ng-model="user.organization"
value="false"/> value="false"/>
<label for="organization" translate>{{ 'i_am_an_organization' }}</label> <label for="organization" translate>{{ 'app.public.common.i_am_an_organization' }}</label>
</div> </div>
</div> </div>
@ -139,11 +139,11 @@
name="organization_name" name="organization_name"
ng-model="user.profile_attributes.organization_attributes.name" ng-model="user.profile_attributes.organization_attributes.name"
class="form-control" class="form-control"
placeholder="{{ 'name_of_your_organization' | translate }}" placeholder="{{ 'app.public.common.name_of_your_organization' | translate }}"
ng-required="user.organization"> ng-required="user.organization">
</div> </div>
<span class="exponent help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent help-cursor" title="{{ 'app.public.common.used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.organization_name.$dirty && signupForm.organization_name.$error.required" translate>{{ 'organization_name_is_required' }}</span> <span class="help-block" ng-show="signupForm.organization_name.$dirty && signupForm.organization_name.$error.required" translate>{{ 'app.public.common.organization_name_is_required' }}</span>
</div> </div>
</div> </div>
@ -155,11 +155,11 @@
name="organization_address" name="organization_address"
ng-model="user.profile_attributes.organization_attributes.address_attributes.address" ng-model="user.profile_attributes.organization_attributes.address_attributes.address"
class="form-control" class="form-control"
placeholder="{{ 'address_of_your_organization' | translate }}" placeholder="{{ 'app.public.common.address_of_your_organization' | translate }}"
ng-required="user.organization"> ng-required="user.organization">
</div> </div>
<span class="exponent help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent help-cursor" title="{{ 'app.public.common.used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.organization_address.$dirty && signupForm.organization_address.$error.required" translate>{{ 'organization_address_is_required' }}</span> <span class="help-block" ng-show="signupForm.organization_address.$dirty && signupForm.organization_address.$error.required" translate>{{ 'app.public.common.organization_address_is_required' }}</span>
</div> </div>
</div> </div>
@ -167,11 +167,11 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div> <div>
<select ng-model="user.group_id" class="form-control" name="group_id" ng-options="g.id as g.name for g in enabledGroups" required> <select ng-model="user.group_id" class="form-control" name="group_id" ng-options="g.id as g.name for g in enabledGroups" required>
<option value="" translate>{{ 'your_user_s_profile' }}</option> <option value="" translate>{{ 'app.public.common.your_user_s_profile' }}</option>
</select> </select>
<span class="exponent exponent-select help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent exponent-select help-cursor" title="{{ 'app.public.common.used_for_invoicing' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
</div> </div>
<span class="help-block" ng-show="signupForm.group_id.$dirty && signupForm.group_id.$error.required" translate>{{ 'user_s_profile_is_required' }}</span> <span class="help-block" ng-show="signupForm.group_id.$dirty && signupForm.group_id.$error.required" translate>{{ 'app.public.common.user_s_profile_is_required' }}</span>
</div> </div>
</div> </div>
@ -186,12 +186,12 @@
uib-datepicker-popup="{{datePicker.format}}" uib-datepicker-popup="{{datePicker.format}}"
datepicker-options="datePicker.options" datepicker-options="datePicker.options"
is-open="datePicker.opened" is-open="datePicker.opened"
placeholder="{{ 'birth_date' | translate }}" placeholder="{{ 'app.public.common.birth_date' | translate }}"
ng-click="openDatePicker($event)" ng-click="openDatePicker($event)"
required/> required/>
</div> </div>
<span class="exponent help-cursor" title="{{ 'used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent help-cursor" title="{{ 'app.public.common.used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span class="help-block" ng-show="signupForm.birthday.$dirty && signupForm.birthday.$error.required" translate>{{ 'birth_date_is_required' }}</span> <span class="help-block" ng-show="signupForm.birthday.$dirty && signupForm.birthday.$error.required" translate>{{ 'app.public.common.birth_date_is_required' }}</span>
</div> </div>
</div> </div>
@ -203,13 +203,13 @@
type="text" type="text"
name="phone" name="phone"
class="form-control" class="form-control"
placeholder="{{ 'phone_number' | translate }}" placeholder="{{ 'app.public.common.phone_number' | translate }}"
ng-required="phoneRequired"> ng-required="phoneRequired">
</div> </div>
<span ng-show="phoneRequired" class="exponent help-cursor" title="{{ 'used_for_reservation' | translate }}"> <span ng-show="phoneRequired" class="exponent help-cursor" title="{{ 'app.public.common.used_for_reservation' | translate }}">
<i class="fa fa-asterisk" aria-hidden="true"></i> <i class="fa fa-asterisk" aria-hidden="true"></i>
</span> </span>
<span class="help-block" ng-show="signupForm.phone.$dirty && signupForm.phone.$error.required" translate>{{ 'phone_number_is_required' }}</span> <span class="help-block" ng-show="signupForm.phone.$dirty && signupForm.phone.$error.required" translate>{{ 'app.public.common.phone_number_is_required' }}</span>
</div> </div>
</div> </div>
@ -220,7 +220,7 @@
id="is_allow_contact" id="is_allow_contact"
ng-model="user.is_allow_contact" ng-model="user.is_allow_contact"
value="true"/> value="true"/>
<label for="is_allow_contact" class="help-cursor" title="{{ 'public_profile' | translate }}" translate>{{ 'i_authorize_Fablab_users_registered_on_the_site_to_contact_me' }}</label> <label for="is_allow_contact" class="help-cursor" title="{{ 'app.public.common.public_profile' | translate }}" translate>{{ 'app.public.common.i_authorize_Fablab_users_registered_on_the_site_to_contact_me' }}</label>
</div> </div>
</div> </div>
@ -231,7 +231,7 @@
id="is_allow_newsletter" id="is_allow_newsletter"
ng-model="user.is_allow_newsletter" ng-model="user.is_allow_newsletter"
value="true"/> value="true"/>
<label for="is_allow_newsletter" translate>{{ 'i_accept_to_receive_information_from_the_fablab' }}</label> <label for="is_allow_newsletter" translate>{{ 'app.public.common.i_accept_to_receive_information_from_the_fablab' }}</label>
</div> </div>
</div> </div>
@ -244,8 +244,8 @@
value="true" value="true"
ng-required="cgu != null"/> ng-required="cgu != null"/>
<label for="cgu"> <label for="cgu">
<span translate>{{ 'i_ve_read_and_i_accept_' }}</span> <span translate>{{ 'app.public.common.i_ve_read_and_i_accept_' }}</span>
<a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ '_the_fablab_policy' }}</a> <a href="{{cgu.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'app.public.common._the_fablab_policy' }}</a>
<span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></label> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></label>
</div> </div>
</div> </div>
@ -257,7 +257,7 @@
</div> </div>
<span class="info-required"> <span class="info-required">
<span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
<span translate>{{ 'field_required' }}</span> <span translate>{{ 'app.public.common.field_required' }}</span>
</span> </span>
<div ng-if="!cgu"> <div ng-if="!cgu">
<input type="hidden" name="cgu" ng-model="user.cgu" value="true"> <input type="hidden" name="cgu" ng-model="user.cgu" value="true">
@ -266,5 +266,5 @@
</div> </div>
</div> </div>
<div class="modal-footer no-padder"> <div class="modal-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="ok()" ng-disabled="signupForm.$invalid" translate>{{ 'confirm' }}</button> <button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="ok()" ng-disabled="signupForm.$invalid" translate>{{ 'app.shared.buttons.confirm' }}</button>
</div> </div>

View File

@ -1,17 +1,17 @@
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'booking_confirmation' }}</h1> <h1 translate>{{ 'app.shared.valid_reservation_modal.booking_confirmation' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert> <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
<ng-include src="'<%= asset_path 'shared/_wallet_amount_info.html' %>'"></ng-include> <ng-include src="'<%= asset_path "shared/_wallet_amount_info.html" %>'"></ng-include>
<p translate>{{ 'here_is_the_summary_of_the_slots_to_book_for_the_current_user' }}</p> <p translate>{{ 'app.shared.valid_reservation_modal.here_is_the_summary_of_the_slots_to_book_for_the_current_user' }}</p>
<ul ng-repeat="slot in reservation.slots_attributes"> <ul ng-repeat="slot in reservation.slots_attributes">
<li><strong>{{slot.start_at | amDateFormat: 'LL'}} : {{slot.start_at | amDateFormat:'LT'}} - {{slot.end_at | amDateFormat:'LT'}}</strong></li> <li><strong>{{slot.start_at | amDateFormat: 'LL'}} : {{slot.start_at | amDateFormat:'LT'}} - {{slot.end_at | amDateFormat:'LT'}}</strong></li>
</ul> </ul>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-info" ng-click="ok()" ng-disabled="attempting" ng-bind-html="validButtonName"></button> <button class="btn btn-info" ng-click="ok()" ng-disabled="attempting" ng-bind-html="validButtonName"></button>
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button> <button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
</div> </div>

View File

@ -1,7 +1,7 @@
<div xmlns:stripe="http://www.w3.org/1999/xhtml"> <div xmlns:stripe="http://www.w3.org/1999/xhtml">
<div class="modal-header"> <div class="modal-header">
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/> <img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
<h1 translate>{{ 'online_payment' }}</h1> <h1 translate>{{ 'app.shared.stripe.online_payment' }}</h1>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert> <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
@ -10,8 +10,8 @@
<form name="stripeForm" stripe:form cart-items="cartItems" on-payment-success="onPaymentSuccess" class="form-horizontal"> <form name="stripeForm" stripe:form cart-items="cartItems" on-payment-success="onPaymentSuccess" class="form-horizontal">
<div class="panel-body"> <div class="panel-body">
<h3 class="m-t-xs" ng-if="walletAmount" ng-bind-html="'you_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3> <h3 class="m-t-xs" ng-if="walletAmount" ng-bind-html="'app.shared.wallet.you_have_amount_in_wallet' | translate:{ amount: numberFilter(walletAmount, 2), currency: currencySymbol }"></h3>
<p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p> <p ng-if="walletAmount > 0 && amount !== 0" class="text-italic" ng-bind-html="'app.shared.stripe.credit_amount_for_pay_reservation' | translate:{ amount: numberFilter(amount, 2), currency: currencySymbol }"></p>
<div id="card-element"></div> <div id="card-element"></div>
<div id="card-errors" role="alert"></div> <div id="card-errors" role="alert"></div>
@ -19,7 +19,9 @@
<div class="form-group" ng-class="{'has-error': stripeForm.acceptCondition.$dirty && stripeForm.acceptCondition.$invalid}" ng-show="cgv"> <div class="form-group" ng-class="{'has-error': stripeForm.acceptCondition.$dirty && stripeForm.acceptCondition.$invalid}" ng-show="cgv">
<div class="col-sm-12 text-sm checkbox-group"> <div class="col-sm-12 text-sm checkbox-group">
<input type="checkbox" name="acceptCondition" id="acceptCondition" ng-model="acceptCondition" value="true" ng-required="cgv != null"/> <input type="checkbox" name="acceptCondition" id="acceptCondition" ng-model="acceptCondition" value="true" ng-required="cgv != null"/>
<label for="acceptCondition">{{ 'i_have_read_and_accept_' | translate }} <a href="{{cgv.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ '_the_general_terms_and_conditions' }}</a></label> <label for="acceptCondition">{{ 'app.shared.stripe.i_have_read_and_accept_' | translate }}
<a href="{{cgv.custom_asset_file_attributes.attachment_url}}" target="_blank" translate>{{ 'app.shared.stripe._the_general_terms_and_conditions' }}</a>
</label>
</div> </div>
<div ng-if="!cgv"> <div ng-if="!cgv">
<input type="hidden" name="acceptCondition" ng-model="acceptCondition" value="true"> <input type="hidden" name="acceptCondition" ng-model="acceptCondition" value="true">
@ -28,7 +30,7 @@
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<button type="submit" class="btn btn-valid btn-info btn-block p-l btn-lg text-u-c r-b text-base" ng-disabled="stripeForm.$invalid || attempting" translate translate-values="{AMOUNT:(amount | currency)}">{{ 'confirm_payment_of_html'}}</button> <button type="submit" class="btn btn-valid btn-info btn-block p-l btn-lg text-u-c r-b text-base" ng-disabled="stripeForm.$invalid || attempting" translate translate-values="{AMOUNT:(amount | currency)}">{{ 'app.shared.stripe.confirm_payment_of_'}}</button>
</div> </div>
</form> </form>

View File

@ -7,8 +7,8 @@
</div> </div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md"> <div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title"> <section class="heading-title">
<h1 ng-show="mode == 'all'" translate>{{ 'trainings_planning' }}</h1> <h1 ng-show="mode == 'all'" translate>{{ 'app.logged.trainings_reserve.trainings_planning' }}</h1>
<h1 ng-hide="mode == 'all'"><span translate>{{ 'planning_of' }}</span> {{training.name}}</h1> <h1 ng-hide="mode == 'all'"><span translate>{{ 'app.logged.trainings_reserve.planning_of' }}</span> {{training.name}}</h1>
</section> </section>
</div> </div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md"> <div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
@ -17,7 +17,7 @@
ui-sref="app.logged.trainings_reserve({id:'all'})" ui-sref="app.logged.trainings_reserve({id:'all'})"
ng-hide="mode == 'all'" ng-hide="mode == 'all'"
role="button" role="button"
translate>{{ 'all_trainings' }}</a> translate>{{ 'app.logged.trainings_reserve.all_trainings' }}</a>
</section> </section>
</div> </div>
</div> </div>
@ -27,7 +27,7 @@
<div class="row no-gutter training-reserve"> <div class="row no-gutter training-reserve">
<div class="col-sm-12 col-md-12 col-lg-9"> <div class="col-sm-12 col-md-12 col-lg-9">
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div> <div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
<ng-include ng-if="!fablabWithoutPlans" src="'<%= asset_path 'plans/_plan.html' %>'"></ng-include> <ng-include ng-if="!fablabWithoutPlans" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
</div> </div>

View File

@ -86,6 +86,7 @@ fr:
edit_event: "Modifier l'évènement" edit_event: "Modifier l'évènement"
view_reservations: "Voir les réservations" view_reservations: "Voir les réservations"
legend: "Légende" legend: "Légende"
and: "et"
icalendar: icalendar:
icalendar_import: "Import iCalendar" icalendar_import: "Import iCalendar"
@ -147,7 +148,8 @@ fr:
description_is_limited_to_255_characters: "La description est limitée à 255 caractères." description_is_limited_to_255_characters: "La description est limitée à 255 caractères."
description_was_successfully_saved: "La description a bien été enregistrée." description_was_successfully_saved: "La description a bien été enregistrée."
training_successfully_deleted: "La formation a bien été supprimée." training_successfully_deleted: "La formation a bien été supprimée."
unable_to_delete_the_training_because_some_users_alredy_booked_it: "La formation ne peut pas être supprimée car elle a déjà été réservée par des utilisateurs." unable_to_delete_the_training_because_some_users_already_booked_it: "La formation ne peut pas être supprimée car elle a déjà été réservée par des utilisateurs."
confirmation_required: "Confirmation requise"
do_you_really_want_to_delete_this_training: "Êtes-vous sur de vouloir supprimer cette formation ?" do_you_really_want_to_delete_this_training: "Êtes-vous sur de vouloir supprimer cette formation ?"
status_enabled: "Actifs" status_enabled: "Actifs"
status_disabled: "Désactivés" status_disabled: "Désactivés"
@ -155,10 +157,9 @@ fr:
trainings_new: trainings_new:
# créer une nouvelle formation # créer une nouvelle formation
trainings_new: add_a_new_training: "Ajouter une nouvelle formation"
add_a_new_training: "Ajouter une nouvelle formation" beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Attention, lors de la création d'une formation, ses tarifs de réservation sont initialisés à zero."
beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Attention, lors de la création d'une formation, ses tarifs de réservation sont initialisés à zero." dont_forget_to_change_them_before_creating_slots_for_this_training: "Pensez à les modifier avant de créer des créneaux pour cette formation."
dont_forget_to_change_them_before_creating_slots_for_this_training: "Pensez à les modifier avant de créer des créneaux pour cette formation."
events: events:
# gestion et suivi des évènements # gestion et suivi des évènements
@ -590,6 +591,7 @@ fr:
groups: "Groupes" groups: "Groupes"
tags: "Étiquettes" tags: "Étiquettes"
authentication: "Authentification" authentication: "Authentification"
confirmation_required: "Confirmation requise"
confirm_delete_member: "Êtes-vous sûr de vouloir supprimer ce membre ? Cette opération est irréversible." confirm_delete_member: "Êtes-vous sûr de vouloir supprimer ce membre ? Cette opération est irréversible."
member_successfully_deleted: "Le membre a bien été supprimé." member_successfully_deleted: "Le membre a bien été supprimé."
unable_to_delete_the_member: "Le membre n'a pas pu être supprimé." unable_to_delete_the_member: "Le membre n'a pas pu être supprimé."
@ -599,6 +601,7 @@ fr:
unable_to_delete_the_administrator: "L'administrateur n'a pas pu être supprimé." unable_to_delete_the_administrator: "L'administrateur n'a pas pu être supprimé."
changes_successfully_saved: "Les modifications ont bien été enregistrées." changes_successfully_saved: "Les modifications ont bien été enregistrées."
an_error_occurred_while_saving_changes: "Une erreur est survenue lors de l'enregistrement des modifications." an_error_occurred_while_saving_changes: "Une erreur est survenue lors de l'enregistrement des modifications."
export_is_running_you_ll_be_notified_when_its_ready: "L'export est en cours. Vous serez notifié lorsqu'il sera prêt."
tag_form: tag_form:
tags: "Étiquettes" tags: "Étiquettes"
add_a_tag: "Ajouter une étiquette" add_a_tag: "Ajouter une étiquette"
@ -736,6 +739,19 @@ fr:
add_an_administrator: "Ajouter un administrateur" add_an_administrator: "Ajouter un administrateur"
administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "L'administrateur a bien été créé. {GENDER, select, female{Elle} other{Il}} recevra ses instructions de connexion par email." administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "L'administrateur a bien été créé. {GENDER, select, female{Elle} other{Il}} recevra ses instructions de connexion par email."
failed_to_create_admin: "Impossible de créer l'administrateur :" failed_to_create_admin: "Impossible de créer l'administrateur :"
man: "Homme"
woman: "Femme"
pseudonym: "Pseudonyme"
pseudonym_is_required: "Le pseudonyme est requis."
first_name: "Votre prénom"
first_name_is_required: "Le prénom est requis."
surname: "Votre nom"
surname_is_required: "Le nom est requis."
email_address: "Votre adresse de courriel"
email_is_required: "L'adresse de courriel est requise."
birth_date: "Date de naissance"
address: "Adresse"
phone_number: "Numéro de téléphone"
authentication_new: authentication_new:
# ajouter un nouveau fournisseur d'authentification (SSO) # ajouter un nouveau fournisseur d'authentification (SSO)

View File

@ -1,12 +1,13 @@
fr: fr:
app: app:
logged: logged:
profileCompletion: profile_completion:
# page de complétion du profil utilisateur, à la première connexion depuis un SSO # page de complétion du profil utilisateur, à la première connexion depuis un SSO
confirm_your_new_account: "Confirmez votre nouveau compte" confirm_your_new_account: "Confirmez votre nouveau compte"
you_ve_just_created_a_new_account_on_the_fablab_by_logging_from: "Vous venez de créer un nouveau compte sur {GENDER, select, male{le} female{la} neutral{} other{les}} {NAME}, en vous connectant depuis" you_ve_just_created_a_new_account_on_the_fablab_by_logging_from: "Vous venez de créer un nouveau compte sur {GENDER, select, male{le} female{la} neutral{} other{les}} {NAME}, en vous connectant depuis"
we_need_some_more_details: "Afin de finaliser le paramétrage de la plate-forme, nous avons besoin de quelques renseignements supplémentaires" we_need_some_more_details: "Afin de finaliser le paramétrage de la plate-forme, nous avons besoin de quelques renseignements supplémentaires"
your_email_is_already_used_by_another_account_on_the_platform: "Il semblerait que votre adresse de courriel soit déjà utilisée par un autre utilisateur. Vérifiez votre adresse électronique et veuillez saisir ci-dessous le code qui vient de vous être envoyé." your_email_is_already_used_by_another_account_on_the_platform: "Il semblerait que votre adresse de courriel soit déjà utilisée par un autre utilisateur. Vérifiez votre adresse électronique et veuillez saisir ci-dessous le code qui vient de vous être envoyé."
or: "ou"
please_fill_the_following_form: "Merci de compléter le formulaire suivant" please_fill_the_following_form: "Merci de compléter le formulaire suivant"
some_data_may_have_already_been_provided_by_provider_and_cannot_be_modified: "Certaines informations peuvent nous avoir été déjà fournies par {NAME} et ne sont pas modifiables" some_data_may_have_already_been_provided_by_provider_and_cannot_be_modified: "Certaines informations peuvent nous avoir été déjà fournies par {NAME} et ne sont pas modifiables"
then_click_on_: "Cliquez ensuite sur" then_click_on_: "Cliquez ensuite sur"
@ -24,8 +25,20 @@ fr:
an_unexpected_error_occurred_check_your_authentication_code: "Une erreur inattendue est survenue, vérifiez votre code d'authentification." an_unexpected_error_occurred_check_your_authentication_code: "Une erreur inattendue est survenue, vérifiez votre code d'authentification."
send_code_again: "Renvoyer le code" send_code_again: "Renvoyer le code"
email_address_associated_with_your_account: "Adresse électronique associée à votre compte" email_address_associated_with_your_account: "Adresse électronique associée à votre compte"
email_is_required: "L'adresse mail est requise"
email_format_is_incorrect: "Le format de l'adresse email est incorrect" email_format_is_incorrect: "Le format de l'adresse email est incorrect"
code_successfully_sent_again: "Le code a bien été renvoyé" code_successfully_sent_again: "Le code a bien été renvoyé"
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques"
your_user_s_profile: "Votre profil utilisateur"
user_s_profile_is_required: "Le profil utilisateur est requis."
i_ve_read_and_i_accept_: "J'ai lu et j'accepte"
_the_fablab_policy: "la charte d'utilisation du Fab Lab"
change_my_data: "Modifier mes données"
sync_my_profile: "Synchroniser mon profil"
once_your_data_are_up_to_date_: "Une fois vos données à jour,"
_click_on_the_synchronization_button_opposite_: "cliquez sur le bouton de synchronisation ci-contre"
_disconnect_then_reconnect_: "déconnectez-vous puis re-connectez vous"
_for_your_changes_to_take_effect: "pour que les modifications soient prises en compte."
dashboard: dashboard:
# tableau de bord: profile publique # tableau de bord: profile publique
@ -53,6 +66,7 @@ fr:
edit_my_profile: "Éditer votre profil" edit_my_profile: "Éditer votre profil"
your_group_has_been_successfully_changed: "Votre groupe a bien été changé." your_group_has_been_successfully_changed: "Votre groupe a bien été changé."
an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe." an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe."
confirmation_required: "Confirmation requise"
confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?" confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?"
all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées." all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées."
invoicing_data_kept: "Conformément à la réglementation, les données relatives à vos facturations seront conservées de manière séparée pendant 10 ans." invoicing_data_kept: "Conformément à la réglementation, les données relatives à vos facturations seront conservées de manière séparée pendant 10 ans."
@ -156,6 +170,8 @@ fr:
planning_of: "Planning de la" # suivi du nom de la formation (eg. "Planning de la formation imprimante 3d") planning_of: "Planning de la" # suivi du nom de la formation (eg. "Planning de la formation imprimante 3d")
all_trainings: "Toutes les formations" all_trainings: "Toutes les formations"
cancel_my_selection: "Annuler ma sélection" cancel_my_selection: "Annuler ma sélection"
i_change: "Je change"
i_shift: "Je déplace"
i_ve_reserved: "J'ai réservé" i_ve_reserved: "J'ai réservé"
space_reserve: space_reserve:

View File

@ -124,18 +124,16 @@ fr:
about: about:
# page à propos # page à propos
about: read_the_fablab_policy: "Consulter les règles d'utilisation du Fab Lab"
read_the_fablab_policy: "Consulter les règles d'utilisation du Fab Lab" read_the_fablab_s_general_terms_and_conditions: "Consulter les conditions générales de vente du Fab Lab"
read_the_fablab_s_general_terms_and_conditions: "Consulter les conditions générales de vente du Fab Lab" your_fablab_s_contacts: "Vos contacts au Fab Lab"
your_fablab_s_contacts: "Vos contacts au Fab Lab" privacy_policy: "Politique de confidentialité"
privacy_policy: "Politique de confidentialité"
privacy: privacy:
# page 'politique de confidentialité' # page 'politique de confidentialité'
privacy: title: "Politique de confidentialité"
title: "Politique de confidentialité" dpo: "Délégué à la protection des données"
dpo: "Délégué à la protection des données" last_update: "Dernière mise à jour,"
last_update: "Dernière mise à jour,"
home: home:
# page d'accueil # page d'accueil
@ -239,6 +237,7 @@ fr:
book_this_training: "Réserver cette formation" book_this_training: "Réserver cette formation"
do_you_really_want_to_delete_this_training: "Êtes-vous sur de vouloir supprimer cette formation ?" do_you_really_want_to_delete_this_training: "Êtes-vous sur de vouloir supprimer cette formation ?"
unauthorized_operation: "Opération non autorisée" unauthorized_operation: "Opération non autorisée"
confirmation_required: "Confirmation requise"
the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users: "La formation ne peut pas être supprimée car elle a déjà été réservée par des utilisateurs." the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users: "La formation ne peut pas être supprimée car elle a déjà été réservée par des utilisateurs."
plans: plans:
@ -269,6 +268,7 @@ fr:
subscription_confirmation: "Validation de l'abonnement" subscription_confirmation: "Validation de l'abonnement"
here_is_the_NAME_subscription_summary: "Voici le récapitulatif de l'abonnement de {NAME} :" here_is_the_NAME_subscription_summary: "Voici le récapitulatif de l'abonnement de {NAME} :"
confirm_payment_of_html: "{ROLE, select, admin{Encaisser} other{Payer}} : {AMOUNT}" # (contexte : valider un paiement de 20,00 €) confirm_payment_of_html: "{ROLE, select, admin{Encaisser} other{Payer}} : {AMOUNT}" # (contexte : valider un paiement de 20,00 €)
online_payment_disabled: "Le payment par carte bancaire n'est pas disponible. Merci de contacter directement l'accueil du Fablab."
events_list: events_list:
# liste des évènements du fablab # liste des évènements du fablab

View File

@ -19,38 +19,10 @@ fr:
"no": "Non" "no": "Non"
apply: "Appliquer" apply: "Appliquer"
elements:
# traductions variées utilisées à plusieurs reprises dans l'application
group: "Groupe"
confirmation_required: "Confirmation requise"
events: "Évènements"
email_address: "Adresse de courriel"
pseudonym: "Pseudonyme"
all_day: "Toute la journée"
total_: "TOTAL :"
name: "Nom"
step_N: "Étape {INDEX}"
online_payment: "Paiement en ligne"
type: "Type"
partner: "Partenaire"
standard: "Standard"
year: "Année"
or: "ou"
and: "et"
change_my_data: "Modifier mes données"
sync_my_profile: "Synchroniser mon profil"
once_your_data_are_up_to_date_: "Une fois vos données à jour,"
_click_on_the_synchronization_button_opposite_: "cliquez sur le bouton de synchronisation ci-contre"
_disconnect_then_reconnect_: "déconnectez-vous puis re-connectez vous"
_for_your_changes_to_take_effect: "pour que les modifications soient prises en compte."
all_themes: "Toutes les thématiques"
filter: 'Filtre'
payment_card_error: "Un problème est survenu avec votre carte bancaire :"
unexpected_error_occurred: "Une erreur inattendue est survenue"
messages: messages:
you_will_lose_any_unsaved_modification_if_you_quit_this_page: "Vous perdrez les modifications non enregistrées si vous quittez cette page" you_will_lose_any_unsaved_modification_if_you_quit_this_page: "Vous perdrez les modifications non enregistrées si vous quittez cette page"
you_will_lose_any_unsaved_modification_if_you_reload_this_page: "Vous perdrez les modifications non enregistrées si vous rechargez cette page" you_will_lose_any_unsaved_modification_if_you_reload_this_page: "Vous perdrez les modifications non enregistrées si vous rechargez cette page"
payment_card_error: "Un problème est survenu avec votre carte bancaire :"
user: user:
# formulaire d'édition du profil utilisateur # formulaire d'édition du profil utilisateur
@ -151,10 +123,12 @@ fr:
stripe: stripe:
# fenêtre de paiement stripe # fenêtre de paiement stripe
online_payment: "Paiement en ligne"
i_have_read_and_accept_: "J'ai bien pris connaissance, et accepte" i_have_read_and_accept_: "J'ai bien pris connaissance, et accepte"
_the_general_terms_and_conditions: "les conditions générales de vente." _the_general_terms_and_conditions: "les conditions générales de vente."
credit_amount_for_pay_reservation: "Il vous reste {amount} {currency} à payer pour valider votre réservation" credit_amount_for_pay_reservation: "Il vous reste {amount} {currency} à payer pour valider votre réservation"
client_credit_amount_for_pay_reservation: "Il reste {amount} {currency} à payer pour valider la réservation" client_credit_amount_for_pay_reservation: "Il reste {amount} {currency} à payer pour valider la réservation"
confirm_payment_of_: "Payer : {AMOUNT}"
valid_reservation_modal: valid_reservation_modal:
# fenêtre de paiement sur place d'une réservation # fenêtre de paiement sur place d'une réservation
@ -194,6 +168,8 @@ fr:
name_is_required: "Le nom est requis" name_is_required: "Le nom est requis"
name_length_must_be_less_than_24_characters: "Le nom doit faire moins de 24 caractères." name_length_must_be_less_than_24_characters: "Le nom doit faire moins de 24 caractères."
type: "Type" type: "Type"
partner: "Partenaire"
standard: "Standard"
type_is_required: "Le type est requis." type_is_required: "Le type est requis."
group: "Groupe" group: "Groupe"
transversal_all_groups: "Transversal (tout les groupes)" transversal_all_groups: "Transversal (tout les groupes)"
@ -219,6 +195,11 @@ fr:
new_user: "Nouvel utilisateur ..." new_user: "Nouvel utilisateur ..."
as_part_of_a_partner_subscription_some_notifications_may_be_sent_to_this_user: "Dans le cadre d'un abonnement partenaire, certaines notifications pourront être adressées à cet utilisateur." as_part_of_a_partner_subscription_some_notifications_may_be_sent_to_this_user: "Dans le cadre d'un abonnement partenaire, certaines notifications pourront être adressées à cet utilisateur."
new_partner: "Nouveau partenaire" new_partner: "Nouveau partenaire"
first_name: "Prénom"
first_name_is_required: "Le prénom est requis"
surname: "Nom"
surname_is_required: "le nom est requis"
email_address: "Adresse de courriel"
email_address_is_required: "L'adresse e-mail est requise." email_address_is_required: "L'adresse e-mail est requise."
disabled: "Désactiver l'abonnement" disabled: "Désactiver l'abonnement"
disable_plan_will_not_unsubscribe_users: "Attention : désactiver l'abonnement ne désabonnera pas les utilisateurs ayant actuellement cet abonnement actif." disable_plan_will_not_unsubscribe_users: "Attention : désactiver l'abonnement ne désabonnera pas les utilisateurs ayant actuellement cet abonnement actif."