Browse Source

translation of account, dashboard and login page

AlexiCauvin 6 years ago
parent
commit
3c47fa6fe7

+ 46 - 1
frontend/i18next.scanner/en/translation.json View File

19
   "Logout": "Logout",
19
   "Logout": "Logout",
20
   "Notification": "Notification",
20
   "Notification": "Notification",
21
   "Archive Topic": "Archive Topic",
21
   "Archive Topic": "Archive Topic",
22
-  "Deleted File": "Deleted File"
22
+  "Deleted File": "Deleted File",
23
+  "Name :": "Name :",
24
+  "Email Adress :": "Email Adress :",
25
+  "Send": "Send",
26
+  "Workspace and notifications": "Workspace and notifications",
27
+  "Workspace": "Workspace",
28
+  "Role": "Role",
29
+  "Account information": "Account information",
30
+  "Change your password": "Change your password",
31
+  "Password": "Password",
32
+  "Change your name": "Change your name",
33
+  "Change your email": "Change your email",
34
+  "Old Password": "Old Password",
35
+  "New Password": "New Password",
36
+  "Change your Timezone": "Change your Timezone",
37
+  "Calendar": "Calendar",
38
+  "Access your personal calendar": "Access your personal calendar",
39
+  "Dashboard": "Dashboard",
40
+  "Active advanced Dashboard": "Active advanced Dashboard",
41
+  "Change your status": "Change your status",
42
+  "subscriber": "subscriber",
43
+  "unsubscribed": "unsubscribed",
44
+  "Start a new Thread": "Start a new Thread",
45
+  "Writing a document": "Writing a document",
46
+  "Upload a file": "Upload a file",
47
+  "Start a videoconference": "Start a videoconference",
48
+  "View the Calendar": "View the Calendar",
49
+  "Recent activity": "Recent activity",
50
+  "Mark everything as read": "Mark everything as read",
51
+  "See more": "See more",
52
+  "Member List": "Member List",
53
+  "Add a member": "Add a member",
54
+  "Enter the name or email of the member": "Enter the name or email of the member",
55
+  "Create an account": "Create an account",
56
+  "Choose the role of the member": "Choose the role of the member",
57
+  "Supervisor": "Supervisor",
58
+  "Content Manager": "Content Manager",
59
+  "Contributor": "Contributor",
60
+  "Reader": "Reader",
61
+  "Validate": "Validate",
62
+  "Implement Tracim in your explorer": "Implement Tracim in your explorer",
63
+  "Find all your documents deposited online directly on your computer via the workstation, without going through the software.": "Find all your documents deposited online directly on your computer via the workstation, without going through the software.",
64
+  "Workspace Calendar": "Workspace Calendar",
65
+  "Each workspace has its own calendar.": "Each workspace has its own calendar.",
66
+  "Email Adress": "Email Adress",
67
+  "Explore the workspace": "Explore the workspace"
23
 }
68
 }

+ 46 - 1
frontend/i18next.scanner/fr/translation.json View File

19
   "Logout": "Se Déconnecter",
19
   "Logout": "Se Déconnecter",
20
   "Notification": "Notification",
20
   "Notification": "Notification",
21
   "Archive Topic": "Conversation archivée",
21
   "Archive Topic": "Conversation archivée",
22
-  "Deleted File": "Fichier supprimé"
22
+  "Deleted File": "Fichier supprimé",
23
+  "Name :": "Nom :",
24
+  "Email Adress :": "Adresse mail :",
25
+  "Send": "Envoyer",
26
+  "Workspace and notifications": "Espace de travail & Notifications",
27
+  "Workspace": "Espace de travail",
28
+  "Role": "Rôle",
29
+  "Account information": "Information du compte",
30
+  "Change your password": "Changer votre mot de passe",
31
+  "Password": "Mot de passe",
32
+  "Change your name": "Modifier votre nom",
33
+  "Change your email": "Modifier votre email",
34
+  "Old Password": "Ancien mot de passe",
35
+  "New Password": "Nouveau mot de passe",
36
+  "Change your Timezone": "Modifier votre fuseau horaire",
37
+  "Calendar": "Calendrier",
38
+  "Access your personal calendar": "Accéder à votre calendrier personnel",
39
+  "Dashboard": "Tableau de bord",
40
+  "Active advanced Dashboard": "Activer le mode avancé ",
41
+  "Change your status": "Changer de status",
42
+  "subscriber": "Abonné(e)",
43
+  "unsubscribed": "Non Abonné(e)",
44
+  "Start a new Thread": "Débuter une nouvelle discussion",
45
+  "Writing a document": "Rédiger un document",
46
+  "Upload a file": "Importer un fichier",
47
+  "Start a videoconference": "Débuter une visioconférence",
48
+  "View the Calendar": "Voir le Calendrier",
49
+  "Explore the workspace": "Explorer l'espace de travail",
50
+  "Recent activity": "Activité récente",
51
+  "Mark everything as read": "Tout marquer comme lu",
52
+  "See more": "Voir plus",
53
+  "Member List": "Liste des membres",
54
+  "Add a member": "Ajouter un membre",
55
+  "Enter the name or email of the member": "Renseigner le nom ou l'email de l'utilisateur",
56
+  "Create an account": "Créer un compte",
57
+  "Supervisor": "Responsable",
58
+  "Content Manager": "Gestionnaire de contenu",
59
+  "Contributor": "Contributeur",
60
+  "Reader": "Lecteur",
61
+  "Validate": "Validé",
62
+  "Implement Tracim in your explorer": "Implémenter Tracim dans votre explorateur",
63
+  "Find all your documents deposited online directly on your computer via the workstation, without going through the software.": "Retrouvez tous vos documents déposés en ligne directement sur votre ordinateur via le poste de travail, sans passer par le logiciel.",
64
+  "Workspace Calendar": "Calendrier de l'espace de travail",
65
+  "Each workspace has its own calendar.": "Chaque espace de travail à son propre calendrier",
66
+  "Choose the role of the member": "Choisissez le rôle du membre",
67
+  "Email Adress": "Adresse email"
23
 }
68
 }

+ 2 - 2
frontend/src/component/Account/Calendar.jsx View File

5
     <div className='account__userpreference__setting__calendar'>
5
     <div className='account__userpreference__setting__calendar'>
6
 
6
 
7
       <div className='calendar__title subTitle ml-2 ml-sm-0'>
7
       <div className='calendar__title subTitle ml-2 ml-sm-0'>
8
-        Calendrier
8
+        {props.t('Calendar')}
9
       </div>
9
       </div>
10
 
10
 
11
       <div className='calendar__text ml-2 ml-sm-0'>
11
       <div className='calendar__text ml-2 ml-sm-0'>
13
       </div>
13
       </div>
14
 
14
 
15
       <div className='calendar__title ml-2 ml-sm-0'>
15
       <div className='calendar__title ml-2 ml-sm-0'>
16
-        Accèder à votre Calendrier personnel
16
+        {props.t('Access your personal calendar')}
17
       </div>
17
       </div>
18
       <div className='calendar__link ml-2 ml-sm-0'>
18
       <div className='calendar__link ml-2 ml-sm-0'>
19
         {props.user.caldavUrl}
19
         {props.user.caldavUrl}

+ 4 - 4
frontend/src/component/Account/Notification.jsx View File

9
   return (
9
   return (
10
     <div className='account__userpreference__setting__notification'>
10
     <div className='account__userpreference__setting__notification'>
11
       <div className='notification__sectiontitle subTitle ml-2 ml-sm-0'>
11
       <div className='notification__sectiontitle subTitle ml-2 ml-sm-0'>
12
-        Espace de Travail & Notification
12
+        {props.t('Workspace and notifications')}
13
       </div>
13
       </div>
14
 
14
 
15
       <div className='notification__text ml-2 ml-sm-0'>
15
       <div className='notification__text ml-2 ml-sm-0'>
20
         <table className='table'>
20
         <table className='table'>
21
           <thead>
21
           <thead>
22
             <tr>
22
             <tr>
23
-              <th>Espace de travail</th>
24
-              <th>Role</th>
25
-              <th>Notification</th>
23
+              <th>{props.t('Workspace')}</th>
24
+              <th>{props.t('Role')}</th>
25
+              <th>{props.t('Notification')}</th>
26
             </tr>
26
             </tr>
27
           </thead>
27
           </thead>
28
           <tbody>
28
           <tbody>

+ 15 - 6
frontend/src/component/Account/Password.jsx View File

1
 import React from 'react'
1
 import React from 'react'
2
+import { translate } from 'react-i18next'
2
 
3
 
3
 export const Password = props => {
4
 export const Password = props => {
4
   return (
5
   return (
5
     <div className='account__userpreference__setting__personaldata'>
6
     <div className='account__userpreference__setting__personaldata'>
6
       <div className='personaldata__sectiontitle subTitle ml-2 ml-sm-0'>
7
       <div className='personaldata__sectiontitle subTitle ml-2 ml-sm-0'>
7
-        Changer de mot de passe
8
+        {props.t('Change your password')}
8
       </div>
9
       </div>
9
 
10
 
10
       <div className='personaldata__text ml-2 ml-sm-0'>
11
       <div className='personaldata__text ml-2 ml-sm-0'>
13
 
14
 
14
       <form className='personaldata__form mr-5'>
15
       <form className='personaldata__form mr-5'>
15
         <div className='personaldata__form__title'>
16
         <div className='personaldata__form__title'>
16
-          Mot de passe :
17
+          {props.t('Password')}
17
         </div>
18
         </div>
18
-        <input className='personaldata__form__txtinput form-control' type='password' placeholder='Ancien mot de passe' />
19
-        <input className='personaldata__form__txtinput form-control mt-4' type='password' placeholder='Nouveau mot de passe' />
19
+        <input
20
+          className='personaldata__form__txtinput form-control'
21
+          type='password'
22
+          placeholder={props.inputPlaceholderOldPassword}
23
+        />
24
+        <input
25
+          className='personaldata__form__txtinput form-control mt-4'
26
+          type='password'
27
+          placeholder={props.inputPlaceholderNewPassword}
28
+        />
20
         <button type='submit' className='personaldata__form__button btn btn-outline-primary mt-4'>
29
         <button type='submit' className='personaldata__form__button btn btn-outline-primary mt-4'>
21
-          Envoyer
30
+          {props.t('Send')}
22
         </button>
31
         </button>
23
       </form>
32
       </form>
24
 
33
 
26
   )
35
   )
27
 }
36
 }
28
 
37
 
29
-export default Password
38
+export default translate()(Password)

+ 22 - 7
frontend/src/component/Account/PersonalData.jsx View File

1
 import React from 'react'
1
 import React from 'react'
2
+import PropTypes from 'prop-types'
3
+import { translate } from 'react-i18next'
2
 
4
 
3
 export const PersonalData = props => {
5
 export const PersonalData = props => {
4
   return (
6
   return (
5
     <div className='account__userpreference__setting__personaldata'>
7
     <div className='account__userpreference__setting__personaldata'>
6
       <div className='personaldata__sectiontitle subTitle ml-2 ml-sm-0'>
8
       <div className='personaldata__sectiontitle subTitle ml-2 ml-sm-0'>
7
-        Information du compte
9
+        {props.t('Account information')}
8
       </div>
10
       </div>
9
 
11
 
10
       <div className='personaldata__text ml-2 ml-sm-0'>
12
       <div className='personaldata__text ml-2 ml-sm-0'>
13
 
15
 
14
       <form className='personaldata__form'>
16
       <form className='personaldata__form'>
15
         <div className='personaldata__form__title'>
17
         <div className='personaldata__form__title'>
16
-          Nom :
18
+          {props.t('Name :')}
17
         </div>
19
         </div>
18
         <div className='d-flex align-items-center justify-content-between flex-wrap mb-4'>
20
         <div className='d-flex align-items-center justify-content-between flex-wrap mb-4'>
19
-          <input className='personaldata__form__txtinput form-control mt-3 mt-sm-0' type='text' placeholder='Nom' />
21
+          <input
22
+            className='personaldata__form__txtinput form-control mt-3 mt-sm-0'
23
+            type='text'
24
+            placeholder={props.inputPlaceholderNameUser}
25
+          />
20
         </div>
26
         </div>
21
         <div className='personaldata__form__title'>
27
         <div className='personaldata__form__title'>
22
-          Adresse mail :
28
+          {props.t('Email Adress :')}
23
         </div>
29
         </div>
24
         <div className='d-flex align-items-center justify-content-between flex-wrap mb-4'>
30
         <div className='d-flex align-items-center justify-content-between flex-wrap mb-4'>
25
-          <input className='personaldata__form__txtinput form-control mt-3 mt-sm-0' type='email' placeholder='Nouvelle adresse mail' />
31
+          <input
32
+            className='personaldata__form__txtinput form-control mt-3 mt-sm-0'
33
+            type='email'
34
+            placeholder={props.inputPlaceholderEmailUser}
35
+          />
26
         </div>
36
         </div>
27
         <button type='submit' className='personaldata__form__button btn btn-outline-primary'>
37
         <button type='submit' className='personaldata__form__button btn btn-outline-primary'>
28
-          Envoyer
38
+          {props.t('Send')}
29
         </button>
39
         </button>
30
       </form>
40
       </form>
31
     </div>
41
     </div>
32
   )
42
   )
33
 }
43
 }
34
 
44
 
35
-export default PersonalData
45
+PersonalData.propTypes = {
46
+  inputPlaceholderNameUser: PropTypes.string,
47
+  inputPlaceholderEmailUser: PropTypes.string
48
+}
49
+
50
+export default translate()(PersonalData)

+ 3 - 2
frontend/src/component/Account/Timezone.jsx View File

1
 import React from 'react'
1
 import React from 'react'
2
 import Select from 'react-select'
2
 import Select from 'react-select'
3
 import 'react-select/dist/react-select.css'
3
 import 'react-select/dist/react-select.css'
4
+import { translate } from 'react-i18next'
4
 
5
 
5
 export const Timezone = props => {
6
 export const Timezone = props => {
6
   const handleChangeTimezone = selectedTimezone => props.onChangeTimezone(props.timezone.find(t => t.place === selectedTimezone.place))
7
   const handleChangeTimezone = selectedTimezone => props.onChangeTimezone(props.timezone.find(t => t.place === selectedTimezone.place))
9
     <div className='account__userpreference__setting__timezone'>
10
     <div className='account__userpreference__setting__timezone'>
10
 
11
 
11
       <div className='timezone__title subTitle ml-2 ml-sm-0'>
12
       <div className='timezone__title subTitle ml-2 ml-sm-0'>
12
-        Changer de Fuseau Horaire
13
+        {props.t('Change your Timezone')}
13
       </div>
14
       </div>
14
 
15
 
15
       <div className='timezone__text ml-2 ml-sm-0'>
16
       <div className='timezone__text ml-2 ml-sm-0'>
32
   )
33
   )
33
 }
34
 }
34
 
35
 
35
-export default Timezone
36
+export default translate()(Timezone)

+ 12 - 5
frontend/src/container/Account.jsx View File

19
   getTimezone,
19
   getTimezone,
20
   getUserRole
20
   getUserRole
21
 } from '../action-creator.async.js'
21
 } from '../action-creator.async.js'
22
+import { translate } from 'react-i18next'
22
 
23
 
23
 class Account extends React.Component {
24
 class Account extends React.Component {
24
   constructor (props) {
25
   constructor (props) {
79
     const subComponent = (() => {
80
     const subComponent = (() => {
80
       switch (this.state.subComponentMenu.find(({active}) => active).name) {
81
       switch (this.state.subComponentMenu.find(({active}) => active).name) {
81
         case 'personalData':
82
         case 'personalData':
82
-          return <PersonalData />
83
+          return <PersonalData
84
+            inputPlaceholderNameUser={this.props.t('Change your name')}
85
+            inputPlaceholderEmailUser={this.props.t('Change your email')}
86
+          />
83
 
87
 
84
         // case 'calendar':
88
         // case 'calendar':
85
         //   return <Calendar user={this.props.user} />
89
         //   return <Calendar user={this.props.user} />
90
             onChangeSubscriptionNotif={this.handleChangeSubscriptionNotif}
94
             onChangeSubscriptionNotif={this.handleChangeSubscriptionNotif}
91
           />
95
           />
92
 
96
 
97
+        case 'password':
98
+          return <Password
99
+            inputPlaceholderOldPassword={this.props.t('Old Password')}
100
+            inputPlaceholderNewPassword={this.props.t('New Password')}
101
+          />
102
+
93
         case 'timezone':
103
         case 'timezone':
94
           return <Timezone timezone={this.props.timezone} onChangeTimezone={this.handleChangeTimezone} />
104
           return <Timezone timezone={this.props.timezone} onChangeTimezone={this.handleChangeTimezone} />
95
-
96
-        case 'password':
97
-          return <Password />
98
       }
105
       }
99
     })()
106
     })()
100
 
107
 
129
 }
136
 }
130
 
137
 
131
 const mapStateToProps = ({ user, workspaceList, timezone }) => ({ user, workspaceList, timezone })
138
 const mapStateToProps = ({ user, workspaceList, timezone }) => ({ user, workspaceList, timezone })
132
-export default connect(mapStateToProps)(Account)
139
+export default translate()(connect(mapStateToProps)(Account))

+ 38 - 30
frontend/src/container/Dashboard.jsx View File

10
   setAppList,
10
   setAppList,
11
   setContentTypeList, setWorkspaceListIsOpenInSidebar, updateWorkspaceListData
11
   setContentTypeList, setWorkspaceListIsOpenInSidebar, updateWorkspaceListData
12
 } from '../action-creator.sync.js'
12
 } from '../action-creator.sync.js'
13
+import { translate } from 'react-i18next'
13
 
14
 
14
 class Dashboard extends React.Component {
15
 class Dashboard extends React.Component {
15
   constructor (props) {
16
   constructor (props) {
75
             <div className='dashboard__header mb-5'>
76
             <div className='dashboard__header mb-5'>
76
               <div className='pageTitleGeneric dashboard__header__title d-flex align-items-center'>
77
               <div className='pageTitleGeneric dashboard__header__title d-flex align-items-center'>
77
                 <div className='pageTitleGeneric__title dashboard__header__title__text mr-3'>
78
                 <div className='pageTitleGeneric__title dashboard__header__title__text mr-3'>
78
-                  Dashboard
79
+                  {this.props.t('Dashboard')}
79
                 </div>
80
                 </div>
80
                 <div className='dashboard__header__acces' />
81
                 <div className='dashboard__header__acces' />
81
               </div>
82
               </div>
82
               <div className='dashboard__header__advancedmode mr-3'>
83
               <div className='dashboard__header__advancedmode mr-3'>
83
-                <button type='button' className='btn btn-primary'>Activer édition avancé</button>
84
+                <button type='button' className='btn btn-primary'>
85
+                  {this.props.t('Active advanced Dashboard')}
86
+                </button>
84
               </div>
87
               </div>
85
             </div>
88
             </div>
86
 
89
 
119
                       className='dashboard__userstatut__notification__btn btn btn-outline-primary'
122
                       className='dashboard__userstatut__notification__btn btn btn-outline-primary'
120
                       onClick={this.handleToggleNotifBtn}
123
                       onClick={this.handleToggleNotifBtn}
121
                     >
124
                     >
122
-                      Changer de statut
125
+                      {this.props.t('Change your status')}
123
                     </div>
126
                     </div>
124
                   }
127
                   }
125
 
128
 
129
                         Abonné(e)
132
                         Abonné(e)
130
                       </button>
133
                       </button>
131
                       <div className='dashboard__userstatut__notification__subscribe__submenu dropdown-menu'>
134
                       <div className='dashboard__userstatut__notification__subscribe__submenu dropdown-menu'>
132
-                        <div className='dashboard__userstatut__notification__subscribe__submenu__item dropdown-item'>Abonné(e)
135
+                        <div className='dashboard__userstatut__notification__subscribe__submenu__item dropdown-item'>
136
+                          {this.props.t('subscriber')}
133
                         </div>
137
                         </div>
134
-                        <div className='dashboard__userstatut__notification__subscribe__submenu__item dropdown-item dropdown-item'>Non Abonné(e)
138
+                        <div className='dashboard__userstatut__notification__subscribe__submenu__item dropdown-item dropdown-item'>
139
+                          {this.props.t('unsubscribed')}
135
                         </div>
140
                         </div>
136
                       </div>
141
                       </div>
137
                     </div>
142
                     </div>
147
                     <i className='fa fa-comments-o' />
152
                     <i className='fa fa-comments-o' />
148
                   </div>
153
                   </div>
149
                   <div className='dashboard__calltoaction__button__text__title'>
154
                   <div className='dashboard__calltoaction__button__text__title'>
150
-                    Débuter une nouvelle discussion
155
+                    {this.props.t('Start a new Thread')}
151
                   </div>
156
                   </div>
152
                 </div>
157
                 </div>
153
               </div>
158
               </div>
158
                     <i className='fa fa-file-text-o' />
163
                     <i className='fa fa-file-text-o' />
159
                   </div>
164
                   </div>
160
                   <div className='dashboard__calltoaction__button__text__title'>
165
                   <div className='dashboard__calltoaction__button__text__title'>
161
-                    Rédiger un document
166
+                    {this.props.t('Writing a document')}
162
                   </div>
167
                   </div>
163
                 </div>
168
                 </div>
164
               </div>
169
               </div>
169
                     <i className='fa fa-paperclip' />
174
                     <i className='fa fa-paperclip' />
170
                   </div>
175
                   </div>
171
                   <div className='dashboard__calltoaction__button__text__title'>
176
                   <div className='dashboard__calltoaction__button__text__title'>
172
-                    Importer un fichier
177
+                    {this.props.t('Upload a file')}
173
                   </div>
178
                   </div>
174
                 </div>
179
                 </div>
175
               </div>
180
               </div>
181
                       <i className='fa fa-video-camera' />
186
                       <i className='fa fa-video-camera' />
182
                     </div>
187
                     </div>
183
                     <div className='dashboard__calltoaction__button__text__title'>
188
                     <div className='dashboard__calltoaction__button__text__title'>
184
-                      Débuter une visioconférence
189
+                      {this.props.t('Start a videoconference')}
185
                     </div>
190
                     </div>
186
                   </div>
191
                   </div>
187
                 </div>
192
                 </div>
192
                       <i className='fa fa-calendar' />
197
                       <i className='fa fa-calendar' />
193
                     </div>
198
                     </div>
194
                     <div className='dashboard__calltoaction__button__text__title'>
199
                     <div className='dashboard__calltoaction__button__text__title'>
195
-                      Voir le Calendrier
200
+                      {this.props.t('View the Calendar')}
196
                     </div>
201
                     </div>
197
                   </div>
202
                   </div>
198
                 </div>
203
                 </div>
204
                     <i className='fa fa-folder-open-o' />
209
                     <i className='fa fa-folder-open-o' />
205
                   </div>
210
                   </div>
206
                   <div className='dashboard__calltoaction__button__text__title'>
211
                   <div className='dashboard__calltoaction__button__text__title'>
207
-                    Explorer le Workspace
212
+                    {this.props.t('Explore the workspace')}
208
                   </div>
213
                   </div>
209
                 </div>
214
                 </div>
210
               </div>
215
               </div>
214
               <div className='dashboard__activity'>
219
               <div className='dashboard__activity'>
215
                 <div className='dashboard__activity__header'>
220
                 <div className='dashboard__activity__header'>
216
                   <div className='dashboard__activity__header__title subTitle'>
221
                   <div className='dashboard__activity__header__title subTitle'>
217
-                    Activité récente
222
+                    {this.props.t('Recent activity')}
218
                   </div>
223
                   </div>
219
 
224
 
220
                   <div className='dashboard__activity__header__allread btn btn-outline-primary'>
225
                   <div className='dashboard__activity__header__allread btn btn-outline-primary'>
221
-                    Tout marquer comme lu
226
+                    {this.props.t('Mark everything as read')}
222
                   </div>
227
                   </div>
223
                 </div>
228
                 </div>
224
                 <div className='dashboard__activity__wrapper'>
229
                 <div className='dashboard__activity__wrapper'>
278
 
283
 
279
                   <div className='dashboard__activity__more d-flex flex-row-reverse'>
284
                   <div className='dashboard__activity__more d-flex flex-row-reverse'>
280
                     <div className='dashboard__activity__more__btn btn btn-outline-primary'>
285
                     <div className='dashboard__activity__more__btn btn btn-outline-primary'>
281
-                      Voir plus
286
+                      {this.props.t('See more')}
282
                     </div>
287
                     </div>
283
                   </div>
288
                   </div>
284
                 </div>
289
                 </div>
287
               <div className='dashboard__memberlist'>
292
               <div className='dashboard__memberlist'>
288
 
293
 
289
                 <div className='dashboard__memberlist__title subTitle'>
294
                 <div className='dashboard__memberlist__title subTitle'>
290
-                  Liste des membres
295
+                  {this.props.t('Member List')}
291
                 </div>
296
                 </div>
292
 
297
 
293
                 <div className='dashboard__memberlist__wrapper'>
298
                 <div className='dashboard__memberlist__wrapper'>
426
                           </div>
431
                           </div>
427
                           <div
432
                           <div
428
                             className='dashboard__memberlist__btnadd__button__text'
433
                             className='dashboard__memberlist__btnadd__button__text'
429
-
430
                           >
434
                           >
431
-                             Ajouter un membre
435
+                            {this.props.t('Add a member')}
432
                           </div>
436
                           </div>
433
                         </div>
437
                         </div>
434
                       </div>
438
                       </div>
444
                       </div>
448
                       </div>
445
                       <div className='dashboard__memberlist__form__member'>
449
                       <div className='dashboard__memberlist__form__member'>
446
                         <div className='dashboard__memberlist__form__member__name'>
450
                         <div className='dashboard__memberlist__form__member__name'>
447
-                          <label className='name__label' htmlFor='addmember'>Indiquer le nom ou l'email du membre</label>
451
+                          <label className='name__label' htmlFor='addmember'>
452
+                            {this.props.t('Enter the name or email of the member')}
453
+                          </label>
448
                           <input type='text' id='addmember' className='name__input form-control' placeholder='Nom ou Email' />
454
                           <input type='text' id='addmember' className='name__input form-control' placeholder='Nom ou Email' />
449
                         </div>
455
                         </div>
450
                         <div className='dashboard__memberlist__form__member__create'>
456
                         <div className='dashboard__memberlist__form__member__create'>
452
                             <input type='radio' />
458
                             <input type='radio' />
453
                           </div>
459
                           </div>
454
                           <div className='create__text'>
460
                           <div className='create__text'>
455
-                            Créer un compte
461
+                            {this.props.t('Create an account')}
456
                           </div>
462
                           </div>
457
                         </div>
463
                         </div>
458
                       </div>
464
                       </div>
459
                       <div className='dashboard__memberlist__form__role'>
465
                       <div className='dashboard__memberlist__form__role'>
460
                         <div className='dashboard__memberlist__form__role__text'>
466
                         <div className='dashboard__memberlist__form__role__text'>
461
-                          Choisissez le rôle du membre
467
+                          {this.props.t('Choose the role of the member')}
462
                         </div>
468
                         </div>
463
                         <ul className='dashboard__memberlist__form__role__list'>
469
                         <ul className='dashboard__memberlist__form__role__list'>
464
                           <li className='dashboard__memberlist__form__role__list__item'>
470
                           <li className='dashboard__memberlist__form__role__list__item'>
470
                                 <i className='fa fa-gavel' />
476
                                 <i className='fa fa-gavel' />
471
                               </div>
477
                               </div>
472
                               <div className='item__text__name'>
478
                               <div className='item__text__name'>
473
-                                Responsable
479
+                                {this.props.t('Supervisor')}
474
                               </div>
480
                               </div>
475
                             </div>
481
                             </div>
476
                           </li>
482
                           </li>
483
                                 <i className='fa fa-graduation-cap' />
489
                                 <i className='fa fa-graduation-cap' />
484
                               </div>
490
                               </div>
485
                               <div className='item__text__name'>
491
                               <div className='item__text__name'>
486
-                                Gestionnaire de contenu
492
+                                {this.props.t('Content Manager')}
487
                               </div>
493
                               </div>
488
                             </div>
494
                             </div>
489
                           </li>
495
                           </li>
496
                                 <i className='fa fa-pencil' />
502
                                 <i className='fa fa-pencil' />
497
                               </div>
503
                               </div>
498
                               <div className='item__text__name'>
504
                               <div className='item__text__name'>
499
-                                Contributeur
505
+                                {this.props.t('Contributor')}
500
                               </div>
506
                               </div>
501
                             </div>
507
                             </div>
502
                           </li>
508
                           </li>
509
                                 <i className='fa fa-eye' />
515
                                 <i className='fa fa-eye' />
510
                               </div>
516
                               </div>
511
                               <div className='item__text__name'>
517
                               <div className='item__text__name'>
512
-                                Lecteur
518
+                                {this.props.t('Reader')}
513
                               </div>
519
                               </div>
514
                             </div>
520
                             </div>
515
                           </li>
521
                           </li>
516
                         </ul>
522
                         </ul>
517
                       </div>
523
                       </div>
518
                       <div className='dashboard__memberlist__form__submitbtn'>
524
                       <div className='dashboard__memberlist__form__submitbtn'>
519
-                        <button className='btn btn-outline-primary'>Valider</button>
525
+                        <button className='btn btn-outline-primary'>
526
+                          {this.props.t('Validate')}
527
+                        </button>
520
                       </div>
528
                       </div>
521
                     </form>
529
                     </form>
522
                   }
530
                   }
535
                   </div>
543
                   </div>
536
 
544
 
537
                   <div className='dashboard__moreinfo__webdav__btn__text genericBtnInfoDashboard__btn__text'>
545
                   <div className='dashboard__moreinfo__webdav__btn__text genericBtnInfoDashboard__btn__text'>
538
-                    Implémenter Tracim dans votre explorateur
546
+                    {this.props.t('Implement Tracim in your explorer')}
539
                   </div>
547
                   </div>
540
                 </div>
548
                 </div>
541
                 {this.state.displayWebdavBtn === true &&
549
                 {this.state.displayWebdavBtn === true &&
542
                   <div>
550
                   <div>
543
                     <div className='dashboard__moreinfo__webdav__information genericBtnInfoDashboard__info'>
551
                     <div className='dashboard__moreinfo__webdav__information genericBtnInfoDashboard__info'>
544
                       <div className='dashboard__moreinfo__webdav__information__text genericBtnInfoDashboard__info__text'>
552
                       <div className='dashboard__moreinfo__webdav__information__text genericBtnInfoDashboard__info__text'>
545
-                        Retrouvez tous vos documents déposés en ligne directement sur votre ordinateur via le poste de travail, sans passer par le logiciel.
553
+                        {this.props.t('Find all your documents deposited online directly on your computer via the workstation, without going through the software.')}'
546
                       </div>
554
                       </div>
547
 
555
 
548
                       <div className='dashboard__moreinfo__webdav__information__link genericBtnInfoDashboard__info__link'>
556
                       <div className='dashboard__moreinfo__webdav__information__link genericBtnInfoDashboard__info__link'>
563
                     </div>
571
                     </div>
564
 
572
 
565
                     <div className='dashboard__moreinfo__calendar__btn__text genericBtnInfoDashboard__btn__text'>
573
                     <div className='dashboard__moreinfo__calendar__btn__text genericBtnInfoDashboard__btn__text'>
566
-                      Calendrier de l'espace de travail
574
+                      {this.props.t('Workspace Calendar')}
567
                     </div>
575
                     </div>
568
                   </div>
576
                   </div>
569
                 </div>
577
                 </div>
572
                     <div>
580
                     <div>
573
                       <div className='dashboard__moreinfo__calendar__information genericBtnInfoDashboard__info'>
581
                       <div className='dashboard__moreinfo__calendar__information genericBtnInfoDashboard__info'>
574
                         <div className='dashboard__moreinfo__calendar__information__text genericBtnInfoDashboard__info__text'>
582
                         <div className='dashboard__moreinfo__calendar__information__text genericBtnInfoDashboard__info__text'>
575
-                          Chaque espace de travail possède son propre calendrier.
583
+                          {this.props.t('Each workspace has its own calendar.')}
576
                         </div>
584
                         </div>
577
 
585
 
578
                         <div className='dashboard__moreinfo__calendar__information__link genericBtnInfoDashboard__info__link'>
586
                         <div className='dashboard__moreinfo__calendar__information__link genericBtnInfoDashboard__info__link'>
592
 }
600
 }
593
 
601
 
594
 const mapStateToProps = ({ user, app, contentType, workspaceList }) => ({ user, app, contentType, workspaceList })
602
 const mapStateToProps = ({ user, app, contentType, workspaceList }) => ({ user, app, contentType, workspaceList })
595
-export default connect(mapStateToProps)(Dashboard)
603
+export default translate()(connect(mapStateToProps)(Dashboard))

+ 2 - 2
frontend/src/container/Login.jsx View File

83
                         customClass='mb-3 mt-4'
83
                         customClass='mb-3 mt-4'
84
                         icon='fa-envelope-open-o'
84
                         icon='fa-envelope-open-o'
85
                         type='email'
85
                         type='email'
86
-                        placeHolder='Adresse Email'
86
+                        placeHolder={this.props.t('Email Adress')}
87
                         invalidMsg='Email invalide.'
87
                         invalidMsg='Email invalide.'
88
                         isInvalid={this.state.inputLogin.isInvalid}
88
                         isInvalid={this.state.inputLogin.isInvalid}
89
                         value={this.state.inputLogin.value}
89
                         value={this.state.inputLogin.value}
95
                         customClass=''
95
                         customClass=''
96
                         icon='fa-lock'
96
                         icon='fa-lock'
97
                         type='password'
97
                         type='password'
98
-                        placeHolder='Mot de passe'
98
+                        placeHolder={this.props.t('Password')}
99
                         invalidMsg='Mot de passe invalide.'
99
                         invalidMsg='Mot de passe invalide.'
100
                         isInvalid={this.state.inputPassword.isInvalid}
100
                         isInvalid={this.state.inputPassword.isInvalid}
101
                         value={this.state.inputPassword.value}
101
                         value={this.state.inputPassword.value}