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

Ability to customize the title of the link to the about page

This commit is contained in:
Sylvain 2020-01-21 16:16:12 +01:00
parent 45e4b5c4bc
commit 15ab3c1305
19 changed files with 142 additions and 75 deletions

View File

@ -12,6 +12,7 @@
- Display indications on required fields in new administrator form - Display indications on required fields in new administrator form
- Administrators can to book machine/space/training slots, until 1 month in the past - Administrators can to book machine/space/training slots, until 1 month in the past
- Filter members by non-validated emails or by inactive for 3 years - Filter members by non-validated emails or by inactive for 3 years
- Ability to customize the title of the link to the about page
- Automatic version check with security alerts - Automatic version check with security alerts
- Public endpoint to check the system health - Public endpoint to check the system health
- Configuration of phone number in members registration forms: can be required or optional, depending on `PHONE_REQUIRED` configuration - Configuration of phone number in members registration forms: can be required or optional, depending on `PHONE_REQUIRED` configuration

View File

@ -53,6 +53,7 @@ Application.Controllers.controller('SettingsController', ['$scope', '$filter', '
// various configurable settings // various configurable settings
$scope.twitterSetting = { name: 'twitter_name', value: settingsPromise.twitter_name }; $scope.twitterSetting = { name: 'twitter_name', value: settingsPromise.twitter_name };
$scope.linkName = { name: 'link_name', value: settingsPromise.link_name };
$scope.aboutTitleSetting = { name: 'about_title', value: settingsPromise.about_title }; $scope.aboutTitleSetting = { name: 'about_title', value: settingsPromise.about_title };
$scope.aboutBodySetting = { name: 'about_body', value: settingsPromise.about_body }; $scope.aboutBodySetting = { name: 'about_body', value: settingsPromise.about_body };
$scope.privacyDpoSetting = { name: 'privacy_dpo', value: settingsPromise.privacy_dpo }; $scope.privacyDpoSetting = { name: 'privacy_dpo', value: settingsPromise.privacy_dpo };

View File

@ -316,8 +316,11 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
// we stop polling notifications when the page is not in foreground // we stop polling notifications when the page is not in foreground
onPageVisible(function (state) { $rootScope.toCheckNotifications = (state === 'visible'); }); onPageVisible(function (state) { $rootScope.toCheckNotifications = (state === 'visible'); });
Setting.get({ name: 'fablab_name' }, function (data) { $scope.fablabName = data.setting.value; }); Setting.query({ names: "['fablab_name', 'name_genre', 'link_name']" }, function (settings) {
Setting.get({ name: 'name_genre' }, function (data) { $scope.nameGenre = data.setting.value; }); $scope.fablabName = settings.fablab_name;
$scope.nameGenre = settings.name_genre;
$scope.linkName = settings.link_name;
});
// shorthands // shorthands
$scope.isAuthenticated = Auth.isAuthenticated; $scope.isAuthenticated = Auth.isAuthenticated;

View File

@ -43,7 +43,7 @@ angular.module('application.router', ['ui.router'])
CSRF.setMetaTags(); CSRF.setMetaTags();
// Application logo // Application logo
$rootScope.logo = logoFile.custom_asset; $rootScope.logo = logoFile.custom_asset;
return $rootScope.logoBlack = logoBlackFile.custom_asset; $rootScope.logoBlack = logoBlackFile.custom_asset;
}] }]
}) })
.state('app.public', { .state('app.public', {
@ -1005,7 +1005,8 @@ angular.module('application.router', ['ui.router'])
'booking_cancel_delay', 'main_color', 'secondary_color', \ 'booking_cancel_delay', 'main_color', 'secondary_color', \
'fablab_name', 'name_genre', 'reminder_enable', \ 'fablab_name', 'name_genre', 'reminder_enable', \
'reminder_delay', 'visibility_yearly', 'visibility_others', \ 'reminder_delay', 'visibility_yearly', 'visibility_others', \
'display_name_enable', 'machines_sort_by', 'fab_analytics']` }).$promise; 'display_name_enable', 'machines_sort_by', 'fab_analytics', \
'link_name']` }).$promise;
}], }],
privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }], privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }],
cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }], cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }],

View File

@ -1,4 +1,27 @@
<div class="panel panel-default m-t-md"> <div class="panel panel-default m-t-md">
<div class="panel-heading">
<span class="font-sbold" translate>{{ 'app.admin.settings.link' }}</span>
</div>
<div class="panel-body">
<div class="col-md-4">
<form role="form" novalidate>
<label for="linkName" class="control-label m-r" translate>{{ 'app.admin.settings.link_to_about' }}</label>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon"><i class="fa fa-link"></i></div>
<input type="text" id="linkName" ng-model="linkName.value" class="form-control" placeholder="{{ 'app.admin.settings.link_to_about' | translate }}"/>
</div>
</div>
<button name="button" class="btn btn-warning" ng-click="save(linkName)" translate>{{ 'app.shared.buttons.save' }}</button>
</form>
</div>
</div>
</div>
<div class="panel panel-default m-t-md">
<div class="panel-heading">
<span class="font-sbold" translate>{{ 'app.admin.settings.content' }}</span>
</div>
<div class="panel-body"> <div class="panel-body">
<div class="row m-t-lg m-b-lg"> <div class="row m-t-lg m-b-lg">

View File

@ -23,17 +23,17 @@
<div class="form-group"> <div class="form-group">
<label for="nameGenreMale"> <label for="nameGenreMale">
<input type="radio" name="nameGenre" id="nameGenreMale" ng-model="nameGenre.value" ng-value="'male'" /> <input type="radio" name="nameGenre" id="nameGenreMale" ng-model="nameGenre.value" ng-value="'male'" />
{{ 'app.admin.settings.male' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.about' | translate }} <strong translate>{{ 'app.admin.settings.male_preposition' }}</strong> {{fablabName.value}}</cite></span> {{ 'app.admin.settings.male' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.the_team' | translate }} <strong translate>{{ 'app.admin.settings.male_preposition' }}</strong> {{fablabName.value}}</cite></span>
</label> </label>
<br/> <br/>
<label for="nameGenreFemale"> <label for="nameGenreFemale">
<input type="radio" name="nameGenre" id="nameGenreFemale" ng-model="nameGenre.value" ng-value="'female'" /> <input type="radio" name="nameGenre" id="nameGenreFemale" ng-model="nameGenre.value" ng-value="'female'" />
{{ 'app.admin.settings.female' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.about' | translate }} <strong translate>{{ 'app.admin.settings.female_preposition' }}</strong> {{fablabName.value}}</cite></span> {{ 'app.admin.settings.female' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.the_team' | translate }} <strong translate>{{ 'app.admin.settings.female_preposition' }}</strong> {{fablabName.value}}</cite></span>
</label> </label>
<br/> <br/>
<label for="nameGenreNeutral"> <label for="nameGenreNeutral">
<input type="radio" name="nameGenre" id="nameGenreNeutral" ng-model="nameGenre.value" ng-value="'neutral'" /> <input type="radio" name="nameGenre" id="nameGenreNeutral" ng-model="nameGenre.value" ng-value="'neutral'" />
{{ 'app.admin.settings.neutral' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.about' | translate }} <strong translate>{{ 'app.admin.settings.neutral_preposition' }}</strong> {{fablabName.value}}</cite></span> {{ 'app.admin.settings.neutral' | translate }} <span style="font-weight: normal">{{ 'app.admin.settings.eg' | translate }} <cite>{{ 'app.admin.settings.the_team' | translate }} <strong translate>{{ 'app.admin.settings.neutral_preposition' }}</strong> {{fablabName.value}}</cite></span>
</label> </label>
</div> </div>
<button name="button" class="btn btn-warning" ng-click="save(nameGenre)" translate>{{ 'app.shared.buttons.save' }}</button> <button name="button" class="btn btn-warning" ng-click="save(nameGenre)" translate>{{ 'app.shared.buttons.save' }}</button>

View File

@ -10,7 +10,7 @@
<li> <li>
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.about" ng-show="!goabout"> <a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.about" ng-show="!goabout">
<span class="label label-theme rounded text-lg text-white m-r-sm font-ebold">?</span> <span class="label label-theme rounded text-lg text-white m-r-sm font-ebold">?</span>
{{ 'app.public.common.about_the_fablab' | translate:{ GENDER: nameGenre, NAME: fablabName } }} {{ linkName }}
</a> </a>
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.home" ng-show="goabout"> <a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.home" ng-show="goabout">
<span class="label label-theme label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span> <span class="label label-theme label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>

View File

@ -64,7 +64,8 @@ class Setting < ActiveRecord::Base
accounting_Space_label accounting_Space_label
hub_last_version hub_last_version
hub_public_key hub_public_key
fab_analytics] } fab_analytics
link_name] }
after_update :update_stylesheet, :notify_privacy_policy_changed if :value_changed? after_update :update_stylesheet, :notify_privacy_policy_changed if :value_changed?

View File

@ -855,6 +855,7 @@ en:
neutral: "Neutral." neutral: "Neutral."
eg: "eg:" eg: "eg:"
about: "About" about: "About"
the_team: "The team of"
male_preposition: "the" male_preposition: "the"
female_preposition: "the" female_preposition: "the"
neutral_preposition: "" neutral_preposition: ""
@ -891,6 +892,9 @@ en:
leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Leave it empty to not bring up any news on the home page" leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Leave it empty to not bring up any news on the home page"
twitter_stream: "Twitter Stream:" twitter_stream: "Twitter Stream:"
name_of_the_twitter_account: "Name of the Twitter account" name_of_the_twitter_account: "Name of the Twitter account"
link: "Link"
link_to_about: 'Link title to the "About" page'
content: "Content"
title_of_the_about_page: "Title of the About page" title_of_the_about_page: "Title of the About page"
shift_enter_to_force_carriage_return: "SHIFT + ENTER to force carriage return" shift_enter_to_force_carriage_return: "SHIFT + ENTER to force carriage return"
input_the_main_content: "Input the main content" input_the_main_content: "Input the main content"
@ -926,6 +930,7 @@ en:
secondary_color: "secondary colour" secondary_color: "secondary colour"
home_blogpost: "homepage's brief" home_blogpost: "homepage's brief"
twitter_name: "Twitter feed name" twitter_name: "Twitter feed name"
link_name: "link title to the \"About\" page"
about_title: "\"About\" page title" about_title: "\"About\" page title"
about_body: "\"About\" page content" about_body: "\"About\" page content"
about_contacts: "\"About\" page contacts" about_contacts: "\"About\" page contacts"
@ -948,6 +953,7 @@ en:
display_name: "Display the name" display_name: "Display the name"
display_name_enable: "name display" display_name_enable: "name display"
machines_sort_by: "machines display order" machines_sort_by: "machines display order"
fab_analytics: "Fab Analytics"
elements_ordering: "Elements ordering" elements_ordering: "Elements ordering"
machines_order: "Machines order" machines_order: "Machines order"
display_machines_sorted_by: "Display machines sorted by" display_machines_sorted_by: "Display machines sorted by"
@ -966,6 +972,8 @@ en:
publish_will_notify: "Publish a new version will send a notification to every users." publish_will_notify: "Publish a new version will send a notification to every users."
publish: "Publish" publish: "Publish"
users_notified: "Platform users will be notified of the update." users_notified: "Platform users will be notified of the update."
about_analytics: "I agree to share anonymous data with the development team to help improve Fab-Manager."
read_more: "Which data do we collect?"
analytics: analytics:
intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>" intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>"
version: "Application version" version: "Application version"

View File

@ -357,7 +357,7 @@ es:
invoices: invoices:
# list of all invoices & invoicing parameters # list of all invoices & invoicing parameters
invoices: "Facturas" invoices: "Facturas"
accounting_periods: "Accounting periods" # missing translation accounting_periods: "Accounting periods"
invoices_list: "Lista de facturas" invoices_list: "Lista de facturas"
filter_invoices: "Filtrar facturas" filter_invoices: "Filtrar facturas"
invoice_num_: "Factura #:" invoice_num_: "Factura #:"
@ -373,7 +373,7 @@ es:
display_more_invoices: "Mostrar más facturas..." display_more_invoices: "Mostrar más facturas..."
no_invoices_for_now: "Sin facturas por ahora." no_invoices_for_now: "Sin facturas por ahora."
invoicing_settings: "Configuración de facturación" invoicing_settings: "Configuración de facturación"
warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." # missing translation warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT."
change_logo: "Cambio de logotipo" change_logo: "Cambio de logotipo"
john_smith: "John Smith" john_smith: "John Smith"
john_smith_at_example_com: "jean.smith@example.com" john_smith_at_example_com: "jean.smith@example.com"
@ -855,6 +855,7 @@ es:
neutral: "Neutral" neutral: "Neutral"
eg: "ej:" eg: "ej:"
about: "Sobre" about: "Sobre"
the_team: "El equipo"
male_preposition: "el" male_preposition: "el"
female_preposition: "la" female_preposition: "la"
neutral_preposition: "" neutral_preposition: ""
@ -891,6 +892,9 @@ es:
leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Déjelo vacío para no abrir ninguna noticia en la página principal" leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Déjelo vacío para no abrir ninguna noticia en la página principal"
twitter_stream: "Twitter Stream:" twitter_stream: "Twitter Stream:"
name_of_the_twitter_account: "Nombre de la cuenta de Twitter" name_of_the_twitter_account: "Nombre de la cuenta de Twitter"
link: "Link"
link_to_about: 'Link title to the "About" page'
content: "Content"
title_of_the_about_page: "Título de la página Acerca de" title_of_the_about_page: "Título de la página Acerca de"
shift_enter_to_force_carriage_return: "MAYÚS + ENTRAR para forzar el retorno de carro" shift_enter_to_force_carriage_return: "MAYÚS + ENTRAR para forzar el retorno de carro"
input_the_main_content: "Introduzca el contenido principal" input_the_main_content: "Introduzca el contenido principal"
@ -926,6 +930,7 @@ es:
secondary_color: "color secundario" secondary_color: "color secundario"
home_blogpost: "Resumen de la página de inicio" home_blogpost: "Resumen de la página de inicio"
twitter_name: "Twitter feed name" twitter_name: "Twitter feed name"
link_name: "link title to the \"About\" page"
about_title: "Título de la página \"Acerca de\"" about_title: "Título de la página \"Acerca de\""
about_body: "Contenido de la página \"Acerca de\"" about_body: "Contenido de la página \"Acerca de\""
about_contacts: "Página contactos\"Acerca de\"" about_contacts: "Página contactos\"Acerca de\""
@ -948,6 +953,7 @@ es:
display_name: "Mostrar el nombre" display_name: "Mostrar el nombre"
display_name_enable: "la visualización del nombre" display_name_enable: "la visualización del nombre"
machines_sort_by: "del orden de visualización de las máquinas" machines_sort_by: "del orden de visualización de las máquinas"
fab_analytics: "Fab Analytics"
elements_ordering: "Orden de visualización de los elementos" elements_ordering: "Orden de visualización de los elementos"
machines_order: "Orden de las máquinas" machines_order: "Orden de las máquinas"
display_machines_sorted_by: "Ver máquinas ordenadas por" display_machines_sorted_by: "Ver máquinas ordenadas por"
@ -966,6 +972,8 @@ es:
publish_will_notify: "Publish a new version will send a notification to every users." publish_will_notify: "Publish a new version will send a notification to every users."
publish: "Publish" publish: "Publish"
users_notified: "Platform users will be notified of the update." users_notified: "Platform users will be notified of the update."
about_analytics: "I agree to share anonymous data with the development team to help improve Fab-Manager."
read_more: "Which data do we collect?"
analytics: analytics:
intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>" intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>"
version: "Application version" version: "Application version"

View File

@ -855,6 +855,7 @@ fr:
neutral: "Neutre." neutral: "Neutre."
eg: "ex :" eg: "ex :"
about: "A propos" about: "A propos"
the_team: "L'équipe"
male_preposition: "du" male_preposition: "du"
female_preposition: "de la" female_preposition: "de la"
neutral_preposition: "" neutral_preposition: ""
@ -891,6 +892,9 @@ fr:
leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Laisser vide pour ne pas faire apparaître de brève sur la page d'accueil" leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Laisser vide pour ne pas faire apparaître de brève sur la page d'accueil"
twitter_stream: "Flux Twitter :" twitter_stream: "Flux Twitter :"
name_of_the_twitter_account: "Nom du compte Twitter" name_of_the_twitter_account: "Nom du compte Twitter"
link: "Lien"
link_to_about: 'Titre du lien vers la page "À propos"'
content: "Contenu"
title_of_the_about_page: "Titre page A propos" title_of_the_about_page: "Titre page A propos"
shift_enter_to_force_carriage_return: "MAJ. + ENTRÉE pour forcer le retour à la ligne" shift_enter_to_force_carriage_return: "MAJ. + ENTRÉE pour forcer le retour à la ligne"
input_the_main_content: "Saisir le contenu principal" input_the_main_content: "Saisir le contenu principal"
@ -926,6 +930,7 @@ fr:
secondary_color: "la couleur secondaire" secondary_color: "la couleur secondaire"
home_blogpost: "la brève de la page d'accueil" home_blogpost: "la brève de la page d'accueil"
twitter_name: "nom du flux Twitter" twitter_name: "nom du flux Twitter"
link_name: "l'intitulé du lien vers la page \"À propos\""
about_title: "titre de la page \"À propos\"" about_title: "titre de la page \"À propos\""
about_body: "corps de la page \"À propos\"" about_body: "corps de la page \"À propos\""
about_contacts: "contacts sur la page \"À propos\"" about_contacts: "contacts sur la page \"À propos\""

View File

@ -357,7 +357,7 @@ pt:
invoices: invoices:
# list of all invoices & invoicing parameters # list of all invoices & invoicing parameters
invoices: "Faturas" invoices: "Faturas"
accounting_periods: "Accounting periods" # missing translation accounting_periods: "Accounting periods"
invoices_list: "Lista de faturas" invoices_list: "Lista de faturas"
filter_invoices: "Filtrar faturas" filter_invoices: "Filtrar faturas"
invoice_num_: "Fatura #:" invoice_num_: "Fatura #:"
@ -373,7 +373,7 @@ pt:
display_more_invoices: "Mostrar mais faturas..." display_more_invoices: "Mostrar mais faturas..."
no_invoices_for_now: "Nenhuma fatura." no_invoices_for_now: "Nenhuma fatura."
invoicing_settings: "Configurações do faturamento" invoicing_settings: "Configurações do faturamento"
warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." # missing translation warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT."
change_logo: "Mudar o logo" change_logo: "Mudar o logo"
john_smith: "John Smith" john_smith: "John Smith"
john_smith_at_example_com: "jean.smith@example.com" john_smith_at_example_com: "jean.smith@example.com"
@ -852,9 +852,10 @@ pt:
title_concordance: "Tírulo concordância" title_concordance: "Tírulo concordância"
male: "Masculino." male: "Masculino."
female: "Feminino." female: "Feminino."
neutral: "Neutro." #TODO neutral: "Neutro."
eg: "ex:" eg: "ex:"
about: "Sobre" about: "Sobre"
the_team: "A equipe"
male_preposition: "o" male_preposition: "o"
female_preposition: "a" female_preposition: "a"
neutral_preposition: "" neutral_preposition: ""
@ -891,6 +892,9 @@ pt:
leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Deixe vazio para não abrir nenhuma notícia na home page" leave_it_empty_to_not_bring_up_any_news_on_the_home_page: "Deixe vazio para não abrir nenhuma notícia na home page"
twitter_stream: "Twitter Stream:" twitter_stream: "Twitter Stream:"
name_of_the_twitter_account: "Nome da conta do Twitter" name_of_the_twitter_account: "Nome da conta do Twitter"
link: "Link"
link_to_about: 'Link title to the "About" page'
content: "Content"
title_of_the_about_page: "Título da página sobre" title_of_the_about_page: "Título da página sobre"
shift_enter_to_force_carriage_return: "SHIFT + ENTER para forçar o retorno" shift_enter_to_force_carriage_return: "SHIFT + ENTER para forçar o retorno"
input_the_main_content: "Introduza o conteúdo principal" input_the_main_content: "Introduza o conteúdo principal"
@ -926,6 +930,7 @@ pt:
secondary_color: "Cor secundária" secondary_color: "Cor secundária"
home_blogpost: "Resumo da página inicial" home_blogpost: "Resumo da página inicial"
twitter_name: "Nome do feed do Twitter" twitter_name: "Nome do feed do Twitter"
link_name: "link title to the \"About\" page"
about_title: "\"Sobre\" título da página" about_title: "\"Sobre\" título da página"
about_body: "\"Sobre\" conteúdo da página" about_body: "\"Sobre\" conteúdo da página"
about_contacts: "\"Sobre\" página de contatos" about_contacts: "\"Sobre\" página de contatos"
@ -943,19 +948,20 @@ pt:
default_value_is_24_hours: "Se o campo estiver vazio: 24 horas." default_value_is_24_hours: "Se o campo estiver vazio: 24 horas."
visibility_yearly: "visibilidade máxima para assinantes anuais" visibility_yearly: "visibilidade máxima para assinantes anuais"
visibility_others: "visibilidade máxima para outros membros" visibility_others: "visibilidade máxima para outros membros"
confidentiality: "TODO" confidentiality: "Confidentiality"
display_machine_reservation_user_name: "TODO" display_machine_reservation_user_name: "Display the full name of the user who booked a machine slot"
display_name: "TODO" display_name: "Display the name"
display_name_enable: "TODO" display_name_enable: "name display"
machines_sort_by: "TODO" machines_sort_by: "machines display order"
elements_ordering: "TODO" fab_analytics: "Fab Analytics"
machines_order: "TODO" elements_ordering: "Elements ordering"
display_machines_sorted_by: "TODO" machines_order: "Machines order"
display_machines_sorted_by: "Display machines sorted by"
sort_by: sort_by:
default: "TODO" default: "Default"
name: "Nome" name: "Nome"
created_at: "TODO" created_at: "Creation date"
updated_at: "TODO" updated_at: "Last update date"
privacy: privacy:
title: "Política de privacidade" title: "Política de privacidade"
input_the_dpo: "Input the contact of the Data Protection Officer" input_the_dpo: "Input the contact of the Data Protection Officer"
@ -966,6 +972,8 @@ pt:
publish_will_notify: "Publish a new version will send a notification to every users." publish_will_notify: "Publish a new version will send a notification to every users."
publish: "Publish" publish: "Publish"
users_notified: "Platform users will be notified of the update." users_notified: "Platform users will be notified of the update."
about_analytics: "I agree to share anonymous data with the development team to help improve Fab-Manager."
read_more: "Which data do we collect?"
analytics: analytics:
intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>" intro_analytics_html: "You'll find below a detailed view of all the data, Fab-Manager will collect <strong>if permission is granted.</strong>"
version: "Application version" version: "Application version"

View File

@ -68,10 +68,10 @@ es:
an_unexpected_error_prevented_your_group_from_being_changed: "Un error inesperado impidió que su grupo fuese cambiado." an_unexpected_error_prevented_your_group_from_being_changed: "Un error inesperado impidió que su grupo fuese cambiado."
confirmation_required: "Confirmation required" confirmation_required: "Confirmation required"
confirm_delete_your_account: "¿Está seguro de querer eliminar su cuenta?" confirm_delete_your_account: "¿Está seguro de querer eliminar su cuenta?"
all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation all_data_will_be_lost: "All your data will be destroyed and won't be recoverable."
invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years."
statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes."
no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them."
your_user_account_has_been_successfully_deleted_goodbye: "Su cuenta ha sido eliminada con éxito. Adiós" 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." 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" used_for_statistics: "This data will be used for statistical purposes"

View File

@ -68,10 +68,10 @@ pt:
an_unexpected_error_prevented_your_group_from_being_changed: "Um erro inesperado impediu o seu grupo de ser alterado." an_unexpected_error_prevented_your_group_from_being_changed: "Um erro inesperado impediu o seu grupo de ser alterado."
confirmation_required: "Confirmation required" confirmation_required: "Confirmation required"
confirm_delete_your_account: "Você realmente deseja deletar sua conta?" confirm_delete_your_account: "Você realmente deseja deletar sua conta?"
all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." # missing translation all_data_will_be_lost: "All your data will be destroyed and won't be recoverable."
invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." # missing translation invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years."
statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." # missing translation statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes."
no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." # missing translation no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them."
your_user_account_has_been_successfully_deleted_goodbye: "Sua conta de usuário foi excluída com êxito. Até mais." 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." 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" used_for_statistics: "This data will be used for statistical purposes"

View File

@ -36,13 +36,13 @@ es:
cannot_be_blank_at_same_time: "no puede estar vacío cuando %{field} también está vacío" cannot_be_blank_at_same_time: "no puede estar vacío cuando %{field} también está vacío"
cannot_be_in_the_past: "no puede estar en el pasado" cannot_be_in_the_past: "no puede estar en el pasado"
cannot_be_before_previous_value: "No puede estar antes del valor anterior." cannot_be_before_previous_value: "No puede estar antes del valor anterior."
cannot_overlap: "can't overlap an existing accounting period" # missing translation cannot_overlap: "can't overlap an existing accounting period"
cannot_encompass: "can't encompass an existing accounting period" # missing translation cannot_encompass: "can't encompass an existing accounting period"
in_closed_period: "can't be within a closed accounting period" # missing translation in_closed_period: "can't be within a closed accounting period"
invalid_footprint: "invoice's checksum is invalid" # missing translation invalid_footprint: "invoice's checksum is invalid"
end_before_start: "The end date can't be before the start date. Pick a date after %{START}" # missing translation end_before_start: "The end date can't be before the start date. Pick a date after %{START}"
invalid_duration: "The allowed duration must be between 1 day and 1 year. Your period is %{DAYS} days long." # missing translation invalid_duration: "The allowed duration must be between 1 day and 1 year. Your period is %{DAYS} days long."
must_be_in_the_past: "The period must be strictly prior to today's date." # missing translation must_be_in_the_past: "The period must be strictly prior to today's date."
activemodel: activemodel:
errors: errors:
@ -322,7 +322,7 @@ es:
statistics_global: "de todas las estadísticas" statistics_global: "de todas las estadísticas"
statistics_account: "de las estadísticas de registro" statistics_account: "de las estadísticas de registro"
statistics_event: "de estadísticas sobre eventos" statistics_event: "de estadísticas sobre eventos"
statistics_machine: "de estadísticas sobre slots de máquina" # missing translation statistics_machine: "de estadísticas sobre slots de máquina"
statistics_project: "de estadísticas sobre proyectos" statistics_project: "de estadísticas sobre proyectos"
statistics_subscription: "de estadísticas de suscripción" statistics_subscription: "de estadísticas de suscripción"
statistics_training: "de estadísticas de cursos" statistics_training: "de estadísticas de cursos"
@ -335,29 +335,29 @@ es:
is_over: "se ha acabado." is_over: "se ha acabado."
download_here: "Descargar aquí" download_here: "Descargar aquí"
notify_admin_import_complete: notify_admin_import_complete:
import_over: "%{CATEGORY} import is over. " # missing translation import_over: "%{CATEGORY} import is over. "
members: "Members" # missing translation members: "Members"
view_results: "View results." # missing translation view_results: "View results."
notify_member_about_coupon: notify_member_about_coupon:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento de %{PERCENT}% con el código %{CODE}" enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento de %{PERCENT}% con el código %{CODE}"
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} con el código %{CODE}" enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} con el código %{CODE}"
notify_admin_free_disk_space: notify_admin_free_disk_space:
warning_free_disk_space: "Warning: the server's available disk space is now %{AVAILABLE} MiB" # missing translation warning_free_disk_space: "Warning: the server's available disk space is now %{AVAILABLE} MiB"
notify_admin_close_period_reminder: notify_admin_close_period_reminder:
warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}" # missing translation warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}"
warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}" # missing translation warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}"
notify_admin_archive_complete: # missing translation notify_admin_archive_complete:
archive_complete: "Data archiving from %{START} to %{END} is done. <a href='api/accounting_periods/%{ID}/archive' target='_blank'>click here to download</a>. Remember to save it on an external secured media." # missing translation archive_complete: "Data archiving from %{START} to %{END} is done. <a href='api/accounting_periods/%{ID}/archive' target='_blank'>click here to download</a>. Remember to save it on an external secured media."
notify_privacy_policy_changed: notify_privacy_policy_changed:
policy_updated: "Privacy policy updated." # missing translation policy_updated: "Privacy policy updated."
click_to_show: "Click here to consult" # missing translation click_to_show: "Click here to consult"
notify_admin_refund_created: notify_admin_refund_created:
refund_created: "A refund of %{AMOUNT} has been created for user %{USER}" # missing translation refund_created: "A refund of %{AMOUNT} has been created for user %{USER}"
statistics: statistics:
# statistics tools for admins # statistics tools for admins
subscriptions: "Suscripciones" subscriptions: "Suscripciones"
machines_hours: "Machine slots" # missing translation machines_hours: "Machine slots"
spaces: "Espacios" spaces: "Espacios"
trainings: "Cursos" trainings: "Cursos"
events: "Eventos" events: "Eventos"

View File

@ -240,7 +240,7 @@ es:
signaled_by: "marcado por:" signaled_by: "marcado por:"
signaled_on: "marcado el:" signaled_on: "marcado el:"
message: "Mensaje:" message: "Mensaje:"
visit_management_interface: "Refer to the Reporting Management Interface for more information." # missing translation visit_management_interface: "Refer to the Reporting Management Interface for more information."
notify_user_wallet_is_credited: notify_user_wallet_is_credited:
subject: "Your wallet has been credited" subject: "Your wallet has been credited"

View File

@ -240,7 +240,7 @@ pt:
signaled_by: "sinalizado por:" signaled_by: "sinalizado por:"
signaled_on: "sinalizado em:" signaled_on: "sinalizado em:"
message: "Menssagem:" message: "Menssagem:"
visit_management_interface: "Refer to the Reporting Management Interface for more information." # missing translation visit_management_interface: "Refer to the Reporting Management Interface for more information."
notify_user_wallet_is_credited: notify_user_wallet_is_credited:
subject: "Sua carteira foi creditada" subject: "Sua carteira foi creditada"

View File

@ -36,13 +36,13 @@ pt:
cannot_be_blank_at_same_time: "Não pode ficar em branco quando %{field} estiver em branco também" cannot_be_blank_at_same_time: "Não pode ficar em branco quando %{field} estiver em branco também"
cannot_be_in_the_past: "não pode ser no passado" cannot_be_in_the_past: "não pode ser no passado"
cannot_be_before_previous_value: "não pode ser antes do valor anterior" cannot_be_before_previous_value: "não pode ser antes do valor anterior"
cannot_overlap: "can't overlap an existing accounting period" # missing translation cannot_overlap: "can't overlap an existing accounting period"
cannot_encompass: "can't encompass an existing accounting period" # missing translation cannot_encompass: "can't encompass an existing accounting period"
in_closed_period: "can't be within a closed accounting period" # missing translation in_closed_period: "can't be within a closed accounting period"
invalid_footprint: "invoice's checksum is invalid" # missing translation invalid_footprint: "invoice's checksum is invalid"
end_before_start: "The end date can't be before the start date. Pick a date after %{START}" # missing translation end_before_start: "The end date can't be before the start date. Pick a date after %{START}"
invalid_duration: "The allowed duration must be between 1 day and 1 year. Your period is %{DAYS} days long." # missing translation invalid_duration: "The allowed duration must be between 1 day and 1 year. Your period is %{DAYS} days long."
must_be_in_the_past: "The period must be strictly prior to today's date." # missing translation must_be_in_the_past: "The period must be strictly prior to today's date."
activemodel: activemodel:
errors: errors:
@ -322,7 +322,7 @@ pt:
statistics_global: "de todas as estatísticas" statistics_global: "de todas as estatísticas"
statistics_account: "das estatísticas de registro" statistics_account: "das estatísticas de registro"
statistics_event: "de estatísticas sobre eventos" statistics_event: "de estatísticas sobre eventos"
statistics_machine: "de estatísticas sobre slots de máquina" # missing translation statistics_machine: "de estatísticas sobre slots de máquina"
statistics_project: "de estatísticas sobre projetos" statistics_project: "de estatísticas sobre projetos"
statistics_subscription: "de estatísticas de assinatura" statistics_subscription: "de estatísticas de assinatura"
statistics_training: "de estatísticas sobre treinamentos" statistics_training: "de estatísticas sobre treinamentos"
@ -335,29 +335,29 @@ pt:
is_over: "está finalizado." is_over: "está finalizado."
download_here: "Baixe aqui" download_here: "Baixe aqui"
notify_admin_import_complete: notify_admin_import_complete:
import_over: "%{CATEGORY} import is over. " # missing translation import_over: "%{CATEGORY} import is over. "
members: "Members" # missing translation members: "Members"
view_results: "View results." # missing translation view_results: "View results."
notify_member_about_coupon: notify_member_about_coupon:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Desfrute de um desconto de %{PERCENT}% com o código %{CODE}" enjoy_a_discount_of_PERCENT_with_code_CODE: "Desfrute de um desconto de %{PERCENT}% com o código %{CODE}"
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Desfrute de um desconto de %{AMOUNT} com o código %{CODE}" enjoy_a_discount_of_AMOUNT_with_code_CODE: "Desfrute de um desconto de %{AMOUNT} com o código %{CODE}"
notify_admin_free_disk_space: notify_admin_free_disk_space:
warning_free_disk_space: "Warning: the server's available disk space is now %{AVAILABLE} MiB" # missing translation warning_free_disk_space: "Warning: the server's available disk space is now %{AVAILABLE} MiB"
notify_admin_close_period_reminder: notify_admin_close_period_reminder:
warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}" # missing translation warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}"
warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}" # missing translation warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}"
notify_admin_archive_complete: # missing translation notify_admin_archive_complete:
archive_complete: "Data archiving from %{START} to %{END} is done. <a href='api/accounting_periods/%{ID}/archive' target='_blank'>click here to download</a>. Remember to save it on an external secured media." # missing translation archive_complete: "Data archiving from %{START} to %{END} is done. <a href='api/accounting_periods/%{ID}/archive' target='_blank'>click here to download</a>. Remember to save it on an external secured media."
notify_privacy_policy_changed: notify_privacy_policy_changed:
policy_updated: "Privacy policy updated." # missing translation policy_updated: "Privacy policy updated."
click_to_show: "Click here to consult" # missing translation click_to_show: "Click here to consult"
notify_admin_refund_created: notify_admin_refund_created:
refund_created: "A refund of %{AMOUNT} has been created for user %{USER}" # missing translation refund_created: "A refund of %{AMOUNT} has been created for user %{USER}"
statistics: statistics:
# statistics tools for admins # statistics tools for admins
subscriptions: "Assinaturas" subscriptions: "Assinaturas"
machines_hours: "Slots de máquina" # missing translation machines_hours: "Slots de máquina"
spaces: "Espaços" spaces: "Espaços"
trainings: "Treinamentos" trainings: "Treinamentos"
events: "Eventos" events: "Eventos"

View File

@ -636,6 +636,14 @@ unless Setting.find_by(name: 'fab_analytics').try(:value)
setting.save setting.save
end end
unless Setting.find_by(name: 'link_name').try(:value)
name = Setting.find_by(name: 'fablab_name')
gender = Setting.find_by(name: 'name_genre')
setting = Setting.find_or_initialize_by(name: 'link_name')
setting.value = _t('app.public.common.about_the_fablab', NAME: name, GENDER: gender)
setting.save
end
if StatisticCustomAggregation.count.zero? if StatisticCustomAggregation.count.zero?
# available reservations hours for machines # available reservations hours for machines
machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2) machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2)