changeset 1402:acb71a982837

client: improve translation process docs * Add comment that vue-gettext and easygettext node packages are needed to run the process. * Update easygettext version to latest.
author Fadi Abbud <fadi.abbud@intevation.de>
date Wed, 28 Nov 2018 16:17:17 +0100
parents 178f5beeab03
children f7139b814a6c
files client/docs/developer.md client/package.json client/src/components/Sidebar.vue client/src/components/admin/Importqueue.vue client/src/components/admin/Logs.vue client/src/components/admin/Systemconfiguration.vue client/src/components/map/Identify.vue client/src/components/map/Pdftool.vue client/src/components/map/contextbox/Bottlenecks.vue client/src/components/map/contextbox/ImportSoundingresults.vue client/src/components/map/contextbox/Staging.vue client/src/components/map/layers/Layers.vue client/src/locale/de_AT/LC_MESSAGES/app.po client/src/locale/en_GB/LC_MESSAGES/app.po client/src/locale/translations.json
diffstat 15 files changed, 588 insertions(+), 102 deletions(-) [+]
line wrap: on
line diff
--- a/client/docs/developer.md	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/docs/developer.md	Wed Nov 28 16:17:17 2018 +0100
@@ -106,6 +106,9 @@
 -
 
 ## Commands
+You need the following applications to run the process:
+ * `gettext` (e.g. from Debian gettext 0.19.8.1-9)
+ * `vue-gettext` and `easygettext` (e.g. via yarn or npm)
 
 In order to extract the messages from the templates call `make makemessages`.
 After that you have the `.po`-file which could be translated.
--- a/client/package.json	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/package.json	Wed Nov 28 16:17:17 2018 +0100
@@ -57,7 +57,7 @@
     "babel-jest": "^23.0.1",
     "concurrently": "^4.0.1",
     "copy-webpack-plugin": "^4.6.0",
-    "easygettext": "^2.4.0",
+    "easygettext": "^2.7.0",
     "node-sass": "^4.10.0",
     "pretty-quick": "^1.6.0",
     "sass-loader": "^7.0.1",
--- a/client/src/components/Sidebar.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/Sidebar.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -9,7 +9,7 @@
     <div class="menu text-nowrap text-left">
       <router-link to="/">
         <font-awesome-icon icon="map-marked-alt" fixed-width></font-awesome-icon>
-        Map
+        <translate> Map </translate>
       </router-link>
       <a
         href="#"
@@ -17,7 +17,7 @@
         :class="['secondary', { active: isActive('bottlenecks') }]"
       >
         <font-awesome-icon icon="ship" fixed-width></font-awesome-icon>
-        Bottlenecks
+        <translate> Bottlenecks </translate>
       </a>
       <div v-if="isWaterwayAdmin">
         <a
@@ -26,7 +26,7 @@
           :class="['secondary', { active: isActive('imports') }]"
         >
           <font-awesome-icon icon="upload" fixed-width></font-awesome-icon>
-          Import soundingresults
+          <translate> Import soundingresults </translate>
         </a>
         <a
           href="#"
@@ -34,33 +34,33 @@
           :class="['secondary', { active: isActive('staging') }]"
         >
           <font-awesome-icon icon="clipboard-check" fixed-width></font-awesome-icon>
-          Staging area
+          <translate> Staging area </translate>
         </a>
-        <small class="text-muted pl-3">Systemadministration</small>
+        <small class="text-muted pl-3"><translate>Systemadministration</translate></small>
         <hr class="m-0">
         <router-link to="usermanagement">
           <font-awesome-icon icon="users-cog" fixed-width></font-awesome-icon>
-          Users
+          <translate> Users </translate>
         </router-link>
       </div>
       <div v-if="isSysAdmin">
         <router-link to="systemconfiguration">
           <font-awesome-icon icon="wrench" fixed-width></font-awesome-icon>
-          Systemconfiguration
+          <translate> Systemconfiguration </translate>
         </router-link>
         <router-link to="logs">
           <font-awesome-icon icon="book" fixed-width></font-awesome-icon>
-          Logs
+          <translate> Logs </translate>
         </router-link>
         <router-link to="importqueue">
           <font-awesome-icon icon="tasks" fixed-width></font-awesome-icon>
-          Importqueue
+          <translate> Importqueue </translate>
         </router-link>
       </div>
       <hr class="m-0">
       <a href="#" @click="logoff">
         <font-awesome-icon icon="power-off" fixed-width></font-awesome-icon>
-        Logout {{ user }}
+        <translate> Logout </translate> {{ user }}
       </a>
     </div>
   </div>
--- a/client/src/components/admin/Importqueue.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/admin/Importqueue.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -3,7 +3,7 @@
     <div :class="spacerStyle"></div>
     <div class="mt-3 mx-auto">
       <div class="card importqueuecard">
-        <div class="card-header shadow-sm text-white bg-info mb-3">Importqueue</div>
+        <div class="card-header shadow-sm text-white bg-info mb-3"><translate>Importqueue</translate></div>
         <div class="card-body importcardbody">
           <div class="card-body importcardbody">
             <div class="searchandfilter d-flex flex-row">
@@ -23,20 +23,20 @@
                 >
               </div>
               <div class="filters">
-                <button @click="setFilter('successful')" :class="successfulStyle">Successful</button>
-                <button @click="setFilter('failed')" :class="failedStyle">Failed</button>
-                <button @click="setFilter('pending')" :class="pendingStyle">Pending</button>
-                <button @click="setFilter('rejected')" :class="rejectedStyle">Rejected</button>
-                <button @click="setFilter('accepted')" :class="acceptedStyle">Accepted</button>
+                <button @click="setFilter('successful')" :class="successfulStyle"><translate>Successful</translate></button>
+                <button @click="setFilter('failed')" :class="failedStyle"><translate>Failed</translate></button>
+                <button @click="setFilter('pending')" :class="pendingStyle"><translate>Pending</translate></button>
+                <button @click="setFilter('rejected')" :class="rejectedStyle"><translate>Rejected</translate></button>
+                <button @click="setFilter('accepted')" :class="acceptedStyle"><translate>Accepted</translate></button>
               </div>
             </div>
             <table class="table">
               <thead>
                 <tr>
-                  <th>Enqueued</th>
-                  <th>Kind</th>
-                  <th>User</th>
-                  <th>State</th>
+                  <th><translate>Enqueued</translate></th>
+                  <th><translate>Kind</translate></th>
+                  <th><translate>User</translate></th>
+                  <th><translate>State</translate></th>
                 </tr>
               </thead>
               <tbody>
@@ -49,7 +49,7 @@
               </tbody>
             </table>
             <div>
-              <button @click="refresh" class="btn btn-info refresh">Refresh</button>
+              <button @click="refresh" class="btn btn-info refresh"><translate>Refresh</translate></button>
             </div>
           </div>
         </div>
--- a/client/src/components/admin/Logs.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/admin/Logs.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -14,23 +14,23 @@
               @click="fetch('system/log/apache2/access.log', 'accesslog')"
               :class="accesslogStyle"
               href="#"
-            >Accesslog</a>
+            ><translate>Accesslog</translate></a>
           </li>
           <li class="nav-item">
             <a
               @click="fetch('system/log/apache2/error.log', 'errorlog')"
               :class="errorlogStyle"
               href="#"
-            >Errorlog</a>
+            ><translate>Errorlog</translate></a>
           </li>
         </ul>
       </div>
       <div class="statuscontainer d-flex flex-row">
         <div class="statusline ml-3 mt-1 align-self-center">
-          <h3>Last refresh: {{refreshed}}</h3>
+          <h3><translate>Last refresh:</translate> {{refreshed}}</h3>
         </div>
         <div class="refresh">
-          <button class="btn btn-dark" @click="fetch(currentFile, currentLog)">Refresh</button>
+          <button class="btn btn-dark" @click="fetch(currentFile, currentLog)"><translate>Refresh</translate></button>
         </div>
       </div>
     </div>
--- a/client/src/components/admin/Systemconfiguration.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/admin/Systemconfiguration.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -1,18 +1,18 @@
 <template>
   <div class="d-flex flex-row">
     <div class="card sysconfig mt-3 mx-auto">
-      <div class="card-header shadow-sm text-white bg-info mb-6">Systemconfiguration</div>
+      <div class="card-header shadow-sm text-white bg-info mb-6"><translate>Systemconfiguration</translate></div>
       <div class="card-body config">
         <section class="configsection">
-          <h4 class="card-title">Bottleneck Areas stroke-color</h4>
+          <h4 class="card-title"><translate>Bottleneck Areas stroke-color</translate></h4>
           <compact-picker v-model="strokeColor"/>
         </section>
         <section>
-          <h4 class="card-title">Bottleneck Areas fill-color</h4>
+          <h4 class="card-title"><translate>Bottleneck Areas fill-color</translate></h4>
           <chrome-picker v-model="fillColor"/>
         </section>
         <div class="sendbutton">
-          <a @click.prevent="submit" class="btn btn-info">Send</a>
+          <a @click.prevent="submit" class="btn btn-info"><translate>Send</translate></a>
         </div>
       </div>
       <!-- card-body -->
--- a/client/src/components/map/Identify.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/Identify.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -3,7 +3,7 @@
         <div style="width: 20rem">
             <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
               <font-awesome-icon icon="info" class="mr-2"></font-awesome-icon>
-              Identified
+              <translate>Identified</translate>
               <font-awesome-icon
                   icon="times"
                   class="ml-auto text-muted"
@@ -30,22 +30,22 @@
                     </div>
                 </div>
                 <div v-if="!currentMeasurement && !identifiedFeatures.length" class="text-muted small text-center my-auto">
-                    No features identified.
+                    <translate>No features identified.</translate>
                 </div>
             </div>
             <div class="versioninfo border-top p-3 text-left">
-              This app uses <i>gemma</i>, which is Free Software under
+              <translate>This app uses </translate> <i>gemma</i>, <translate>which is Free Software under</translate>
               <br>
-              AGPL-3.0-or-later
-              without warranty, see docs for details.<br>
+              <translate>AGPL-3.0-or-later</translate>
+              <translate> without warranty, see docs for details.</translate><br>
 
-              <a href="https://hg.intevation.de/gemma/file/tip">source-code</a>
-              {{ versionStr }}
+              <a href="https://hg.intevation.de/gemma/file/tip"><translate>source-code</translate></a>
+              {{ versionStr }} Fadi's version
               <br>
               © via donau. &#x24D4; Intevation.
-              <br>Some data ©
+              <br><translate>Some data ©</translate>
               <a href="https://www.openstreetmap.org/copyright">OpenSteetMap</a>
-              contributors.
+              <translate> contributors.</translate>
             </div>
         </div>
     </div>
--- a/client/src/components/map/Pdftool.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/Pdftool.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -2,7 +2,7 @@
   <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showPdfTool }]">
     <div style="width: 20rem">
       <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-        <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon>Generate PDF
+        <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon><translate>Generate PDF</translate>
         <font-awesome-icon
           icon="times"
           class="ml-auto text-muted"
@@ -10,10 +10,10 @@
         ></font-awesome-icon>
       </h6>
       <div class="p-3">
-        <b>Chose format:</b>
+        <b><translate>Chose format:</translate></b>
         <select v-model="form.format" class="form-control d-block w-100">
-          <option>landscape</option>
-          <option>portrait</option>
+          <option><translate>landscape</translate></option>
+          <option><translate>portrait</translate></option>
         </select>
         <small class="d-block my-2">
           <input
@@ -23,20 +23,20 @@
             v-model="form.downloadType"
             selected
           >
-          <label for="pdfexport-downloadtype-download" class="ml-1 mr-2">Download</label>
+          <label for="pdfexport-downloadtype-download" class="ml-1 mr-2"><translate>Dvownload</translate></label>
           <input
             type="radio"
             id="pdfexport-downloadtype-open"
             value="open"
             v-model="form.downloadType"
           >
-          <label for="pdfexport-downloadtype-open" class="ml-1">Open in new window</label>
+          <label for="pdfexport-downloadtype-open" class="ml-1"><translate>Open in new window</translate></label>
         </small>
         <button
           @click="download"
           type="button"
           class="btn btn-sm btn-info d-block w-100"
-        >Generate PDF</button>
+        ><translate>Generate PDF</translate></button>
       </div>
     </div>
   </div>
--- a/client/src/components/map/contextbox/Bottlenecks.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/contextbox/Bottlenecks.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -1,21 +1,21 @@
 <template>
   <div>
     <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-      <font-awesome-icon icon="ship" class="mr-2"></font-awesome-icon>Bottlenecks
+      <font-awesome-icon icon="ship" class="mr-2"></font-awesome-icon><translate>Bottlenecks</translate>
     </h6>
     <div class="row p-2 text-left small">
       <div class="col-5">
-        <a href="#" @click="sortBy('name')" class="sort-link">Name</a>
+        <a href="#" @click="sortBy('name')" class="sort-link"><translate>Name</translate></a>
         <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'name'"></font-awesome-icon>
       </div>
       <div class="col-2">
-        <a href="#" @click="sortBy('latestMeasurement')" class="sort-link">Latest
-          <br>Measurement
+        <a href="#" @click="sortBy('latestMeasurement')" class="sort-link"><translate>Latest</translate>
+          <br><translate>Measurement</translate>
         </a>
         <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'latestMeasurement'"></font-awesome-icon>
       </div>
       <div class="col-3">
-        <a href="#" @click="sortBy('chainage')" class="sort-link">Chainage</a>
+        <a href="#" @click="sortBy('chainage')" class="sort-link"><translate>Chainage</translate></a>
         <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'chainage'"></font-awesome-icon>
       </div>
       <div class="col-2"></div>
@@ -57,7 +57,7 @@
         </div>
       </div>
     </div>
-    <div v-else class="small text-center py-3 border-top">No results.</div>
+    <div v-else class="small text-center py-3 border-top"><translate>No results.</translate></div>
   </div>
 </template>
 
--- a/client/src/components/map/contextbox/ImportSoundingresults.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/contextbox/ImportSoundingresults.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -1,26 +1,26 @@
 <template>
   <div>
     <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-      <font-awesome-icon icon="upload" class="mr-2"></font-awesome-icon>Import
-      Soundingresults
+      <font-awesome-icon icon="upload" class="mr-2"></font-awesome-icon><translate>Import
+      Soundingresults</translate>
     </h6>
     <div v-if="editState" class="ml-auto mr-auto mt-4 w-95">
       <div class="d-flex flex-row input-group mb-4">
         <div class="offset-r">
-          <label for="bottleneck" class="label-text" id="bottlenecklabel">Bottleneck</label>
+          <label for="bottleneck" class="label-text" id="bottlenecklabel"><translate>Bottleneck</translate></label>
         </div>
         <div class="d-flex flex-column">
           <select v-model="bottleneck" class="custom-select">
             <option v-for="bottleneck in availableBottlenecks" :key="bottleneck">{{bottleneck}}</option>
           </select>
           <span class="text-left text-danger">
-            <small v-if="!bottleneck">Please select a bottleneck</small>
+            <small v-if="!bottleneck"><translate>Please select a bottleneck</translate></small>
           </span>
         </div>
       </div>
       <div class="d-flex flex-row input-group mb-4">
         <div class="offset-r">
-          <label class="label-text" for="importdate" id="importdatelabel">Date</label>
+          <label class="label-text" for="importdate" id="importdatelabel"><translate>Date</translate></label>
         </div>
         <div class="d-flex flex-column">
           <input
@@ -33,18 +33,18 @@
             v-model="importDate"
           >
           <span class="text-left text-danger">
-            <small v-if="!importDate">Please enter a date</small>
+            <small v-if="!importDate"><translate> Please enter a date</translate></small>
           </span>
         </div>
         <div class="offset-r">
-          <label class="label-text w-100 depthreferencelabel" for="depthreference">Depthreference</label>
+          <label class="label-text w-100 depthreferencelabel" for="depthreference"><translate>Depthreference</translate></label>
         </div>
         <div class="d-flex flex-column">
           <select v-model="depthReference" class="custom-select" id="depthreference">
             <option v-for="option in this.$options.depthReferenceOptions" :key="option">{{ option }}</option>
           </select>
           <span class="text-left text-danger">
-            <small v-if="!depthReference">Please enter a reference</small>
+            <small v-if="!depthReference"><translate>Please enter a reference</translate></small>
           </span>
         </div>
       </div>
@@ -79,13 +79,13 @@
           download="meta.json"
           :href="dataLink"
           class="btn btn-outline-info pull-left"
-        >Download Meta.json</a>
+        ><translate>Download</translate> Meta.json</a>
         <button
           v-if="editState"
           @click="deleteTempData"
           class="btn btn-danger"
           type="button"
-        >Cancel Upload</button>
+        ><translate>Cancel Upload</translate></button>
         <button
           :disabled="disableUploadButton"
           @click="submit"
--- a/client/src/components/map/contextbox/Staging.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/contextbox/Staging.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -1,7 +1,7 @@
 <template>
   <div class="w-90">
     <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-      <font-awesome-icon icon="clipboard-check" class="mr-2"></font-awesome-icon>Staging Area
+      <font-awesome-icon icon="clipboard-check" class="mr-2"></font-awesome-icon><translate>Staging Area</translate>
     </h6>
     <table class="table mb-0">
       <thead>
@@ -47,12 +47,12 @@
       </tbody>
       <tbody v-else>
         <tr>
-          <td class="text-center" colspan="6">No results.</td>
+          <td class="text-center" colspan="6"><translate>No results.</translate></td>
         </tr>
       </tbody>
     </table>
     <div class="p-3" v-if="filteredData.length">
-      <button @click="confirmReview" class="btn btn-info">Confirm</button>
+      <button @click="confirmReview" class="btn btn-info"><translate>Confirm</translate></button>
     </div>
   </div>
 </template>
--- a/client/src/components/map/layers/Layers.vue	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/components/map/layers/Layers.vue	Wed Nov 28 16:17:17 2018 +0100
@@ -2,7 +2,7 @@
   <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showLayers }]">
     <div style="width: 20rem">
       <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-        <font-awesome-icon icon="layer-group" class="mr-2"></font-awesome-icon>Layers
+        <font-awesome-icon icon="layer-group" class="mr-2"></font-awesome-icon><translate>Layers</translate>
         <font-awesome-icon
           icon="times"
           class="ml-auto text-muted"
--- a/client/src/locale/de_AT/LC_MESSAGES/app.po	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/locale/de_AT/LC_MESSAGES/app.po	Wed Nov 28 16:17:17 2018 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: wamosjs 0.1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-07-03 17:00+0200\n"
+"POT-Creation-Date: 2018-11-28 15:28+0100\n"
 "PO-Revision-Date: 2018-07-03 17:00+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -18,22 +18,271 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/views/Login.vue:23
+#: src/components/admin/Importqueue.vue:29
+msgid "Accepted"
+msgstr ""
+
+#: src/components/admin/Logs.vue:16
+msgid "Accesslog"
+msgstr ""
+
+#: src/components/map/Identify.vue:38
+msgid "AGPL-3.0-or-later"
+msgstr ""
+
+#: src/components/Login.vue:59
+msgid "back to login"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:9
+msgid "Bottleneck"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:10
+msgid "Bottleneck Areas fill-color"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:6
+msgid "Bottleneck Areas stroke-color"
+msgstr ""
+
+#: src/components/Sidebar.vue:19
+#: src/components/map/contextbox/Bottlenecks.vue:3
+msgid "Bottlenecks"
+msgstr "Engstellen"
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:87
+msgid "Cancel Upload"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:17
+msgid "Chainage"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:12
+msgid "Chose format:"
+msgstr ""
+
+#: src/components/map/contextbox/Staging.vue:54
+msgid "Confirm"
+msgstr ""
+
+#: src/components/map/Identify.vue:47
+msgid "contributors."
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:22
+msgid "Date"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:39
+msgid "Depthreference"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:81
+msgid "Download"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:25
+msgid "Dvownload"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:35
+msgid "Enqueued"
+msgstr ""
+
+#: src/components/Login.vue:141
+msgid "Enter passphrase"
+msgstr "Passphrase"
+
+#: src/components/Login.vue:144
+#, fuzzy
+msgid "Enter username"
+msgstr "Passphrase"
+
+#: src/components/admin/Logs.vue:23
+msgid "Errorlog"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:26
+msgid "Failed"
+msgstr ""
+
+#: src/components/Login.vue:65
 msgid "Forgot password"
 msgstr "Passwort vergessen"
 
-#: src/views/Login.vue:22
+#: src/components/map/Pdftool.vue:4 src/components/map/Pdftool.vue:38
+msgid "Generate PDF"
+msgstr ""
+
+#: src/components/map/Identify.vue:5
+msgid "Identified"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:3
+msgid ""
+"Import\n"
+"    Soundingresults"
+msgstr ""
+
+#: src/components/Sidebar.vue:28
+msgid "Import soundingresults"
+msgstr ""
+
+#: src/components/Sidebar.vue:56 src/components/admin/Importqueue.vue:5
+msgid "Importqueue"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:36
+msgid "Kind"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:14
+msgid "landscape"
+msgstr ""
+
+#: src/components/admin/Logs.vue:29
+msgid "Last refresh:"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:11
+msgid "Latest"
+msgstr ""
+
+#: src/components/map/layers/Layers.vue:4
+msgid "Layers"
+msgstr ""
+
+#: src/components/Login.vue:51
 msgid "Login"
 msgstr "Login"
 
-#: src/views/Login.vue:11
+#: src/components/Login.vue:135
 msgid "Login failed"
 msgstr "Login fehlgeschlagen"
 
-#: src/views/Login.vue:115
-msgid "Enter passphrase"
-msgstr "Passphrase"
+#: src/components/Sidebar.vue:62
+msgid "Logout"
+msgstr ""
+
+#: src/components/Sidebar.vue:52
+msgid "Logs"
+msgstr ""
+
+#: src/components/Sidebar.vue:11
+msgid "Map"
+msgstr "Karte"
+
+#: src/components/map/contextbox/Bottlenecks.vue:12
+msgid "Measurement"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:7
+msgid "Name"
+msgstr ""
+
+#: src/components/map/Identify.vue:32
+msgid "No features identified."
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:59
+#: src/components/map/contextbox/Staging.vue:49
+msgid "No results."
+msgstr ""
+
+#: src/components/map/Pdftool.vue:32
+msgid "Open in new window"
+msgstr ""
+
+#: src/components/Login.vue:137
+msgid "Password reset requested!"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:27
+msgid "Pending"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:35
+msgid "Please enter a date"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:46
+msgid "Please enter a reference"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:16
+msgid "Please select a bottleneck"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:15
+msgid "portrait"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:51 src/components/admin/Logs.vue:32
+msgid "Refresh"
+msgstr ""
 
-#: src/views/Login.vue:118
-msgid "Enter email"
-msgstr "Email"
+#: src/components/admin/Importqueue.vue:28
+msgid "Rejected"
+msgstr ""
+
+#: src/components/Login.vue:55
+msgid "Request password reset!"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:14
+msgid "Send"
+msgstr ""
+
+#: src/components/map/Identify.vue:45
+msgid "Some data ©"
+msgstr ""
+
+#: src/components/map/Identify.vue:41
+msgid "source-code"
+msgstr ""
+
+#: src/components/Sidebar.vue:36
+msgid "Staging area"
+msgstr ""
+
+#: src/components/map/contextbox/Staging.vue:3
+msgid "Staging Area"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:38
+msgid "State"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:25
+msgid "Successful"
+msgstr ""
+
+#: src/components/Sidebar.vue:38
+msgid "Systemadministration"
+msgstr ""
+
+#: src/components/Sidebar.vue:48 src/components/admin/Systemconfiguration.vue:3
+msgid "Systemconfiguration"
+msgstr ""
+
+#: src/components/map/Identify.vue:36
+msgid "This app uses"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:37
+msgid "User"
+msgstr ""
+
+#: src/components/Sidebar.vue:42
+msgid "Users"
+msgstr ""
+
+#: src/components/map/Identify.vue:36
+msgid "which is Free Software under"
+msgstr ""
+
+#: src/components/map/Identify.vue:39
+msgid "without warranty, see docs for details."
+msgstr ""
--- a/client/src/locale/en_GB/LC_MESSAGES/app.po	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/locale/en_GB/LC_MESSAGES/app.po	Wed Nov 28 16:17:17 2018 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: wamosjs 0.1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-07-03 17:18+0200\n"
+"POT-Creation-Date: 2018-11-28 16:10+0100\n"
 "PO-Revision-Date: 2018-07-03 17:18+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -17,22 +17,271 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/views/Login.vue:23
+#: src/components/admin/Importqueue.vue:29
+msgid "Accepted"
+msgstr ""
+
+#: src/components/admin/Logs.vue:16
+msgid "Accesslog"
+msgstr ""
+
+#: src/components/map/Identify.vue:38
+msgid "AGPL-3.0-or-later"
+msgstr ""
+
+#: src/components/Login.vue:59
+msgid "back to login"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:9
+msgid "Bottleneck"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:10
+msgid "Bottleneck Areas fill-color"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:6
+msgid "Bottleneck Areas stroke-color"
+msgstr ""
+
+#: src/components/Sidebar.vue:19
+#: src/components/map/contextbox/Bottlenecks.vue:3
+msgid "Bottlenecks"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:87
+msgid "Cancel Upload"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:17
+msgid "Chainage"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:12
+msgid "Chose format:"
+msgstr ""
+
+#: src/components/map/contextbox/Staging.vue:54
+msgid "Confirm"
+msgstr ""
+
+#: src/components/map/Identify.vue:47
+msgid "contributors."
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:22
+msgid "Date"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:39
+msgid "Depthreference"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:81
+msgid "Download"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:25
+msgid "Dvownload"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:35
+msgid "Enqueued"
+msgstr ""
+
+#: src/components/Login.vue:141
+msgid "Enter passphrase"
+msgstr "Enter passphrase"
+
+#: src/components/Login.vue:144
+#, fuzzy
+msgid "Enter username"
+msgstr "Enter passphrase"
+
+#: src/components/admin/Logs.vue:23
+msgid "Errorlog"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:26
+msgid "Failed"
+msgstr ""
+
+#: src/components/Login.vue:65
 msgid "Forgot password"
 msgstr "Forgot password"
 
-#: src/views/Login.vue:22
+#: src/components/map/Pdftool.vue:4 src/components/map/Pdftool.vue:38
+msgid "Generate PDF"
+msgstr ""
+
+#: src/components/map/Identify.vue:5
+msgid "Identified"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:3
+msgid ""
+"Import\n"
+"    Soundingresults"
+msgstr ""
+
+#: src/components/Sidebar.vue:28
+msgid "Import soundingresults"
+msgstr ""
+
+#: src/components/Sidebar.vue:56 src/components/admin/Importqueue.vue:5
+msgid "Importqueue"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:36
+msgid "Kind"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:14
+msgid "landscape"
+msgstr ""
+
+#: src/components/admin/Logs.vue:29
+msgid "Last refresh:"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:11
+msgid "Latest"
+msgstr ""
+
+#: src/components/map/layers/Layers.vue:4
+msgid "Layers"
+msgstr ""
+
+#: src/components/Login.vue:51
 msgid "Login"
 msgstr "Login"
 
-#: src/views/Login.vue:11
+#: src/components/Login.vue:135
 msgid "Login failed"
 msgstr "Login failed"
 
-#: src/views/Login.vue:115
-msgid "Enter passphrase"
-msgstr "Enter passphrase"
+#: src/components/Sidebar.vue:62
+msgid "Logout"
+msgstr ""
+
+#: src/components/Sidebar.vue:52
+msgid "Logs"
+msgstr ""
+
+#: src/components/Sidebar.vue:11
+msgid "Map"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:12
+msgid "Measurement"
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:7
+msgid "Name"
+msgstr ""
+
+#: src/components/map/Identify.vue:32
+msgid "No features identified."
+msgstr ""
+
+#: src/components/map/contextbox/Bottlenecks.vue:59
+#: src/components/map/contextbox/Staging.vue:49
+msgid "No results."
+msgstr ""
+
+#: src/components/map/Pdftool.vue:32
+msgid "Open in new window"
+msgstr ""
+
+#: src/components/Login.vue:137
+msgid "Password reset requested!"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:27
+msgid "Pending"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:35
+msgid "Please enter a date"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:46
+msgid "Please enter a reference"
+msgstr ""
+
+#: src/components/map/contextbox/ImportSoundingresults.vue:16
+msgid "Please select a bottleneck"
+msgstr ""
+
+#: src/components/map/Pdftool.vue:15
+msgid "portrait"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:51 src/components/admin/Logs.vue:32
+msgid "Refresh"
+msgstr ""
 
-#: src/views/Login.vue:118
-msgid "Enter email"
-msgstr "Enter email"
+#: src/components/admin/Importqueue.vue:28
+msgid "Rejected"
+msgstr ""
+
+#: src/components/Login.vue:55
+msgid "Request password reset!"
+msgstr ""
+
+#: src/components/admin/Systemconfiguration.vue:14
+msgid "Send"
+msgstr ""
+
+#: src/components/map/Identify.vue:45
+msgid "Some data ©"
+msgstr ""
+
+#: src/components/map/Identify.vue:41
+msgid "source-code"
+msgstr ""
+
+#: src/components/Sidebar.vue:36
+msgid "Staging area"
+msgstr ""
+
+#: src/components/map/contextbox/Staging.vue:3
+msgid "Staging Area"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:38
+msgid "State"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:25
+msgid "Successful"
+msgstr ""
+
+#: src/components/Sidebar.vue:38
+msgid "Systemadministration"
+msgstr ""
+
+#: src/components/Sidebar.vue:48 src/components/admin/Systemconfiguration.vue:3
+msgid "Systemconfiguration"
+msgstr ""
+
+#: src/components/map/Identify.vue:36
+msgid "This app uses"
+msgstr ""
+
+#: src/components/admin/Importqueue.vue:37
+msgid "User"
+msgstr ""
+
+#: src/components/Sidebar.vue:42
+msgid "Users"
+msgstr ""
+
+#: src/components/map/Identify.vue:36
+msgid "which is Free Software under"
+msgstr ""
+
+#: src/components/map/Identify.vue:39
+msgid "without warranty, see docs for details."
+msgstr ""
--- a/client/src/locale/translations.json	Wed Nov 28 16:15:14 2018 +0100
+++ b/client/src/locale/translations.json	Wed Nov 28 16:17:17 2018 +0100
@@ -1,16 +1,1 @@
-{
-  "en_GB": {
-    "Enter username": "Enter username",
-    "Enter passphrase": "Enter passphrase",
-    "Login failed": "Login failed",
-    "Login": "Login",
-    "Forgot password": "Forgot password"
-  },
-  "de_AT": {
-    "Enter username": "Benutzername",
-    "Enter passphrase": "Passphrase",
-    "Login failed": "Login fehlgeschlagen",
-    "Login": "Login",
-    "Forgot password": "Passwort vergessen"
-  }
-}
+{"de_AT":{"Bottlenecks":"Engstellen","Enter passphrase":"Passphrase","Forgot password":"Passwort vergessen","Login":"Login","Login failed":"Login fehlgeschlagen","Map":"Karte"},"en_GB":{"Enter passphrase":"Enter passphrase","Forgot password":"Forgot password","Login":"Login","Login failed":"Login failed"}}
\ No newline at end of file