1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-03-14 11:29:15 +01:00

more translations and modification of readme

This commit is contained in:
lpgn 2016-01-17 00:47:53 +00:00 committed by Michael JIN
parent fd6dec4625
commit 572fb0b6b3
20 changed files with 75 additions and 78 deletions

View File

@ -136,7 +136,7 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
type: 'danger'
]
.result['finally'](null).then (user) ->
growl.addInfoMessage('Votre mot de passe a bien été modifié.')
growl.addInfoMessage('Your password has been changed.')
Auth.login().then (user) ->
$scope.setCurrentUser(user)
, (error) ->
@ -272,7 +272,7 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
# Authentication failed...
$scope.alerts = []
$scope.alerts.push
msg: 'E-mail ou mot de passe incorrect.'
msg: 'Incorrect Email or password.'
type: 'danger'
# handle modal behaviors. The provided reason will be used to define the following actions
@ -314,12 +314,12 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
$modalInstance.close()
.error ->
$scope.alerts.push
msg: "Your email address n'existe pas."
msg: "Your email address does not exist."
type: 'danger'
]
.result['finally'](null).then ->
growl.addInfoMessage('Vous allez recevoir sous quelques minutes un e-mail vous indiquant comment réinitialiser votre mot de passe.')
growl.addInfoMessage('You will receive an email within a few minutes telling you how to reset your password.')
# otherwise the user just closed the modal

View File

@ -20,7 +20,7 @@ Application.Controllers.controller "mainNavController", ["$scope", "$location",
}
{
state: 'app.public.events_list'
linkText: 'List of courses and workshops'
linkText: 'List of events and workshops'
linkIcon: 'tags'
}
{

View File

@ -104,9 +104,9 @@ class ProjectsController
##
# This will remove the given file from the project's CAO attachements list. If the file was previously uploaded
# This will remove the given file from the project's CAD attachements list. If the file was previously uploaded
# to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from
# the CAO attachements array.
# the CAD attachements array.
# @param file {Object} the file to delete
##
$scope.deleteFile = (file) ->
@ -247,7 +247,7 @@ Application.Controllers.controller "newProjectController", ["$scope", "$state",
$scope.method = 'post'
## Button litteral text value
$scope.submitName = 'Enregistrer comme brouillon'
$scope.submitName = 'Save as a draft'
## Default project parameters
$scope.project =
@ -281,7 +281,7 @@ Application.Controllers.controller "editProjectController", ["$scope", "$state",
$scope.method = 'put'
## Button litteral text value
$scope.submitName = 'Enregistrer'
$scope.submitName = 'Save'
## Retrieve the project's details, if an error occured, redirect the user to the projects list page
$scope.project = Project.get {id: $stateParams.id}

View File

@ -9,7 +9,7 @@
</div>
<div class="col-md-8 b-l b-r">
<section class="heading-title">
<h1>Ajouter un membre</h1>
<h1>Add Member</h1>
</section>
</div>
@ -17,7 +17,7 @@
<div class="col-md-3">
<section class="heading-actions wrapper">
<div class="btn btn-lg btn-block btn-default m-t-xs" ng-click="cancel()">
Annuler
Cancel
</div>
</section>
@ -42,7 +42,7 @@
<div class="panel-footer no-padder">
<input type="submit" value="Enregistrer" 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="Save" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
</div>
</section>
</form>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Gestion des éléments projets</h1>
<h1>Project elements management </h1>
</section>
</div>
@ -21,12 +21,12 @@
<div class="col-md-12">
<tabset justified="true">
<tab heading="Matériaux">
<button type="button" class="btn btn-warning m-b m-t" ng-click="addComponent()">Ajouter un matériau</button>
<button type="button" class="btn btn-warning m-b m-t" ng-click="addComponent()">Add a material</button>
<table class="table">
<thead>
<tr>
<th style="width:80%">Nom</th>
<th style="width:80%">Title</th>
<th style="width:20%"></th>
</tr>
</thead>
@ -49,7 +49,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeComponent($index)">
<i class="fa fa-trash-o"></i>
@ -60,13 +60,13 @@
</tbody>
</table>
</tab>
<tab heading="Thématiques">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addTheme()">Ajouter une nouvelle thématique</button>
<tab heading="Themes">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addTheme()">Add a new themes</button>
<table class="table">
<thead>
<tr>
<th style="width:80%">Nom</th>
<th style="width:80%">Title</th>
<th style="width:20%"></th>
</tr>
</thead>
@ -89,7 +89,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeTheme($index)">
<i class="fa fa-trash-o"></i>
@ -101,12 +101,12 @@
</table>
</tab>
<tab heading="Licences">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addLicence()">Ajouter une nouvelle licence</button>
<button type="button" class="btn btn-warning m-t m-b" ng-click="addLicence()">Add a new license</button>
<table class="table">
<thead>
<tr>
<th style="width:30%">Nom</th>
<th style="width:30%">Title</th>
<th style="width:50%" class="hidden-xs">Description</th>
<th style="width:20%"></th>
</tr>
@ -135,7 +135,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeLicence($index)">
<i class="fa fa-trash-o"></i>

View File

@ -12,9 +12,9 @@
<div class="wrapper" ng-if="user.all_projects.length == 0">You have no projects.</div>
<div class="widget panel b-a m m-t-lg" ng-repeat="project in user.all_projects">
<div class="panel-heading b-b clearfix">
<h4 class="text-u-c font-sbold pull-left">{{project.name}}</h4> <span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'Auteur' : 'Collaborateur'}}</span>
<h4 class="text-u-c font-sbold pull-left">{{project.name}}</h4> <span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'Author' : 'Contributor'}}</span>
<div class="pull-right">
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button">Consulter</a>
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button">Consult</a>
</div>
</div>
<div class="widget-content bg-light clearfix">

View File

@ -79,7 +79,7 @@
<h1 class="red text-u-c">Projects</h1>
<ul class="list-unstyled" ng-if="user.all_projects.length > 0">
<li ng-repeat="p in user.all_projects" class="m-t-sm">
<a class="text-u-c" ui-sref="app.public.projects_show({id:p.slug})" role="button">{{p.name}} <span class="m-l-sm label label-success text-white">{{p.author_id == currentUser.id ? 'Auteur' : 'Collaborateur'}}</span></a>
<a class="text-u-c" ui-sref="app.public.projects_show({id:p.slug})" role="button">{{p.name}} <span class="m-l-sm label label-success text-white">{{p.author_id == currentUser.id ? 'Author' : 'Contributor'}}</span></a>
</li>
</ul>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Centre de notifications</h1>
<h1>Alert Center</h1>
</section>
</div>
@ -19,14 +19,14 @@
<div class="row">
<div class="col-md-12">
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="notifications.length == 0">Tout marquer comme lu ({{notifications.length}})</button>
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="notifications.length == 0">Mark all as read ({{notifications.length}})</button>
<table class="table">
<thead>
<tr>
<th style="width:10%"></th>
<th style="width:20%">Date</th>
<th style="width:70%">Intitulée</th>
<th style="width:70%">Entitled</th>
</tr>
</thead>
@ -42,7 +42,7 @@
</tr>
<tr ng-if="notifications.length == 0">
<td colspan="3">Aucune nouvelle notification.</td>
<td colspan="3">No new notification.</td>
</tr>
</tbody>
</table>
@ -72,14 +72,14 @@
<tr ng-if="notificationsRead.length == 0">
<td colspan="3">Aucune notification archivée.</td>
<td colspan="3">No archived notification.</td>
</tr>
</tbody>
</table>
<a class="btn btn-default" ng-click="addMoreNotificationsReaded()" ng-if="paginateActive">Charger les notifications suivantes...</a>
<a class="btn btn-default" ng-click="addMoreNotificationsReaded()" ng-if="paginateActive">Load the following notifications...</a>
</div>

View File

@ -74,7 +74,7 @@
<div class="col-sm-10">
<div ng-repeat="step in project.project_steps_attributes" ng-show="!step._destroy">
<div class="m-t-xs m-b-lg">
<span class="label label-warning m-t m-b">Étape {{ $index+1 }}/{{project.project_steps_attributes.length}}</span>
<span class="label label-warning m-t m-b">Step {{ $index+1 }}/{{project.project_steps_attributes.length}}</span>
<input type="hidden" name="project[project_steps_attributes][][id]" ng-value="step.id" />
<input type="hidden" name="project[project_steps_attributes][][_destroy]" ng-value="step._destroy" />
<input ng-model="step.title" type="text" name="project[project_steps_attributes][][title]" class="form-control m-b-sm m-t-xs" placeholder="Step title" required>
@ -168,7 +168,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Thématiques</h3>
<h3>Themes</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="project[theme_ids][]" value="" />

View File

@ -12,18 +12,18 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-7 b-l b-r-md">
<section class="heading-title">
<h1>Editer le projet <span class="badge" ng-if="project.state == 'draft'">Brouillon</span></h1>
<h1>Edit Project <span class="badge" ng-if="project.state == 'draft'">Draft copy</span></h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
<section class="heading-actions wrapper">
<!-- <div class="btn btn-lg btn-block btn-default m-t-xs" ng-click="cancel()" ng-if="project.state == 'published'">
Annuler
Cancel
</div> -->
<input type="submit" ng-value="submitName" class="btn btn-lg btn-warning m-t-xs text-u-c" ng-disabled="projectForm.$invalid"/>
<div class="btn btn-lg btn-valid btn-success m-t-xs text-u-c" publish-project ng-if="project.state == 'draft'" ng-disabled="projectForm.$invalid">
Publier
Publish
</div>
</section>

View File

@ -9,7 +9,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l ">
<section class="heading-title">
<h1>Ajouter un nouveau projet</h1>
<h1>Add a new project</h1>
</section>
</div>

View File

@ -9,14 +9,14 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>{{ project.name }} <span class="badge" ng-if="project.state == 'draft'">Brouillon</span></h1>
<h1>{{ project.name }} <span class="badge" ng-if="project.state == 'draft'">Draft</span></h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
<section class="heading-actions wrapper">
<a ui-sref="app.logged.projects_edit({id: project.id})" ng-if="projectEditableBy(currentUser) || isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> éditer</a>
<a ui-sref="app.logged.projects_edit({id: project.id})" ng-if="projectEditableBy(currentUser) || isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> edit</a>
<a ng-if="!isAuthenticated()" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Propose a Project</a>
</section>
</div>
@ -33,13 +33,13 @@
<a href="{{project.project_image}}" target="_blank"><img ng-src="{{project.project_image}}" alt="{{project.name}}" class="img-responsive"></a>
</div>
<h3>Description du projet</h3>
<h3>Project description</h3>
<p ng-bind-html="project.description | toTrusted"></p>
<div class="article-steps">
<div class="row article-step m-b-lg" ng-repeat="step in project.project_steps_attributes">
<div class="col-md-12 m-b-xs">
<h3 class="well well-simple step-title">Étape {{$index+1}} : {{step.title}}</h3>
<h3 class="well well-simple step-title">Step {{$index+1}} : {{step.title}}</h3>
</div>
<div class="col-md-4" ng-if="step.project_step_image">
<a href="{{step.project_step_image_url}}" target="_blank"><img class="img-responsive m-b" ng-src="{{step.project_step_image_url}}" alt="{{step.title}}" ></a>
@ -73,7 +73,7 @@
<fab-user-avatar ng-model="project.author.user_avatar" avatar-class="thumb-50"></fab-user-avatar>
</div>
<div><a class="text-sm font-sbold" ui-sref="app.logged.members_show({id: project.author.slug})"><i>Par {{project.author.first_name}}</i></a></div>
<small class="text-xs m-b"><i>posté le {{project.created_at | amDateFormat: 'Do MMMM YYYY'}}</i></small>
<small class="text-xs m-b"><i>posted on {{project.created_at | amDateFormat: 'Do MMMM YYYY'}}</i></small>
</div>
@ -81,7 +81,7 @@
<section class="widget panel b-a m" ng-if="project.project_caos_attributes">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{project.project_caos_attributes.length}}</span>
<h3>Fichier CAO à télécharger</h3>
<h3>CAD file to download</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">
@ -94,7 +94,7 @@
<section class="widget panel b-a m" ng-if="project.machines">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{project.machines.length}}</span>
<h3>Machines et matériaux</h3>
<h3>Machines and materials</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">

View File

@ -2,30 +2,27 @@
<div class="row padder">
<header class="about-picture">
<div class="col-sm-offset-2 col-md-offset-3 col-sm-10 col-md-8">
<h1 class="about-title text-u-c">Imaginer, Fabriquer, <br>Partager au Fab Lab</h1>
<h1 class="about-title text-u-c">Imagine, Make, <br>Share at Fablab XinFab</h1>
</div>
</header>
</div>
<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">
<p>Le Fab Lab est un atelier de fabrication numérique où lon peut utiliser des machines de découpe, des imprimantes 3D,… permettant de travailler sur des matériaux variés : plastique, bois, carton, vinyle, … afin de créer toute sorte dobjet grâce à la conception assistée par ordinateur ou à lélectronique. Mais le Fab Lab est aussi un lieu déchange de compétences technique. </p>
<p>Fab Lab is the educational outreach component of MITs Center for Bits and Atoms (CBA), an extension of its research into digital fabrication and computation. A Fab Lab is a technical prototyping platform for innovation and invention, providing stimulus for local entrepreneurship. A Fab Lab is also a platform for learning and innovation: a place to play, to create, to learn, to mentor, to invent.</p>
<p>
Le Fab Lab est un espace permanent : ouvert à tous, il offre la possibilité de réaliser des objets soi-même, de partager ses compétences et dapprendre au contact des médiateurs du Fab Lab et des autres usagers. </p>
<p>
La formation au Fab Lab sappuie sur des projets et le partage de connaissances : vous devez prendre part à la capitalisation des connaissances et à linstruction des autres utilisateurs.
</p>
Fablabs are a part of maker culture where ordinary people are empowered to design, build, innovate, and invent on their own or with other makers. Fablabs offer makers the space and tools to digitally manufacture objects, from furniture to jewelry, robots to food.</p>
</div>
<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">Vos contacts au Fab Lab</h2>
<h2 class="about-title-aside text-u-c">Fab Lab XinFab contacts</h2>
<dl>
<dt>Manager Fab Lab :</dt>
<dd>@email</dd>
<dt>Responsable médiation :</dt>
<dd>@email</dd>
<dt>Animateur scientifique :</dt>
<dd>@email</dd>
<dt>Fab Lab Manager:</dt>
<dd>spacemanager@xinfab.com</dd>
<dt>Staff:</dt>
<dd>info@xinfab.com</dd>
<dt>Information:</dt>
<dd>info@xinfab.com</dd>
</dl>
</div>
</div>

View File

@ -11,7 +11,7 @@
<span class="label label-danger rounded text-lg text-white m-r-sm font-ebold">?</span>About Fablab XinFab
</a>
<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-danger label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>Retour
<span class="label label-danger label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>Back
</div>
</a>
</li>

View File

@ -14,8 +14,8 @@
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password" ng-model="user.password" class="form-control" placeholder="Your new password" required ng-minlength="8">
</div>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required">Mot de passe est obligatoire</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength">Mot de passe est trop court (au moins 8 caractères)</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required">Password is required</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength">Password is too short (at least 8 characters)</span>
</div>
</div>

View File

@ -1,7 +1,7 @@
<div>
<div class="modal-header">
<%= image_tag("fablab-w.png", class: 'modal-logo') %>
<h1>Mot de passe oublié</h1>
<h1>Forgotten password</h1>
</div>
<div class="modal-body">
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
@ -22,7 +22,7 @@
</div>
<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">Valider</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">Confirm</button>
</div>
</div>
</div>

View File

@ -1,7 +1,7 @@
<p>Bonjour,</p>
<p>Hi,</p>
<p>Quelqu'un a demandé un lien pour changer votre mot de passe. Vous pouvez le faire via le lien ci-dessous.</p>
<p>Someone asked a link to change your password. You can do this via the link below.</p>
<p><%= link_to 'Changer mon mot de passe', "#{root_url}#!/?reset_password_token=#{@token}" %></p>
<p><%= link_to 'Change my password', "#{root_url}#!/?reset_password_token=#{@token}" %></p>
<p>Si vous n'avez pas demandé cela, merci d'ignorer ce message.</p>
<p>If you did not request this, thank you ignore this message.</p>

View File

@ -1,10 +1,10 @@
<p>Bonjour <%= @user.profile.full_name %>, </p>
<p>Hi <%= @user.profile.full_name %>, </p>
<p>Léquipe du Fab Lab vient de vous créer un compte sur <%= link_to 'le site du Fab lab', root_url %> <br> Voici vos paramètres de connexion : </p>
<p>The FabLab team has created an account on www.xinfab.com. <%= link_to 'www.xinfab.com', root_url %> <br> Here is your connection settings : </p>
<p>Nom de compte : <b><%= @user.email %></b></p>
<p>Mot de passe : <b><%= @generated_password %></b></p>
<p>Username : <b><%= @user.email %></b></p>
<p>Password : <b><%= @generated_password %></b></p>
<p>Ce mot de passe est temporaire, vous pourrez le modifier en accédant à lespace « Mon compte ». Avec ce compte, vous conservez bien entendu tous les avantages liés à votre profil utilisateur Fab Lab (abonnement, formations).</p>
<p>This password is temporary, you can change it by accessing the "My Account". With this account, you retain all the benefits of course related to your user profile Fab Lab (subscription, training).</p>
<p>L'équipe Fab Lab.</p>
<p>The team Fablab XinFab.</p>

View File

@ -9,10 +9,10 @@ fr:
failure:
already_authenticated: Vous êtes déjà connecté(e).
inactive: Votre compte nest pas encore activé.
invalid: E-mail ou mot de passe incorrect.
invalid: Incorrect Email or password.
invalid_token: Jeton d'authentification incorrect.
locked: Votre compte est verrouillé.
not_found_in_database: E-mail ou mot de passe incorrect.
not_found_in_database: Incorrect Email or password.
timeout: Votre session est périmée, veuillez vous reconnecter pour continuer.
unauthenticated: Vous devez vous connecter ou vous enregistrer pour continuer.
unconfirmed: Vous devez confirmer votre compte par e-mail.

View File

@ -5,9 +5,9 @@
"use strict";
$.extend($.fn.select2.defaults, {
formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
formatNoMatches: function () { return "Aucun résultat trouvé"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1 ? "" : "s") + " de plus"; },
formatMatches: function (matches) { return matches + " results are available, use the up and down arrows to navigate."; },
formatNoMatches: function () { return "No result found"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Thank You " + n + " character" + (n == 1 ? "" : "s") + " de plus"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1 ? "" : "s"); },
formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },