1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-26 20:54:21 +01:00

allow user to change his choice about cookies

This commit is contained in:
Sylvain 2019-06-13 12:52:56 +02:00
parent e9b18fda6c
commit f69703f0a0
13 changed files with 286 additions and 175 deletions

View File

@ -51,7 +51,7 @@ Application.Controllers.controller('CookiesController', ['$scope', '$cookies', '
} }
}); });
// if the GA_ID environment variable was not set, only functional cookies will be set, so user consent is not required // if the GA_ID environment variable was not set, only functional cookies will be set, so user consent is not required
$scope.cookiesState = 'ignore'; // $scope.cookiesState = 'ignore';
}; };
const readCookie = function () { const readCookie = function () {

View File

@ -70,10 +70,10 @@ Application.Controllers.controller('MembersController', ['$scope', 'Member', 'me
]); ]);
/** /**
* Controller used when editing the current user's profile * Controller used when editing the current user's profile (in dashboard)
*/ */
Application.Controllers.controller('EditProfileController', ['$scope', '$rootScope', '$state', '$window', '$sce', 'Member', 'Auth', 'Session', 'activeProviderPromise', 'growl', 'dialogs', 'CSRF', 'memberPromise', 'groups', '_t', Application.Controllers.controller('EditProfileController', ['$scope', '$rootScope', '$state', '$window', '$sce', '$cookies', '$injector', 'Member', 'Auth', 'Session', 'activeProviderPromise', 'growl', 'dialogs', 'CSRF', 'memberPromise', 'groups', '_t',
function ($scope, $rootScope, $state, $window, $sce, Member, Auth, Session, activeProviderPromise, growl, dialogs, CSRF, memberPromise, groups, _t) { function ($scope, $rootScope, $state, $window, $sce, $cookies, $injector, Member, Auth, Session, activeProviderPromise, growl, dialogs, CSRF, memberPromise, groups, _t) {
/* PUBLIC SCOPE */ /* PUBLIC SCOPE */
// API URL where the form will be posted // API URL where the form will be posted
@ -101,12 +101,14 @@ Application.Controllers.controller('EditProfileController', ['$scope', '$rootSco
// allow the user to change his password except if he connect from an SSO // allow the user to change his password except if he connect from an SSO
$scope.preventPassword = false; $scope.preventPassword = false;
// get the status of cookies acceptance
$scope.cookiesStatus = $cookies.get('fab-manager-cookies-consent');
// mapping of fields to disable // mapping of fields to disable
$scope.preventField = {}; $scope.preventField = {};
// Should the passord be modified? // Should the passord be modified?
$scope.password = $scope.password = { change: false };
{ change: false };
// Angular-Bootstrap datepicker configuration for birthday // Angular-Bootstrap datepicker configuration for birthday
$scope.datePicker = { $scope.datePicker = {
@ -255,6 +257,15 @@ Application.Controllers.controller('EditProfileController', ['$scope', '$rootSco
return $window.location.href = $scope.activeProvider.link_to_sso_connect; return $window.location.href = $scope.activeProvider.link_to_sso_connect;
}); });
/**
* Destroy the cookie used to save the user's preference, this will trigger the choice popup again
*/
$scope.resetCookies = function () {
$cookies.remove('fab-manager-cookies-consent');
$scope.cookiesStatus = undefined;
$injector.get('$state').reload();
};
/* PRIVATE SCOPE */ /* PRIVATE SCOPE */
/** /**

View File

@ -13,72 +13,79 @@
</span> </span>
<div class="font-sbold m-t-sm">{{user.name}}</div> <div class="font-sbold m-t-sm">{{user.name}}</div>
<div>{{user.email}}</div> <div>{{user.email}}</div>
<div class="text-xs" ng-if="user.last_sign_in_at"><i>{{ 'last_activity_on_' | translate }} {{user.last_sign_in_at | amDateFormat: 'LL'}}</i></div> <div class="text-xs" ng-if="user.last_sign_in_at"><i>{{ 'edit_profile.last_activity_on_' | translate }} {{user.last_sign_in_at | amDateFormat: 'LL'}}</i></div>
</div> </div>
<div class="widget-content no-bg b-b auto wrapper"> <div class="widget-content no-bg b-b auto wrapper">
<div class="m-b-md"> <div class="m-b-md">
<h3 class="text-u-c" translate>{{ 'group' }}</h3> <h3 class="text-u-c" translate>{{ 'edit_profile.group' }}</h3>
<div ng-show="!group.change"> <div ng-show="!group.change">
<uib-alert type="warning"> <uib-alert type="warning">
<span class="text-black font-sbold">{{getUserGroup().name}}</span> <span class="text-black font-sbold">{{getUserGroup().name}}</span>
</uib-alert> </uib-alert>
<button class="btn text-black btn-warning-full btn-sm m-t-n-sm" <button class="btn text-black btn-warning-full btn-sm m-t-n-sm"
ng-click="group.change = !group.change" ng-click="group.change = !group.change"
ng-hide="user.subscribed_plan.name || user.role === 'admin'" ng-hide="user.subscribed_plan.name || user.role === 'admin'"
translate> translate>
{{ 'i_want_to_change_group' }} {{ 'edit_profile.i_want_to_change_group' }}
</button> </button>
</div> </div>
<div ng-show="group.change"> <div ng-show="group.change">
<select class="form-control" ng-options="g.id as g.name for g in groups" ng-model="userGroup"></select> <select class="form-control" ng-options="g.id as g.name for g in groups" ng-model="userGroup"></select>
<button class="btn btn-success m-t" ng-click="selectGroup()">Changer mon groupe</button> <button class="btn btn-success m-t" ng-click="selectGroup()">Changer mon groupe</button>
</div> </div>
</div> </div>
<div ng-hide="fablabWithoutPlans"> <div ng-hide="fablabWithoutPlans">
<h3 class="text-u-c" translate>{{ 'subscription' }}</h3> <h3 class="text-u-c" translate>{{ 'edit_profile.subscription' }}</h3>
<div ng-show="user.subscribed_plan"> <div ng-show="user.subscribed_plan">
<uib-alert type="warning"> <uib-alert type="warning">
<span class="text-black font-sbold">{{ user.subscribed_plan | humanReadablePlanName }}</span> <span class="text-black font-sbold">{{ user.subscribed_plan | humanReadablePlanName }}</span>
<div class="font-sbold" ng-if="user.subscription">{{ 'your_subscription_expires_on_' | translate }} {{user.subscription.expired_at | amDateFormat: 'LL'}}</div> <div class="font-sbold" ng-if="user.subscription">{{ 'edit_profile.your_subscription_expires_on_' | translate }} {{user.subscription.expired_at | amDateFormat: 'LL'}}</div>
</uib-alert> </uib-alert>
</div> </div>
<div ng-show="!user.subscribed_plan.name">{{ 'no_subscriptions' | translate }} <br><a class="btn text-black btn-warning-full btn-sm m-t-xs" ui-sref="app.public.plans" translate>{{ 'i_want_to_subscribe' }}</a></div> <div ng-show="!user.subscribed_plan.name">{{ 'edit_profile.no_subscriptions' | translate }} <br><a class="btn text-black btn-warning-full btn-sm m-t-xs" ui-sref="app.public.plans" translate>{{ 'edit_profile.i_want_to_subscribe' }}</a></div>
</div> </div>
<div class="m-t"> <div class="m-t">
<h3 class="text-u-c" translate>{{ 'trainings' }}</h3> <h3 class="text-u-c" translate>{{ 'edit_profile.trainings' }}</h3>
<ul class="list-unstyled" ng-if="user.training_reservations.length > 0 || user.trainings.length > 0"> <ul class="list-unstyled" ng-if="user.training_reservations.length > 0 || user.trainings.length > 0">
<li ng-repeat="r in user.training_reservations | trainingReservationsFilter:'future'"> <li ng-repeat="r in user.training_reservations | trainingReservationsFilter:'future'">
{{r.reservable.name}} - {{ 'to_come' | translate }} {{r.reservable.name}} - {{ 'edit_profile.to_come' | translate }}
</li> </li>
<li ng-repeat="t in user.trainings"> <li ng-repeat="t in user.trainings">
{{t.name}} - {{ 'approved' | translate }} {{t.name}} - {{ 'edit_profile.approved' | translate }}
</li> </li>
</ul> </ul>
<div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'no_trainings' }}</div> <div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'edit_profile.no_trainings' }}</div>
</div> </div>
<div class="m-t"> <div class="m-t">
<h3 class="text-u-c" translate>{{ 'projects' }}</h3> <h3 class="text-u-c" translate>{{ 'edit_profile.projects' }}</h3>
<ul class="list-unstyled" ng-if="user.all_projects.length > 0"> <ul class="list-unstyled" ng-if="user.all_projects.length > 0">
<li ng-repeat="p in user.all_projects"> <li ng-repeat="p in user.all_projects">
{{p.name}} {{p.name}}
</li> </li>
</ul> </ul>
<div ng-if="user.all_projects.length == 0" translate>{{ 'no_projects' }}</div> <div ng-if="user.all_projects.length == 0" translate>{{ 'edit_profile.no_projects' }}</div>
</div> </div>
<div class="m-t"> <div class="m-t">
<h3 class="text-u-c" translate>{{ 'labels' }}</h3> <h3 class="text-u-c" translate>{{ 'edit_profile.labels' }}</h3>
<span ng-if="user.tags.length > 0" ng-repeat="t in user.tags"> <span ng-if="user.tags.length > 0" ng-repeat="t in user.tags">
<span class='label label-success text-white'>{{t.name}}</span> <span class='label label-success text-white'>{{t.name}}</span>
</span> </span>
<div ng-if="user.tags.length == 0" translate>{{ 'no_labels' }}</div> <div ng-if="user.tags.length == 0" translate>{{ 'edit_profile.no_labels' }}</div>
</div> </div>
</div> </div>
<div class="widget-content no-bg b-b auto wrapper">
<h3 class="text-u-c" translate>{{ 'edit_profile.cookies' }}</h3>
<div ng-show="cookiesStatus === 'accept'" translate>{{ 'edit_profile.cookies_accepted' }}</div>
<div ng-show="cookiesStatus === 'decline'" translate>{{ 'edit_profile.cookies_declined' }}</div>
<div ng-hide="cookiesStatus" translate>{{ 'edit_profile.cookies_unset' }}</div>
<button ng-click="resetCookies()" ng-show="cookiesStatus" class="btn text-black btn-warning-full btn-sm m-t-xs" translate>{{ 'edit_profile.reset_cookies' }}</button>
</div>
<div class="widget-content no-bg text-center auto wrapper"> <div class="widget-content no-bg text-center auto wrapper">
<button class="btn text-white btn-danger btn-sm" ng-click="deleteUser(user)"><i class="fa fa-warning m-r-xs"></i> {{ 'delete_my_account' | translate }}</button> <button class="btn text-white btn-danger btn-sm" ng-click="deleteUser(user)"><i class="fa fa-warning m-r-xs"></i> {{ 'edit_profile.delete_my_account' | translate }}</button>
</div> </div>
</div> </div>
@ -87,7 +94,7 @@
<div class="col-sm-12 col-md-12 col-lg-9"> <div class="col-sm-12 col-md-12 col-lg-9">
<div class="widget panel b-a m m-t-lg"> <div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b"> <div class="panel-heading b-b">
<h1 class="red text-u-c" translate>{{ 'edit_my_profile' }}</h1> <h1 class="red text-u-c" translate>{{ 'edit_profile.edit_my_profile' }}</h1>
</div> </div>
<form role="form" name="userForm" class="form-horizontal" novalidate action="{{ actionUrl }}" ng-upload="submited(content)" upload-options-enable-rails-csrf="true"> <form role="form" name="userForm" class="form-horizontal" novalidate action="{{ actionUrl }}" ng-upload="submited(content)" upload-options-enable-rails-csrf="true">
<div class="widget-content no-bg auto"> <div class="widget-content no-bg auto">
@ -101,13 +108,13 @@
<div class="panel-body row"> <div class="panel-body 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> {{ 'edit_profile.change_my_data' | translate }}
</a> </a>
<p>{{ '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>{{ 'edit_profile.once_your_data_are_up_to_date_' | translate }} <strong translate>{{ 'edit_profile._click_on_the_synchronization_button_opposite_' }}</strong> {{ 'edit_profile.or' | translate}} <strong translate>{{ 'edit_profile._disconnect_then_reconnect_' }}</strong> {{ 'edit_profile._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> {{ 'edit_profile.sync_my_profile' | translate }}
</a> </a>
</div> </div>
</div> </div>
@ -119,7 +126,7 @@
</section> </section>
</div> </div>
<div class="panel-footer no-padder"> <div class="panel-footer no-padder">
<input type="submit" value="{{ 'confirm_changes' | translate }}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/> <input type="submit" value="{{ 'edit_profile.confirm_changes' | translate }}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
</div> </div>
</form> </form>
</div> </div>

View File

@ -1,7 +1,7 @@
<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>{{ 'cookies.about_cookies' }}</span>
<a ng-href="{{learnMoreUrl}}" translate>{{ 'cookies.learn_more' }}</a> <a ng-href="{{learnMoreUrl}}" target="{{ learnMoreUrl.startsWith('http') ? '_blank' : '_self' }}" translate>{{ '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>{{ 'cookies.decline' }}</button>

View File

@ -90,10 +90,10 @@
<section id="content"> <section id="content">
<section class="vbox"> <section class="vbox">
<section id="content-main" class="scrollable" ui-view="main">
</section>
<section id="cookies-modal" ui-view="cookies"> <section id="cookies-modal" ui-view="cookies">
</section> </section>
<section id="content-main" class="scrollable" ui-view="main">
</section>
</section> </section>
</section> </section>

View File

@ -32,34 +32,52 @@ en:
profile: profile:
empty: '' empty: ''
settings: settings:
# dashboard: edit my profile edit_profile:
last_activity_on_: "Last activity on" # dashboard: edit my profile
i_want_to_change_group: "I want to change group!" last_activity_on_: "Last activity on"
your_subscription_expires_on_: "Your subscription expires on" i_want_to_change_group: "I want to change group!"
no_subscriptions: "No subscriptions" your_subscription_expires_on_: "Your subscription expires on"
i_want_to_subscribe: "I want to subscribe!" no_subscriptions: "No subscriptions"
to_come: "to come" i_want_to_subscribe: "I want to subscribe!"
approved: "approved" to_come: "to come"
projects: "Projects" approved: "approved"
no_projects: "No projects" projects: "Projects"
labels: "Labels" no_projects: "No projects"
no_labels: "No labels" labels: "Labels"
delete_my_account: "Delete my account" no_labels: "No labels"
edit_my_profile: "Edit my profile" cookies: "Cookies"
your_group_has_been_successfully_changed: "Your group has been successfully changed." cookies_accepted: "You have accepted cookies"
an_unexpected_error_prevented_your_group_from_being_changed: "An unexpected error prevented your group from being changed." cookies_declined: "You have refused cookies"
confirm_delete_your_account: "Do you really want to delete your account?" cookies_unset: "You have not chosen yet"
all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." reset_cookies: "Change my choice"
invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." delete_my_account: "Delete my account"
statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." edit_my_profile: "Edit my profile"
no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." your_group_has_been_successfully_changed: "Your group has been successfully changed."
your_user_account_has_been_successfully_deleted_goodbye: "Your user account has been successfully deleted. Goodbye." an_unexpected_error_prevented_your_group_from_being_changed: "An unexpected error prevented your group from being changed."
an_error_occured_preventing_your_account_from_being_deleted: "An error occurred, preventing your account from being deleted." confirm_delete_your_account: "Do you really want to delete your account?"
used_for_statistics: "This data will be used for statistical purposes" all_data_will_be_lost: "All your data will be destroyed and won't be recoverable."
used_for_invoicing: "This data will be used for billing purposes" invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years."
used_for_reservation: "This data will be used in case of change on one of your bookings" statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes."
used_for_profile: "This data will only be displayed on your profile" no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them."
public_profile: "You will have a public profile and other users will be able to associate you in their projects" your_user_account_has_been_successfully_deleted_goodbye: "Your user account has been successfully deleted. Goodbye."
an_error_occured_preventing_your_account_from_being_deleted: "An error occurred, preventing your account from being deleted."
used_for_statistics: "This data will be used for statistical purposes"
used_for_invoicing: "This data will be used for billing purposes"
used_for_reservation: "This data will be used in case of change on one of your bookings"
used_for_profile: "This data will only be displayed on your profile"
public_profile: "You will have a public profile and other users will be able to associate you in their projects"
trainings: "Trainings"
no_trainings: "No trainings"
subscription: "Subscription"
group: "Group"
or: "or"
confirm_changes: "Confirm changes"
change_my_data: "Change my data"
sync_my_profile: "Sync my profile"
once_your_data_are_up_to_date_: "Once your data are up to date,"
_click_on_the_synchronization_button_opposite_: "click on the synchronization button opposite"
_disconnect_then_reconnect_: "disconnect then reconnect"
_for_your_changes_to_take_effect: "for your changes to take effect."
projects: projects:
# dashboard: my projects # dashboard: my projects
you_dont_have_any_projects: "You don't have any projects." you_dont_have_any_projects: "You don't have any projects."

View File

@ -32,34 +32,52 @@ es:
profile: profile:
empty: '' empty: ''
settings: settings:
# dashboard: edit my profile edit_profile:
last_activity_on_: "Última vez activo" # dashboard: edit my profile
i_want_to_change_group: "Quiero cambiar de grupo" last_activity_on_: "Última vez activo"
your_subscription_expires_on_: "su suscripción acaba el" i_want_to_change_group: "Quiero cambiar de grupo"
no_subscriptions: "Sin suscripciones" your_subscription_expires_on_: "su suscripción acaba el"
i_want_to_subscribe: "Quiero suscribirme" no_subscriptions: "Sin suscripciones"
to_come: "por venir" i_want_to_subscribe: "Quiero suscribirme"
approved: "aprobado" to_come: "por venir"
projects: "Projectos" approved: "aprobado"
no_projects: "Sin projectos" projects: "Projectos"
labels: "Etiquetas" no_projects: "Sin projectos"
no_labels: "Sin etiquetas" labels: "Etiquetas"
delete_my_account: "Eliminar mi cuenta" no_labels: "Sin etiquetas"
edit_my_profile: "Editar mi perfil" cookies: "Cookies"
your_group_has_been_successfully_changed: "Su grupo ha sido cambiado con exito." cookies_accepted: "Has aceptado las cookies"
an_unexpected_error_prevented_your_group_from_being_changed: "Un error inesperado impidió que su grupo fuese cambiado." cookies_declined: "Has negado las cookies"
confirm_delete_your_account: "¿Está seguro de querer eliminar su cuenta?" cookies_unset: "No has elegido aún"
all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation reset_cookies: "Cambiar mi elección"
invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation delete_my_account: "Eliminar mi cuenta"
statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation edit_my_profile: "Editar mi perfil"
no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation your_group_has_been_successfully_changed: "Su grupo ha sido cambiado con exito."
your_user_account_has_been_successfully_deleted_goodbye: "Su cuenta ha sido eliminada con éxito. Adiós" an_unexpected_error_prevented_your_group_from_being_changed: "Un error inesperado impidió que su grupo fuese cambiado."
an_error_occured_preventing_your_account_from_being_deleted: "Un error inesperado impidió que su cuenta fuese eliminada." confirm_delete_your_account: "¿Está seguro de querer eliminar su cuenta?"
used_for_statistics: "This data will be used for statistical purposes" # translation missing all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation
used_for_invoicing: "This data will be used for billing purposes" # translation missing invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation
used_for_reservation: "This data will be used in case of change on one of your bookings" # translation missing statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation
used_for_profile: "This data will only be displayed on your profile" # translation missing no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation
public_profile: "You will have a public profile and other users will be able to associate you in their projects" # translation missing your_user_account_has_been_successfully_deleted_goodbye: "Su cuenta ha sido eliminada con éxito. Adiós"
an_error_occured_preventing_your_account_from_being_deleted: "Un error inesperado impidió que su cuenta fuese eliminada."
used_for_statistics: "This data will be used for statistical purposes" # translation missing
used_for_invoicing: "This data will be used for billing purposes" # translation missing
used_for_reservation: "This data will be used in case of change on one of your bookings" # translation missing
used_for_profile: "This data will only be displayed on your profile" # translation missing
public_profile: "You will have a public profile and other users will be able to associate you in their projects" # translation missing
trainings: "Cursos"
no_trainings: "Sin cursos"
subscription: "Suscripción"
group: "Grupo"
or: "ó"
confirm_changes: "Confirmar cambios"
change_my_data: "Cambiar mis datos"
sync_my_profile: "Sincronizar mi perfil"
once_your_data_are_up_to_date_: "Una vez sus datos hayan sido actualizados,"
_click_on_the_synchronization_button_opposite_: "haz clic en el botón de sincronización"
_disconnect_then_reconnect_: "reconectarse"
_for_your_changes_to_take_effect: "para que sus cambios sean aplicados."
projects: projects:
# dashboard: my projects # dashboard: my projects
you_dont_have_any_projects: "Aún no tiene proyectos." you_dont_have_any_projects: "Aún no tiene proyectos."

View File

@ -32,34 +32,52 @@ fr:
profile: profile:
empty: '' empty: ''
settings: settings:
# tableau de bord : éditer mon profil edit_profile:
last_activity_on_: "Dernière activité le" # tableau de bord : éditer mon profil
i_want_to_change_group: "Je veux changer de groupe !" last_activity_on_: "Dernière activité le"
your_subscription_expires_on_: "Votre abonnement expire le" i_want_to_change_group: "Je veux changer de groupe !"
no_subscriptions: "Aucun abonnement" your_subscription_expires_on_: "Votre abonnement expire le"
i_want_to_subscribe: "Je veux m'abonner !" no_subscriptions: "Aucun abonnement"
to_come: "à venir" i_want_to_subscribe: "Je veux m'abonner !"
approved: "validée" to_come: "à venir"
projects: "Projets" approved: "validée"
no_projects: "Aucun projet" projects: "Projets"
labels: "Étiquettes" no_projects: "Aucun projet"
no_labels: "Aucune étiquette" labels: "Étiquettes"
delete_my_account: "Supprimer mon compte" no_labels: "Aucune étiquette"
edit_my_profile: "Éditer votre profil" cookies: "Cookies"
your_group_has_been_successfully_changed: "Votre groupe a bien été changé." cookies_accepted: "Vous avez accepté les cookies"
an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe." cookies_declined: "Vous avez refusé les cookies"
confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?" cookies_unset: "Vous n'avez pas encore choisi"
all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées." reset_cookies: "Modifier mon choix"
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." delete_my_account: "Supprimer mon compte"
statistic_data_anonymized: "Certaines données (sexe, date de naissance, groupe) seront anonymisées et conservées à des fins statistiques." edit_my_profile: "Éditer votre profil"
no_further_access_to_projects: "Vos projets publiés seront anonymisés et vous n'aurez plus de possibilité de les modifier." your_group_has_been_successfully_changed: "Votre groupe a bien été changé."
your_user_account_has_been_successfully_deleted_goodbye: "Votre compte utilisateur a bien été supprimé. Au revoir." an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe."
an_error_occured_preventing_your_account_from_being_deleted: "Une erreur est survenue qui a empêché la suppression de votre compte." confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?"
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques" all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées."
used_for_invoicing: "Cette donnée sera utilisée à des fins de facturation" 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."
used_for_reservation: "Cette donnée sera utilisée en cas de changement sur une de vos réservations" statistic_data_anonymized: "Certaines données (sexe, date de naissance, groupe) seront anonymisées et conservées à des fins statistiques."
used_for_profile: "Cette donnée sera seulement affichée sur votre profil" no_further_access_to_projects: "Vos projets publiés seront anonymisés et vous n'aurez plus de possibilité de les modifier."
public_profile: "Vous aurez un profil public et les autres utilisateurs pourront vous associer à leurs projets" your_user_account_has_been_successfully_deleted_goodbye: "Votre compte utilisateur a bien été supprimé. Au revoir."
an_error_occured_preventing_your_account_from_being_deleted: "Une erreur est survenue qui a empêché la suppression de votre compte."
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques"
used_for_invoicing: "Cette donnée sera utilisée à des fins de facturation"
used_for_reservation: "Cette donnée sera utilisée en cas de changement sur une de vos réservations"
used_for_profile: "Cette donnée sera seulement affichée sur votre profil"
public_profile: "Vous aurez un profil public et les autres utilisateurs pourront vous associer à leurs projets"
trainings: "Formations"
no_trainings: "Aucune formation"
subscription: "Abonnement"
group: "Groupe"
or: "ou"
confirm_changes: "Valider les modifications"
change_my_data: "Modifier mes données"
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."
sync_my_profile: "Synchroniser mon profil"
projects: projects:
# tableau de bord : mes projets # tableau de bord : mes projets
you_dont_have_any_projects: "Vous n'avez aucun projet." you_dont_have_any_projects: "Vous n'avez aucun projet."

View File

@ -32,34 +32,52 @@ pt:
profile: profile:
empty: '' empty: ''
settings: settings:
# dashboard: edit my profile edit_profile:
last_activity_on_: "Última atividade em" # dashboard: edit my profile
i_want_to_change_group: "Eu quero trocar de grupo!" last_activity_on_: "Última atividade em"
your_subscription_expires_on_: "Sua inscrição expira em" i_want_to_change_group: "Eu quero trocar de grupo!"
no_subscriptions: "Sem inscrições" your_subscription_expires_on_: "Sua inscrição expira em"
i_want_to_subscribe: "Eu quero me inscrever!" no_subscriptions: "Sem inscrições"
to_come: "futuros" i_want_to_subscribe: "Eu quero me inscrever!"
approved: "aprovado" to_come: "futuros"
projects: "Projetos" approved: "aprovado"
no_projects: "Sem projetos" projects: "Projetos"
labels: "Etiquetas" no_projects: "Sem projetos"
no_labels: "Sem etiquetas" labels: "Etiquetas"
delete_my_account: "Deletar minha conta" no_labels: "Sem etiquetas"
edit_my_profile: "Editar meu perfil" cookies: "Cookies"
your_group_has_been_successfully_changed: "Seu grupo foi modificado com sucesso." cookies_accepted: "Você aceitou cookies"
an_unexpected_error_prevented_your_group_from_being_changed: "Um erro inesperado impediu o seu grupo de ser alterado." cookies_declined: "Você recusou cookies"
confirm_delete_your_account: "Você realmente deseja deletar sua conta?" cookies_unset: "Você ainda não escolheu"
all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation reset_cookies: "Mude minha escolha"
invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation delete_my_account: "Deletar minha conta"
statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation edit_my_profile: "Editar meu perfil"
no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation your_group_has_been_successfully_changed: "Seu grupo foi modificado com sucesso."
your_user_account_has_been_successfully_deleted_goodbye: "Sua conta de usuário foi excluída com êxito. Até mais." an_unexpected_error_prevented_your_group_from_being_changed: "Um erro inesperado impediu o seu grupo de ser alterado."
an_error_occured_preventing_your_account_from_being_deleted: "Ocorreu um erro, impedindo que sua conta fosse excluída." confirm_delete_your_account: "Você realmente deseja deletar sua conta?"
used_for_statistics: "This data will be used for statistical purposes" # translation missing all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation
used_for_invoicing: "This data will be used for billing purposes" # translation missing invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation
used_for_reservation: "This data will be used in case of change on one of your bookings" # translation missing statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation
used_for_profile: "This data will only be displayed on your profile" # translation missing no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation
public_profile: "You will have a public profile and other users will be able to associate you in their projects" # translation missing your_user_account_has_been_successfully_deleted_goodbye: "Sua conta de usuário foi excluída com êxito. Até mais."
an_error_occured_preventing_your_account_from_being_deleted: "Ocorreu um erro, impedindo que sua conta fosse excluída."
used_for_statistics: "This data will be used for statistical purposes" # translation missing
used_for_invoicing: "This data will be used for billing purposes" # translation missing
used_for_reservation: "This data will be used in case of change on one of your bookings" # translation missing
used_for_profile: "This data will only be displayed on your profile" # translation missing
public_profile: "You will have a public profile and other users will be able to associate you in their projects" # translation missing
trainings: "Treinamentos"
no_trainings: "Sem treinamentos"
subscription: "Assinatura"
group: "Grupo"
or: "ou"
confirm_changes: "Confirmar mudanças"
change_my_data: "Alterar meus dados"
sync_my_profile: "Sincronizar meu perfil"
once_your_data_are_up_to_date_: "Uma vez que seus dados estão atualizados,"
_click_on_the_synchronization_button_opposite_: "clique no botão de sincronização"
_disconnect_then_reconnect_: "disconecte e se conecte novamente"
_for_your_changes_to_take_effect: "para que suas alterações tenham efeitos."
projects: projects:
# dashboard: my projects # dashboard: my projects
you_dont_have_any_projects: "Você não tem nenhum projeto." you_dont_have_any_projects: "Você não tem nenhum projeto."

View File

@ -6,6 +6,13 @@ en:
about_the_fablab: "About {GENDER, select, neutral{} other{the}} {NAME}" # messageFormat interpolation about_the_fablab: "About {GENDER, select, neutral{} other{the}} {NAME}" # messageFormat interpolation
return: "Return" return: "Return"
# cookies
cookies:
about_cookies: "This website uses cookies for audience measurement purposes."
learn_more: "Learn more"
accept: "Accept cookies"
decline: "Refuse"
# dashboard sections # dashboard sections
dashboard: "Dashboard" dashboard: "Dashboard"
my_profile: "My Profile" my_profile: "My Profile"

View File

@ -6,6 +6,13 @@ es:
about_the_fablab: "Sobre {GENDER, select, male{el} female{la} neutral{} other{las}} {NAME}" # messageFormat interpolation about_the_fablab: "Sobre {GENDER, select, male{el} female{la} neutral{} other{las}} {NAME}" # messageFormat interpolation
return: "Volver" return: "Volver"
# cookies
cookies:
about_cookies: "Este sitio web utiliza cookies para medir la audiencia."
learn_more: "Aprende más"
accept: "Aceptar cookies"
decline: "Rehusar"
# dashboard sections # dashboard sections
dashboard: "Panel" dashboard: "Panel"
my_profile: "My Perfil" my_profile: "My Perfil"

View File

@ -8,7 +8,7 @@ fr:
# cookies # cookies
cookies: cookies:
about_cookies: "Ce site web utilise des cookies à des fins de mesure d'audiance." about_cookies: "Ce site web utilise des cookies à des fins de mesure d'audience."
learn_more: "En savoir plus" learn_more: "En savoir plus"
accept: "Accepter les cookies" accept: "Accepter les cookies"
decline: "Refuser" decline: "Refuser"

View File

@ -6,6 +6,13 @@ pt:
about_the_fablab: "Sobre {GENDER, select, male{o} female{a} neutral{} other{do}} {NAME}" # messageFormat interpolation about_the_fablab: "Sobre {GENDER, select, male{o} female{a} neutral{} other{do}} {NAME}" # messageFormat interpolation
return: "Voltar" return: "Voltar"
# cookies
cookies:
about_cookies: "Este site usa cookies para fins de medição de audiência."
learn_more: "Saber mais"
accept: "Aceitar cookies"
decline: "Recusar"
# dashboard sections # dashboard sections
dashboard: "Dashboard" dashboard: "Dashboard"
my_profile: "Meu Perfil" my_profile: "Meu Perfil"