aboutsummaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rw-r--r--web/.jscsrc3
-rw-r--r--web/.jshintignore1
-rw-r--r--web/app/Application.js8
-rw-r--r--web/app/AttributeFormatter.js2
-rw-r--r--web/app/Style.js30
-rw-r--r--web/app/controller/Root.js28
-rw-r--r--web/app/store/DistanceUnits.js2
-rw-r--r--web/app/store/SpeedUnits.js2
-rw-r--r--web/app/view/DevicesController.js7
-rw-r--r--web/app/view/Login.js5
-rw-r--r--web/app/view/LoginController.js12
-rw-r--r--web/app/view/Map.js23
-rw-r--r--web/app/view/MapController.js290
-rw-r--r--web/app/view/Report.js4
-rw-r--r--web/app/view/ReportController.js16
-rw-r--r--web/app/view/StateController.js98
-rw-r--r--web/app/view/UserDevicesController.js12
-rw-r--r--web/app/view/UsersController.js2
-rw-r--r--web/arrowstyle.js541
-rw-r--r--web/debug.html1
-rw-r--r--web/l10n/ar.json79
-rw-r--r--web/l10n/bg.js88
-rw-r--r--web/l10n/bg.json79
-rwxr-xr-xweb/l10n/cs.js89
-rw-r--r--web/l10n/cs.json79
-rw-r--r--web/l10n/da.json79
-rw-r--r--web/l10n/de.js86
-rw-r--r--web/l10n/de.json79
-rw-r--r--web/l10n/dk.js86
-rwxr-xr-xweb/l10n/el.js86
-rw-r--r--web/l10n/el.json79
-rw-r--r--web/l10n/en.js89
-rw-r--r--web/l10n/en.json79
-rw-r--r--web/l10n/es.js86
-rw-r--r--web/l10n/es.json79
-rw-r--r--web/l10n/fr.js86
-rw-r--r--web/l10n/fr.json79
-rwxr-xr-xweb/l10n/hu.js87
-rw-r--r--web/l10n/hu.json79
-rw-r--r--web/l10n/lt.js86
-rw-r--r--web/l10n/lt.json79
-rw-r--r--web/l10n/nl.js86
-rw-r--r--web/l10n/nl.json79
-rw-r--r--web/l10n/pl.js86
-rw-r--r--web/l10n/pl.json79
-rw-r--r--web/l10n/pt.js86
-rw-r--r--web/l10n/pt.json79
-rw-r--r--web/l10n/pt_BR.json79
-rw-r--r--web/l10n/ru.js86
-rw-r--r--web/l10n/ru.json79
-rwxr-xr-xweb/l10n/si.js88
-rw-r--r--web/l10n/si.json79
-rw-r--r--web/l10n/sk.js86
-rw-r--r--web/l10n/sk.json79
-rw-r--r--web/l10n/sl.js86
-rw-r--r--web/l10n/sl.json79
-rw-r--r--web/l10n/sr.js86
-rw-r--r--web/l10n/sr.json79
-rw-r--r--web/l10n/th.js86
-rw-r--r--web/l10n/th.json79
-rw-r--r--web/l10n/zh.js86
-rw-r--r--web/l10n/zh.json79
-rw-r--r--web/locale.js12
-rw-r--r--web/release.html3
64 files changed, 2597 insertions, 1974 deletions
diff --git a/web/.jscsrc b/web/.jscsrc
index 7d924ab96..dda6932e1 100644
--- a/web/.jscsrc
+++ b/web/.jscsrc
@@ -1,4 +1,5 @@
{
"preset": "crockford",
- "maxErrors": 100
+ "maxErrors": 100,
+ "excludeFiles": ["arrowstyle.js"]
}
diff --git a/web/.jshintignore b/web/.jshintignore
index d057f1b54..1c48d68e2 100644
--- a/web/.jshintignore
+++ b/web/.jshintignore
@@ -1,3 +1,4 @@
l10n/**
tests/**
locale.js
+arrowstyle.js
diff --git a/web/app/Application.js b/web/app/Application.js
index 83ca9e860..ebf685dbc 100644
--- a/web/app/Application.js
+++ b/web/app/Application.js
@@ -86,14 +86,16 @@ Ext.define('Traccar.Application', {
if (!result.success) {
Ext.Msg.alert(Strings.errorTitle, result.error);
}
- handler.call(scope, options, success, response);
+ if (handler) {
+ handler.call(scope, options, success, response);
+ }
} else {
if (response.statusText) {
Ext.Msg.alert(Strings.errorTitle, response.statusText);
} else {
- Ext.Msg.alert(Strings.errorTitle, response.status.toString()); // TODO: text message
+ Ext.Msg.alert(Strings.errorTitle, Strings.errorConnection);
}
}
- }
+ };
}
});
diff --git a/web/app/AttributeFormatter.js b/web/app/AttributeFormatter.js
index b7b2d01a6..44cc7d5a8 100644
--- a/web/app/AttributeFormatter.js
+++ b/web/app/AttributeFormatter.js
@@ -36,7 +36,7 @@ Ext.define('Traccar.AttributeFormatter', {
defaultFormatter: function (value) {
if (typeof value === 'number') {
- return value.toFixed(2);
+ return Number(value.toFixed(2));
} else if (typeof value === 'boolean') {
return value ? Ext.Msg.buttonText.yes : Ext.Msg.buttonText.no;
} else if (value instanceof Date) {
diff --git a/web/app/Style.js b/web/app/Style.js
index 4c7028658..58ab059ad 100644
--- a/web/app/Style.js
+++ b/web/app/Style.js
@@ -24,6 +24,7 @@ Ext.define('Traccar.Style', {
dateTimeFormat: 'Y-m-d H:i:s',
timeFormat: 'H:i',
+ dateFormat: 'Y-m-d',
weekStartDay: 1,
deviceWidth: 350,
@@ -35,15 +36,26 @@ Ext.define('Traccar.Style', {
mapDefaultLon: -0.1275,
mapDefaultZoom: 6,
- mapMaxZoom: 19,
- mapSelectColor: 'rgba(0, 255, 0, 1.0)',
- mapSelectRadius: 10,
- mapReportColor: 'rgba(0, 0, 255, 1.0)',
- mapReportRadius: 5,
- mapLiveColor: 'rgba(255, 0, 0, 1.0)',
- mapLiveRadius: 7,
- mapStrokeColor: 'rgba(50, 50, 50, 1.0)',
+ mapRouteColor: 'rgba(21, 127, 204, 1.0)',
mapRouteWidth: 5,
- mapMarkerStroke: 2,
+
+ mapArrowStrokeColor: 'rgba(50, 50, 50, 1.0)',
+ mapArrowStrokeWidth: 2,
+
+ mapTextColor: 'rgba(50, 50, 50, 1.0)',
+ mapTextStrokeColor: 'rgba(255, 255, 255, 1.0)',
+ mapTextStrokeWidth: 2,
+ mapTextOffset: 10,
+ mapTextFont: 'bold 12px sans-serif',
+
+ mapColorOnline: '#4DFA90',
+ mapColorUnknown: '#FABE4D',
+ mapColorOffline: '#FF5468',
+ mapColorReport: 'rgba(21, 127, 204, 1.0)',
+
+ mapRadiusNormal: 10,
+ mapRadiusSelected: 15,
+
+ mapMaxZoom: 19,
mapDelay: 500
});
diff --git a/web/app/controller/Root.js b/web/app/controller/Root.js
index b4ab06b82..79827b8a6 100644
--- a/web/app/controller/Root.js
+++ b/web/app/controller/Root.js
@@ -85,5 +85,33 @@ Ext.define('Traccar.controller.Root', {
} else {
Ext.create('widget.main');
}
+ this.asyncUpdate(true);
+ },
+
+ asyncUpdate: function (first) {
+ Ext.Ajax.request({
+ scope: this,
+ url: '/api/async',
+ params: {
+ first: first
+ },
+ callback: Traccar.app.getErrorHandler(this, function (options, success, response) {
+ var i, store, data, position;
+ if (success) {
+ store = Ext.getStore('LatestPositions');
+ data = Ext.decode(response.responseText).data;
+
+ for (i = 0; i < data.length; i++) {
+ position = store.findRecord('deviceId', data[i].deviceId, 0, false, false, true);
+ if (position) {
+ position.set(data[i]);
+ } else {
+ store.add(Ext.create('Traccar.model.Position', data[i]));
+ }
+ }
+ this.asyncUpdate(false);
+ }
+ })
+ });
}
});
diff --git a/web/app/store/DistanceUnits.js b/web/app/store/DistanceUnits.js
index 20d057c1f..7f808c684 100644
--- a/web/app/store/DistanceUnits.js
+++ b/web/app/store/DistanceUnits.js
@@ -32,7 +32,7 @@ Ext.define('Traccar.store.DistanceUnits', {
var model;
if (unit) {
model = this.findRecord('key', unit);
- return (value * model.get('factor')).toFixed(2) + ' ' + model.get('name');
+ return (value * Number(model.get('factor')).toFixed(2)) + ' ' + model.get('name');
} else {
return value;
}
diff --git a/web/app/store/SpeedUnits.js b/web/app/store/SpeedUnits.js
index d02892a01..cbcf94e3b 100644
--- a/web/app/store/SpeedUnits.js
+++ b/web/app/store/SpeedUnits.js
@@ -32,7 +32,7 @@ Ext.define('Traccar.store.SpeedUnits', {
var model;
if (unit) {
model = this.findRecord('key', unit);
- return (value * model.get('factor')).toFixed(1) + ' ' + model.get('name');
+ return (value * Number(model.get('factor')).toFixed(1)) + ' ' + model.get('name');
} else {
return value;
}
diff --git a/web/app/view/DevicesController.js b/web/app/view/DevicesController.js
index dd3ca5a05..c29854d12 100644
--- a/web/app/view/DevicesController.js
+++ b/web/app/view/DevicesController.js
@@ -27,6 +27,7 @@ Ext.define('Traccar.view.DevicesController', {
listen: {
controller: {
'*': {
+ selectDevice: 'selectDevice',
selectReport: 'selectReport'
}
}
@@ -87,10 +88,14 @@ Ext.define('Traccar.view.DevicesController', {
this.lookupReference('toolbarRemoveButton').setDisabled(empty);
this.lookupReference('deviceCommandButton').setDisabled(empty);
if (!empty) {
- this.fireEvent('selectDevice', selected.getLastSelected());
+ this.fireEvent('selectDevice', selected.getLastSelected(), true);
}
},
+ selectDevice: function (device, center) {
+ this.getView().getSelectionModel().select([device], false, true);
+ },
+
selectReport: function (position) {
if (position !== undefined) {
this.getView().getSelectionModel().deselectAll();
diff --git a/web/app/view/Login.js b/web/app/view/Login.js
index a4a68843d..14a3fa41f 100644
--- a/web/app/view/Login.js
+++ b/web/app/view/Login.js
@@ -24,6 +24,7 @@ Ext.define('Traccar.view.Login', {
controller: 'login',
+ title: Strings.loginTitle,
closable: false,
modal: false,
@@ -33,8 +34,8 @@ Ext.define('Traccar.view.Login', {
autoEl: {
tag: 'form',
- method: 'POST',
- action: 'blank',
+ method: 'GET',
+ action: 'favicon.ico',
target: 'submitTarget'
},
diff --git a/web/app/view/LoginController.js b/web/app/view/LoginController.js
index e0dbcce88..0b2090ffb 100644
--- a/web/app/view/LoginController.js
+++ b/web/app/view/LoginController.js
@@ -48,7 +48,6 @@ Ext.define('Traccar.view.LoginController', {
Traccar.ErrorManager.error(Strings.loginFailed);
}
}
-
}
});
}
@@ -65,12 +64,13 @@ Ext.define('Traccar.view.LoginController', {
},
onSelectLanguage: function (selected) {
- var paramName = 'locale';
- var paramValue = selected.getValue();
- var url = window.location.href;
+ var paramName, paramValue, url, prefix, suffix;
+ paramName = 'locale';
+ paramValue = selected.getValue();
+ url = window.location.href;
if (url.indexOf(paramName + '=') >= 0) {
- var prefix = url.substring(0, url.indexOf(paramName));
- var suffix = url.substring(url.indexOf(paramName));
+ prefix = url.substring(0, url.indexOf(paramName));
+ suffix = url.substring(url.indexOf(paramName));
suffix = suffix.substring(suffix.indexOf('=') + 1);
suffix = (suffix.indexOf('&') >= 0) ? suffix.substring(suffix.indexOf('&')) : '';
url = prefix + paramName + '=' + paramValue + suffix;
diff --git a/web/app/view/Map.js b/web/app/view/Map.js
index 9a032e79f..849f678a7 100644
--- a/web/app/view/Map.js
+++ b/web/app/view/Map.js
@@ -27,6 +27,18 @@ Ext.define('Traccar.view.Map', {
title: Strings.mapTitle,
layout: 'fit',
+ getMap: function () {
+ return this.map;
+ },
+
+ getMapView: function () {
+ return this.mapView;
+ },
+
+ getVectorSource: function () {
+ return this.vectorSource;
+ },
+
listeners: {
afterrender: function () {
var user, server, layer, type, bingKey, vectorLayer, lat, lon, zoom;
@@ -40,7 +52,10 @@ Ext.define('Traccar.view.Map', {
if (type === 'custom') {
layer = new ol.layer.Tile({
source: new ol.source.XYZ({
- url: server.get('mapUrl')
+ url: server.get('mapUrl'),
+ attributions: [new ol.Attribution({
+ html: ''
+ })]
})
});
} else if (type === 'bingRoad') {
@@ -83,6 +98,12 @@ Ext.define('Traccar.view.Map', {
layers: [layer, vectorLayer],
view: this.mapView
});
+
+ this.map.on('click', function (e) {
+ this.map.forEachFeatureAtPixel(e.pixel, function (feature, layer) {
+ this.fireEvent('selectFeature', feature);
+ }, this);
+ }, this);
},
resize: function () {
diff --git a/web/app/view/MapController.js b/web/app/view/MapController.js
index b53e46671..bc8ca843c 100644
--- a/web/app/view/MapController.js
+++ b/web/app/view/MapController.js
@@ -22,197 +22,213 @@ Ext.define('Traccar.view.MapController', {
listen: {
controller: {
'*': {
- reportShow: 'reportShow',
- reportClear: 'reportClear',
selectDevice: 'selectDevice',
selectReport: 'selectReport'
}
+ },
+ store: {
+ '#LatestPositions': {
+ add: 'updateLatest',
+ update: 'updateLatest'
+ },
+ '#Positions': {
+ load: 'loadReport',
+ clear: 'clearReport'
+ }
+ },
+ component: {
+ '#': {
+ selectFeature: 'selectFeature'
+ }
}
}
},
init: function () {
- this.liveData = {};
- this.update(true);
+ this.latestMarkers = {};
+ this.reportMarkers = {};
},
- update: function (first) {
- Ext.Ajax.request({
- scope: this,
- url: '/api/async',
- params: {
- first: first
- },
- success: function (response) {
- var data = Ext.decode(response.responseText).data;
-
- var i;
- for (i = 0; i < data.length; i++) {
-
- var store = Ext.getStore('LatestPositions');
- var deviceStore = Ext.getStore('Devices');
-
- var found = store.query('deviceId', data[i].deviceId);
- if (found.getCount() > 0) {
- found.first().set(data[i]);
- } else {
- store.add(Ext.create('Traccar.model.Position', data[i]));
- }
-
- var geometry = new ol.geom.Point(ol.proj.fromLonLat([
- data[i].longitude,
- data[i].latitude
- ]));
-
- if (data[i].deviceId in this.liveData) {
- this.liveData[data[i].deviceId].setGeometry(geometry);
- } else {
- var name = deviceStore.query('id', data[i].deviceId).first().get('name');
-
- var style = this.getMarkerStyle(Traccar.Style.mapLiveRadius, Traccar.Style.mapLiveColor, data[i].course, name);
- var marker = new ol.Feature({
- geometry: geometry,
- originalStyle: style
- });
- marker.setStyle(style);
- this.getView().vectorSource.addFeature(marker);
- this.liveData[data[i].deviceId] = marker;
- }
- }
+ updateLatest: function (store, data) {
+ var i, position, geometry, device, deviceId, marker, style;
- this.update(false);
- },
- failure: function () {
- // TODO: error
+ if (!Ext.isArray(data)) {
+ data = [data];
+ }
+
+ for (i = 0; i < data.length; i++) {
+ position = data[i];
+ deviceId = position.get('deviceId');
+ device = Ext.getStore('Devices').findRecord('id', deviceId, 0, false, false, true);
+
+ geometry = new ol.geom.Point(ol.proj.fromLonLat([
+ position.get('longitude'),
+ position.get('latitude')
+ ]));
+
+ if (deviceId in this.latestMarkers) {
+ marker = this.latestMarkers[deviceId];
+ marker.setGeometry(geometry);
+ } else {
+ marker = new ol.Feature(geometry);
+ marker.set('record', device);
+ this.latestMarkers[deviceId] = marker;
+ this.getView().getVectorSource().addFeature(marker);
+
+ style = this.getLatestMarker();
+ style.getImage().setRotation(position.get('course') * 180 / Math.PI);
+ style.getText().setText(device.get('name'));
+ marker.setStyle(style);
}
+ }
+ },
+
+ loadReport: function (store, data) {
+ var i, position, point, geometry, marker, style;
+
+ this.clearReport(store);
+
+ this.reportRoute = new ol.Feature({
+ geometry: new ol.geom.LineString([])
});
+ this.reportRoute.setStyle(this.getRouteStyle());
+ this.getView().getVectorSource().addFeature(this.reportRoute);
+
+ for (i = 0; i < data.length; i++) {
+ position = data[i];
+
+ point = ol.proj.fromLonLat([
+ position.get('longitude'),
+ position.get('latitude')
+ ]);
+ geometry = new ol.geom.Point(point);
+
+ marker = new ol.Feature(geometry);
+ marker.set('record', position);
+ this.reportMarkers[position.get('id')] = marker;
+ this.getView().getVectorSource().addFeature(marker);
+
+ style = this.getReportMarker();
+ style.getImage().setRotation(position.get('course') * 180 / Math.PI);
+ style.getText().setText(
+ Ext.Date.format(position.get('fixTime'), Traccar.Style.dateTimeFormat));
+
+ marker.setStyle(style);
+
+ this.reportRoute.getGeometry().appendCoordinate(point);
+ }
+ },
+
+ clearReport: function (store) {
+ var vectorSource, key;
+ vectorSource = this.getView().getVectorSource();
+
+ if (this.reportRoute) {
+ vectorSource.removeFeature(this.reportRoute);
+ this.reportRoute = null;
+ }
+
+ if (this.reportMarkers) {
+ for (key in this.reportMarkers) {
+ if (this.reportMarkers.hasOwnProperty(key)) {
+ vectorSource.removeFeature(this.reportMarkers[key]);
+ }
+ }
+ this.reportMarkers = {};
+ }
},
- getLineStyle: function () {
+ getRouteStyle: function () {
return new ol.style.Style({
stroke: new ol.style.Stroke({
- color: Traccar.Style.mapStrokeColor,
+ color: Traccar.Style.mapRouteColor,
width: Traccar.Style.mapRouteWidth
})
});
},
- getMarkerStyle: function (radius, color, rotation, text) {
+ getMarkerStyle: function (radius, color) {
return new ol.style.Style({
- image: new ol.style.RegularShape({
- points: 3,
+ image: new ol.style.Arrow({
radius: radius,
fill: new ol.style.Fill({
color: color
}),
stroke: new ol.style.Stroke({
- color: Traccar.Style.mapStrokeColor,
- width: Traccar.Style.mapMarkerStroke
- }),
- rotation: rotation * Math.PI / 180
+ color: Traccar.Style.mapArrowStrokeColor,
+ width: Traccar.Style.mapArrowStrokeWidth
+ })
}),
text: new ol.style.Text({
textBaseline: 'bottom',
- text: text,
fill: new ol.style.Fill({
- color: '#000'
+ color: Traccar.Style.mapTextColor
}),
stroke: new ol.style.Stroke({
- color: '#FFF',
- width: 2
+ color: Traccar.Style.mapTextStrokeColor,
+ width: Traccar.Style.mapTextStrokeWidth
}),
- offsetY: -12,
- font : 'bold 12px sans-serif'
+ offsetY: -radius / 2 - Traccar.Style.mapTextOffset,
+ font : Traccar.Style.mapTextFont
})
});
},
- reportShow: function () {
- this.reportClear();
-
- var vectorSource = this.getView().vectorSource;
-
- var data = Ext.getStore('Positions').getData();
-
- var index;
- var positions = [];
- this.reportRoutePoints = {};
+ getLatestMarker: function () {
+ return this.getMarkerStyle(
+ Traccar.Style.mapRadiusNormal, Traccar.Style.mapColorUnknown);
+ },
- for (index = 0; index < data.getCount(); index++) {
- var point = ol.proj.fromLonLat([
- data.getAt(index).data.longitude,
- data.getAt(index).data.latitude
- ]);
- positions.push(point);
-
- var style = this.getMarkerStyle(Traccar.Style.mapReportRadius, Traccar.Style.mapReportColor, data.getAt(index).data.course);
- var feature = new ol.Feature({
- geometry: new ol.geom.Point(positions[index]),
- originalStyle: style
- });
- feature.setStyle(style);
- this.reportRoutePoints[data.getAt(index).get('id')] = feature;
- }
+ getReportMarker: function () {
+ return this.getMarkerStyle(
+ Traccar.Style.mapRadiusNormal, Traccar.Style.mapColorReport);
+ },
- this.reportRoute = new ol.Feature({
- geometry: new ol.geom.LineString(positions)
+ resizeMarker: function (style, radius) {
+ return new ol.style.Style({
+ image: new ol.style.Arrow({
+ radius: radius,
+ fill: style.getImage().getFill(),
+ stroke: style.getImage().getStroke(),
+ rotation: style.getImage().getRotation()
+ }),
+ text: style.getText()
});
- this.reportRoute.setStyle(this.getLineStyle());
- vectorSource.addFeature(this.reportRoute);
-
- for (var key in this.reportRoutePoints) {
- if (this.reportRoutePoints.hasOwnProperty(key)) {
- vectorSource.addFeature(this.reportRoutePoints[key]);
- }
- }
},
- reportClear: function () {
- var vectorSource = this.getView().vectorSource;
-
- if (this.reportRoute !== undefined) {
- vectorSource.removeFeature(this.reportRoute);
- this.reportRoute = undefined;
+ selectMarker: function (marker, center) {
+ if (this.selectedMarker) {
+ this.selectedMarker.setStyle(
+ this.resizeMarker(this.selectedMarker.getStyle(), Traccar.Style.mapRadiusNormal));
}
- if (this.reportRoutePoints !== undefined) {
- for (var key in this.reportRoutePoints) {
- if (this.reportRoutePoints.hasOwnProperty(key)) {
- vectorSource.removeFeature(this.reportRoutePoints[key]);
- }
+ if (marker) {
+ marker.setStyle(
+ this.resizeMarker(marker.getStyle(), Traccar.Style.mapRadiusSelected));
+ if (center) {
+ this.getView().getMapView().setCenter(marker.getGeometry().getCoordinates());
}
- this.reportRoutePoints = {};
- }
- },
-
- selectPosition: function (feature) {
- if (this.currentFeature !== undefined) {
- this.currentFeature.setStyle(this.currentFeature.get('originalStyle'));
}
- if (feature !== undefined) {
- var name = feature.getStyle().getText().getText();
- feature.setStyle(this.getMarkerStyle(Traccar.Style.mapSelectRadius, Traccar.Style.mapSelectColor, 0, name));
-
- var pan = ol.animation.pan({
- duration: Traccar.Style.mapDelay,
- source: this.getView().mapView.getCenter()
- });
- this.getView().map.beforeRender(pan);
- this.getView().mapView.setCenter(feature.getGeometry().getCoordinates());
- }
+ this.selectedMarker = marker;
+ },
- this.currentFeature = feature;
+ selectDevice: function (device, center) {
+ this.selectMarker(this.latestMarkers[device.get('id')], center);
},
- selectDevice: function (device) {
- this.selectPosition(this.liveData[device.get('id')]);
+ selectReport: function (position, center) {
+ this.selectMarker(this.reportMarkers[position.get('id')], center);
},
- selectReport: function (position) {
- if (this.reportRoutePoints[position.get('id')] !== undefined) {
- this.selectPosition(this.reportRoutePoints[position.get('id')]);
+ selectFeature: function (feature) {
+ var record = feature.get('record');
+ if (record) {
+ if (record instanceof Traccar.model.Device) {
+ this.fireEvent('selectDevice', record, false);
+ } else {
+ this.fireEvent('selectReport', record, false);
+ }
}
}
-
});
diff --git a/web/app/view/Report.js b/web/app/view/Report.js
index 6f2359253..91ccba917 100644
--- a/web/app/view/Report.js
+++ b/web/app/view/Report.js
@@ -45,6 +45,7 @@ Ext.define('Traccar.view.Report', {
xtype: 'datefield',
reference: 'fromDateField',
startDay: Traccar.Style.weekStartDay,
+ format: Traccar.Style.dateFormat,
value: new Date(new Date().getTime() - 30 * 60 * 1000)
}, {
xtype: 'timefield',
@@ -59,6 +60,7 @@ Ext.define('Traccar.view.Report', {
xtype: 'datefield',
reference: 'toDateField',
startDay: Traccar.Style.weekStartDay,
+ format: Traccar.Style.dateFormat,
value: new Date()
}, {
xtype: 'timefield',
@@ -84,7 +86,7 @@ Ext.define('Traccar.view.Report', {
flex: 1,
renderer: Traccar.AttributeFormatter.getFormatter('valid')
}, {
- text: Strings.positionTime,
+ text: Strings.positionFixTime,
dataIndex: 'fixTime',
flex: 1,
xtype: 'datecolumn',
diff --git a/web/app/view/ReportController.js b/web/app/view/ReportController.js
index 2badfea63..9c2abcc71 100644
--- a/web/app/view/ReportController.js
+++ b/web/app/view/ReportController.js
@@ -22,7 +22,8 @@ Ext.define('Traccar.view.ReportController', {
listen: {
controller: {
'*': {
- selectDevice: 'selectDevice'
+ selectDevice: 'selectDevice',
+ selectReport: 'selectReport'
}
}
}
@@ -53,28 +54,27 @@ Ext.define('Traccar.view.ReportController', {
deviceId: deviceId,
from: from.toISOString(),
to: to.toISOString()
- },
- scope: this,
- callback: function () {
- this.fireEvent('reportShow');
}
});
},
onClearClick: function () {
Ext.getStore('Positions').removeAll();
- this.fireEvent('reportClear');
},
onSelectionChange: function (selected) {
if (selected.getCount() > 0) {
- this.fireEvent('selectReport', selected.getLastSelected());
+ this.fireEvent('selectReport', selected.getLastSelected(), true);
}
},
selectDevice: function (device) {
- if (device !== undefined) {
+ if (device) {
this.getView().getSelectionModel().deselectAll();
}
+ },
+
+ selectReport: function (position, center) {
+ this.getView().getSelectionModel().select([position], false, true);
}
});
diff --git a/web/app/view/StateController.js b/web/app/view/StateController.js
index 29f6a7c6d..01df6645d 100644
--- a/web/app/view/StateController.js
+++ b/web/app/view/StateController.js
@@ -25,58 +25,49 @@ Ext.define('Traccar.view.StateController', {
selectDevice: 'selectDevice',
selectReport: 'selectReport'
}
+ },
+ store: {
+ '#LatestPositions': {
+ add: 'updateLatest',
+ update: 'updateLatest'
+ },
+ '#Positions': {
+ clear: 'clearReport'
+ }
}
}
},
- init: function () {
- var store = Ext.getStore('LatestPositions');
- store.on('add', this.add, this);
- store.on('update', this.update, this);
- },
+ keys: (function () {
+ var i, list, result;
+ result = {};
+ list = ['fixTime', 'latitude', 'longitude', 'valid', 'altitude', 'speed', 'course', 'address', 'protocol'];
+ for (i = 0; i < list.length; i++) {
+ result[list[i]] = {
+ priority: i,
+ name: Strings['position' + list[i].replace(/^\w/g, function (s) {
+ return s.toUpperCase();
+ })]
+ };
+ }
+ return result;
+ }()),
- keys: {
- fixTime: {
- priority: 1,
- name: Strings.positionTime
- },
- latitude: {
- priority: 2,
- name: Strings.positionLatitude
- },
- longitude: {
- priority: 3,
- name: Strings.positionLongitude
- },
- valid: {
- priority: 4,
- name: Strings.positionValid
- },
- altitude: {
- priority: 5,
- name: Strings.positionAltitude
- },
- speed: {
- priority: 6,
- name: Strings.positionSpeed
- },
- course: {
- priority: 7,
- name: Strings.positionCourse
- },
- address: {
- priority: 8,
- name: Strings.positionAddress
- },
- protocol: {
- priority: 9,
- name: Strings.positionProtocol
+ updateLatest: function (store, data) {
+ var i;
+ if (!Ext.isArray(data)) {
+ data = [data];
+ }
+ for (i = 0; i < data.length; i++) {
+ if (this.deviceId === data[i].get('deviceId')) {
+ this.updatePosition(data[i]);
+ }
}
},
formatValue: function (value) {
if (typeof (id) === 'number') {
- return value.toFixed(2);
+ return Number(value.toFixed(2));
} else {
return value;
}
@@ -114,29 +105,22 @@ Ext.define('Traccar.view.StateController', {
},
selectDevice: function (device) {
- var found;
+ var position;
this.deviceId = device.get('id');
- found = Ext.getStore('LatestPositions').query('deviceId', this.deviceId);
- if (found.getCount() > 0) {
- this.updatePosition(found.first());
+ position = Ext.getStore('LatestPositions').findRecord('deviceId', this.deviceId, 0, false, false, true);
+ if (position) {
+ this.updatePosition(position);
} else {
Ext.getStore('Attributes').removeAll();
}
},
selectReport: function (position) {
- console.log(position);
+ this.deviceId = null;
+ this.updatePosition(position);
},
- add: function (store, data) {
- if (this.deviceId === data[0].get('deviceId')) {
- this.updatePosition(data[0]);
- }
- },
-
- update: function (store, data) {
- if (this.deviceId === data.get('deviceId')) {
- this.updatePosition(data);
- }
+ clearReport: function (store) {
+ Ext.getStore('Attributes').removeAll();
}
});
diff --git a/web/app/view/UserDevicesController.js b/web/app/view/UserDevicesController.js
index a50ab8c80..aeb99c21c 100644
--- a/web/app/view/UserDevicesController.js
+++ b/web/app/view/UserDevicesController.js
@@ -52,11 +52,7 @@ Ext.define('Traccar.view.UserDevicesController', {
userId: this.userId,
deviceId: record.getData().id
},
- callback: Traccar.app.getErrorHandler(this, function (options, success, response) {
- if (!success) {
- // TODO deselect again
- }
- })
+ callback: Traccar.app.getErrorHandler()
});
},
@@ -68,11 +64,7 @@ Ext.define('Traccar.view.UserDevicesController', {
userId: this.userId,
deviceId: record.getData().id
},
- callback: Traccar.app.getErrorHandler(this, function (options, success, response) {
- if (!success) {
- // TODO select again
- }
- })
+ callback: Traccar.app.getErrorHandler()
});
}
});
diff --git a/web/app/view/UsersController.js b/web/app/view/UsersController.js
index 30eb8b1a5..3d0e813e8 100644
--- a/web/app/view/UsersController.js
+++ b/web/app/view/UsersController.js
@@ -55,8 +55,8 @@ Ext.define('Traccar.view.UsersController', {
no: Strings.sharedCancel
},
fn: function (btn) {
+ var store = Ext.getStore('Users');
if (btn === 'yes') {
- var store = Ext.getStore('Users');
store.remove(user);
store.sync();
}
diff --git a/web/arrowstyle.js b/web/arrowstyle.js
new file mode 100644
index 000000000..5d8bda65b
--- /dev/null
+++ b/web/arrowstyle.js
@@ -0,0 +1,541 @@
+goog.provide('ol.style.Arrow');
+
+goog.require('goog.asserts');
+goog.require('goog.dom');
+goog.require('ol');
+goog.require('ol.color');
+goog.require('ol.has');
+goog.require('ol.render.canvas');
+goog.require('ol.structs.IHasChecksum');
+goog.require('ol.style.AtlasManager');
+goog.require('ol.style.Fill');
+goog.require('ol.style.Image');
+goog.require('ol.style.ImageState');
+goog.require('ol.style.Stroke');
+
+
+ol.nullFunction = ol.nullFunction || function() {}; // TODO: remove in 3.11
+
+
+/**
+ * @classdesc
+ * Set arrow style for vector features.
+ *
+ * @constructor
+ * @param {olx.style.ArrowOptions} options Options.
+ * @extends {ol.style.Image}
+ * @implements {ol.structs.IHasChecksum}
+ * @api
+ */
+ol.style.Arrow = function(options) {
+
+ goog.asserts.assert(options.radius !== undefined,
+ 'must provide "radius"');
+
+ /**
+ * @private
+ * @type {Array.<string>}
+ */
+ this.checksums_ = null;
+
+ /**
+ * @private
+ * @type {HTMLCanvasElement}
+ */
+ this.canvas_ = null;
+
+ /**
+ * @private
+ * @type {HTMLCanvasElement}
+ */
+ this.hitDetectionCanvas_ = null;
+
+ /**
+ * @private
+ * @type {ol.style.Fill}
+ */
+ this.fill_ = options.fill !== undefined ? options.fill : null;
+
+ /**
+ * @private
+ * @type {Array.<number>}
+ */
+ this.origin_ = [0, 0];
+
+ /**
+ * @private
+ * @type {number}
+ */
+ this.radius_ = /** @type {number} */ (options.radius !== undefined ?
+ options.radius : options.radius1);
+
+ /**
+ * @private
+ * @type {number}
+ */
+ this.frontAngle_ = options.frontAngle !== undefined ?
+ options.frontAngle : Math.PI / 5;
+
+ /**
+ * @private
+ * @type {number}
+ */
+ this.backAngle_ = options.backAngle !== undefined ?
+ options.backAngle : 4 * Math.PI / 5;
+
+ /**
+ * @private
+ * @type {ol.style.Stroke}
+ */
+ this.stroke_ = options.stroke !== undefined ? options.stroke : null;
+
+ /**
+ * @private
+ * @type {Array.<number>}
+ */
+ this.anchor_ = null;
+
+ /**
+ * @private
+ * @type {ol.Size}
+ */
+ this.size_ = null;
+
+ /**
+ * @private
+ * @type {ol.Size}
+ */
+ this.imageSize_ = null;
+
+ /**
+ * @private
+ * @type {ol.Size}
+ */
+ this.hitDetectionImageSize_ = null;
+
+ this.render_(options.atlasManager);
+
+ /**
+ * @type {boolean}
+ */
+ var snapToPixel = options.snapToPixel !== undefined ?
+ options.snapToPixel : true;
+
+ goog.base(this, {
+ opacity: 1,
+ rotateWithView: false,
+ rotation: options.rotation !== undefined ? options.rotation : 0,
+ scale: 1,
+ snapToPixel: snapToPixel
+ });
+
+};
+goog.inherits(ol.style.Arrow, ol.style.Image);
+
+
+/**
+ * @inheritDoc
+ * @api
+ */
+ol.style.Arrow.prototype.getAnchor = function() {
+ return this.anchor_;
+};
+
+
+/**
+ * Get front angle of the arrow.
+ * @return {number} Angle in radians.
+ * @api
+ */
+ol.style.Arrow.prototype.getFrontAngle = function() {
+ return this.frontAngle_;
+};
+
+
+/**
+ * Get back angle of the arrow.
+ * @return {number} Angle in radians.
+ * @api
+ */
+ol.style.Arrow.prototype.getBackAngle = function() {
+ return this.backAngle_;
+};
+
+
+/**
+ * Get the fill style for the arrow.
+ * @return {ol.style.Fill} Fill style.
+ * @api
+ */
+ol.style.Arrow.prototype.getFill = function() {
+ return this.fill_;
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.getHitDetectionImage = function(pixelRatio) {
+ return this.hitDetectionCanvas_;
+};
+
+
+/**
+ * @inheritDoc
+ * @api
+ */
+ol.style.Arrow.prototype.getImage = function(pixelRatio) {
+ return this.canvas_;
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.getImageSize = function() {
+ return this.imageSize_;
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.getHitDetectionImageSize = function() {
+ return this.hitDetectionImageSize_;
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.getImageState = function() {
+ return ol.style.ImageState.LOADED;
+};
+
+
+/**
+ * @inheritDoc
+ * @api
+ */
+ol.style.Arrow.prototype.getOrigin = function() {
+ return this.origin_;
+};
+
+
+/**
+ * Get the (primary) radius for the arrow.
+ * @return {number} Radius.
+ * @api
+ */
+ol.style.Arrow.prototype.getRadius = function() {
+ return this.radius_;
+};
+
+
+/**
+ * @inheritDoc
+ * @api
+ */
+ol.style.Arrow.prototype.getSize = function() {
+ return this.size_;
+};
+
+
+/**
+ * Get the stroke style for the arrow.
+ * @return {ol.style.Stroke} Stroke style.
+ * @api
+ */
+ol.style.Arrow.prototype.getStroke = function() {
+ return this.stroke_;
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.listenImageChange = ol.nullFunction;
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.load = ol.nullFunction;
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.unlistenImageChange = ol.nullFunction;
+
+
+/**
+ * @typedef {{
+ * strokeStyle: (string|undefined),
+ * strokeWidth: number,
+ * size: number,
+ * lineCap: string,
+ * lineDash: Array.<number>,
+ * lineJoin: string,
+ * miterLimit: number
+ * }}
+ */
+ol.style.Arrow.RenderOptions;
+
+
+/**
+ * @private
+ * @param {ol.style.AtlasManager|undefined} atlasManager
+ */
+ol.style.Arrow.prototype.render_ = function(atlasManager) {
+ var imageSize;
+ var lineCap = '';
+ var lineJoin = '';
+ var miterLimit = 0;
+ var lineDash = null;
+ var strokeStyle;
+ var strokeWidth = 0;
+
+ if (this.stroke_) {
+ strokeStyle = ol.color.asString(this.stroke_.getColor());
+ strokeWidth = this.stroke_.getWidth();
+ if (strokeWidth === undefined) {
+ strokeWidth = ol.render.canvas.defaultLineWidth;
+ }
+ lineDash = this.stroke_.getLineDash();
+ if (!ol.has.CANVAS_LINE_DASH) {
+ lineDash = null;
+ }
+ lineJoin = this.stroke_.getLineJoin();
+ if (lineJoin === undefined) {
+ lineJoin = ol.render.canvas.defaultLineJoin;
+ }
+ lineCap = this.stroke_.getLineCap();
+ if (lineCap === undefined) {
+ lineCap = ol.render.canvas.defaultLineCap;
+ }
+ miterLimit = this.stroke_.getMiterLimit();
+ if (miterLimit === undefined) {
+ miterLimit = ol.render.canvas.defaultMiterLimit;
+ }
+ }
+
+ var size = 2 * (this.radius_ + strokeWidth) + 1;
+
+ /** @type {ol.style.Arrow.RenderOptions} */
+ var renderOptions = {
+ strokeStyle: strokeStyle,
+ strokeWidth: strokeWidth,
+ size: size,
+ lineCap: lineCap,
+ lineDash: lineDash,
+ lineJoin: lineJoin,
+ miterLimit: miterLimit
+ };
+
+ if (atlasManager === undefined) {
+ // no atlas manager is used, create a new canvas
+ this.canvas_ = /** @type {HTMLCanvasElement} */
+ (goog.dom.createElement('CANVAS'));
+
+ this.canvas_.height = size;
+ this.canvas_.width = size;
+
+ // canvas.width and height are rounded to the closest integer
+ size = this.canvas_.width;
+ imageSize = size;
+
+ var context = /** @type {CanvasRenderingContext2D} */
+ (this.canvas_.getContext('2d'));
+ this.draw_(renderOptions, context, 0, 0);
+
+ this.createHitDetectionCanvas_(renderOptions);
+ } else {
+ // an atlas manager is used, add the symbol to an atlas
+ size = Math.round(size);
+
+ var hasCustomHitDetectionImage = !this.fill_;
+ var renderHitDetectionCallback;
+ if (hasCustomHitDetectionImage) {
+ // render the hit-detection image into a separate atlas image
+ renderHitDetectionCallback =
+ goog.bind(this.drawHitDetectionCanvas_, this, renderOptions);
+ }
+
+ var id = this.getChecksum();
+ var info = atlasManager.add(
+ id, size, size, goog.bind(this.draw_, this, renderOptions),
+ renderHitDetectionCallback);
+ goog.asserts.assert(info, 'arrow size is too large');
+
+ this.canvas_ = info.image;
+ this.origin_ = [info.offsetX, info.offsetY];
+ imageSize = info.image.width;
+
+ if (hasCustomHitDetectionImage) {
+ this.hitDetectionCanvas_ = info.hitImage;
+ this.hitDetectionImageSize_ =
+ [info.hitImage.width, info.hitImage.height];
+ } else {
+ this.hitDetectionCanvas_ = this.canvas_;
+ this.hitDetectionImageSize_ = [imageSize, imageSize];
+ }
+ }
+
+ this.anchor_ = [size / 2, size / 2];
+ this.size_ = [size, size];
+ this.imageSize_ = [imageSize, imageSize];
+};
+
+
+/**
+ * @private
+ * @param {ol.style.Arrow.RenderOptions} renderOptions
+ * @param {CanvasRenderingContext2D} context
+ * @param {number} x The origin for the symbol (x).
+ * @param {number} y The origin for the symbol (y).
+ */
+ol.style.Arrow.prototype.draw_ = function(renderOptions, context, x, y) {
+ var innerRadius = this.radius_ / Math.sin(Math.PI - this.backAngle_ / 2) *
+ Math.sin(this.backAngle_ / 2 - this.frontAngle_);
+
+ // reset transform
+ context.setTransform(1, 0, 0, 1, 0, 0);
+
+ // then move to (x, y)
+ context.translate(x, y);
+
+
+ context.beginPath();
+
+ function lineTo(radius, angle) {
+ context.lineTo(
+ renderOptions.size / 2 + radius * Math.cos(angle + Math.PI / 2),
+ renderOptions.size / 2 - radius * Math.sin(angle + Math.PI / 2));
+ }
+
+ lineTo(this.radius_, 0);
+ lineTo(this.radius_, Math.PI - this.frontAngle_);
+ lineTo(innerRadius, Math.PI);
+ lineTo(this.radius_, this.frontAngle_ - Math.PI);
+ lineTo(this.radius_, 0);
+
+ if (this.fill_) {
+ context.fillStyle = ol.color.asString(this.fill_.getColor());
+ context.fill();
+ }
+ if (this.stroke_) {
+ context.strokeStyle = renderOptions.strokeStyle;
+ context.lineWidth = renderOptions.strokeWidth;
+ if (renderOptions.lineDash) {
+ context.setLineDash(renderOptions.lineDash);
+ }
+ context.lineCap = renderOptions.lineCap;
+ context.lineJoin = renderOptions.lineJoin;
+ context.miterLimit = renderOptions.miterLimit;
+ context.stroke();
+ }
+ context.closePath();
+};
+
+
+/**
+ * @private
+ * @param {ol.style.Arrow.RenderOptions} renderOptions
+ */
+ol.style.Arrow.prototype.createHitDetectionCanvas_ =
+ function(renderOptions) {
+ this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];
+ if (this.fill_) {
+ this.hitDetectionCanvas_ = this.canvas_;
+ return;
+ }
+
+ // if no fill style is set, create an extra hit-detection image with a
+ // default fill style
+ this.hitDetectionCanvas_ = /** @type {HTMLCanvasElement} */
+ (goog.dom.createElement('CANVAS'));
+ var canvas = this.hitDetectionCanvas_;
+
+ canvas.height = renderOptions.size;
+ canvas.width = renderOptions.size;
+
+ var context = /** @type {CanvasRenderingContext2D} */
+ (canvas.getContext('2d'));
+ this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);
+};
+
+
+/**
+ * @private
+ * @param {ol.style.Arrow.RenderOptions} renderOptions
+ * @param {CanvasRenderingContext2D} context
+ * @param {number} x The origin for the symbol (x).
+ * @param {number} y The origin for the symbol (y).
+ */
+ol.style.Arrow.prototype.drawHitDetectionCanvas_ =
+ function(renderOptions, context, x, y) {
+ var innerRadius = this.radius_ / Math.sin(Math.PI - this.backAngle_ / 2) *
+ Math.sin(this.backAngle_ / 2 - this.frontAngle_);
+
+ // reset transform
+ context.setTransform(1, 0, 0, 1, 0, 0);
+
+ // then move to (x, y)
+ context.translate(x, y);
+
+ context.beginPath();
+
+ function lineTo(radius, angle) {
+ context.lineTo(
+ renderOptions.size / 2 + radius * Math.cos(angle + Math.PI / 2),
+ renderOptions.size / 2 - radius * Math.sin(angle + Math.PI / 2));
+ }
+
+ lineTo(this.radius_, 0);
+ lineTo(this.radius_, Math.PI - this.frontAngle_);
+ lineTo(innerRadius / 2, Math.PI);
+ lineTo(this.radius_, this.frontAngle_ - Math.PI);
+ lineTo(this.radius_, 0);
+
+ context.fillStyle = ol.render.canvas.defaultFillStyle;
+ context.fill();
+ if (this.stroke_) {
+ context.strokeStyle = renderOptions.strokeStyle;
+ context.lineWidth = renderOptions.strokeWidth;
+ if (renderOptions.lineDash) {
+ context.setLineDash(renderOptions.lineDash);
+ }
+ context.stroke();
+ }
+ context.closePath();
+};
+
+
+/**
+ * @inheritDoc
+ */
+ol.style.Arrow.prototype.getChecksum = function() {
+ var strokeChecksum = this.stroke_ ?
+ this.stroke_.getChecksum() : '-';
+ var fillChecksum = this.fill_ ?
+ this.fill_.getChecksum() : '-';
+
+ var recalculate = !this.checksums_ ||
+ (strokeChecksum != this.checksums_[1] ||
+ fillChecksum != this.checksums_[2] ||
+ this.radius_ != this.checksums_[3] ||
+ this.frontAngle_ != this.checksums_[4] ||
+ this.backAngle_ != this.checksums_[5]);
+
+ if (recalculate) {
+ var checksum = 'r' + strokeChecksum + fillChecksum +
+ (this.radius_ !== undefined ? this.radius_.toString() : '-') +
+ (this.frontAngle_ !== undefined ? this.frontAngle_.toString() : '-') +
+ (this.backAngle_ !== undefined ? this.backAngle_.toString() : '-');
+ this.checksums_ = [checksum, strokeChecksum, fillChecksum,
+ this.radius_, this.frontAngle_, this.backAngle_];
+ }
+
+ return this.checksums_[0];
+};
diff --git a/web/debug.html b/web/debug.html
index 201bdebd1..06c74ef88 100644
--- a/web/debug.html
+++ b/web/debug.html
@@ -11,6 +11,7 @@
<script src="//cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all-debug.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/theme-neptune.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ol3/3.10.1/ol-debug.js"></script>
+<script src="arrowstyle.js"></script>
<script src="locale.js"></script>
<script src="app.js"></script>
</head>
diff --git a/web/l10n/ar.json b/web/l10n/ar.json
new file mode 100644
index 000000000..0d88e6a15
--- /dev/null
+++ b/web/l10n/ar.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "جاري التحميل",
+ "sharedSave": "حفظ",
+ "sharedCancel": "إلغاء",
+ "sharedAdd": "إضافة",
+ "sharedEdit": "تعديل",
+ "sharedRemove": "حذف",
+ "sharedRemoveConfirm": "حذف العنصر",
+ "sharedKm": "كم",
+ "sharedMi": "ميل",
+ "sharedKmh": "كم/ساعه",
+ "sharedMph": "mph",
+ "sharedHour": "ساعه",
+ "sharedMinute": "دقيقة",
+ "sharedSecond": "ثانية",
+ "errorTitle": "خطأ",
+ "errorUnknown": "خطأ غير معروف",
+ "errorConnection": "خطأ في الاتصال",
+ "userName": "الاسم",
+ "userEmail": "بريد الكتروني",
+ "userPassword": "كلمة المرور",
+ "userAdmin": "مدير النظام",
+ "loginTitle": "دخول",
+ "loginLanguage": "اللغة",
+ "loginRegister": "تسجيل",
+ "loginLogin": "تسجيل دخول",
+ "loginFailed": "كلمة مرور او بريد خطأ",
+ "loginCreated": "تم تسجيل مستخدم جديد",
+ "loginLogout": "خروج",
+ "deviceDialog": "جهاز",
+ "deviceTitle": "أجهزة",
+ "deviceName": "الاسم ",
+ "deviceIdentifier": "المعرف",
+ "deviceCommand": "أمر ",
+ "settingsTitle": "إعدادات",
+ "settingsUser": "حساب",
+ "settingsServer": "خادم",
+ "settingsUsers": "مستخدم",
+ "settingsDistanceUnit": "مسافة",
+ "settingsSpeedUnit": "سرعة",
+ "reportTitle": "تقارير",
+ "reportDevice": "جهاز",
+ "reportFrom": "من",
+ "reportTo": "الي",
+ "reportShow": "اظهار",
+ "reportClear": "تفريغ الحقول",
+ "positionFixTime": "وقت",
+ "positionValid": "صحيح",
+ "positionLatitude": "خط العرض",
+ "positionLongitude": "خط الطول",
+ "positionAltitude": "ارتفاع عن سطح البحر",
+ "positionSpeed": "السرعة",
+ "positionCourse": "Course",
+ "positionAddress": "العنوان",
+ "positionProtocol": "بروتوكول",
+ "serverTitle": "اعدادت الخادم",
+ "serverZoom": "تقريب",
+ "serverRegistration": "تسجيل",
+ "mapTitle": "خريطة",
+ "mapLayer": "طبقة الخريطة",
+ "mapCustom": "خريطة محددة",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "حالة",
+ "stateName": "عنصر",
+ "stateValue": "قيمة",
+ "commandTitle": "أمر",
+ "commandSend": "ارسال",
+ "commandType": "النوع",
+ "commandSent": "تم ارسال الأمر",
+ "commandPositionPeriodic": "تقارير دورية",
+ "commandPositionStop": "ايقاف الارسال",
+ "commandEngineStop": "ايقاف المحرك",
+ "commandEngineResume": "تشغيل المحرك",
+ "commandFrequency": "معدل",
+ "commandUnit": "وحدة"
+} \ No newline at end of file
diff --git a/web/l10n/bg.js b/web/l10n/bg.js
deleted file mode 100644
index 8202ae35a..000000000
--- a/web/l10n/bg.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var Strings = {
- sharedLoading: 'Зареждане...',
- sharedSave: 'Запази',
- sharedCancel: 'Отказ',
- sharedAdd: 'Добави',
- sharedEdit: 'Редактирай',
- sharedRemove: 'Премахни',
- sharedRemoveConfirm: 'Премахване на Устройство?',
- sharedKm: 'км',
- sharedMi: 'мл',
- sharedKmh: 'км/ч',
- sharedMph: 'мл/ч',
- sharedHour: 'Час',
- sharedMinute: 'Минута',
- sharedSecond: 'Секунда',
-
- errorTitle: 'Грешка',
- errorUnknown: 'Непозната Грешка',
-
- userName: 'Име',
- userEmail: 'Пощенска кутия',
- userPassword: 'Парола',
- userAdmin: 'Admin',
-
- loginTitle: 'Идентификация',
- loginLanguage: 'Език',
- loginRegister: 'Регистрация',
- loginLogin: 'Вход',
- loginFailed: 'Грешен потребител или парола',
- loginCreated: 'Регистриран Нов Потребител',
- loginLogout: 'Изход',
-
- deviceDialog: 'Обекти',
- deviceTitle: 'Устройства',
- deviceName: 'Име',
- deviceIdentifier: 'Идентификатор',
- deviceCommand: 'Команда',
-
- settingsTitle: 'Настройки',
- settingsUser: 'Профил',
- settingsServer: 'Сървър',
- settingsUsers: 'Потребител',
- settingsDistanceUnit: 'Разстояние',
- settingsSpeedUnit: 'Скорост',
-
- reportTitle: 'Доклад',
- reportDevice: 'Устройство',
- reportFrom: 'От',
- reportTo: 'До',
- reportShow: 'Покажи',
- reportClear: 'Изчисти',
-
- positionTime: 'Време',
- positionValid: 'Валидност',
- positionLatitude: 'Географска Ширина',
- positionLongitude: 'Географска Дължина',
- positionAltitude: 'Надморска височина',
- positionSpeed: 'Скорост',
- positionCourse: 'Посока',
- positionAddress: 'Адрес',
- positionProtocol: 'Протокол',
-
- serverTitle: 'Настройки на Сървъра',
- serverZoom: 'Приближение',
- serverRegistration: 'Регистрация',
-
- mapTitle: 'Карта',
- mapLayer: 'Слой',
- mapCustom: 'Потребителска Карта',
- mapOsm: 'Open Street Map',
- mapBingKey: 'Bing Maps Key',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Състояние',
- stateName: 'Параметър',
- stateValue: 'Стойност',
-
- commandTitle: 'Команда',
- commandSend: 'Изпрати',
- commandType: 'Тип',
- commandPositionPeriodic: 'Периодичен Доклад',
- commandPositionStop: 'Спри Доклада',
- commandEngineStop: 'Спри Двигател',
- commandEngineResume: 'Стартирай Двигател',
- commandFrequency: 'Честота',
- commandUnit: 'Обект'
-};
diff --git a/web/l10n/bg.json b/web/l10n/bg.json
new file mode 100644
index 000000000..8fda93dab
--- /dev/null
+++ b/web/l10n/bg.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Зареждане...",
+ "sharedSave": "Запази",
+ "sharedCancel": "Отказ",
+ "sharedAdd": "Добави",
+ "sharedEdit": "Редактирай",
+ "sharedRemove": "Премахни",
+ "sharedRemoveConfirm": "Премахване на Устройство?",
+ "sharedKm": "км",
+ "sharedMi": "мл",
+ "sharedKmh": "км/ч",
+ "sharedMph": "мл/ч",
+ "sharedHour": "Час",
+ "sharedMinute": "Минута",
+ "sharedSecond": "Секунда",
+ "errorTitle": "Грешка",
+ "errorUnknown": "Непозната Грешка",
+ "errorConnection": "Connection error",
+ "userName": "Име",
+ "userEmail": "Пощенска кутия",
+ "userPassword": "Парола",
+ "userAdmin": "Admin",
+ "loginTitle": "Идентификация",
+ "loginLanguage": "Език",
+ "loginRegister": "Регистрация",
+ "loginLogin": "Вход",
+ "loginFailed": "Грешен потребител или парола",
+ "loginCreated": "Регистриран Нов Потребител",
+ "loginLogout": "Изход",
+ "deviceDialog": "Обекти",
+ "deviceTitle": "Устройства",
+ "deviceName": "Име",
+ "deviceIdentifier": "Идентификатор",
+ "deviceCommand": "Команда",
+ "settingsTitle": "Настройки",
+ "settingsUser": "Профил",
+ "settingsServer": "Сървър",
+ "settingsUsers": "Потребител",
+ "settingsDistanceUnit": "Разстояние",
+ "settingsSpeedUnit": "Скорост",
+ "reportTitle": "Доклад",
+ "reportDevice": "Устройство",
+ "reportFrom": "От",
+ "reportTo": "До",
+ "reportShow": "Покажи",
+ "reportClear": "Изчисти",
+ "positionFixTime": "Време",
+ "positionValid": "Валидност",
+ "positionLatitude": "Географска Ширина",
+ "positionLongitude": "Географска Дължина",
+ "positionAltitude": "Надморска височина",
+ "positionSpeed": "Скорост",
+ "positionCourse": "Посока",
+ "positionAddress": "Адрес",
+ "positionProtocol": "Протокол",
+ "serverTitle": "Настройки на Сървъра",
+ "serverZoom": "Приближение",
+ "serverRegistration": "Регистрация",
+ "mapTitle": "Карта",
+ "mapLayer": "Слой",
+ "mapCustom": "Потребителска Карта",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Състояние",
+ "stateName": "Параметър",
+ "stateValue": "Стойност",
+ "commandTitle": "Команда",
+ "commandSend": "Изпрати",
+ "commandType": "Тип",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Периодичен Доклад",
+ "commandPositionStop": "Спри Доклада",
+ "commandEngineStop": "Спри Двигател",
+ "commandEngineResume": "Стартирай Двигател",
+ "commandFrequency": "Честота",
+ "commandUnit": "Обект"
+} \ No newline at end of file
diff --git a/web/l10n/cs.js b/web/l10n/cs.js
deleted file mode 100755
index 5d6c927e4..000000000
--- a/web/l10n/cs.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var Strings = {
- sharedLoading: 'Načítání...',
- sharedSave: 'Uložit',
- sharedCancel: 'Zrušit',
- sharedAdd: 'Přidat',
- sharedEdit: 'Změnit',
- sharedRemove: 'Odstranit',
- sharedRemoveConfirm: 'Odstranit položku?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Hodina',
- sharedMinute: 'Minuta',
- sharedSecond: 'Sekunda',
-
- errorTitle: 'Chyba',
- errorUnknown: 'Neznámá chyba',
-
- userName: 'Jméno',
- userEmail: 'Email',
- userPassword: 'Heslo',
- userAdmin: 'Admin',
-
- loginTitle: 'Přihlášení',
- loginLanguage: 'Jazyk',
- loginRegister: 'Registrace',
- loginLogin: 'Přihlášení',
- loginFailed: 'Nesprávný email nebo heslo',
- loginCreated: 'Nový uživatel byl zaregistrován',
- loginLogout: 'Odhlášení',
-
- deviceDialog: 'Zařízení',
- deviceTitle: 'Zařízení',
- deviceName: 'Název',
- deviceIdentifier: 'Identifikace',
- deviceCommand: 'Příkaz',
-
- settingsTitle: 'Nastavení',
- settingsUser: 'Účet',
- settingsServer: 'Server',
- settingsUsers: 'Uživatelé',
- settingsDistanceUnit: 'Vzdálenost',
- settingsSpeedUnit: 'Rychlost',
-
- reportTitle: 'Zpráva',
- reportDevice: 'Zařízení',
- reportFrom: 'Od',
- reportTo: 'Komu',
- reportShow: 'Zobrazit',
- reportClear: 'Vyčistit',
-
- positionTime: 'Čas',
- positionValid: 'Správný',
- positionLatitude: 'Šířka',
- positionLongitude: 'Délka',
- positionAltitude: 'Výška',
- positionSpeed: 'Rychlost',
- positionCourse: 'Směr',
- positionAddress: 'Adresa',
- positionProtocol: 'Protokol',
-
- serverTitle: 'Nastavení serveru',
- serverZoom: 'Přiblížení',
- serverRegistration: 'Registrace',
-
- mapTitle: 'Mapa',
- mapLayer: 'Vrstva mapy',
- mapCustom: 'Upravená mapa',
- mapOsm: 'Open Street mapa',
- mapBingKey: 'Bing Maps klíč',
- mapBingRoad: 'Bing Maps cesta',
- mapBingAerial: 'Bing Maps anténa',
-
- stateTitle: 'Stav',
- stateName: 'Atribut',
- stateValue: 'Hodnota',
-
- commandTitle: 'Příkaz',
- commandSend: 'Odeslat',
- commandType: 'Napsat',
- commandSent: 'Příkaz byl odeslán',
- commandPositionPeriodic: 'Pravidelný report',
- commandPositionStop: 'Zastavit report',
- commandEngineStop: 'Zastavit motor',
- commandEngineResume: 'Nastartovat motor',
- commandFrequency: 'Frekvence',
- commandUnit: 'Jednotka'
-};
diff --git a/web/l10n/cs.json b/web/l10n/cs.json
new file mode 100644
index 000000000..09ab824c2
--- /dev/null
+++ b/web/l10n/cs.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Načítání...",
+ "sharedSave": "Uložit",
+ "sharedCancel": "Zrušit",
+ "sharedAdd": "Přidat",
+ "sharedEdit": "Změnit",
+ "sharedRemove": "Odstranit",
+ "sharedRemoveConfirm": "Odstranit položku?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hodina",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "errorTitle": "Chyba",
+ "errorUnknown": "Neznámá chyba",
+ "errorConnection": "Connection error",
+ "userName": "Jméno",
+ "userEmail": "Email",
+ "userPassword": "Heslo",
+ "userAdmin": "Admin",
+ "loginTitle": "Přihlášení",
+ "loginLanguage": "Jazyk",
+ "loginRegister": "Registrace",
+ "loginLogin": "Přihlášení",
+ "loginFailed": "Nesprávný email nebo heslo",
+ "loginCreated": "Nový uživatel byl zaregistrován",
+ "loginLogout": "Odhlášení",
+ "deviceDialog": "Zařízení",
+ "deviceTitle": "Zařízení",
+ "deviceName": "Název",
+ "deviceIdentifier": "Identifikace",
+ "deviceCommand": "Příkaz",
+ "settingsTitle": "Nastavení",
+ "settingsUser": "Účet",
+ "settingsServer": "Server",
+ "settingsUsers": "Uživatelé",
+ "settingsDistanceUnit": "Vzdálenost",
+ "settingsSpeedUnit": "Rychlost",
+ "reportTitle": "Zpráva",
+ "reportDevice": "Zařízení",
+ "reportFrom": "Od",
+ "reportTo": "Komu",
+ "reportShow": "Zobrazit",
+ "reportClear": "Vyčistit",
+ "positionFixTime": "Čas",
+ "positionValid": "Správný",
+ "positionLatitude": "Šířka",
+ "positionLongitude": "Délka",
+ "positionAltitude": "Výška",
+ "positionSpeed": "Rychlost",
+ "positionCourse": "Směr",
+ "positionAddress": "Adresa",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Nastavení serveru",
+ "serverZoom": "Přiblížení",
+ "serverRegistration": "Registrace",
+ "mapTitle": "Mapa",
+ "mapLayer": "Vrstva mapy",
+ "mapCustom": "Upravená mapa",
+ "mapOsm": "Open Street mapa",
+ "mapBingKey": "Bing Maps klíč",
+ "mapBingRoad": "Bing Maps cesta",
+ "mapBingAerial": "Bing Maps anténa",
+ "stateTitle": "Stav",
+ "stateName": "Atribut",
+ "stateValue": "Hodnota",
+ "commandTitle": "Příkaz",
+ "commandSend": "Odeslat",
+ "commandType": "Napsat",
+ "commandSent": "Příkaz byl odeslán",
+ "commandPositionPeriodic": "Pravidelný report",
+ "commandPositionStop": "Zastavit report",
+ "commandEngineStop": "Zastavit motor",
+ "commandEngineResume": "Nastartovat motor",
+ "commandFrequency": "Frekvence",
+ "commandUnit": "Jednotka"
+} \ No newline at end of file
diff --git a/web/l10n/da.json b/web/l10n/da.json
new file mode 100644
index 000000000..9aa3047ad
--- /dev/null
+++ b/web/l10n/da.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Gem",
+ "sharedCancel": "Fortryd",
+ "sharedAdd": "Tilføj",
+ "sharedEdit": "Rediger",
+ "sharedRemove": "Fjern",
+ "sharedRemoveConfirm": "Fjern enhed?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/t",
+ "sharedMph": "mph",
+ "sharedHour": "Time",
+ "sharedMinute": "Minut",
+ "sharedSecond": "Sekund",
+ "errorTitle": "Fejl",
+ "errorUnknown": "Ukendt Fejl",
+ "errorConnection": "Connection error",
+ "userName": "Navn",
+ "userEmail": "Email",
+ "userPassword": "Kodeord",
+ "userAdmin": "Admin",
+ "loginTitle": "Log på",
+ "loginLanguage": "Sprog",
+ "loginRegister": "Registrer",
+ "loginLogin": "Log på",
+ "loginFailed": "Fejl i email adresse eller kodeord",
+ "loginCreated": "Ny bruger er registreret",
+ "loginLogout": "Log af",
+ "deviceDialog": "Enhed",
+ "deviceTitle": "Enheder",
+ "deviceName": "Navn",
+ "deviceIdentifier": "Imei nr",
+ "deviceCommand": "Kommando",
+ "settingsTitle": "Indstillinger",
+ "settingsUser": "Konto",
+ "settingsServer": "Server",
+ "settingsUsers": "Brugere",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Hastighed",
+ "reportTitle": "Rapporter",
+ "reportDevice": "Enhed",
+ "reportFrom": "Fra",
+ "reportTo": "Til",
+ "reportShow": "Vis",
+ "reportClear": "Ryd",
+ "positionFixTime": "Tid",
+ "positionValid": "Valid",
+ "positionLatitude": ">Breddegrad",
+ "positionLongitude": "Længdegrad",
+ "positionAltitude": "Højde",
+ "positionSpeed": "Hastighed",
+ "positionCourse": "Kurs",
+ "positionAddress": "Addresse",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server indstillinger",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrering",
+ "mapTitle": "Kort",
+ "mapLayer": "Kort opsætning",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Værdi",
+ "commandTitle": "Kommando",
+ "commandSend": "Send",
+ "commandType": "Type",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodisk Rapportering",
+ "commandPositionStop": "Stop Rapportering",
+ "commandEngineStop": "Stop motor",
+ "commandEngineResume": "Genstart motor",
+ "commandFrequency": "Frekvens",
+ "commandUnit": "Enhed"
+} \ No newline at end of file
diff --git a/web/l10n/de.js b/web/l10n/de.js
deleted file mode 100644
index 0ababab34..000000000
--- a/web/l10n/de.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Lade...',
- sharedSave: 'Speichern',
- sharedCancel: 'Abbrechen',
- sharedAdd: 'Hinzufügen',
- sharedEdit: 'Bearbeiten',
- sharedRemove: 'Entfernen',
- sharedRemoveConfirm: 'Objekt entfernen?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Stunde',
- sharedMinute: 'Minute',
- sharedSecond: 'Sekunde',
-
- errorTitle: 'Fehler',
- errorUnknown: 'Unbekannter Fehler',
-
- userName: 'Name',
- userEmail: 'Email',
- userPassword: 'Passwort',
- userAdmin: 'Admin',
-
- loginTitle: 'Anmeldung',
- loginLanguage: 'Sprache',
- loginRegister: 'Registrieren',
- loginLogin: 'Anmelden',
- loginFailed: 'Falsche Emailadresse oder Passwort',
- loginCreated: 'Neuer Benutzer wurde registriert',
- loginLogout: 'Abmelden',
-
- deviceDialog: 'Gerät',
- deviceTitle: 'Geräte',
- deviceName: 'Name',
- deviceIdentifier: 'Kennung',
- deviceCommand: 'Befehl',
-
- settingsTitle: 'Einstellungen',
- settingsUser: 'Benutzerkonto',
- settingsServer: 'Server',
- settingsUsers: 'Benutzer',
- settingsDistanceUnit: 'Entfernung',
- settingsSpeedUnit: 'Geschwindigkeit',
-
- reportTitle: 'Berichte',
- reportDevice: 'Gerät',
- reportFrom: 'Von',
- reportTo: 'Bis',
- reportShow: 'Anzeigen',
- reportClear: 'Leeren',
-
- positionTime: 'Zeit',
- positionValid: 'Gültig',
- positionLatitude: 'Latitude',
- positionLongitude: 'Longitude',
- positionAltitude: 'Altitude',
- positionSpeed: 'Geschwindigkeit',
- positionCourse: 'Richtung',
- positionAddress: 'Adresse',
- positionProtocol: 'Protokoll',
-
- serverTitle: 'Server Einstellungen',
- serverZoom: 'Zoomen',
- serverRegistration: 'Registrierung zulassen',
-
- mapTitle: 'Karte',
- mapLayer: 'Karten Layer',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Strassenkarte',
- mapBingAerial: 'Bing Luftbilder',
-
- stateTitle: 'Status',
- stateName: 'Parameter',
- stateValue: 'Wert',
-
- commandTitle: 'Befehl',
- commandSend: 'Senden',
- commandType: 'Typ',
- commandPositionPeriodic: 'Position Fix',
- commandPositionStop: 'Position Stop',
- commandEngineStop: 'Motor Stop',
- commandEngineResume: 'Motor fortsetzen',
- commandFrequency: 'Frequenz',
- commandUnit: 'Einheit'
-};
diff --git a/web/l10n/de.json b/web/l10n/de.json
new file mode 100644
index 000000000..5da0bf513
--- /dev/null
+++ b/web/l10n/de.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Lade...",
+ "sharedSave": "Speichern",
+ "sharedCancel": "Abbrechen",
+ "sharedAdd": "Hinzufügen",
+ "sharedEdit": "Bearbeiten",
+ "sharedRemove": "Entfernen",
+ "sharedRemoveConfirm": "Objekt entfernen?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Stunde",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Sekunde",
+ "errorTitle": "Fehler",
+ "errorUnknown": "Unbekannter Fehler",
+ "errorConnection": "Connection error",
+ "userName": "Name",
+ "userEmail": "Email",
+ "userPassword": "Passwort",
+ "userAdmin": "Admin",
+ "loginTitle": "Anmeldung",
+ "loginLanguage": "Sprache",
+ "loginRegister": "Registrieren",
+ "loginLogin": "Anmelden",
+ "loginFailed": "Falsche Emailadresse oder Passwort",
+ "loginCreated": "Neuer Benutzer wurde registriert",
+ "loginLogout": "Abmelden",
+ "deviceDialog": "Gerät",
+ "deviceTitle": "Geräte",
+ "deviceName": "Name",
+ "deviceIdentifier": "Kennung",
+ "deviceCommand": "Befehl",
+ "settingsTitle": "Einstellungen",
+ "settingsUser": "Benutzerkonto",
+ "settingsServer": "Server",
+ "settingsUsers": "Benutzer",
+ "settingsDistanceUnit": "Entfernung",
+ "settingsSpeedUnit": "Geschwindigkeit",
+ "reportTitle": "Berichte",
+ "reportDevice": "Gerät",
+ "reportFrom": "Von",
+ "reportTo": "Bis",
+ "reportShow": "Anzeigen",
+ "reportClear": "Leeren",
+ "positionFixTime": "Zeit",
+ "positionValid": "Gültig",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Geschwindigkeit",
+ "positionCourse": "Richtung",
+ "positionAddress": "Adresse",
+ "positionProtocol": "Protokoll",
+ "serverTitle": "Server Einstellungen",
+ "serverZoom": "Zoomen",
+ "serverRegistration": "Registrierung zulassen",
+ "mapTitle": "Karte",
+ "mapLayer": "Karten Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Strassenkarte",
+ "mapBingAerial": "Bing Luftbilder",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Wert",
+ "commandTitle": "Befehl",
+ "commandSend": "Senden",
+ "commandType": "Typ",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Position Fix",
+ "commandPositionStop": "Position Stop",
+ "commandEngineStop": "Motor Stop",
+ "commandEngineResume": "Motor fortsetzen",
+ "commandFrequency": "Frequenz",
+ "commandUnit": "Einheit"
+} \ No newline at end of file
diff --git a/web/l10n/dk.js b/web/l10n/dk.js
deleted file mode 100644
index 831e5686f..000000000
--- a/web/l10n/dk.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Loading...',
- sharedSave: 'Gem',
- sharedCancel: 'Fortryd',
- sharedAdd: 'Tilføj',
- sharedEdit: 'Rediger',
- sharedRemove: 'Fjern',
- sharedRemoveConfirm: 'Fjern enhed?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/t',
- sharedMph: 'mph',
- sharedHour: 'Time',
- sharedMinute: 'Minut',
- sharedSecond: 'Sekund',
-
- errorTitle: 'Fejl',
- errorUnknown: 'Ukendt Fejl',
-
- userName: 'Navn',
- userEmail: 'Email',
- userPassword: 'Kodeord',
- userAdmin: 'Admin',
-
- loginTitle: 'Log på',
- loginLanguage: 'Sprog',
- loginRegister: 'Registrer',
- loginLogin: 'Log på',
- loginFailed: 'Fejl i email adresse eller kodeord',
- loginCreated: 'Ny bruger er registreret',
- loginLogout: 'Log af',
-
- deviceDialog: 'Enhed',
- deviceTitle: 'Enheder',
- deviceName: 'Navn',
- deviceIdentifier: 'Imei nr',
- deviceCommand: 'Kommando',
-
- settingsTitle: 'Indstillinger',
- settingsUser: 'Konto',
- settingsServer: 'Server',
- settingsUsers: 'Brugere',
- settingsDistanceUnit: 'Distance',
- settingsSpeedUnit: 'Hastighed',
-
- reportTitle: 'Rapporter',
- reportDevice: 'Enhed',
- reportFrom: 'Fra',
- reportTo: 'Til',
- reportShow: 'Vis',
- reportClear: 'Ryd',
-
- positionTime: 'Tid',
- positionValid: 'Valid',
- positionLatitude: '>Breddegrad',
- positionLongitude: 'Længdegrad',
- positionAltitude: 'Højde',
- positionSpeed: 'Hastighed',
- positionCourse: 'Kurs',
- positionAddress: 'Addresse',
- positionProtocol: 'Protocol',
-
- serverTitle: 'Server indstillinger',
- serverZoom: 'Zoom',
- serverRegistration: 'Registrering',
-
- mapTitle: 'Kort',
- mapLayer: 'Kort opsætning',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Status',
- stateName: 'Parameter',
- stateValue: 'Værdi',
-
- commandTitle: 'Kommando',
- commandSend: 'Send',
- commandType: 'Type',
- commandPositionPeriodic: 'Periodisk Rapportering',
- commandPositionStop: 'Stop Rapportering',
- commandEngineStop: 'Stop motor',
- commandEngineResume: 'Genstart motor',
- commandFrequency: 'Frekvens',
- commandUnit: 'Enhed'
-};
diff --git a/web/l10n/el.js b/web/l10n/el.js
deleted file mode 100755
index d2d6495b7..000000000
--- a/web/l10n/el.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var strings = {
- sharedLoading: 'Φόρτωση...',
- sharedSave: 'Αποθήκευση',
- sharedCancel: 'Άκυρον',
- sharedAdd: 'Προσθήκη',
- sharedEdit: 'Επεξεργασία',
- sharedRemove: 'Διαγραφή',
- sharedRemoveConfirm: 'Διαγραφη στοιχείου;',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Ώρα',
- sharedMinute: 'Λεπτά',
- sharedSecond: 'Δευτερόλεπτα',
-
- errorTitle: 'Σφάλμα',
- errorUnknown: 'Άνωστο σφάλμα',
-
- userName: 'Όνομα',
- userEmail: 'Email',
- userPassword: 'Συνθηματικό',
- userAdmin: 'Admin',
-
- loginTitle: 'Σύνδεση',
- loginLanguage: 'Γλώσσα',
- loginRegister: 'Εγγραφή',
- loginLogin: 'Σύνδεση',
- loginFailed: 'Εσφαλμένη διεύθυνση ή εσφαλμένο συνθηματικό',
- loginCreated: 'Ο νέος χρήστης καταχωρήθηκε.',
- loginLogout: 'Αποσύνδεση',
-
- deviceDialog: 'Συσκευή',
- deviceTitle: 'Συσκευές',
- deviceName: 'Όνομα',
- deviceIdentifier: 'Αναγνωριστικό',
- deviceCommand: 'Εντολή',
-
- settingsTitle: 'Ρυθμίσεις',
- settingsUser: 'Λογαριασμός',
- settingsServer: 'Εξυπηρετητής',
- settingsUsers: 'Χρήστες',
- settingsDistanceUnit: 'Απόσταση',
- settingsSpeedUnit: 'Ταχύτητα',
-
- reportTitle: 'Αναφορές',
- reportDevice: 'Συσκευή',
- reportFrom: 'Από',
- reportTo: 'Έως',
- reportShow: 'Προβολή',
- reportClear: 'Καθαρισμός',
-
- positionTime: 'Χρόνος',
- positionValid: 'Έγκυρο',
- positionLatitude: 'Γ. πλάτος',
- positionLongitude: 'Γ. μήκος',
- positionAltitude: 'Υψόμετρο',
- positionSpeed: 'Ταχύτητα',
- positionCourse: 'Πορεία',
- positionAddress: 'Διεύθυνση',
- positionProtocol: 'Πρωτόκολλο',
-
- serverTitle: 'Ρυθμίσεις εξυπηρετητή',
- serverZoom: 'Εστίαση',
- serverRegistration: 'Εγγραφή',
-
- mapTitle: 'Χάρτης',
- mapLayer: 'Επιλογή χάρτη',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Κατάσταση',
- stateName: 'Παράμετρος',
- stateValue: 'Τιμή',
-
- commandTitle: 'Εντολή',
- commandSend: 'Αποστολή',
- commandType: 'Τύπος',
- commandPositionPeriodic: 'Περιοδικές αναφορές',
- commandPositionStop: 'Λήξη αναφορών',
- commandEngineStop: 'Κλείσιμο',
- commandEngineResume: 'Επανεκκίνηση',
- commandFrequency: 'Συχνότητα',
- commandUnit: 'Μονάδα'
-};
diff --git a/web/l10n/el.json b/web/l10n/el.json
new file mode 100644
index 000000000..5299a2362
--- /dev/null
+++ b/web/l10n/el.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Φόρτωση...",
+ "sharedSave": "Αποθήκευση",
+ "sharedCancel": "Άκυρον",
+ "sharedAdd": "Προσθήκη",
+ "sharedEdit": "Επεξεργασία",
+ "sharedRemove": "Διαγραφή",
+ "sharedRemoveConfirm": "Διαγραφη στοιχείου;",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Ώρα",
+ "sharedMinute": "Λεπτά",
+ "sharedSecond": "Δευτερόλεπτα",
+ "errorTitle": "Σφάλμα",
+ "errorUnknown": "Άνωστο σφάλμα",
+ "errorConnection": "Connection error",
+ "userName": "Όνομα",
+ "userEmail": "Email",
+ "userPassword": "Συνθηματικό",
+ "userAdmin": "Admin",
+ "loginTitle": "Σύνδεση",
+ "loginLanguage": "Γλώσσα",
+ "loginRegister": "Εγγραφή",
+ "loginLogin": "Σύνδεση",
+ "loginFailed": "Εσφαλμένη διεύθυνση ή εσφαλμένο συνθηματικό",
+ "loginCreated": "Ο νέος χρήστης καταχωρήθηκε.",
+ "loginLogout": "Αποσύνδεση",
+ "deviceDialog": "Συσκευή",
+ "deviceTitle": "Συσκευές",
+ "deviceName": "Όνομα",
+ "deviceIdentifier": "Αναγνωριστικό",
+ "deviceCommand": "Εντολή",
+ "settingsTitle": "Ρυθμίσεις",
+ "settingsUser": "Λογαριασμός",
+ "settingsServer": "Εξυπηρετητής",
+ "settingsUsers": "Χρήστες",
+ "settingsDistanceUnit": "Απόσταση",
+ "settingsSpeedUnit": "Ταχύτητα",
+ "reportTitle": "Αναφορές",
+ "reportDevice": "Συσκευή",
+ "reportFrom": "Από",
+ "reportTo": "Έως",
+ "reportShow": "Προβολή",
+ "reportClear": "Καθαρισμός",
+ "positionFixTime": "Χρόνος",
+ "positionValid": "Έγκυρο",
+ "positionLatitude": "Γ. πλάτος",
+ "positionLongitude": "Γ. μήκος",
+ "positionAltitude": "Υψόμετρο",
+ "positionSpeed": "Ταχύτητα",
+ "positionCourse": "Πορεία",
+ "positionAddress": "Διεύθυνση",
+ "positionProtocol": "Πρωτόκολλο",
+ "serverTitle": "Ρυθμίσεις εξυπηρετητή",
+ "serverZoom": "Εστίαση",
+ "serverRegistration": "Εγγραφή",
+ "mapTitle": "Χάρτης",
+ "mapLayer": "Επιλογή χάρτη",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Κατάσταση",
+ "stateName": "Παράμετρος",
+ "stateValue": "Τιμή",
+ "commandTitle": "Εντολή",
+ "commandSend": "Αποστολή",
+ "commandType": "Τύπος",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Περιοδικές αναφορές",
+ "commandPositionStop": "Λήξη αναφορών",
+ "commandEngineStop": "Κλείσιμο",
+ "commandEngineResume": "Επανεκκίνηση",
+ "commandFrequency": "Συχνότητα",
+ "commandUnit": "Μονάδα"
+} \ No newline at end of file
diff --git a/web/l10n/en.js b/web/l10n/en.js
deleted file mode 100644
index cd6bf3038..000000000
--- a/web/l10n/en.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var Strings = {
- sharedLoading: 'Loading...',
- sharedSave: 'Save',
- sharedCancel: 'Cancel',
- sharedAdd: 'Add',
- sharedEdit: 'Edit',
- sharedRemove: 'Remove',
- sharedRemoveConfirm: 'Remove item?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Hour',
- sharedMinute: 'Minute',
- sharedSecond: 'Second',
-
- errorTitle: 'Error',
- errorUnknown: 'Unknown error',
-
- userName: 'Name',
- userEmail: 'Email',
- userPassword: 'Password',
- userAdmin: 'Admin',
-
- loginTitle: 'Login',
- loginLanguage: 'Language',
- loginRegister: 'Register',
- loginLogin: 'Login',
- loginFailed: 'Incorrect email address or password',
- loginCreated: 'New user has been registered',
- loginLogout: 'Logout',
-
- deviceDialog: 'Device',
- deviceTitle: 'Devices',
- deviceName: 'Name',
- deviceIdentifier: 'Identifier',
- deviceCommand: 'Command',
-
- settingsTitle: 'Settings',
- settingsUser: 'Account',
- settingsServer: 'Server',
- settingsUsers: 'Users',
- settingsDistanceUnit: 'Distance',
- settingsSpeedUnit: 'Speed',
-
- reportTitle: 'Reports',
- reportDevice: 'Device',
- reportFrom: 'From',
- reportTo: 'To',
- reportShow: 'Show',
- reportClear: 'Clear',
-
- positionTime: 'Time',
- positionValid: 'Valid',
- positionLatitude: 'Latitude',
- positionLongitude: 'Longitude',
- positionAltitude: 'Altitude',
- positionSpeed: 'Speed',
- positionCourse: 'Course',
- positionAddress: 'Address',
- positionProtocol: 'Protocol',
-
- serverTitle: 'Server Settings',
- serverZoom: 'Zoom',
- serverRegistration: 'Registration',
-
- mapTitle: 'Map',
- mapLayer: 'Map Layer',
- mapCustom: 'Custom Map',
- mapOsm: 'Open Street Map',
- mapBingKey: 'Bing Maps Key',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'State',
- stateName: 'Attribute',
- stateValue: 'Value',
-
- commandTitle: 'Command',
- commandSend: 'Send',
- commandType: 'Type',
- commandSent: 'Command has been sent',
- commandPositionPeriodic: 'Periodic Reporting',
- commandPositionStop: 'Stop Reporting',
- commandEngineStop: 'Engine Stop',
- commandEngineResume: 'Engine Resume',
- commandFrequency: 'Frequency',
- commandUnit: 'Unit'
-};
diff --git a/web/l10n/en.json b/web/l10n/en.json
new file mode 100644
index 000000000..a3489fbe1
--- /dev/null
+++ b/web/l10n/en.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Save",
+ "sharedCancel": "Cancel",
+ "sharedAdd": "Add",
+ "sharedEdit": "Edit",
+ "sharedRemove": "Remove",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userName": "Name",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceName": "Name",
+ "deviceIdentifier": "Identifier",
+ "deviceCommand": "Command",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "reportTitle": "Reports",
+ "reportDevice": "Device",
+ "reportFrom": "From",
+ "reportTo": "To",
+ "reportShow": "Show",
+ "reportClear": "Clear",
+ "positionFixTime": "Time",
+ "positionValid": "Valid",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Speed",
+ "positionCourse": "Course",
+ "positionAddress": "Address",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server Settings",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registration",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "State",
+ "stateName": "Attribute",
+ "stateValue": "Value",
+ "commandTitle": "Command",
+ "commandSend": "Send",
+ "commandType": "Type",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodic Reporting",
+ "commandPositionStop": "Stop Reporting",
+ "commandEngineStop": "Engine Stop",
+ "commandEngineResume": "Engine Resume",
+ "commandFrequency": "Frequency",
+ "commandUnit": "Unit"
+} \ No newline at end of file
diff --git a/web/l10n/es.js b/web/l10n/es.js
deleted file mode 100644
index ff5fbb7ab..000000000
--- a/web/l10n/es.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Cargando...',
- sharedSave: 'Grabar',
- sharedCancel: 'Cancelar',
- sharedAdd: 'Agregar',
- sharedEdit: 'Editar',
- sharedRemove: 'Borrar',
- sharedRemoveConfirm: 'Borrar elemento?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Hora',
- sharedMinute: 'Minuto',
- sharedSecond: 'Segundos',
-
- errorTitle: 'Error',
- errorUnknown: 'Error Desconocido',
-
- userName: 'Nombre',
- userEmail: 'Email',
- userPassword: 'Contraseña',
- userAdmin: 'Admin',
-
- loginTitle: 'Ingresar',
- loginLanguage: 'Lenguaje',
- loginRegister: 'Registrar',
- loginLogin: 'Ingresar',
- loginFailed: 'Direccion de correo o Contraseña Incorrecta',
- loginCreated: 'Nuevo usuario ha sido registrado',
- loginLogout: 'Salir',
-
- deviceDialog: 'Dispositivo',
- deviceTitle: 'Dispositivos',
- deviceName: 'Nombre',
- deviceIdentifier: 'Identificador',
- deviceCommand: 'Comando',
-
- settingsTitle: 'Preferencias',
- settingsUser: 'Cuenta',
- settingsServer: 'Servidor',
- settingsUsers: 'Usuarios',
- settingsDistanceUnit: 'Distancia',
- settingsSpeedUnit: 'Velocidad',
-
- reportTitle: 'Reportes',
- reportDevice: 'Dispositivos',
- reportFrom: 'Desde',
- reportTo: 'Hasta',
- reportShow: 'Mostrar',
- reportClear: 'Limpiar',
-
- positionTime: 'Hora',
- positionValid: 'Valida',
- positionLatitude: 'Latitud',
- positionLongitude: 'Longitud',
- positionAltitude: 'Altitud',
- positionSpeed: 'Velocidad',
- positionCourse: 'Curso',
- positionAddress: 'Direccion',
- positionProtocol: 'Protocolo',
-
- serverTitle: 'Preferencias Servidor',
- serverZoom: 'Zoom',
- serverRegistration: 'Registrar',
-
- mapTitle: 'Mapa',
- mapLayer: 'Capa de Mapa',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps - Carretera',
- mapBingAerial: 'Bing Maps - Aereo',
-
- stateTitle: 'Estado',
- stateName: 'Parametro',
- stateValue: 'Valor',
-
- commandTitle: 'Comando',
- commandSend: 'Enviar',
- commandType: 'Tipo',
- commandPositionPeriodic: 'Frecuencia de posiciones',
- commandPositionStop: 'Detener reporte de posiciones',
- commandEngineStop: 'Apagar motor',
- commandEngineResume: 'Desbloquear encendido de motor',
- commandFrequency: 'Frequencia',
- commandUnit: 'Unidad'
-};
diff --git a/web/l10n/es.json b/web/l10n/es.json
new file mode 100644
index 000000000..065c93815
--- /dev/null
+++ b/web/l10n/es.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Cargando...",
+ "sharedSave": "Grabar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Agregar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Borrar",
+ "sharedRemoveConfirm": "Borrar elemento?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundos",
+ "errorTitle": "Error",
+ "errorUnknown": "Error Desconocido",
+ "errorConnection": "Connection error",
+ "userName": "Nombre",
+ "userEmail": "Email",
+ "userPassword": "Contraseña",
+ "userAdmin": "Admin",
+ "loginTitle": "Ingresar",
+ "loginLanguage": "Lenguaje",
+ "loginRegister": "Registrar",
+ "loginLogin": "Ingresar",
+ "loginFailed": "Direccion de correo o Contraseña Incorrecta",
+ "loginCreated": "Nuevo usuario ha sido registrado",
+ "loginLogout": "Salir",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Dispositivos",
+ "deviceName": "Nombre",
+ "deviceIdentifier": "Identificador",
+ "deviceCommand": "Comando",
+ "settingsTitle": "Preferencias",
+ "settingsUser": "Cuenta",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuarios",
+ "settingsDistanceUnit": "Distancia",
+ "settingsSpeedUnit": "Velocidad",
+ "reportTitle": "Reportes",
+ "reportDevice": "Dispositivos",
+ "reportFrom": "Desde",
+ "reportTo": "Hasta",
+ "reportShow": "Mostrar",
+ "reportClear": "Limpiar",
+ "positionFixTime": "Hora",
+ "positionValid": "Valida",
+ "positionLatitude": "Latitud",
+ "positionLongitude": "Longitud",
+ "positionAltitude": "Altitud",
+ "positionSpeed": "Velocidad",
+ "positionCourse": "Curso",
+ "positionAddress": "Direccion",
+ "positionProtocol": "Protocolo",
+ "serverTitle": "Preferencias Servidor",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrar",
+ "mapTitle": "Mapa",
+ "mapLayer": "Capa de Mapa",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps - Carretera",
+ "mapBingAerial": "Bing Maps - Aereo",
+ "stateTitle": "Estado",
+ "stateName": "Parametro",
+ "stateValue": "Valor",
+ "commandTitle": "Comando",
+ "commandSend": "Enviar",
+ "commandType": "Tipo",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Frecuencia de posiciones",
+ "commandPositionStop": "Detener reporte de posiciones",
+ "commandEngineStop": "Apagar motor",
+ "commandEngineResume": "Desbloquear encendido de motor",
+ "commandFrequency": "Frequencia",
+ "commandUnit": "Unidad"
+} \ No newline at end of file
diff --git a/web/l10n/fr.js b/web/l10n/fr.js
deleted file mode 100644
index 7d1541c22..000000000
--- a/web/l10n/fr.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Chargement...',
- sharedSave: 'Enregistrer',
- sharedCancel: 'Annuler',
- sharedAdd: 'Ajouter',
- sharedEdit: 'Editer',
- sharedRemove: 'Effacer',
- sharedRemoveConfirm: 'Effacer item?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Heure',
- sharedMinute: 'Minute',
- sharedSecond: 'Seconde',
-
- errorTitle: 'Erreur',
- errorUnknown: 'Erreur inconnue',
-
- userName: 'Nom',
- userEmail: 'Email',
- userPassword: 'Mot de Passe',
- userAdmin: 'Admin',
-
- loginTitle: 'Identification',
- loginLanguage: 'Langue',
- loginRegister: 'Inscription',
- loginLogin: 'Se connecter',
- loginFailed: 'Adresse email ou mot de passe incorrect',
- loginCreated: 'New user has been registered',
- loginLogout: 'Déconnection',
-
- deviceDialog: 'Dispositif',
- deviceTitle: 'Dispositifs',
- deviceName: 'Nom',
- deviceIdentifier: 'Identifiant',
- deviceCommand: 'Commande',
-
- settingsTitle: 'Configurations',
- settingsUser: 'Compte',
- settingsServer: 'Serveur',
- settingsUsers: 'Utilisateurs',
- settingsDistanceUnit: 'Distance',
- settingsSpeedUnit: 'Vitesse',
-
- reportTitle: 'Rapports',
- reportDevice: 'Dispositif',
- reportFrom: 'De',
- reportTo: 'A',
- reportShow: 'Afficher',
- reportClear: 'Effacer',
-
- positionTime: 'Heure',
- positionValid: 'Valide',
- positionLatitude: 'Latitude',
- positionLongitude: 'Longitude',
- positionAltitude: 'Altitude',
- positionSpeed: 'Vitesse',
- positionCourse: 'Sense',
- positionAddress: 'Adresse',
- positionProtocol: 'Protocole',
-
- serverTitle: 'Configurations du Serveur Settings',
- serverZoom: 'Zoom',
- serverRegistration: 'Inscription',
-
- mapTitle: 'Carte',
- mapLayer: 'Cartes',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Etat',
- stateName: 'Paramètre',
- stateValue: 'Valeur',
-
- commandTitle: 'Commande',
- commandSend: 'Envoyer',
- commandType: 'Type',
- commandPositionPeriodic: 'Périodicité du rapport de position',
- commandPositionStop: 'Arrêt du rapport de position',
- commandEngineStop: 'Moteur arrêter',
- commandEngineResume: 'Moteur démarrer',
- commandFrequency: 'Fréquence',
- commandUnit: 'Unité'
-};
diff --git a/web/l10n/fr.json b/web/l10n/fr.json
new file mode 100644
index 000000000..1d677a263
--- /dev/null
+++ b/web/l10n/fr.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Chargement...",
+ "sharedSave": "Enregistrer",
+ "sharedCancel": "Annuler",
+ "sharedAdd": "Ajouter",
+ "sharedEdit": "Editer",
+ "sharedRemove": "Effacer",
+ "sharedRemoveConfirm": "Effacer item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Heure",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Seconde",
+ "errorTitle": "Erreur",
+ "errorUnknown": "Erreur inconnue",
+ "errorConnection": "Connection error",
+ "userName": "Nom",
+ "userEmail": "Email",
+ "userPassword": "Mot de Passe",
+ "userAdmin": "Admin",
+ "loginTitle": "Identification",
+ "loginLanguage": "Langue",
+ "loginRegister": "Inscription",
+ "loginLogin": "Se connecter",
+ "loginFailed": "Adresse email ou mot de passe incorrect",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Déconnection",
+ "deviceDialog": "Dispositif",
+ "deviceTitle": "Dispositifs",
+ "deviceName": "Nom",
+ "deviceIdentifier": "Identifiant",
+ "deviceCommand": "Commande",
+ "settingsTitle": "Configurations",
+ "settingsUser": "Compte",
+ "settingsServer": "Serveur",
+ "settingsUsers": "Utilisateurs",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Vitesse",
+ "reportTitle": "Rapports",
+ "reportDevice": "Dispositif",
+ "reportFrom": "De",
+ "reportTo": "A",
+ "reportShow": "Afficher",
+ "reportClear": "Effacer",
+ "positionFixTime": "Heure",
+ "positionValid": "Valide",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Vitesse",
+ "positionCourse": "Sense",
+ "positionAddress": "Adresse",
+ "positionProtocol": "Protocole",
+ "serverTitle": "Configurations du Serveur Settings",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Inscription",
+ "mapTitle": "Carte",
+ "mapLayer": "Cartes",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Etat",
+ "stateName": "Paramètre",
+ "stateValue": "Valeur",
+ "commandTitle": "Commande",
+ "commandSend": "Envoyer",
+ "commandType": "Type",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Périodicité du rapport de position",
+ "commandPositionStop": "Arrêt du rapport de position",
+ "commandEngineStop": "Moteur arrêter",
+ "commandEngineResume": "Moteur démarrer",
+ "commandFrequency": "Fréquence",
+ "commandUnit": "Unité"
+} \ No newline at end of file
diff --git a/web/l10n/hu.js b/web/l10n/hu.js
deleted file mode 100755
index b8d965e4a..000000000
--- a/web/l10n/hu.js
+++ /dev/null
@@ -1,87 +0,0 @@
-var strings = {
- sharedLoading: 'Betöltés...',
- sharedSave: 'Mentés',
- sharedCancel: 'Mégse',
- sharedAdd: 'Hozzáadás',
- sharedEdit: 'Szerkesztés',
- sharedRemove: 'Törlés',
- sharedRemoveConfirm: 'Biztosan törli?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Óra',
- sharedMinute: 'Perc',
- sharedSecond: 'Másodperc',
-
- errorTitle: 'Hiba',
- errorUnknown: 'Ismeretlen hiba.',
-
- userName: 'Név',
- userEmail: 'Email',
- userPassword: 'Jelszó',
- userAdmin: 'Adminisztrátor',
-
- loginTitle: 'Bejelentkezés',
- loginLanguage: 'Nyelv',
- loginRegister: 'Regisztráció',
- loginLogin: 'Bejelentkezés',
- loginFailed: 'Hibás email vagy jelszó',
- loginCreated: 'Az új felhasználó sikeresen létrehozva',
- loginLogout: 'Kilépés',
-
- deviceDialog: 'Eszköz',
- deviceTitle: 'Eszközök',
- deviceName: 'Eszköznév',
- deviceIdentifier: 'Azonosító',
- deviceCommand: 'Parancs',
-
- settingsTitle: 'Beállítások',
- settingsUser: 'Fiók',
- settingsServer: 'Szerver',
- settingsUsers: 'Felhasználók',
- settingsDistanceUnit: 'Távolság',
- settingsSpeedUnit: 'Sebesség',
-
- reportTitle: 'Jelentések',
- reportDevice: 'Eszköz',
- reportFrom: 'Kezdő dátum:',
- reportTo: 'Végső dátum:',
- reportShow: 'Mutat',
- reportClear: 'Töröl',
-
- positionTime: 'Idő',
- positionValid: 'Valós',
- positionLatitude: 'Szélességi fok',
- positionLongitude: 'Hosszúsági fok',
- positionAltitude: 'Magasság',
- positionSpeed: 'Sebesség',
- positionCourse: 'Irány',
- positionAddress: 'Cím',
- positionProtocol: 'Protokoll',
-
- serverTitle: 'Szerver beállítások',
- serverZoom: 'Nagyítás',
- serverRegistration: 'Regisztráció',
-
- mapTitle: 'Térkép',
- mapLayer: 'Térkép réteg',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Helyzet',
- stateName: 'Paraméter',
- stateValue: 'Érték',
-
- commandTitle: 'Parancs',
- commandSend: 'Küld',
- commandType: 'Típus',
- commandSent: 'A parancs elküldve',
- commandPositionPeriodic: 'Pozició küldés',
- commandPositionStop: 'Pozició küldés vége',
- commandEngineStop: 'Motor letiltás',
- commandEngineResume: 'Motor engedélyezés',
- commandFrequency: 'Frekvencia',
- commandUnit: 'Egység'
-};
diff --git a/web/l10n/hu.json b/web/l10n/hu.json
new file mode 100644
index 000000000..db587bc22
--- /dev/null
+++ b/web/l10n/hu.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Betöltés...",
+ "sharedSave": "Mentés",
+ "sharedCancel": "Mégse",
+ "sharedAdd": "Hozzáadás",
+ "sharedEdit": "Szerkesztés",
+ "sharedRemove": "Törlés",
+ "sharedRemoveConfirm": "Biztosan törli?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Óra",
+ "sharedMinute": "Perc",
+ "sharedSecond": "Másodperc",
+ "errorTitle": "Hiba",
+ "errorUnknown": "Ismeretlen hiba.",
+ "errorConnection": "Connection error",
+ "userName": "Név",
+ "userEmail": "Email",
+ "userPassword": "Jelszó",
+ "userAdmin": "Adminisztrátor",
+ "loginTitle": "Bejelentkezés",
+ "loginLanguage": "Nyelv",
+ "loginRegister": "Regisztráció",
+ "loginLogin": "Bejelentkezés",
+ "loginFailed": "Hibás email vagy jelszó",
+ "loginCreated": "Az új felhasználó sikeresen létrehozva",
+ "loginLogout": "Kilépés",
+ "deviceDialog": "Eszköz",
+ "deviceTitle": "Eszközök",
+ "deviceName": "Eszköznév",
+ "deviceIdentifier": "Azonosító",
+ "deviceCommand": "Parancs",
+ "settingsTitle": "Beállítások",
+ "settingsUser": "Fiók",
+ "settingsServer": "Szerver",
+ "settingsUsers": "Felhasználók",
+ "settingsDistanceUnit": "Távolság",
+ "settingsSpeedUnit": "Sebesség",
+ "reportTitle": "Jelentések",
+ "reportDevice": "Eszköz",
+ "reportFrom": "Kezdő dátum:",
+ "reportTo": "Végső dátum:",
+ "reportShow": "Mutat",
+ "reportClear": "Töröl",
+ "positionFixTime": "Idő",
+ "positionValid": "Valós",
+ "positionLatitude": "Szélességi fok",
+ "positionLongitude": "Hosszúsági fok",
+ "positionAltitude": "Magasság",
+ "positionSpeed": "Sebesség",
+ "positionCourse": "Irány",
+ "positionAddress": "Cím",
+ "positionProtocol": "Protokoll",
+ "serverTitle": "Szerver beállítások",
+ "serverZoom": "Nagyítás",
+ "serverRegistration": "Regisztráció",
+ "mapTitle": "Térkép",
+ "mapLayer": "Térkép réteg",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Helyzet",
+ "stateName": "Paraméter",
+ "stateValue": "Érték",
+ "commandTitle": "Parancs",
+ "commandSend": "Küld",
+ "commandType": "Típus",
+ "commandSent": "A parancs elküldve",
+ "commandPositionPeriodic": "Pozició küldés",
+ "commandPositionStop": "Pozició küldés vége",
+ "commandEngineStop": "Motor letiltás",
+ "commandEngineResume": "Motor engedélyezés",
+ "commandFrequency": "Frekvencia",
+ "commandUnit": "Egység"
+} \ No newline at end of file
diff --git a/web/l10n/lt.js b/web/l10n/lt.js
deleted file mode 100644
index 1ff138d65..000000000
--- a/web/l10n/lt.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Kraunasi..',
- sharedSave: 'Išsaugoti',
- sharedCancel: 'Atšaukti',
- sharedAdd: 'Pridėti',
- sharedEdit: 'Redaguoti',
- sharedRemove: 'Ištrinti',
- sharedRemoveConfirm: 'Ar tikrais norite ištrinti?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Valanda(-os)',
- sharedMinute: 'Minutė(-es)',
- sharedSecond: 'Sekundė(-es)',
-
- errorTitle: 'Klaida',
- errorUnknown: 'Nenumatyta klaida',
-
- userName: 'Prisijungimo vardas',
- userEmail: 'Vartotojo vardas',
- userPassword: 'Slaptažodis',
- userAdmin: 'Administratorius',
-
- loginTitle: 'Prisijungimas',
- loginLanguage: 'Kalba',
- loginRegister: 'Registruotis',
- loginLogin: 'Prisijungti',
- loginFailed: 'Neteisingas el.paštas ir/ar slaptažodis',
- loginCreated: 'Registracija sėmkinga',
- loginLogout: 'Atsijungti',
-
- deviceDialog: 'Prietaisas',
- deviceTitle: 'Prietaisai',
- deviceName: 'Pavadinimas',
- deviceIdentifier: 'Identifikacinis kodas',
- deviceCommand: 'Komanda',
-
- settingsTitle: 'Nustatymai',
- settingsUser: 'Paskyra',
- settingsServer: 'Serveris',
- settingsUsers: 'Vartotojai',
- settingsDistanceUnit: 'Atstumas',
- settingsSpeedUnit: 'Greitis',
-
- reportTitle: 'Ataskaita',
- reportDevice: 'Prietaisas',
- reportFrom: 'Nuo',
- reportTo: 'Iki',
- reportShow: 'Rodyti',
- reportClear: 'Valyti',
-
- positionTime: 'Laikas',
- positionValid: 'Galimas',
- positionLatitude: 'Platuma',
- positionLongitude: 'Ilguma',
- positionAltitude: 'Aukštis',
- positionSpeed: 'Greitis',
- positionCourse: 'Eiga',
- positionAddress: 'Adresas',
- positionProtocol: 'Protokolas',
-
- serverTitle: 'Serverio nustatymai',
- serverZoom: 'Priartinimas',
- serverRegistration: 'Registracija',
-
- mapTitle: 'Žemėlapis',
- mapLayer: 'Žemėlapio sluoksnis',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Statusas',
- stateName: 'Parametras',
- stateValue: 'Reikšmė',
-
- commandTitle: 'Komanda',
- commandSend: 'Siūsti',
- commandType: 'Tipas',
- commandPositionPeriodic: 'Periodinis reportavimas',
- commandPositionStop: 'Stabdyti reportavimą',
- commandEngineStop: 'Stabdyti variklį',
- commandEngineResume: 'Paleisti variklį',
- commandFrequency: 'Dažnis',
- commandUnit: 'Vienetai'
-};
diff --git a/web/l10n/lt.json b/web/l10n/lt.json
new file mode 100644
index 000000000..715803b30
--- /dev/null
+++ b/web/l10n/lt.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Kraunasi..",
+ "sharedSave": "Išsaugoti",
+ "sharedCancel": "Atšaukti",
+ "sharedAdd": "Pridėti",
+ "sharedEdit": "Redaguoti",
+ "sharedRemove": "Ištrinti",
+ "sharedRemoveConfirm": "Ar tikrais norite ištrinti?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Valanda(-os)",
+ "sharedMinute": "Minutė(-es)",
+ "sharedSecond": "Sekundė(-es)",
+ "errorTitle": "Klaida",
+ "errorUnknown": "Nenumatyta klaida",
+ "errorConnection": "Connection error",
+ "userName": "Prisijungimo vardas",
+ "userEmail": "Vartotojo vardas",
+ "userPassword": "Slaptažodis",
+ "userAdmin": "Administratorius",
+ "loginTitle": "Prisijungimas",
+ "loginLanguage": "Kalba",
+ "loginRegister": "Registruotis",
+ "loginLogin": "Prisijungti",
+ "loginFailed": "Neteisingas el.paštas ir/ar slaptažodis",
+ "loginCreated": "Registracija sėmkinga",
+ "loginLogout": "Atsijungti",
+ "deviceDialog": "Prietaisas",
+ "deviceTitle": "Prietaisai",
+ "deviceName": "Pavadinimas",
+ "deviceIdentifier": "Identifikacinis kodas",
+ "deviceCommand": "Komanda",
+ "settingsTitle": "Nustatymai",
+ "settingsUser": "Paskyra",
+ "settingsServer": "Serveris",
+ "settingsUsers": "Vartotojai",
+ "settingsDistanceUnit": "Atstumas",
+ "settingsSpeedUnit": "Greitis",
+ "reportTitle": "Ataskaita",
+ "reportDevice": "Prietaisas",
+ "reportFrom": "Nuo",
+ "reportTo": "Iki",
+ "reportShow": "Rodyti",
+ "reportClear": "Valyti",
+ "positionFixTime": "Laikas",
+ "positionValid": "Galimas",
+ "positionLatitude": "Platuma",
+ "positionLongitude": "Ilguma",
+ "positionAltitude": "Aukštis",
+ "positionSpeed": "Greitis",
+ "positionCourse": "Eiga",
+ "positionAddress": "Adresas",
+ "positionProtocol": "Protokolas",
+ "serverTitle": "Serverio nustatymai",
+ "serverZoom": "Priartinimas",
+ "serverRegistration": "Registracija",
+ "mapTitle": "Žemėlapis",
+ "mapLayer": "Žemėlapio sluoksnis",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Statusas",
+ "stateName": "Parametras",
+ "stateValue": "Reikšmė",
+ "commandTitle": "Komanda",
+ "commandSend": "Siūsti",
+ "commandType": "Tipas",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodinis reportavimas",
+ "commandPositionStop": "Stabdyti reportavimą",
+ "commandEngineStop": "Stabdyti variklį",
+ "commandEngineResume": "Paleisti variklį",
+ "commandFrequency": "Dažnis",
+ "commandUnit": "Vienetai"
+} \ No newline at end of file
diff --git a/web/l10n/nl.js b/web/l10n/nl.js
deleted file mode 100644
index b51040068..000000000
--- a/web/l10n/nl.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Laden...',
- sharedSave: 'Opslaan',
- sharedCancel: 'Annuleren',
- sharedAdd: 'Toevoegen',
- sharedEdit: 'Bewerken',
- sharedRemove: 'Verwijderen',
- sharedRemoveConfirm: 'Verwijder item?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Uur',
- sharedMinute: 'Minuut',
- sharedSecond: 'Seconde',
-
- errorTitle: 'Fout',
- errorUnknown: 'Onbekende fout',
-
- userName: 'Gebruikersnaam',
- userEmail: 'Email',
- userPassword: 'WachtwoordPassword',
- userAdmin: 'Admin',
-
- loginTitle: 'Inloggen',
- loginLanguage: 'Taal',
- loginRegister: 'Registeren',
- loginLogin: 'Inloggen',
- loginFailed: 'Onjuiste emailadres of wachtwoord',
- loginCreated: 'Nieuwe gebruiker is geregistreerd',
- loginLogout: 'Uitloggen',
-
- deviceDialog: 'Apparaat',
- deviceTitle: 'Apparaten',
- deviceName: 'Naam',
- deviceIdentifier: 'Identifier',
- deviceCommand: 'Commando',
-
- settingsTitle: 'Instellingen',
- settingsUser: 'Account',
- settingsServer: 'Server',
- settingsUsers: 'Gebruikers',
- settingsDistanceUnit: 'Afstand',
- settingsSpeedUnit: 'Snelheid',
-
- reportTitle: 'Reports',
- reportDevice: 'Apparaat',
- reportFrom: 'Van',
- reportTo: 'Naar',
- reportShow: 'Laten zien',
- reportClear: 'Leegmaken',
-
- positionTime: 'Tijd',
- positionValid: 'Geldig',
- positionLatitude: 'Latitude',
- positionLongitude: 'Longitude',
- positionAltitude: 'Altitude',
- positionSpeed: 'Snelheid',
- positionCourse: 'Koers',
- positionAddress: 'Adres',
- positionProtocol: 'Protocol',
-
- serverTitle: 'Server Instellingen',
- serverZoom: 'Zoom',
- serverRegistration: 'Registratie',
-
- mapTitle: 'Kaart',
- mapLayer: 'Kaart laag',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Wegen',
- mapBingAerial: 'Bing Maps Luchtfoto',
-
- stateTitle: 'Status',
- stateName: 'Parameter',
- stateValue: 'Waarde',
-
- commandTitle: 'Commando',
- commandSend: 'Verstuur',
- commandType: 'Type',
- commandPositionPeriodic: 'Periodic Reporting',
- commandPositionStop: 'Stop Reporting',
- commandEngineStop: 'Engine Stop',
- commandEngineResume: 'Engine Resume',
- commandFrequency: 'Frequentie',
- commandUnit: 'Eenheid'
-};
diff --git a/web/l10n/nl.json b/web/l10n/nl.json
new file mode 100644
index 000000000..95e797513
--- /dev/null
+++ b/web/l10n/nl.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Laden...",
+ "sharedSave": "Opslaan",
+ "sharedCancel": "Annuleren",
+ "sharedAdd": "Toevoegen",
+ "sharedEdit": "Bewerken",
+ "sharedRemove": "Verwijderen",
+ "sharedRemoveConfirm": "Verwijder item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Uur",
+ "sharedMinute": "Minuut",
+ "sharedSecond": "Seconde",
+ "errorTitle": "Fout",
+ "errorUnknown": "Onbekende fout",
+ "errorConnection": "Connection error",
+ "userName": "Gebruikersnaam",
+ "userEmail": "Email",
+ "userPassword": "WachtwoordPassword",
+ "userAdmin": "Admin",
+ "loginTitle": "Inloggen",
+ "loginLanguage": "Taal",
+ "loginRegister": "Registeren",
+ "loginLogin": "Inloggen",
+ "loginFailed": "Onjuiste emailadres of wachtwoord",
+ "loginCreated": "Nieuwe gebruiker is geregistreerd",
+ "loginLogout": "Uitloggen",
+ "deviceDialog": "Apparaat",
+ "deviceTitle": "Apparaten",
+ "deviceName": "Naam",
+ "deviceIdentifier": "Identifier",
+ "deviceCommand": "Commando",
+ "settingsTitle": "Instellingen",
+ "settingsUser": "Account",
+ "settingsServer": "Server",
+ "settingsUsers": "Gebruikers",
+ "settingsDistanceUnit": "Afstand",
+ "settingsSpeedUnit": "Snelheid",
+ "reportTitle": "Reports",
+ "reportDevice": "Apparaat",
+ "reportFrom": "Van",
+ "reportTo": "Naar",
+ "reportShow": "Laten zien",
+ "reportClear": "Leegmaken",
+ "positionFixTime": "Tijd",
+ "positionValid": "Geldig",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Snelheid",
+ "positionCourse": "Koers",
+ "positionAddress": "Adres",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server Instellingen",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registratie",
+ "mapTitle": "Kaart",
+ "mapLayer": "Kaart laag",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Wegen",
+ "mapBingAerial": "Bing Maps Luchtfoto",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Waarde",
+ "commandTitle": "Commando",
+ "commandSend": "Verstuur",
+ "commandType": "Type",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodic Reporting",
+ "commandPositionStop": "Stop Reporting",
+ "commandEngineStop": "Engine Stop",
+ "commandEngineResume": "Engine Resume",
+ "commandFrequency": "Frequentie",
+ "commandUnit": "Eenheid"
+} \ No newline at end of file
diff --git a/web/l10n/pl.js b/web/l10n/pl.js
deleted file mode 100644
index 238dd33bf..000000000
--- a/web/l10n/pl.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Wczytywanie...',
- sharedSave: 'Zapisz',
- sharedCancel: 'Anuluj',
- sharedAdd: 'Dodaj',
- sharedEdit: 'Edytuj',
- sharedRemove: 'Usuń',
- sharedRemoveConfirm: 'Usuń obiekt?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Godzina',
- sharedMinute: 'Minuta',
- sharedSecond: 'Sekunda',
-
- errorTitle: 'Bląd',
- errorUnknown: 'Nieznany błąd',
-
- userName: 'Nazwa',
- userEmail: 'Email',
- userPassword: 'Hasło',
- userAdmin: 'Administrator',
-
- loginTitle: 'Logowanie',
- loginLanguage: 'Język',
- loginRegister: 'Rejestracja',
- loginLogin: 'Zaloguj',
- loginFailed: 'Nieprawidłowy adres e-mail lub hasło',
- loginCreated: 'Nowy użytkownik został zarejestrowany',
- loginLogout: 'Wyloguj',
-
- deviceDialog: 'Urządzenie',
- deviceTitle: 'Urządzenia',
- deviceName: 'Nazwa',
- deviceIdentifier: 'Identyfikator',
- deviceCommand: 'Zdarzenie',
-
- settingsTitle: 'Ustawienia',
- settingsUser: 'Konto',
- settingsServer: 'Serwer',
- settingsUsers: 'Użytkownicy',
- settingsDistanceUnit: 'Dystans',
- settingsSpeedUnit: 'Prędkość',
-
- reportTitle: 'Raporty',
- reportDevice: 'Urządzenie',
- reportFrom: 'Z',
- reportTo: 'Do',
- reportShow: 'Wczytaj',
- reportClear: 'Wyczyść',
-
- positionTime: 'Czas',
- positionValid: 'Aktywny',
- positionLatitude: 'Szerokość',
- positionLongitude: 'Długość',
- positionAltitude: 'Wysokość',
- positionSpeed: 'Prędkość',
- positionCourse: 'Kurs',
- positionAddress: 'Adres',
- positionProtocol: 'Protokół',
-
- serverTitle: 'Ustawienia serwera',
- serverZoom: 'Powiększenie',
- serverRegistration: 'Rejestracja',
-
- mapTitle: 'Mapa',
- mapLayer: 'Mapa',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Lokalizacja',
- stateName: 'Właściwości',
- stateValue: 'Wartość',
-
- commandTitle: 'Zdarzenie',
- commandSend: 'Wyślij',
- commandType: 'Typ',
- commandPositionPeriodic: 'Pozycja - Fix',
- commandPositionStop: 'Pozycja - Stop',
- commandEngineStop: 'Silnik - Stop',
- commandEngineResume: 'Silnik - Praca',
- commandFrequency: 'Częstotliwość',
- commandUnit: 'Jednostka'
-};
diff --git a/web/l10n/pl.json b/web/l10n/pl.json
new file mode 100644
index 000000000..bb02c4b4c
--- /dev/null
+++ b/web/l10n/pl.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Wczytywanie...",
+ "sharedSave": "Zapisz",
+ "sharedCancel": "Anuluj",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Edytuj",
+ "sharedRemove": "Usuń",
+ "sharedRemoveConfirm": "Usuń obiekt?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Godzina",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "errorTitle": "Bląd",
+ "errorUnknown": "Nieznany błąd",
+ "errorConnection": "Connection error",
+ "userName": "Nazwa",
+ "userEmail": "Email",
+ "userPassword": "Hasło",
+ "userAdmin": "Administrator",
+ "loginTitle": "Logowanie",
+ "loginLanguage": "Język",
+ "loginRegister": "Rejestracja",
+ "loginLogin": "Zaloguj",
+ "loginFailed": "Nieprawidłowy adres e-mail lub hasło",
+ "loginCreated": "Nowy użytkownik został zarejestrowany",
+ "loginLogout": "Wyloguj",
+ "deviceDialog": "Urządzenie",
+ "deviceTitle": "Urządzenia",
+ "deviceName": "Nazwa",
+ "deviceIdentifier": "Identyfikator",
+ "deviceCommand": "Zdarzenie",
+ "settingsTitle": "Ustawienia",
+ "settingsUser": "Konto",
+ "settingsServer": "Serwer",
+ "settingsUsers": "Użytkownicy",
+ "settingsDistanceUnit": "Dystans",
+ "settingsSpeedUnit": "Prędkość",
+ "reportTitle": "Raporty",
+ "reportDevice": "Urządzenie",
+ "reportFrom": "Z",
+ "reportTo": "Do",
+ "reportShow": "Wczytaj",
+ "reportClear": "Wyczyść",
+ "positionFixTime": "Czas",
+ "positionValid": "Aktywny",
+ "positionLatitude": "Szerokość",
+ "positionLongitude": "Długość",
+ "positionAltitude": "Wysokość",
+ "positionSpeed": "Prędkość",
+ "positionCourse": "Kurs",
+ "positionAddress": "Adres",
+ "positionProtocol": "Protokół",
+ "serverTitle": "Ustawienia serwera",
+ "serverZoom": "Powiększenie",
+ "serverRegistration": "Rejestracja",
+ "mapTitle": "Mapa",
+ "mapLayer": "Mapa",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Lokalizacja",
+ "stateName": "Właściwości",
+ "stateValue": "Wartość",
+ "commandTitle": "Zdarzenie",
+ "commandSend": "Wyślij",
+ "commandType": "Typ",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Pozycja - Fix",
+ "commandPositionStop": "Pozycja - Stop",
+ "commandEngineStop": "Silnik - Stop",
+ "commandEngineResume": "Silnik - Praca",
+ "commandFrequency": "Częstotliwość",
+ "commandUnit": "Jednostka"
+} \ No newline at end of file
diff --git a/web/l10n/pt.js b/web/l10n/pt.js
deleted file mode 100644
index 6155b2312..000000000
--- a/web/l10n/pt.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Carregando ...',
- sharedSave: 'Salvar',
- sharedCancel: 'Cancelar',
- sharedAdd: 'Adicionar',
- sharedEdit: 'Editar',
- sharedRemove: 'Remover',
- sharedRemoveConfirm: 'Remove item?',
- sharedKm: 'Km',
- sharedMi: 'mi',
- sharedKmh: 'Km/h',
- sharedMph: 'Mph',
- sharedHour: 'Hora',
- sharedMinute: 'Minuto',
- sharedSecond: 'Segundo',
-
- errorTitle: 'Erro',
- errorUnknown: 'Erro desconhecido',
-
- userName: 'Nome',
- userEmail: 'E-mail',
- userPassword: 'Senha',
- userAdmin: 'Admin',
-
- loginTitle: 'Entrar',
- loginLanguage: 'Idioma',
- loginRegister: 'Registrar',
- loginLogin: 'Entrar',
- loginFailed: 'Endereço de e-mail ou senha incorreta',
- loginCreated: 'Novo usuário foi registrado',
- loginLogout: 'Sair',
-
- deviceDialog: 'Dispositivo',
- deviceTitle: 'Devices',
- deviceName: 'Nome',
- deviceIdentifier: 'Identificador',
- deviceCommand: 'Comando',
-
- settingsTitle: 'Configurações',
- settingsUser: 'Conta',
- settingsServer: 'Servidor',
- settingsUsers: 'Usuário',
- settingsDistanceUnit: 'Distância',
- settingsSpeedUnit: 'Velocidade',
-
- reportTitle: 'Relatórios',
- reportDevice: 'Dispositivo',
- reportFrom: 'De',
- reportTo: 'Para',
- reportShow: 'Mostrar',
- reportClear: 'Limpar',
-
- positionTime: 'Tempo',
- positionValid: 'Válido',
- positionLatitude: 'Latitude',
- positionLongitude: 'Longitude',
- positionAltitude: 'Altitude',
- positionSpeed: 'Velocidade',
- positionCourse: 'Course',
- positionAddress: 'Endereço',
- positionProtocol: 'protocolo',
-
- serverTitle: 'Configurações do Servidor',
- serverZoom: 'Zoom',
- serverRegistration: 'Registro',
-
- mapTitle: 'Mapa',
- mapLayer: 'Camada Mapa',
- mapOsm: 'Open Street Mapa',
- mapBingRoad: 'Bing Mapas Estrada',
- mapBingAerial: 'Bing Mapas Aérea',
-
- stateTitle: 'Estado',
- stateName: 'Parâmetro',
- stateValue: 'Valor',
-
- commandTitle: 'Comando',
- commandSend: 'Enviar',
- commandType: 'Tipo',
- commandPositionPeriodic: 'Posição Tempo',
- commandPositionStop: 'Parar Posição',
- commandEngineStop: 'Bloqueio Veículo',
- commandEngineResume: 'Desbloqueio Veículo',
- commandFrequency: 'Frequência',
- commandUnit: 'Unidade'
-};
diff --git a/web/l10n/pt.json b/web/l10n/pt.json
new file mode 100644
index 000000000..3a62ef489
--- /dev/null
+++ b/web/l10n/pt.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Carregando ...",
+ "sharedSave": "Salvar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Adicionar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Remover",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "Km",
+ "sharedMi": "mi",
+ "sharedKmh": "Km/h",
+ "sharedMph": "Mph",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundo",
+ "errorTitle": "Erro",
+ "errorUnknown": "Erro desconhecido",
+ "errorConnection": "Connection error",
+ "userName": "Nome",
+ "userEmail": "E-mail",
+ "userPassword": "Senha",
+ "userAdmin": "Admin",
+ "loginTitle": "Entrar",
+ "loginLanguage": "Idioma",
+ "loginRegister": "Registrar",
+ "loginLogin": "Entrar",
+ "loginFailed": "Endereço de e-mail ou senha incorreta",
+ "loginCreated": "Novo usuário foi registrado",
+ "loginLogout": "Sair",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Devices",
+ "deviceName": "Nome",
+ "deviceIdentifier": "Identificador",
+ "deviceCommand": "Comando",
+ "settingsTitle": "Configurações",
+ "settingsUser": "Conta",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuário",
+ "settingsDistanceUnit": "Distância",
+ "settingsSpeedUnit": "Velocidade",
+ "reportTitle": "Relatórios",
+ "reportDevice": "Dispositivo",
+ "reportFrom": "De",
+ "reportTo": "Para",
+ "reportShow": "Mostrar",
+ "reportClear": "Limpar",
+ "positionFixTime": "Tempo",
+ "positionValid": "Válido",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Velocidade",
+ "positionCourse": "Course",
+ "positionAddress": "Endereço",
+ "positionProtocol": "protocolo",
+ "serverTitle": "Configurações do Servidor",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registro",
+ "mapTitle": "Mapa",
+ "mapLayer": "Camada Mapa",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Mapa",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Mapas Estrada",
+ "mapBingAerial": "Bing Mapas Aérea",
+ "stateTitle": "Estado",
+ "stateName": "Parâmetro",
+ "stateValue": "Valor",
+ "commandTitle": "Comando",
+ "commandSend": "Enviar",
+ "commandType": "Tipo",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Posição Tempo",
+ "commandPositionStop": "Parar Posição",
+ "commandEngineStop": "Bloqueio Veículo",
+ "commandEngineResume": "Desbloqueio Veículo",
+ "commandFrequency": "Frequência",
+ "commandUnit": "Unidade"
+} \ No newline at end of file
diff --git a/web/l10n/pt_BR.json b/web/l10n/pt_BR.json
new file mode 100644
index 000000000..612c93176
--- /dev/null
+++ b/web/l10n/pt_BR.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Carregando...",
+ "sharedSave": "Gravar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Adicionar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Remover",
+ "sharedRemoveConfirm": "Remover item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundo",
+ "errorTitle": "Erro",
+ "errorUnknown": "Erro desconhecido",
+ "errorConnection": "Erro de conexão",
+ "userName": "Nome",
+ "userEmail": "Email",
+ "userPassword": "Senha",
+ "userAdmin": "Admin",
+ "loginTitle": "Entrar",
+ "loginLanguage": "Idioma",
+ "loginRegister": "Registrar",
+ "loginLogin": "Entrar",
+ "loginFailed": "Endereço de email ou senha incorretos",
+ "loginCreated": "O novo usuário foi registrado",
+ "loginLogout": "Sair",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Dispositivos",
+ "deviceName": "Nome",
+ "deviceIdentifier": "Identificador",
+ "deviceCommand": "Comando",
+ "settingsTitle": "Configurações",
+ "settingsUser": "Conta",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuários",
+ "settingsDistanceUnit": "Distância",
+ "settingsSpeedUnit": "Velocidade",
+ "reportTitle": "Relatórios",
+ "reportDevice": "Dispositivo",
+ "reportFrom": "De",
+ "reportTo": "Para",
+ "reportShow": "Mostrar",
+ "reportClear": "Limpar",
+ "positionFixTime": "Tempo",
+ "positionValid": "Válido",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "Velocidade",
+ "positionCourse": "Curso",
+ "positionAddress": "Endereço",
+ "positionProtocol": "Protocolo",
+ "serverTitle": "Configurações do Servidor",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registro",
+ "mapTitle": "Mapa",
+ "mapLayer": "Camada de Mapa",
+ "mapCustom": "Mapa Personalizado",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Estradas",
+ "mapBingAerial": "Bing Maps Aéreo",
+ "stateTitle": "Estado",
+ "stateName": "Atributo",
+ "stateValue": "Valor",
+ "commandTitle": "Comando",
+ "commandSend": "Enviar",
+ "commandType": "Tipo",
+ "commandSent": "Comando foi enviado",
+ "commandPositionPeriodic": "Atualização Periódica",
+ "commandPositionStop": "Parar Atualizaçao",
+ "commandEngineStop": "Parar Motor",
+ "commandEngineResume": "Religar Motor",
+ "commandFrequency": "Frequencia",
+ "commandUnit": "Unidade"
+} \ No newline at end of file
diff --git a/web/l10n/ru.js b/web/l10n/ru.js
deleted file mode 100644
index ea98d31ff..000000000
--- a/web/l10n/ru.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Загрузка...',
- sharedSave: 'Сохранить',
- sharedCancel: 'Отмена',
- sharedAdd: 'Добавить',
- sharedEdit: 'Редактировать',
- sharedRemove: 'Удалить',
- sharedRemoveConfirm: 'Удалить элемент?',
- sharedKm: 'км',
- sharedMi: 'мили',
- sharedKmh: 'км/ч',
- sharedMph: 'миль/ч',
- sharedHour: 'Часы',
- sharedMinute: 'Минуты',
- sharedSecond: 'Секунды',
-
- errorTitle: 'Ошибка',
- errorUnknown: 'Неизвестная ошибка',
-
- userName: 'Имя',
- userEmail: 'Email',
- userPassword: 'Пароль',
- userAdmin: 'Администратор',
-
- loginTitle: 'Вход',
- loginLanguage: 'Язык',
- loginRegister: 'Регистрация',
- loginLogin: 'Вход',
- loginFailed: 'Неправильный email адрес или пароль',
- loginCreated: 'Новый пользователь зарегистрирован',
- loginLogout: 'Выход',
-
- deviceDialog: 'Устройство',
- deviceTitle: 'Устройства',
- deviceName: 'Название',
- deviceIdentifier: 'Идентификатор',
- deviceCommand: 'Команда',
-
- settingsTitle: 'Настройки',
- settingsUser: 'Аккаунт',
- settingsServer: 'Сервер',
- settingsUsers: 'Пользователи',
- settingsDistanceUnit: 'Расстояние',
- settingsSpeedUnit: 'Скорость',
-
- reportTitle: 'Отчеты',
- reportDevice: 'Устройство',
- reportFrom: 'С',
- reportTo: 'По',
- reportShow: 'Показать',
- reportClear: 'Очистить',
-
- positionTime: 'Время',
- positionValid: 'Корректность',
- positionLatitude: 'Широта',
- positionLongitude: 'Долгота',
- positionAltitude: 'Высота',
- positionSpeed: 'Скорость',
- positionCourse: 'Курс',
- positionAddress: 'Адрес',
- positionProtocol: 'Протокол',
-
- serverTitle: 'Настройки Сервера',
- serverZoom: 'Приближение',
- serverRegistration: 'Регистрация',
-
- mapTitle: 'Карта',
- mapLayer: 'Слой Карты',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Дороги',
- mapBingAerial: 'Bing Maps Спутник',
-
- stateTitle: 'Состояние',
- stateName: 'Параметр',
- stateValue: 'Значение',
-
- commandTitle: 'Команда',
- commandSend: 'Отправить',
- commandType: 'Тип',
- commandPositionPeriodic: 'Начать Отслеживание',
- commandPositionStop: 'Отменить Отслеживание',
- commandEngineStop: 'Заблокировать Двигатель',
- commandEngineResume: 'Разблокировать Двигатель',
- commandFrequency: 'Частота',
- commandUnit: 'Единицы'
-};
diff --git a/web/l10n/ru.json b/web/l10n/ru.json
new file mode 100644
index 000000000..7be75e55a
--- /dev/null
+++ b/web/l10n/ru.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Загрузка...",
+ "sharedSave": "Сохранить",
+ "sharedCancel": "Отмена",
+ "sharedAdd": "Добавить",
+ "sharedEdit": "Редактировать",
+ "sharedRemove": "Удалить",
+ "sharedRemoveConfirm": "Удалить элемент?",
+ "sharedKm": "км",
+ "sharedMi": "мили",
+ "sharedKmh": "км/ч",
+ "sharedMph": "миль/ч",
+ "sharedHour": "Часы",
+ "sharedMinute": "Минуты",
+ "sharedSecond": "Секунды",
+ "errorTitle": "Ошибка",
+ "errorUnknown": "Неизвестная ошибка",
+ "errorConnection": "Ошибка соединения",
+ "userName": "Имя",
+ "userEmail": "Email",
+ "userPassword": "Пароль",
+ "userAdmin": "Администратор",
+ "loginTitle": "Вход",
+ "loginLanguage": "Язык",
+ "loginRegister": "Регистрация",
+ "loginLogin": "Вход",
+ "loginFailed": "Неправильный email адрес или пароль",
+ "loginCreated": "Новый пользователь зарегистрирован",
+ "loginLogout": "Выход",
+ "deviceDialog": "Устройство",
+ "deviceTitle": "Устройства",
+ "deviceName": "Название",
+ "deviceIdentifier": "Идентификатор",
+ "deviceCommand": "Команда",
+ "settingsTitle": "Настройки",
+ "settingsUser": "Аккаунт",
+ "settingsServer": "Сервер",
+ "settingsUsers": "Пользователи",
+ "settingsDistanceUnit": "Расстояние",
+ "settingsSpeedUnit": "Скорость",
+ "reportTitle": "Отчеты",
+ "reportDevice": "Устройство",
+ "reportFrom": "С",
+ "reportTo": "По",
+ "reportShow": "Показать",
+ "reportClear": "Очистить",
+ "positionFixTime": "Время",
+ "positionValid": "Корректность",
+ "positionLatitude": "Широта",
+ "positionLongitude": "Долгота",
+ "positionAltitude": "Высота",
+ "positionSpeed": "Скорость",
+ "positionCourse": "Курс",
+ "positionAddress": "Адрес",
+ "positionProtocol": "Протокол",
+ "serverTitle": "Настройки Сервера",
+ "serverZoom": "Приближение",
+ "serverRegistration": "Регистрация",
+ "mapTitle": "Карта",
+ "mapLayer": "Слой Карты",
+ "mapCustom": "Пользовательская карта",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Ключ Bing Maps",
+ "mapBingRoad": "Bing Maps Дороги",
+ "mapBingAerial": "Bing Maps Спутник",
+ "stateTitle": "Состояние",
+ "stateName": "Параметр",
+ "stateValue": "Значение",
+ "commandTitle": "Команда",
+ "commandSend": "Отправить",
+ "commandType": "Тип",
+ "commandSent": "Команда отправлена",
+ "commandPositionPeriodic": "Начать Отслеживание",
+ "commandPositionStop": "Отменить Отслеживание",
+ "commandEngineStop": "Заблокировать Двигатель",
+ "commandEngineResume": "Разблокировать Двигатель",
+ "commandFrequency": "Частота",
+ "commandUnit": "Единицы"
+} \ No newline at end of file
diff --git a/web/l10n/si.js b/web/l10n/si.js
deleted file mode 100755
index 649b81f4c..000000000
--- a/web/l10n/si.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var Strings = {
- sharedLoading: 'පූරණය ...',
- sharedSave: 'සුරකින්න',
- sharedCancel: 'අවලංගු කරන්න',
- sharedAdd: 'එක් කරන්න',
- sharedEdit: 'සංස්කරණය කරන්න',
- sharedRemove: 'ඉවත් කරන්න',
- sharedRemoveConfirm: 'අයිතමය ඉවත් කරන්න ද?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'පැය',
- sharedMinute: 'මිනිත්තු',
- sharedSecond: 'තත්පර',
-
- errorTitle: 'දෝෂයක්',
- errorUnknown: 'නොදන්නා දෝෂයක්',
-
- userName: 'නම',
- userEmail: 'විද්යුත් තැපෑල',
- userPassword: 'මුරපදය',
- userAdmin: 'පරිපාලක',
-
- loginTitle: 'පිවිසුම',
- loginLanguage: 'භාෂාව',
- loginRegister: 'ලියාපදිංචි කරන්න',
- loginLogin: 'පිවිසුම',
- loginFailed: 'ඊ-මේල් ලිපිනය හෝ මුරපදය වැරදිය',
- loginCreated: 'නව පරිශීලක ලියාපදිංචි කරන ලදි ',
- loginLogout: 'ඉවත්වන්න',
-
- deviceDialog: 'උපාංගය',
- deviceTitle: 'උපාංග',
- deviceName: 'නම',
- deviceIdentifier: 'හඳුනාගැනීමේ කේතය',
- deviceCommand: 'විධානය',
-
- settingsTitle: 'සැකසුම්',
- settingsUser: 'ගිණුම',
- settingsServer: 'සේවාදායකය',
- settingsUsers: 'පරිශීලකයන්',
- settingsDistanceUnit: 'දුර',
- settingsSpeedUnit: 'වේගය',
-
- reportTitle: 'වාර්තා',
- reportDevice: 'උපාංගය',
- reportFrom: 'සිට',
- reportTo: 'දක්වා',
- reportShow: 'පෙන්වන්න',
- reportClear: 'ඉවත් කරන්න',
-
- positionTime: 'කාලය',
- positionValid: 'වලංගු',
- positionLatitude: 'අක්ෂාංශ',
- positionLongitude: 'දේශාංශ',
- positionAltitude: 'උන්නතාංශය',
- positionSpeed: 'වේගය',
- positionCourse: 'දිගංශය',
- positionAddress: 'ලිපිනය',
- positionProtocol: 'ප්රොටොකෝලය',
-
- serverTitle: 'සේවාදායකයේ සැකසුම්',
- serverZoom: 'විශාලනය',
- serverRegistration: 'ලියාපදිංචි කිරීම',
-
- mapTitle: 'සිතියම',
- mapLayer: 'සිතියම් ස්තරය',
- mapCustom: 'අභිරුචි සිතියම',
- mapOsm: 'Open Street Map',
- mapBingKey: 'Bing Maps Key',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'තත්වය',
- stateName: 'පරාමිතිය',
- stateValue: 'අගය',
-
- commandTitle: 'විධානය',
- commandSend: 'යවන්න',
- commandType: 'වර්ගය',
- commandPositionPeriodic: 'ආවර්තිතව වාර්තා කරන්න',
- commandPositionStop: 'වාර්තා කිරීම නවත්වන්න',
- commandEngineStop: 'එන්ජිම නවත්වන්න',
- commandEngineResume: 'එන්ජිම නැවත ආරම්භ කරන්න',
- commandFrequency: 'සංඛ්යාතය',
- commandUnit: 'ඒකකය'
-};
diff --git a/web/l10n/si.json b/web/l10n/si.json
new file mode 100644
index 000000000..0465df012
--- /dev/null
+++ b/web/l10n/si.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "පූරණය ...",
+ "sharedSave": "සුරකින්න",
+ "sharedCancel": "අවලංගු කරන්න",
+ "sharedAdd": "එක් කරන්න",
+ "sharedEdit": "සංස්කරණය කරන්න",
+ "sharedRemove": "ඉවත් කරන්න",
+ "sharedRemoveConfirm": "අයිතමය ඉවත් කරන්න ද?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "පැය",
+ "sharedMinute": "මිනිත්තු",
+ "sharedSecond": "තත්පර",
+ "errorTitle": "දෝෂයක්",
+ "errorUnknown": "නොදන්නා දෝෂයක්",
+ "errorConnection": "Connection error",
+ "userName": "නම",
+ "userEmail": "විද්යුත් තැපෑල",
+ "userPassword": "මුරපදය",
+ "userAdmin": "පරිපාලක",
+ "loginTitle": "පිවිසුම",
+ "loginLanguage": "භාෂාව",
+ "loginRegister": "ලියාපදිංචි කරන්න",
+ "loginLogin": "පිවිසුම",
+ "loginFailed": "ඊ-මේල් ලිපිනය හෝ මුරපදය වැරදිය",
+ "loginCreated": "නව පරිශීලක ලියාපදිංචි කරන ලදි",
+ "loginLogout": "ඉවත්වන්න",
+ "deviceDialog": "උපාංගය",
+ "deviceTitle": "උපාංග",
+ "deviceName": "නම",
+ "deviceIdentifier": "හඳුනාගැනීමේ කේතය",
+ "deviceCommand": "විධානය",
+ "settingsTitle": "සැකසුම්",
+ "settingsUser": "ගිණුම",
+ "settingsServer": "සේවාදායකය",
+ "settingsUsers": "පරිශීලකයන්",
+ "settingsDistanceUnit": "දුර",
+ "settingsSpeedUnit": "වේගය",
+ "reportTitle": "වාර්තා",
+ "reportDevice": "උපාංගය",
+ "reportFrom": "සිට",
+ "reportTo": "දක්වා",
+ "reportShow": "පෙන්වන්න",
+ "reportClear": "ඉවත් කරන්න",
+ "positionFixTime": "කාලය",
+ "positionValid": "වලංගු",
+ "positionLatitude": "අක්ෂාංශ",
+ "positionLongitude": "දේශාංශ",
+ "positionAltitude": "උන්නතාංශය",
+ "positionSpeed": "වේගය",
+ "positionCourse": "දිගංශය",
+ "positionAddress": "ලිපිනය",
+ "positionProtocol": "ප්රොටොකෝලය",
+ "serverTitle": "සේවාදායකයේ සැකසුම්",
+ "serverZoom": "විශාලනය",
+ "serverRegistration": "ලියාපදිංචි කිරීම",
+ "mapTitle": "සිතියම",
+ "mapLayer": "සිතියම් ස්තරය",
+ "mapCustom": "අභිරුචි සිතියම",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "තත්වය",
+ "stateName": "පරාමිතිය",
+ "stateValue": "අගය",
+ "commandTitle": "විධානය",
+ "commandSend": "යවන්න",
+ "commandType": "වර්ගය",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "ආවර්තිතව වාර්තා කරන්න",
+ "commandPositionStop": "වාර්තා කිරීම නවත්වන්න",
+ "commandEngineStop": "එන්ජිම නවත්වන්න",
+ "commandEngineResume": "එන්ජිම නැවත ආරම්භ කරන්න",
+ "commandFrequency": "සංඛ්යාතය",
+ "commandUnit": "ඒකකය"
+} \ No newline at end of file
diff --git a/web/l10n/sk.js b/web/l10n/sk.js
deleted file mode 100644
index 98d131b65..000000000
--- a/web/l10n/sk.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Načítava...',
- sharedSave: 'Uloženie',
- sharedCancel: 'Zrušenie',
- sharedAdd: 'Pridať',
- sharedEdit: 'Úprava',
- sharedRemove: 'Odstrániť',
- sharedRemoveConfirm: 'Odstrániť položku?',
- sharedKm: 'Km',
- sharedMi: 'mi',
- sharedKmh: 'Km/h',
- sharedMph: 'mph',
- sharedHour: 'Hodina',
- sharedMinute: 'Minúta',
- sharedSecond: 'Druhý',
-
- errorTitle: 'Chyba',
- errorUnknown: 'Neznáma chyba',
-
- userName: 'Meno',
- userEmail: 'E-mail',
- userPassword: 'Heslo',
- userAdmin: 'Admin',
-
- loginTitle: 'Prihlásenie',
- loginLanguage: 'Jazyk',
- loginRegister: 'Registrovať',
- loginLogin: 'Prihlásenie',
- loginFailed: 'Nesprávna e-mailová adresa alebo heslo',
- loginCreated: 'Nový užívateľ sa zaregistroval',
- loginLogout: 'Odhlásiť',
-
- deviceDialog: 'Zariadenie',
- deviceTitle: 'Zariadena',
- deviceName: 'Meno',
- deviceIdentifier: 'Identifikátor',
- deviceCommand: 'Príkaz',
-
- settingsTitle: 'Nastavenia',
- settingsUser: 'Účet',
- settingsServer: 'Server',
- settingsUsers: 'Užívatelia',
- settingsDistanceUnit: 'Vzdialenosť',
- settingsSpeedUnit: 'Rýchlosť jazdy',
-
- reportTitle: 'Správy',
- reportDevice: 'Zariadenie',
- reportFrom: 'Z',
- reportTo: 'do',
- reportShow: 'Zobraziť',
- reportClear: 'Vyčistiť',
-
- positionTime: 'Čas',
- positionValid: 'Platný',
- positionLatitude: 'Šírka',
- positionLongitude: 'Dĺžka',
- positionAltitude: 'Výška',
- positionSpeed: 'Rýchlosť jazdy',
- positionCourse: 'Kurz',
- positionAddress: 'Adresa',
- positionProtocol: 'Protokol',
-
- serverTitle: 'Nastavenie servera',
- serverZoom: 'Zoom',
- serverRegistration: 'Registrácia',
-
- mapTitle: 'Mapa',
- mapLayer: 'Mapové vrstvy',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Arial',
-
- stateTitle: 'Štát',
- stateName: 'Parameter',
- stateValue: 'Hodnota',
-
- commandTitle: 'Príkaz',
- commandSend: 'Odoslať',
- commandType: 'Typ',
- commandPositionPeriodic: 'Pravidelné podávanie správ',
- commandPositionStop: 'Zastavte podávanie správ',
- commandEngineStop: 'Zastavenie motora',
- commandEngineResume: 'Spustenie motora',
- commandFrequency: 'Frekvencia',
- commandUnit: 'Unit'
-};
diff --git a/web/l10n/sk.json b/web/l10n/sk.json
new file mode 100644
index 000000000..f2a33d50d
--- /dev/null
+++ b/web/l10n/sk.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Načítava...",
+ "sharedSave": "Uloženie",
+ "sharedCancel": "Zrušenie",
+ "sharedAdd": "Pridať",
+ "sharedEdit": "Úprava",
+ "sharedRemove": "Odstrániť",
+ "sharedRemoveConfirm": "Odstrániť položku?",
+ "sharedKm": "Km",
+ "sharedMi": "mi",
+ "sharedKmh": "Km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hodina",
+ "sharedMinute": "Minúta",
+ "sharedSecond": "Druhý",
+ "errorTitle": "Chyba",
+ "errorUnknown": "Neznáma chyba",
+ "errorConnection": "Connection error",
+ "userName": "Meno",
+ "userEmail": "E-mail",
+ "userPassword": "Heslo",
+ "userAdmin": "Admin",
+ "loginTitle": "Prihlásenie",
+ "loginLanguage": "Jazyk",
+ "loginRegister": "Registrovať",
+ "loginLogin": "Prihlásenie",
+ "loginFailed": "Nesprávna e-mailová adresa alebo heslo",
+ "loginCreated": "Nový užívateľ sa zaregistroval",
+ "loginLogout": "Odhlásiť",
+ "deviceDialog": "Zariadenie",
+ "deviceTitle": "Zariadena",
+ "deviceName": "Meno",
+ "deviceIdentifier": "Identifikátor",
+ "deviceCommand": "Príkaz",
+ "settingsTitle": "Nastavenia",
+ "settingsUser": "Účet",
+ "settingsServer": "Server",
+ "settingsUsers": "Užívatelia",
+ "settingsDistanceUnit": "Vzdialenosť",
+ "settingsSpeedUnit": "Rýchlosť jazdy",
+ "reportTitle": "Správy",
+ "reportDevice": "Zariadenie",
+ "reportFrom": "Z",
+ "reportTo": "do",
+ "reportShow": "Zobraziť",
+ "reportClear": "Vyčistiť",
+ "positionFixTime": "Čas",
+ "positionValid": "Platný",
+ "positionLatitude": "Šírka",
+ "positionLongitude": "Dĺžka",
+ "positionAltitude": "Výška",
+ "positionSpeed": "Rýchlosť jazdy",
+ "positionCourse": "Kurz",
+ "positionAddress": "Adresa",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Nastavenie servera",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrácia",
+ "mapTitle": "Mapa",
+ "mapLayer": "Mapové vrstvy",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Arial",
+ "stateTitle": "Štát",
+ "stateName": "Parameter",
+ "stateValue": "Hodnota",
+ "commandTitle": "Príkaz",
+ "commandSend": "Odoslať",
+ "commandType": "Typ",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Pravidelné podávanie správ",
+ "commandPositionStop": "Zastavte podávanie správ",
+ "commandEngineStop": "Zastavenie motora",
+ "commandEngineResume": "Spustenie motora",
+ "commandFrequency": "Frekvencia",
+ "commandUnit": "Unit"
+} \ No newline at end of file
diff --git a/web/l10n/sl.js b/web/l10n/sl.js
deleted file mode 100644
index df8c8ab18..000000000
--- a/web/l10n/sl.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var strings = {
- sharedLoading: 'Nalagam...',
- sharedSave: 'Shrani',
- sharedCancel: 'Prekini',
- sharedAdd: 'Dodaj',
- sharedEdit: 'Uredi',
- sharedRemove: 'Odstrani',
- sharedRemoveConfirm: 'Odstranim zapis?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Ura',
- sharedMinute: 'Minuta',
- sharedSecond: 'Sekunda',
-
- errorTitle: 'Napaka',
- errorUnknown: 'Neznana napaka',
-
- userName: 'Ime',
- userEmail: 'E-Pošta',
- userPassword: 'Geslo',
- userAdmin: 'Admin',
-
- loginTitle: 'Prijava',
- loginLanguage: 'Jezik',
- loginRegister: 'Registracija',
- loginLogin: 'Prijava',
- loginFailed: 'Nepravilna e-pošta ali geslo',
- loginCreated: 'Nov uporabnik je registriran',
- loginLogout: 'Odjava',
-
- deviceDialog: 'Naprave',
- deviceTitle: 'Naprave',
- deviceName: 'Naziv',
- deviceIdentifier: 'Identifikacija',
- deviceCommand: 'Ukaz',
-
- settingsTitle: 'Nastavitve',
- settingsUser: 'Račun',
- settingsServer: 'Strežnik',
- settingsUsers: 'Uporabniki',
- settingsDistanceUnit: 'Razdalja',
- settingsSpeedUnit: 'Hitrost',
-
- reportTitle: 'Poročila',
- reportDevice: 'Naprava',
- reportFrom: 'Od',
- reportTo: 'Do',
- reportShow: 'Prikaži',
- reportClear: 'Očisti',
-
- positionTime: 'Čas',
- positionValid: 'Veljavnost',
- positionLatitude: 'Širina',
- positionLongitude: 'Dolžina',
- positionAltitude: 'Višina',
- positionSpeed: 'Hitrost',
- positionCourse: 'Smer',
- positionAddress: 'Naslov',
- positionProtocol: 'Protokol',
-
- serverTitle: 'Nastavitve strežnika',
- serverZoom: 'Povečava',
- serverRegistration: 'Registracija',
-
- mapTitle: 'Karta',
- mapLayer: 'Zemljevidi',
- mapOsm: 'Open Street Karta',
- mapBingRoad: 'Bing Maps Ceste',
- mapBingAerial: 'Bing Maps Satelit',
-
- stateTitle: 'Stanje',
- stateName: 'Parameter',
- stateValue: 'Vrednost',
-
- commandTitle: 'Ukaz',
- commandSend: 'Pošlji',
- commandType: 'Tip',
- commandPositionPeriodic: 'Periodično poročanje',
- commandPositionStop: 'Ustavi poročanje',
- commandEngineStop: 'Ugasni motor',
- commandEngineResume: 'Prižgi motor',
- commandFrequency: 'Frekvenca',
- commandUnit: 'Naprava'
-};
diff --git a/web/l10n/sl.json b/web/l10n/sl.json
new file mode 100644
index 000000000..c44e76534
--- /dev/null
+++ b/web/l10n/sl.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Nalagam...",
+ "sharedSave": "Shrani",
+ "sharedCancel": "Prekini",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Uredi",
+ "sharedRemove": "Odstrani",
+ "sharedRemoveConfirm": "Odstranim zapis?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Ura",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "errorTitle": "Napaka",
+ "errorUnknown": "Neznana napaka",
+ "errorConnection": "Connection error",
+ "userName": "Ime",
+ "userEmail": "E-Pošta",
+ "userPassword": "Geslo",
+ "userAdmin": "Admin",
+ "loginTitle": "Prijava",
+ "loginLanguage": "Jezik",
+ "loginRegister": "Registracija",
+ "loginLogin": "Prijava",
+ "loginFailed": "Nepravilna e-pošta ali geslo",
+ "loginCreated": "Nov uporabnik je registriran",
+ "loginLogout": "Odjava",
+ "deviceDialog": "Naprave",
+ "deviceTitle": "Naprave",
+ "deviceName": "Naziv",
+ "deviceIdentifier": "Identifikacija",
+ "deviceCommand": "Ukaz",
+ "settingsTitle": "Nastavitve",
+ "settingsUser": "Račun",
+ "settingsServer": "Strežnik",
+ "settingsUsers": "Uporabniki",
+ "settingsDistanceUnit": "Razdalja",
+ "settingsSpeedUnit": "Hitrost",
+ "reportTitle": "Poročila",
+ "reportDevice": "Naprava",
+ "reportFrom": "Od",
+ "reportTo": "Do",
+ "reportShow": "Prikaži",
+ "reportClear": "Očisti",
+ "positionFixTime": "Čas",
+ "positionValid": "Veljavnost",
+ "positionLatitude": "Širina",
+ "positionLongitude": "Dolžina",
+ "positionAltitude": "Višina",
+ "positionSpeed": "Hitrost",
+ "positionCourse": "Smer",
+ "positionAddress": "Naslov",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Nastavitve strežnika",
+ "serverZoom": "Povečava",
+ "serverRegistration": "Registracija",
+ "mapTitle": "Karta",
+ "mapLayer": "Zemljevidi",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Karta",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Ceste",
+ "mapBingAerial": "Bing Maps Satelit",
+ "stateTitle": "Stanje",
+ "stateName": "Parameter",
+ "stateValue": "Vrednost",
+ "commandTitle": "Ukaz",
+ "commandSend": "Pošlji",
+ "commandType": "Tip",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodično poročanje",
+ "commandPositionStop": "Ustavi poročanje",
+ "commandEngineStop": "Ugasni motor",
+ "commandEngineResume": "Prižgi motor",
+ "commandFrequency": "Frekvenca",
+ "commandUnit": "Naprava"
+} \ No newline at end of file
diff --git a/web/l10n/sr.js b/web/l10n/sr.js
deleted file mode 100644
index 3c1588401..000000000
--- a/web/l10n/sr.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'Učitava...',
- sharedSave: 'Sačuvaj',
- sharedCancel: 'Odustani',
- sharedAdd: 'Dodaj',
- sharedEdit: 'Podesi',
- sharedRemove: 'Ukloni',
- sharedRemoveConfirm: 'Ukloniti jedinicu?',
- sharedKm: 'km',
- sharedMi: 'mi',
- sharedKmh: 'km/h',
- sharedMph: 'mph',
- sharedHour: 'Čas',
- sharedMinute: 'Minut',
- sharedSecond: 'Sekunda',
-
- errorTitle: 'Greška',
- errorUnknown: 'Nepoznata greška',
-
- userName: 'Ime',
- userEmail: 'Email',
- userPassword: 'Lozinka',
- userAdmin: 'Admin',
-
- loginTitle: 'Prijava',
- loginLanguage: 'Jezik',
- loginRegister: 'Registruj se',
- loginLogin: 'Prijava',
- loginFailed: 'Neispravna email adresa ili lozinka',
- loginCreated: 'Novi korisnik je registrovan',
- loginLogout: 'Odjava',
-
- deviceDialog: 'Uređaj',
- deviceTitle: 'Uređaji',
- deviceName: 'Ime',
- deviceIdentifier: 'Identifikator',
- deviceCommand: 'Komanda',
-
- settingsTitle: 'Podešavanja',
- settingsUser: 'Nalog',
- settingsServer: 'Server',
- settingsUsers: 'Korisnici',
- settingsDistanceUnit: 'Udaljenost',
- settingsSpeedUnit: 'Brzina',
-
- reportTitle: 'Izveštaji',
- reportDevice: 'Uređaj',
- reportFrom: 'Od',
- reportTo: 'Do',
- reportShow: 'Prikaži',
- reportClear: 'Izbriši',
-
- positionTime: 'Vreme',
- positionValid: 'Ispravno',
- positionLatitude: 'Geografska širina',
- positionLongitude: 'Geografska dužina',
- positionAltitude: 'Visina',
- positionSpeed: 'Brzina',
- positionCourse: 'Pravac',
- positionAddress: 'Adresa',
- positionProtocol: 'Protokol',
-
- serverTitle: 'Podešavanja Servera',
- serverZoom: 'Zumiranje',
- serverRegistration: 'Registracija',
-
- mapTitle: 'Mapa',
- mapLayer: 'Vrsta Mape',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps Road',
- mapBingAerial: 'Bing Maps Aerial',
-
- stateTitle: 'Stanje',
- stateName: 'Parametar',
- stateValue: 'Vrednost',
-
- commandTitle: 'Komanda',
- commandSend: 'Pošalji',
- commandType: 'Tip',
- commandPositionPeriodic: 'Periodično izveštavanje',
- commandPositionStop: 'Prekini izveštavanja',
- commandEngineStop: 'Zaustavi motor',
- commandEngineResume: 'Pokreni motor',
- commandFrequency: 'Frekvencija',
- commandUnit: 'Jedinica'
-};
diff --git a/web/l10n/sr.json b/web/l10n/sr.json
new file mode 100644
index 000000000..037968594
--- /dev/null
+++ b/web/l10n/sr.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "Učitava...",
+ "sharedSave": "Sačuvaj",
+ "sharedCancel": "Odustani",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Podesi",
+ "sharedRemove": "Ukloni",
+ "sharedRemoveConfirm": "Ukloniti jedinicu?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Čas",
+ "sharedMinute": "Minut",
+ "sharedSecond": "Sekunda",
+ "errorTitle": "Greška",
+ "errorUnknown": "Nepoznata greška",
+ "errorConnection": "Connection error",
+ "userName": "Ime",
+ "userEmail": "Email",
+ "userPassword": "Lozinka",
+ "userAdmin": "Admin",
+ "loginTitle": "Prijava",
+ "loginLanguage": "Jezik",
+ "loginRegister": "Registruj se",
+ "loginLogin": "Prijava",
+ "loginFailed": "Neispravna email adresa ili lozinka",
+ "loginCreated": "Novi korisnik je registrovan",
+ "loginLogout": "Odjava",
+ "deviceDialog": "Uređaj",
+ "deviceTitle": "Uređaji",
+ "deviceName": "Ime",
+ "deviceIdentifier": "Identifikator",
+ "deviceCommand": "Komanda",
+ "settingsTitle": "Podešavanja",
+ "settingsUser": "Nalog",
+ "settingsServer": "Server",
+ "settingsUsers": "Korisnici",
+ "settingsDistanceUnit": "Udaljenost",
+ "settingsSpeedUnit": "Brzina",
+ "reportTitle": "Izveštaji",
+ "reportDevice": "Uređaj",
+ "reportFrom": "Od",
+ "reportTo": "Do",
+ "reportShow": "Prikaži",
+ "reportClear": "Izbriši",
+ "positionFixTime": "Vreme",
+ "positionValid": "Ispravno",
+ "positionLatitude": "Geografska širina",
+ "positionLongitude": "Geografska dužina",
+ "positionAltitude": "Visina",
+ "positionSpeed": "Brzina",
+ "positionCourse": "Pravac",
+ "positionAddress": "Adresa",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Podešavanja Servera",
+ "serverZoom": "Zumiranje",
+ "serverRegistration": "Registracija",
+ "mapTitle": "Mapa",
+ "mapLayer": "Vrsta Mape",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "stateTitle": "Stanje",
+ "stateName": "Parametar",
+ "stateValue": "Vrednost",
+ "commandTitle": "Komanda",
+ "commandSend": "Pošalji",
+ "commandType": "Tip",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "Periodično izveštavanje",
+ "commandPositionStop": "Prekini izveštavanja",
+ "commandEngineStop": "Zaustavi motor",
+ "commandEngineResume": "Pokreni motor",
+ "commandFrequency": "Frekvencija",
+ "commandUnit": "Jedinica"
+} \ No newline at end of file
diff --git a/web/l10n/th.js b/web/l10n/th.js
deleted file mode 100644
index bc0129353..000000000
--- a/web/l10n/th.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: 'โหลด',
- sharedSave: 'เก็บ (แฟ้มข้อมูล)',
- sharedCancel: 'ยกเลิก',
- sharedAdd: 'เพิ่ม',
- sharedEdit: 'ตรวจแก้ ปรับเปลี่ยนข้อมูล',
- sharedRemove: 'ย้ายออก',
- sharedRemoveConfirm: 'ลบรายการ',
- sharedKm: 'กม.',
- sharedMi: 'ไมล์',
- sharedKmh: 'กม. / ชม',
- sharedMph: 'ไมล์ต่อชั่วโมง',
- sharedHour: 'ชั่วโมง',
- sharedMinute: 'นาที',
- sharedSecond: 'วินาที',
-
- errorTitle: 'ผิดพลาด',
- errorUnknown: 'ข้อผิดพลาดที่ไม่รู้จัก',
-
- userName: 'ชื่อ',
- userEmail: 'อีเมล',
- userPassword: 'รหัสผ่าน',
- userAdmin: 'ผู้ดูแลระบบ',
-
- loginTitle: 'เข้าสู่ระบบ',
- loginLanguage: 'ภาษา',
- loginRegister: 'ลงทะเบียน',
- loginLogin: 'เข้าสู่ระบบ',
- loginFailed: 'ที่อยู่อีเมลหรือรหัสผ่านไม่ถูกต้อง',
- loginCreated: 'ผู้ใช้ใหม่ ได้รับการจดทะเบียน',
- loginLogout: 'ออกจากระบบ',
-
- deviceDialog: 'เครื่อง/อุปกรณ์',
- deviceTitle: 'เครื่อง/อุปกรณ์',
- deviceName: 'ชื่อ',
- deviceIdentifier: 'ระบุ',
- deviceCommand: 'คำสั่ง',
-
- settingsTitle: 'การตั้งค่า',
- settingsUser: 'บัญชี',
- settingsServer: 'ผู้ให้บริการ',
- settingsUsers: 'ผู้ใช้งาน',
- settingsDistanceUnit: 'ระยะทาง',
- settingsSpeedUnit: 'ความเร็ว',
-
- reportTitle: 'รายงาน',
- reportDevice: 'เครื่อง/อุปกรณ์',
- reportFrom: 'จาก',
- reportTo: 'ไปถึง',
- reportShow: 'แสดง',
- reportClear: 'ขจัด',
-
- positionTime: 'เวลา',
- positionValid: 'ถูกต้อง',
- positionLatitude: 'ละติจูด',
- positionLongitude: 'ลองจิจูด',
- positionAltitude: 'ระดับความสูง',
- positionSpeed: 'ความเร็ว',
- positionCourse: 'แนวทางเดิน',
- positionAddress: 'ที่อยู่',
- positionProtocol: 'โปรโตคอล',
-
- serverTitle: 'การตั้งค่าเซิร์ฟเวอ',
- serverZoom: 'เลื่อนใกล้/ไกล',
- serverRegistration: 'ลงทะเบียน',
-
- mapTitle: 'แผนที่',
- mapLayer: 'ชั้น แผนที่',
- mapOsm: 'Open Street Map',
- mapBingRoad: 'Bing Maps ถนน',
- mapBingAerial: 'Bing Maps อากาศ',
-
- stateTitle: 'สถานะ',
- stateName: 'พารามิเตอร์',
- stateValue: 'มูลค่า',
-
- commandTitle: 'คำสั่ง',
- commandSend: 'ส่ง',
- commandType: 'ชนิด',
- commandPositionPeriodic: 'แก้ไขตำแหน่ง',
- commandPositionStop: 'ตำแหน่ง หยุด',
- commandEngineStop: 'หยุดเครื่องยนต์',
- commandEngineResume: 'เริ่มครื่องยนต์ใหม่',
- commandFrequency: 'ความถี่',
- commandUnit: 'หน่วย'
-};
diff --git a/web/l10n/th.json b/web/l10n/th.json
new file mode 100644
index 000000000..4327a5596
--- /dev/null
+++ b/web/l10n/th.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "โหลด",
+ "sharedSave": "เก็บ (แฟ้มข้อมูล)",
+ "sharedCancel": "ยกเลิก",
+ "sharedAdd": "เพิ่ม",
+ "sharedEdit": "ตรวจแก้ ปรับเปลี่ยนข้อมูล",
+ "sharedRemove": "ย้ายออก",
+ "sharedRemoveConfirm": "ลบรายการ",
+ "sharedKm": "กม.",
+ "sharedMi": "ไมล์",
+ "sharedKmh": "กม. / ชม",
+ "sharedMph": "ไมล์ต่อชั่วโมง",
+ "sharedHour": "ชั่วโมง",
+ "sharedMinute": "นาที",
+ "sharedSecond": "วินาที",
+ "errorTitle": "ผิดพลาด",
+ "errorUnknown": "ข้อผิดพลาดที่ไม่รู้จัก",
+ "errorConnection": "Connection error",
+ "userName": "ชื่อ",
+ "userEmail": "อีเมล",
+ "userPassword": "รหัสผ่าน",
+ "userAdmin": "ผู้ดูแลระบบ",
+ "loginTitle": "เข้าสู่ระบบ",
+ "loginLanguage": "ภาษา",
+ "loginRegister": "ลงทะเบียน",
+ "loginLogin": "เข้าสู่ระบบ",
+ "loginFailed": "ที่อยู่อีเมลหรือรหัสผ่านไม่ถูกต้อง",
+ "loginCreated": "ผู้ใช้ใหม่ ได้รับการจดทะเบียน",
+ "loginLogout": "ออกจากระบบ",
+ "deviceDialog": "เครื่อง/อุปกรณ์",
+ "deviceTitle": "เครื่อง/อุปกรณ์",
+ "deviceName": "ชื่อ",
+ "deviceIdentifier": "ระบุ",
+ "deviceCommand": "คำสั่ง",
+ "settingsTitle": "การตั้งค่า",
+ "settingsUser": "บัญชี",
+ "settingsServer": "ผู้ให้บริการ",
+ "settingsUsers": "ผู้ใช้งาน",
+ "settingsDistanceUnit": "ระยะทาง",
+ "settingsSpeedUnit": "ความเร็ว",
+ "reportTitle": "รายงาน",
+ "reportDevice": "เครื่อง/อุปกรณ์",
+ "reportFrom": "จาก",
+ "reportTo": "ไปถึง",
+ "reportShow": "แสดง",
+ "reportClear": "ขจัด",
+ "positionFixTime": "เวลา",
+ "positionValid": "ถูกต้อง",
+ "positionLatitude": "ละติจูด",
+ "positionLongitude": "ลองจิจูด",
+ "positionAltitude": "ระดับความสูง",
+ "positionSpeed": "ความเร็ว",
+ "positionCourse": "แนวทางเดิน",
+ "positionAddress": "ที่อยู่",
+ "positionProtocol": "โปรโตคอล",
+ "serverTitle": "การตั้งค่าเซิร์ฟเวอ",
+ "serverZoom": "เลื่อนใกล้/ไกล",
+ "serverRegistration": "ลงทะเบียน",
+ "mapTitle": "แผนที่",
+ "mapLayer": "ชั้น แผนที่",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps ถนน",
+ "mapBingAerial": "Bing Maps อากาศ",
+ "stateTitle": "สถานะ",
+ "stateName": "พารามิเตอร์",
+ "stateValue": "มูลค่า",
+ "commandTitle": "คำสั่ง",
+ "commandSend": "ส่ง",
+ "commandType": "ชนิด",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "แก้ไขตำแหน่ง",
+ "commandPositionStop": "ตำแหน่ง หยุด",
+ "commandEngineStop": "หยุดเครื่องยนต์",
+ "commandEngineResume": "เริ่มครื่องยนต์ใหม่",
+ "commandFrequency": "ความถี่",
+ "commandUnit": "หน่วย"
+} \ No newline at end of file
diff --git a/web/l10n/zh.js b/web/l10n/zh.js
deleted file mode 100644
index 01c6bec47..000000000
--- a/web/l10n/zh.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var Strings = {
- sharedLoading: '加载',
- sharedSave: '保存',
- sharedCancel: '取消',
- sharedAdd: '新建',
- sharedEdit: '编辑',
- sharedRemove: '移除',
- sharedRemoveConfirm: '要移除选项吗?',
- sharedKm: '千米',
- sharedMi: '海里',
- sharedKmh: '千米/小时',
- sharedMph: '每小时英里数',
- sharedHour: '小时',
- sharedMinute: '分钟',
- sharedSecond: '秒',
-
- errorTitle: '错误',
- errorUnknown: '未知错误',
-
- userName: '名字',
- userEmail: '邮箱',
- userPassword: '密码',
- userAdmin: '管理员',
-
- loginTitle: '登录',
- loginLanguage: '语言',
- loginRegister: '注册',
- loginLogin: '登录',
- loginFailed: '邮箱地址或密码不对',
- loginCreated: '新用户已经被注册了',
- loginLogout: '登出',
-
- deviceDialog: '设备',
- deviceTitle: '设备',
- deviceName: '名字',
- deviceIdentifier: '标识符',
- deviceCommand: '指令',
-
- settingsTitle: '设置',
- settingsUser: '账户',
- settingsServer: '服务器',
- settingsUsers: '用户',
- settingsDistanceUnit: '距离',
- settingsSpeedUnit: '速度',
-
- reportTitle: '报表',
- reportDevice: '设备',
- reportFrom: '开始',
- reportTo: '结束',
- reportShow: '显示',
- reportClear: '清空',
-
- positionTime: '时间',
- positionValid: '有效',
- positionLatitude: '纬度',
- positionLongitude: '经度',
- positionAltitude: '海拔',
- positionSpeed: '速度',
- positionCourse: '航向',
- positionAddress: '地址',
- positionProtocol: '协议',
-
- serverTitle: '服务器设置',
- serverZoom: '缩放',
- serverRegistration: '注册',
-
- mapTitle: '地图',
- mapLayer: '地图图层',
- mapOsm: 'OpenStreetMap 地图',
- mapBingRoad: 'Bing 公路线路地图',
- mapBingAerial: 'Bing 航测地图',
-
- stateTitle: '状态',
- stateName: '参数',
- stateValue: '数值',
-
- commandTitle: '命令',
- commandSend: '发送',
- commandType: '类型',
- commandPositionPeriodic: '位置获取',
- commandPositionStop: '位置停止',
- commandEngineStop: '引擎熄火',
- commandEngineResume: '引擎启动',
- commandFrequency: '频率',
- commandUnit: '单位'
-};
diff --git a/web/l10n/zh.json b/web/l10n/zh.json
new file mode 100644
index 000000000..b65fb958e
--- /dev/null
+++ b/web/l10n/zh.json
@@ -0,0 +1,79 @@
+{
+ "sharedLoading": "加载",
+ "sharedSave": "保存",
+ "sharedCancel": "取消",
+ "sharedAdd": "新建",
+ "sharedEdit": "编辑",
+ "sharedRemove": "移除",
+ "sharedRemoveConfirm": "要移除选项吗?",
+ "sharedKm": "千米",
+ "sharedMi": "海里",
+ "sharedKmh": "千米/小时",
+ "sharedMph": "每小时英里数",
+ "sharedHour": "小时",
+ "sharedMinute": "分钟",
+ "sharedSecond": "秒",
+ "errorTitle": "错误",
+ "errorUnknown": "未知错误",
+ "errorConnection": "Connection error",
+ "userName": "名字",
+ "userEmail": "邮箱",
+ "userPassword": "密码",
+ "userAdmin": "管理员",
+ "loginTitle": "登录",
+ "loginLanguage": "语言",
+ "loginRegister": "注册",
+ "loginLogin": "登录",
+ "loginFailed": "邮箱地址或密码不对",
+ "loginCreated": "新用户已经被注册了",
+ "loginLogout": "登出",
+ "deviceDialog": "设备",
+ "deviceTitle": "设备",
+ "deviceName": "名字",
+ "deviceIdentifier": "标识符",
+ "deviceCommand": "指令",
+ "settingsTitle": "设置",
+ "settingsUser": "账户",
+ "settingsServer": "服务器",
+ "settingsUsers": "用户",
+ "settingsDistanceUnit": "距离",
+ "settingsSpeedUnit": "速度",
+ "reportTitle": "报表",
+ "reportDevice": "设备",
+ "reportFrom": "开始",
+ "reportTo": "结束",
+ "reportShow": "显示",
+ "reportClear": "清空",
+ "positionFixTime": "时间",
+ "positionValid": "有效",
+ "positionLatitude": "纬度",
+ "positionLongitude": "经度",
+ "positionAltitude": "海拔",
+ "positionSpeed": "速度",
+ "positionCourse": "航向",
+ "positionAddress": "地址",
+ "positionProtocol": "协议",
+ "serverTitle": "服务器设置",
+ "serverZoom": "缩放",
+ "serverRegistration": "注册",
+ "mapTitle": "地图",
+ "mapLayer": "地图图层",
+ "mapCustom": "Custom Map",
+ "mapOsm": "OpenStreetMap 地图",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing 公路线路地图",
+ "mapBingAerial": "Bing 航测地图",
+ "stateTitle": "状态",
+ "stateName": "参数",
+ "stateValue": "数值",
+ "commandTitle": "命令",
+ "commandSend": "发送",
+ "commandType": "类型",
+ "commandSent": "Command has been sent",
+ "commandPositionPeriodic": "位置获取",
+ "commandPositionStop": "位置停止",
+ "commandEngineStop": "引擎熄火",
+ "commandEngineResume": "引擎启动",
+ "commandFrequency": "频率",
+ "commandUnit": "单位"
+} \ No newline at end of file
diff --git a/web/locale.js b/web/locale.js
index ff07bf166..c645488d6 100644
--- a/web/locale.js
+++ b/web/locale.js
@@ -21,10 +21,11 @@ Ext.Loader.setConfig({
});
Locale.languages = {
+ 'ar': { name: 'العربية', code: 'en' },
'bg': { name: 'Български', code: 'bg' },
'cs': { name: 'Čeština', code: 'cs' },
'de': { name: 'Deutsch', code: 'de' },
- 'dk': { name: 'Dansk', code: 'dk' },
+ 'da': { name: 'Dansk', code: 'da' },
'el': { name: 'Ελληνικά', code: 'el' },
'en': { name: 'English', code: 'en' },
'es': { name: 'Español', code: 'es' },
@@ -34,6 +35,7 @@ Locale.languages = {
'nl': { name: 'Nederlands', code: 'nl' },
'pl': { name: 'Polski', code: 'pl' },
'pt': { name: 'Português', code: 'pt' },
+ 'pt_BR': { name: 'Português (Brasil)', code: 'pt_BR' },
'ru': { name: 'Русский', code: 'ru' },
'si': { name: 'සිංහල', code: 'en' },
'sk': { name: 'Slovenčina', code: 'sk' },
@@ -53,5 +55,11 @@ if (!(Locale.language in Locale.languages)) {
Locale.language = 'en'; // default
}
-Ext.Loader.loadScript('/l10n/' + Locale.language + '.js');
+Ext.Ajax.request({
+ url: '/l10n/' + Locale.language + '.json',
+ callback: function (options, success, response) {
+ Strings = Ext.decode(response.responseText);
+ }
+});
+
Ext.Loader.loadScript('//cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/locale/locale-' + Locale.languages[Locale.language].code + '.js');
diff --git a/web/release.html b/web/release.html
index 490a22551..6307d29d5 100644
--- a/web/release.html
+++ b/web/release.html
@@ -10,7 +10,8 @@
<link rel="stylesheet" href="app.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/theme-neptune.js"></script>
-<script src="//cdnjs.cloudflare.com/ajax/libs/ol3/3.10.1/ol.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/ol3/3.10.1/ol-debug.min.js"></script>
+<script src="arrowstyle.js"></script>
<script src="locale.js"></script>
<script type="text/javascript">
Ext.Loader.loadScript('app.min.js');