aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web/app.min.js150
-rw-r--r--web/l10n/ar.json136
-rw-r--r--web/l10n/bg.json136
-rw-r--r--web/l10n/bn.json136
-rw-r--r--web/l10n/cs.json136
-rw-r--r--web/l10n/da.json136
-rw-r--r--web/l10n/de.json136
-rw-r--r--web/l10n/el.json136
-rw-r--r--web/l10n/es.json136
-rw-r--r--web/l10n/fa.json136
-rw-r--r--web/l10n/fi.json136
-rw-r--r--web/l10n/fr.json136
-rw-r--r--web/l10n/he.json136
-rw-r--r--web/l10n/hi.json136
-rw-r--r--web/l10n/hr.json136
-rw-r--r--web/l10n/hu.json136
-rw-r--r--web/l10n/hy.json136
-rw-r--r--web/l10n/id.json136
-rw-r--r--web/l10n/it.json136
-rw-r--r--web/l10n/ja.json136
-rw-r--r--web/l10n/ka.json136
-rw-r--r--web/l10n/ku.json136
-rw-r--r--web/l10n/lo.json136
-rw-r--r--web/l10n/lt.json136
-rw-r--r--web/l10n/ml.json136
-rw-r--r--web/l10n/ms.json136
-rw-r--r--web/l10n/nb.json136
-rw-r--r--web/l10n/ne.json136
-rw-r--r--web/l10n/nl.json136
-rw-r--r--web/l10n/nn.json136
-rw-r--r--web/l10n/pl.json136
-rw-r--r--web/l10n/pt.json136
-rw-r--r--web/l10n/pt_BR.json136
-rw-r--r--web/l10n/ro.json136
-rw-r--r--web/l10n/ru.json136
-rw-r--r--web/l10n/si.json136
-rw-r--r--web/l10n/sk.json136
-rw-r--r--web/l10n/sl.json136
-rw-r--r--web/l10n/sr.json136
-rw-r--r--web/l10n/ta.json136
-rw-r--r--web/l10n/th.json136
-rw-r--r--web/l10n/tr.json136
-rw-r--r--web/l10n/uk.json136
-rw-r--r--web/l10n/vi.json136
-rw-r--r--web/l10n/zh.json136
45 files changed, 6134 insertions, 0 deletions
diff --git a/web/app.min.js b/web/app.min.js
new file mode 100644
index 000000000..a9e78cbcd
--- /dev/null
+++ b/web/app.min.js
@@ -0,0 +1,150 @@
+Ext.define("Traccar.Style",{singleton:!0,panelPadding:10,windowWidth:640,windowHeight:480,dateTimeFormat24:"Y-m-d H:i:s",dateTimeFormat12:"Y-m-d g:i:s a",timeFormat24:"H:i",timeFormat12:"g:i a",dateFormat:"Y-m-d",weekStartDay:1,deviceWidth:350,reportHeight:250,reportTime:100,mapDefaultLat:51.507222,mapDefaultLon:-0.1275,mapDefaultZoom:6,mapRouteColor:"rgba(21, 127, 204, 1.0)",mapRouteWidth:5,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:"rgba(77, 250, 144, 1.0)",mapColorUnknown:"rgba(250, 190, 77, 1.0)",mapColorOffline:"rgba(255, 84, 104, 1.0)",mapColorReport:"rgba(21, 127, 204, 1.0)",mapColorOverlay:"rgba(21, 127, 204, 0.2)",mapRadiusNormal:9,mapRadiusSelected:14,mapMaxZoom:19,mapDelay:500,coordinatePrecision:6,numberPrecision:2});
+Ext.define("Traccar.AttributeFormatter",{singleton:!0,coordinateFormatter:function(a){return a.toFixed(Traccar.Style.coordinatePrecision)},speedFormatter:function(a){return Ext.getStore("SpeedUnits").formatValue(a,Traccar.app.getPreference("speedUnit"))},courseFormatter:function(a){return"N NE E SE S SW W NW".split(" ")[Math.floor(a/45)]},distanceFormatter:function(a){return Ext.getStore("DistanceUnits").formatValue(a,Traccar.app.getPreference("distanceUnit"))},defaultFormatter:function(a){return"number"===
+typeof a?Number(a.toFixed(Traccar.Style.numberPrecision)):"boolean"===typeof a?a?Ext.Msg.buttonText.yes:Ext.Msg.buttonText.no:a instanceof Date?Traccar.app.getPreference("twelveHourFormat",!1)?Ext.Date.format(a,Traccar.Style.dateTimeFormat12):Ext.Date.format(a,Traccar.Style.dateTimeFormat24):a},getFormatter:function(a){return"latitude"===a||"longitude"===a?this.coordinateFormatter:"speed"===a?this.speedFormatter:"course"===a?this.courseFormatter:"distance"===a||"odometer"===a?this.distanceFormatter:
+this.defaultFormatter}});
+Ext.define("Traccar.model.Server",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"registration",type:"boolean"},{name:"readonly",type:"boolean"},{name:"map",type:"string"},{name:"bingKey",type:"string"},{name:"mapUrl",type:"string"},{name:"distanceUnit",type:"string"},{name:"speedUnit",type:"string"},{name:"latitude",type:"float"},{name:"longitude",type:"float"},{name:"zoom",type:"int"},{name:"twelveHourFormat",type:"boolean"},{name:"attributes"}],proxy:{type:"ajax",
+url:"/api/server",actionMethods:{update:"PUT"},writer:{type:"json",writeAllFields:!0}}});
+Ext.define("Traccar.model.User",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"email",type:"string"},{name:"password",type:"string"},{name:"admin",type:"boolean"},{name:"map",type:"string"},{name:"distanceUnit",type:"string"},{name:"speedUnit",type:"string"},{name:"latitude",type:"float"},{name:"longitude",type:"float"},{name:"zoom",type:"int"},{name:"twelveHourFormat",type:"boolean"},{name:"attributes"}],proxy:{type:"rest",url:"/api/users",
+writer:{type:"json",writeAllFields:!0}}});Ext.define("Traccar.model.Group",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"groupId",type:"int"},{name:"attributes"}]});
+Ext.define("Traccar.model.Device",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"uniqueId",type:"string"},{name:"status",type:"string"},{name:"lastUpdate",type:"date",dateFormat:"c"},{name:"groupId",type:"int"},{name:"geofenceIds"},{name:"attributes"}]});
+Ext.define("Traccar.model.Position",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"protocol",type:"string"},{name:"deviceId",type:"int"},{name:"serverTime",type:"date",dateFormat:"c"},{name:"deviceTime",type:"date",dateFormat:"c"},{name:"fixTime",type:"date",dateFormat:"c"},{name:"valid",type:"boolean"},{name:"latitude",type:"float"},{name:"longitude",type:"float"},{name:"altitude",type:"float"},{name:"speed",type:"float"},{name:"course",type:"float"},{name:"address",
+type:"string"},{name:"attributes"}]});Ext.define("Traccar.model.Attribute",{extend:Ext.data.Model,fields:[{name:"priority",type:"int"},{name:"name",type:"string"},{name:"value",type:"string"}]});Ext.define("Traccar.model.Command",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"deviceId",type:"int"},{name:"type",type:"string"},{name:"attributes"}]});
+Ext.define("Traccar.model.Event",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"type",type:"string"},{name:"serverTime",type:"date",dateFormat:"c"},{name:"deviceId",type:"int"},{name:"positionId",type:"int"},{name:"geofenceId",type:"int"},{name:"attributes"}]});
+Ext.define("Traccar.model.Geofence",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"description",type:"string"},{name:"area",type:"string"},{name:"attributes"}]});Ext.define("Traccar.model.Notification",{extend:Ext.data.Model,identifier:"negative",fields:[{name:"id",type:"int"},{name:"type",type:"string"},{name:"userId",type:"int"},{name:"attributes"}]});
+Ext.define("Traccar.store.Groups",{extend:Ext.data.Store,model:"Traccar.model.Group",proxy:{type:"rest",url:"/api/groups",writer:{writeAllFields:!0}}});Ext.define("Traccar.store.Devices",{extend:Ext.data.Store,model:"Traccar.model.Device",proxy:{type:"rest",url:"/api/devices",writer:{writeAllFields:!0}}});Ext.define("Traccar.store.AllGroups",{extend:Ext.data.Store,model:"Traccar.model.Group",proxy:{type:"rest",url:"/api/groups",extraParams:{all:!0}}});
+Ext.define("Traccar.store.AllDevices",{extend:Ext.data.Store,model:"Traccar.model.Device",proxy:{type:"rest",url:"/api/devices",extraParams:{all:!0}}});Ext.define("Traccar.store.Positions",{extend:Ext.data.Store,model:"Traccar.model.Position",proxy:{type:"rest",url:"/api/positions"}});Ext.define("Traccar.store.LatestPositions",{extend:Ext.data.Store,model:"Traccar.model.Position"});
+Ext.define("Traccar.store.Users",{extend:Ext.data.Store,model:"Traccar.model.User",proxy:{type:"rest",url:"/api/users",writer:{writeAllFields:!0}}});Ext.define("Traccar.store.Attributes",{extend:Ext.data.Store,model:"Traccar.model.Attribute",sorters:[{property:"priority"}]});Ext.define("Traccar.store.MapTypes",{extend:Ext.data.Store,fields:["key","name"],data:[{key:"osm",name:Strings.mapOsm},{key:"bingRoad",name:Strings.mapBingRoad},{key:"bingAerial",name:Strings.mapBingAerial},{key:"custom",name:Strings.mapCustom}]});
+Ext.define("Traccar.store.DistanceUnits",{extend:Ext.data.Store,fields:["key","name","factor"],data:[{key:"km",name:Strings.sharedKm,factor:0.001},{key:"mi",name:Strings.sharedMi,factor:6.21371E-4}],formatValue:function(a,b){var c;b||(b="km");c=this.findRecord("key",b);return(a*c.get("factor")).toFixed(2)+" "+c.get("name")}});
+Ext.define("Traccar.store.SpeedUnits",{extend:Ext.data.Store,fields:["key","name","factor"],data:[{key:"kn",name:Strings.sharedKn,factor:1},{key:"kmh",name:Strings.sharedKmh,factor:1.852},{key:"mph",name:Strings.sharedMph,factor:1.15078}],formatValue:function(a,b){var c;b||(b="kn");c=this.findRecord("key",b);return(a*c.get("factor")).toFixed(1)+" "+c.get("name")}});
+Ext.define("Traccar.store.CommandTypes",{extend:Ext.data.Store,fields:["type","name"],listeners:{beforeload:function(a){a=a.getProxy();a.setUrl("/api/commandtypes?deviceId"+a.extraParams.deviceId)}},proxy:{type:"rest",url:"",reader:{type:"json",getData:function(a){Ext.each(a,function(a){var c;a.name=a.type;"undefined"!==typeof a.type&&(c="command"+a.type.charAt(0).toUpperCase()+a.type.slice(1),c=Strings[c],"undefined"!==typeof c&&(a.name=c))});return a}}}});
+Ext.define("Traccar.store.TimeUnits",{extend:Ext.data.Store,fields:["name","factor"],data:[{name:Strings.sharedSecond,factor:1},{name:Strings.sharedMinute,factor:60},{name:Strings.sharedHour,factor:3600}]});Ext.define("Traccar.store.Languages",{extend:Ext.data.Store,fields:["code","name"],data:function(){var a,b=[];for(a in Locale.languages)Locale.languages.hasOwnProperty(a)&&b.push({code:a,name:Locale.languages[a].name});return b}()});
+Ext.define("Traccar.store.Events",{extend:Ext.data.Store,model:"Traccar.model.Event",proxy:{type:"rest",url:"/api/events"}});Ext.define("Traccar.store.Geofences",{extend:Ext.data.Store,model:"Traccar.model.Geofence",proxy:{type:"rest",url:"/api/geofences",writer:{writeAllFields:!0}}});Ext.define("Traccar.store.AllGeofences",{extend:Ext.data.Store,model:"Traccar.model.Geofence",proxy:{type:"rest",url:"/api/geofences",extraParams:{all:!0}}});
+Ext.define("Traccar.store.Notifications",{extend:Ext.data.Store,model:"Traccar.model.Notification",proxy:{type:"rest",url:"/api/users/notifications"}});Ext.define("Traccar.store.AllNotifications",{extend:Ext.data.Store,model:"Traccar.model.Notification",proxy:{type:"rest",url:"/api/users/notifications",extraParams:{all:!0}},sortOnLoad:!0,sorters:{property:"type",direction:"ASC"}});
+Ext.define("Traccar.store.GeofenceTypes",{extend:Ext.data.Store,fields:["key","name"],data:[{key:"Polygon",name:Strings.mapShapePolygon},{key:"Circle",name:Strings.mapShapeCircle}]});Ext.define("Traccar.view.BaseDialog",{extend:Ext.window.Window,bodyPadding:Traccar.Style.panelPadding,resizable:!1,modal:!0});
+Ext.define("Traccar.view.RegisterController",{extend:Ext.app.ViewController,alias:"controller.register",onCreateClick:function(){var a=this.lookupReference("form");a.isValid()&&Ext.Ajax.request({scope:this,method:"POST",url:"/api/users",jsonData:a.getValues(),callback:this.onCreateReturn})},onCreateReturn:function(a,b,c){b?(this.closeView(),Ext.toast(Strings.loginCreated)):Traccar.app.showError(c)}});
+Ext.define("Traccar.view.Register",{extend:Traccar.view.BaseDialog,controller:"register",title:Strings.loginRegister,items:{xtype:"form",reference:"form",jsonSubmit:!0,items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName,allowBlank:!1},{xtype:"textfield",name:"email",fieldLabel:Strings.userEmail,vtype:"email",allowBlank:!1},{xtype:"textfield",name:"password",fieldLabel:Strings.userPassword,inputType:"password",allowBlank:!1}]},buttons:[{text:Strings.sharedSave,handler:"onCreateClick"},
+{text:Strings.sharedCancel,handler:"closeView"}]});
+Ext.define("Traccar.view.LoginController",{extend:Ext.app.ViewController,alias:"controller.login",init:function(){this.lookupReference("registerButton").setDisabled(!Traccar.app.getServer().get("registration"));this.lookupReference("languageField").setValue(Locale.language);var a=Ext.util.Cookies.get("user"),b=Ext.util.Cookies.get("pass");a&&b&&(this.lookupReference("txtUser").setValue(a),this.lookupReference("txtPassword").setValue(b),this.login())},login:function(){var a=this.lookupReference("form");
+a.isValid()&&(Ext.getBody().mask(Strings.sharedLoading),Ext.Ajax.request({scope:this,method:"POST",url:"/api/session",params:a.getValues(),callback:function(a,c,d){Ext.getBody().unmask();c?(this.lookupReference("chkRememberMe").getValue()&&(Ext.util.Cookies.set("user",this.lookupReference("txtUser").getValue(),Ext.Date.add(new Date,Ext.Date.YEAR,1)),Ext.util.Cookies.set("pass",this.lookupReference("txtPassword").getValue(),Ext.Date.add(new Date,Ext.Date.YEAR,1))),Traccar.app.setUser(Ext.decode(d.responseText)),
+this.fireViewEvent("login")):Traccar.app.showError(Strings.loginFailed)}}))},logout:function(){Ext.util.Cookies.clear("user");Ext.util.Cookies.clear("pass");Ext.Ajax.request({scope:this,method:"DELETE",url:"/api/session",callback:function(){window.location.reload()}})},onSelectLanguage:function(a){var b,c;a=a.getValue();b=window.location.href;0<=b.indexOf("locale\x3d")?(c=b.substring(0,b.indexOf("locale")),b=b.substring(b.indexOf("locale")),b=b.substring(b.indexOf("\x3d")+1),b=0<=b.indexOf("\x26")?
+b.substring(b.indexOf("\x26")):"",b=c+"locale\x3d"+a+b):b=0>b.indexOf("?")?b+("?locale\x3d"+a):b+("\x26locale\x3d"+a);window.location.href=b},onAfterRender:function(a){a.focus()},onSpecialKey:function(a,b){b.getKey()===b.ENTER&&this.login()},onLoginClick:function(){Ext.getElementById("submitButton").click();this.login()},onRegisterClick:function(){Ext.create("Traccar.view.Register").show()}});
+Ext.define("Traccar.view.Login",{extend:Traccar.view.BaseDialog,alias:"widget.login",controller:"login",title:Strings.loginTitle,closable:!1,modal:!1,items:{xtype:"form",reference:"form",autoEl:{tag:"form",method:"POST",action:"fake-login.html",target:"submitTarget"},items:[{xtype:"combobox",name:"language",fieldLabel:Strings.loginLanguage,store:"Languages",displayField:"name",valueField:"code",submitValue:!1,listeners:{select:"onSelectLanguage"},reference:"languageField"},{xtype:"textfield",name:"email",
+reference:"txtUser",fieldLabel:Strings.userEmail,allowBlank:!1,enableKeyEvents:!0,listeners:{specialKey:"onSpecialKey",afterrender:"onAfterRender"},inputAttrTpl:['autocomplete\x3d"on"']},{xtype:"textfield",name:"password",reference:"txtPassword",fieldLabel:Strings.userPassword,inputType:"password",allowBlank:!1,enableKeyEvents:!0,listeners:{specialKey:"onSpecialKey"},inputAttrTpl:['autocomplete\x3d"on"']},{xtype:"checkboxfield",reference:"chkRememberMe",fieldLabel:Strings.rememberMe},{xtype:"component",
+html:'\x3ciframe id\x3d"submitTarget" name\x3d"submitTarget" style\x3d"display:none"\x3e\x3c/iframe\x3e'},{xtype:"component",html:'\x3cinput type\x3d"submit" id\x3d"submitButton" style\x3d"display:none"\x3e'}]},buttons:[{text:Strings.loginRegister,handler:"onRegisterClick",reference:"registerButton"},{text:Strings.loginLogin,handler:"onLoginClick"}]});
+Ext.define("Traccar.view.CommandDialogController",{extend:Ext.app.ViewController,alias:"controller.commandDialog",onSelect:function(a){this.lookupReference("paramPositionPeriodic").setHidden("positionPeriodic"!==a.getValue());this.lookupReference("paramCustom").setHidden("custom"!==a.getValue())},onSendClick:function(a){var b,c;a=a.up("window").down("form");a.updateRecord();c=a.getRecord();"positionPeriodic"===c.get("type")&&(a=this.lookupReference("paramPositionPeriodic"),b=a.down('numberfield[name\x3d"frequency"]').getValue(),
+b*=a.down('combobox[name\x3d"unit"]').getValue(),c.set("attributes",{frequency:b}));"custom"===c.get("type")&&(b=this.lookupReference("paramCustom").getValue(),c.set("attributes",{data:b}));Ext.Ajax.request({scope:this,url:"/api/commands",jsonData:c.getData(),callback:this.onSendResult})},onSendResult:function(a,b,c){b?(Ext.toast(Strings.commandSent),this.closeView()):Traccar.app.showError(c)}});
+Ext.define("Traccar.view.CommandDialog",{extend:Traccar.view.BaseDialog,controller:"commandDialog",title:Strings.commandTitle,items:{xtype:"form",items:[{xtype:"combobox",name:"type",fieldLabel:Strings.commandType,store:"CommandTypes",displayField:"name",valueField:"type",listeners:{select:"onSelect"}},{xtype:"fieldcontainer",reference:"paramPositionPeriodic",name:"attributes",hidden:!0,items:[{xtype:"numberfield",fieldLabel:Strings.commandFrequency,name:"frequency"},{xtype:"combobox",fieldLabel:Strings.commandUnit,
+name:"unit",store:"TimeUnits",displayField:"name",valueField:"factor"}]},{xtype:"textfield",reference:"paramCustom",fieldLabel:Strings.commandCustom,name:"customCommand",hidden:!0,allowBlank:!1}]},buttons:[{text:Strings.commandSend,handler:"onSendClick"},{text:Strings.sharedCancel,handler:"closeView"}]});
+Ext.define("Traccar.view.BaseEditDialog",{extend:Traccar.view.BaseDialog,buttons:[{text:Strings.sharedAttributes,handler:"showAttributesView"},{xtype:"tbfill"},{text:Strings.sharedSave,handler:"onSaveClick"},{text:Strings.sharedCancel,handler:"closeView"}]});
+Ext.define("Traccar.view.DeviceDialog",{extend:Traccar.view.BaseEditDialog,controller:"baseEditDialog",title:Strings.deviceDialog,items:{xtype:"form",items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName,allowBlank:!1},{xtype:"textfield",name:"uniqueId",fieldLabel:Strings.deviceIdentifier,allowBlank:!1},{xtype:"combobox",name:"groupId",fieldLabel:Strings.groupParent,store:"Groups",queryMode:"local",displayField:"name",valueField:"id"}]}});
+Ext.define("Traccar.view.BasePermissionsController",{extend:Ext.app.ViewController,alias:"controller.basePermissionsController",init:function(){var a={},b,c;a[this.getView().baseObjectName]=this.getView().baseObject;b=this.getView().linkStoreName;c=this.getView().storeName;b="undefined"===typeof b?c:b;this.getView().setStore(Ext.getStore(c));this.getView().getStore().load({scope:this,callback:function(){Ext.create("Traccar.store."+b).load({params:a,scope:this,callback:function(a,b,c){if(c)for(b=0;b<
+a.length;b++)c=this.getView().getStore().find("id",a[b].getData().id),this.getView().getSelectionModel().select(c,!0,!0)}})}})},onBeforeSelect:function(a,b){var c={};c[this.getView().baseObjectName]=this.getView().baseObject;c[this.getView().linkObjectName]=b.getData().id;Ext.Ajax.request({scope:this,url:this.getView().urlApi,jsonData:Ext.util.JSON.encode(c),callback:function(a,b,c){b||Traccar.app.showError(c)}})},onBeforeDeselect:function(a,b){var c={};c[this.getView().baseObjectName]=this.getView().baseObject;
+c[this.getView().linkObjectName]=b.getData().id;Ext.Ajax.request({scope:this,method:"DELETE",url:this.getView().urlApi,jsonData:Ext.util.JSON.encode(c),callback:function(a,b,c){b||Traccar.app.showError(c)}})}});
+Ext.define("Traccar.view.DeviceGeofences",{extend:Ext.grid.Panel,xtype:"deviceGeofencesView",controller:"basePermissionsController",selModel:{selType:"checkboxmodel",checkOnly:!0,showHeaderCheckbox:!1},listeners:{beforedeselect:"onBeforeDeselect",beforeselect:"onBeforeSelect"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1}]});
+Ext.define("Traccar.view.DevicesController",{extend:Ext.app.ViewController,alias:"controller.devices",config:{listen:{controller:{"*":{selectDevice:"selectDevice",selectReport:"selectReport"}},store:{"#Devices":{update:"onUpdateDevice"}}}},init:function(){var a=Traccar.app.getServer().get("readonly")&&!Traccar.app.getUser().get("admin");this.lookupReference("toolbarAddButton").setVisible(!a);this.lookupReference("toolbarEditButton").setVisible(!a);this.lookupReference("toolbarRemoveButton").setVisible(!a)},
+onAddClick:function(){var a,b;a=Ext.create("Traccar.model.Device");a.store=Ext.getStore("Devices");b=Ext.create("Traccar.view.DeviceDialog");b.down("form").loadRecord(a);b.show()},onEditClick:function(){var a,b;a=this.getView().getSelectionModel().getSelection()[0];b=Ext.create("Traccar.view.DeviceDialog");b.down("form").loadRecord(a);b.show()},onRemoveClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.Msg.show({title:Strings.deviceDialog,message:Strings.sharedRemoveConfirm,
+buttons:Ext.Msg.YESNO,buttonText:{yes:Strings.sharedRemove,no:Strings.sharedCancel},fn:function(b){"yes"===b&&(b=Ext.getStore("Devices"),b.remove(a),b.sync())}})},onGeofencesClick:function(){var a;Traccar.app.getUser().get("admin");a=this.getView().getSelectionModel().getSelection()[0];Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedGeofences,items:{xtype:"deviceGeofencesView",baseObjectName:"deviceId",linkObjectName:"geofenceId",storeName:"Geofences",urlApi:"/api/devices/geofences",baseObject:a.getData().id}}).show()},
+onCommandClick:function(){var a,b,c;a=this.getView().getSelectionModel().getSelection()[0].get("id");b=Ext.create("Traccar.model.Command");b.set("deviceId",a);c=Ext.create("Traccar.view.CommandDialog");c.down("form").down("combobox").getStore().getProxy().setExtraParam("deviceId",a);c.down("form").loadRecord(b);c.show()},onFollowClick:function(a,b){var c;b&&(c=this.getView().getSelectionModel().getSelection()[0],this.fireEvent("selectDevice",c,!0))},updateButtons:function(a){var b=0===a.getCount();
+this.lookupReference("toolbarEditButton").setDisabled(b);this.lookupReference("toolbarRemoveButton").setDisabled(b);this.lookupReference("toolbarGeofencesButton").setDisabled(b);this.lookupReference("deviceCommandButton").setDisabled(b||"online"!==a.getLastSelected().get("status"))},onSelectionChange:function(a){this.updateButtons(a);0<a.getCount()&&this.fireEvent("selectDevice",a.getLastSelected(),!0)},selectDevice:function(a){this.getView().getSelectionModel().select([a],!1,!0)},selectReport:function(a){void 0!==
+a&&this.getView().getSelectionModel().deselectAll()},onUpdateDevice:function(){this.updateButtons(this.getView().getSelectionModel())}});
+Ext.define("Traccar.view.EditToolbar",{extend:Ext.toolbar.Toolbar,xtype:"editToolbar",initComponent:function(){this.callParent(arguments);this.add(0,[{xtype:"button",handler:"onAddClick",reference:"toolbarAddButton",glyph:"xf067@FontAwesome",tooltip:Strings.sharedAdd,tooltipType:"title"},{xtype:"button",disabled:!0,handler:"onEditClick",reference:"toolbarEditButton",glyph:"xf040@FontAwesome",tooltip:Strings.sharedEdit,tooltipType:"title"},{xtype:"button",disabled:!0,handler:"onRemoveClick",reference:"toolbarRemoveButton",
+glyph:"xf00d@FontAwesome",tooltip:Strings.sharedRemove,tooltipType:"title"}])}});Ext.define("Traccar.view.AttributeController",{extend:Ext.app.ViewController,alias:"controller.attributeDialog",onSaveClick:function(a){var b,c;b=a.up("window").down("form");b.updateRecord();b=b.getRecord();(c=b.store)?(b.phantom&&c.add(b),c.sync({failure:function(a){c.rejectChanges();Traccar.app.showError(a.exceptions[0].getError().response)}})):b.save();a.up("window").close()}});
+Ext.define("Traccar.view.AttributeDialog",{extend:Traccar.view.BaseDialog,controller:"attributeDialog",title:Strings.sharedAttribute,items:{xtype:"form",items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName},{xtype:"textfield",name:"value",fieldLabel:Strings.stateValue}]},buttons:[{text:Strings.sharedSave,handler:"onSaveClick"},{text:Strings.sharedCancel,handler:"closeView"}]});
+Ext.define("Traccar.view.AttributesController",{extend:Ext.app.ViewController,alias:"controller.attributes",init:function(){var a,b,c=0,d;a=Ext.create("Traccar.store.Attributes");a.setProxy(Ext.create("Ext.data.proxy.Memory"));"undefined"===typeof this.getView().record.get("attributes")&&this.getView().record.set("attributes",{});d=this.getView().record.get("attributes");for(b in d)d.hasOwnProperty(b)&&a.add(Ext.create("Traccar.model.Attribute",{priority:c++,name:b,value:this.getView().record.get("attributes")[b]}));
+a.addListener("add",function(a,b){var c;for(c=0;c<b.length;c++)this.getView().record.get("attributes")[b[c].get("name")]=b[c].get("value");this.getView().record.dirty=!0},this);a.addListener("update",function(a,b,c){c===Ext.data.Model.EDIT&&(b.modified.name!==b.get("name")&&delete this.getView().record.get("attributes")[b.modified.name],this.getView().record.get("attributes")[b.get("name")]=b.get("value"),this.getView().record.dirty=!0)},this);a.addListener("remove",function(a,b){var c;for(c=0;c<
+b.length;c++)delete this.getView().record.get("attributes")[b[c].get("name")];this.getView().record.dirty=!0},this);this.getView().setStore(a)},onAddClick:function(){var a,b;a=Ext.create("Traccar.model.Attribute");a.store=this.getView().getStore();b=Ext.create("Traccar.view.AttributeDialog");b.down("form").loadRecord(a);b.show()},onEditClick:function(){var a,b;a=this.getView().getSelectionModel().getSelection()[0];b=Ext.create("Traccar.view.AttributeDialog");b.down("form").loadRecord(a);b.show()},
+onRemoveClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.Msg.show({title:Strings.stateName,message:Strings.sharedRemoveConfirm,buttons:Ext.Msg.YESNO,buttonText:{yes:Strings.sharedRemove,no:Strings.sharedCancel},scope:this,fn:function(b){var c=this.getView().getStore();"yes"===b&&(c.remove(a),c.sync())}})},onSelectionChange:function(a){a=0<a.length;this.lookupReference("toolbarEditButton").setDisabled(a);this.lookupReference("toolbarRemoveButton").setDisabled(a)}});
+Ext.define("Traccar.view.Attributes",{extend:Ext.grid.Panel,xtype:"attributesView",controller:"attributes",selType:"rowmodel",tbar:{xtype:"editToolbar"},listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1},{text:Strings.stateValue,dataIndex:"value",flex:1}]});
+Ext.define("Traccar.view.BaseEditDialogController",{extend:Ext.app.ViewController,alias:"controller.baseEditDialog",onSaveClick:function(a){var b,c;b=a.up("window").down("form");b.updateRecord();b=b.getRecord();(c=b.store)?(b.phantom&&c.add(b),c.sync({failure:function(a){c.rejectChanges();Traccar.app.showError(a.exceptions[0].getError().response)}})):b.save();a.up("window").close()},showAttributesView:function(a){a=a.up("window").down("form").getRecord();Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedAttributes,
+modal:!1,items:{xtype:"attributesView",record:a}}).show()}});
+Ext.define("Traccar.view.UserDialogController",{extend:Traccar.view.BaseEditDialogController,alias:"controller.userDialog",init:function(){Traccar.app.getUser().get("admin")&&this.lookupReference("adminField").setDisabled(!1)},onSaveClick:function(a){var b,c;b=a.up("window").down("form");b.updateRecord();b=b.getRecord();b===Traccar.app.getUser()?b.save():(c=Ext.getStore("Users"),b.phantom&&c.add(b),c.sync({failure:function(a){c.rejectChanges();Traccar.app.showError(a.exceptions[0].getError().response)}}));
+a.up("window").close()}});
+Ext.define("Traccar.view.UserDialog",{extend:Traccar.view.BaseEditDialog,controller:"userDialog",title:Strings.settingsUser,items:[{xtype:"form",items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName},{xtype:"textfield",name:"email",fieldLabel:Strings.userEmail,allowBlank:!1},{xtype:"textfield",name:"password",fieldLabel:Strings.userPassword,inputType:"password",allowBlank:!1},{xtype:"checkboxfield",name:"admin",fieldLabel:Strings.userAdmin,allowBlank:!1,disabled:!0,reference:"adminField"},
+{xtype:"combobox",name:"map",fieldLabel:Strings.mapLayer,store:"MapTypes",displayField:"name",valueField:"key"},{xtype:"combobox",name:"distanceUnit",fieldLabel:Strings.settingsDistanceUnit,store:"DistanceUnits",displayField:"name",valueField:"key"},{xtype:"combobox",name:"speedUnit",fieldLabel:Strings.settingsSpeedUnit,store:"SpeedUnits",displayField:"name",valueField:"key"},{xtype:"numberfield",name:"latitude",fieldLabel:Strings.positionLatitude,decimalPrecision:Traccar.Style.coordinatePrecision},
+{xtype:"numberfield",name:"longitude",fieldLabel:Strings.positionLongitude,decimalPrecision:Traccar.Style.coordinatePrecision},{xtype:"numberfield",name:"zoom",fieldLabel:Strings.serverZoom},{xtype:"checkboxfield",name:"twelveHourFormat",fieldLabel:Strings.settingsTwelveHourFormat,allowBlank:!1}]}]});
+Ext.define("Traccar.view.ServerDialog",{extend:Traccar.view.BaseEditDialog,controller:"baseEditDialog",title:Strings.serverTitle,items:{xtype:"form",items:[{xtype:"checkboxfield",name:"registration",fieldLabel:Strings.serverRegistration,allowBlank:!1},{xtype:"checkboxfield",name:"readonly",fieldLabel:Strings.serverReadonly,allowBlank:!1},{xtype:"combobox",name:"map",fieldLabel:Strings.mapLayer,store:"MapTypes",displayField:"name",valueField:"key"},{xtype:"textfield",name:"bingKey",fieldLabel:Strings.mapBingKey},
+{xtype:"textfield",name:"mapUrl",fieldLabel:Strings.mapCustom},{xtype:"combobox",name:"distanceUnit",fieldLabel:Strings.settingsDistanceUnit,store:"DistanceUnits",displayField:"name",valueField:"key"},{xtype:"combobox",name:"speedUnit",fieldLabel:Strings.settingsSpeedUnit,store:"SpeedUnits",displayField:"name",valueField:"key"},{xtype:"numberfield",name:"latitude",fieldLabel:Strings.positionLatitude,decimalPrecision:Traccar.Style.coordinatePrecision},{xtype:"numberfield",name:"longitude",fieldLabel:Strings.positionLongitude,
+decimalPrecision:Traccar.Style.coordinatePrecision},{xtype:"numberfield",name:"zoom",fieldLabel:Strings.serverZoom},{xtype:"checkboxfield",name:"twelveHourFormat",fieldLabel:Strings.settingsTwelveHourFormat,allowBlank:!1}]}});
+Ext.define("Traccar.view.UserDevices",{extend:Ext.grid.Panel,xtype:"userDevicesView",controller:"basePermissionsController",selModel:{selType:"checkboxmodel",checkOnly:!0,showHeaderCheckbox:!1},listeners:{beforedeselect:"onBeforeDeselect",beforeselect:"onBeforeSelect"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1},{text:Strings.deviceIdentifier,dataIndex:"uniqueId",flex:1}]});
+Ext.define("Traccar.view.UserGroups",{extend:Ext.grid.Panel,xtype:"userGroupsView",controller:"basePermissionsController",selModel:{selType:"checkboxmodel",checkOnly:!0,showHeaderCheckbox:!1},listeners:{beforedeselect:"onBeforeDeselect",beforeselect:"onBeforeSelect"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1}]});
+Ext.define("Traccar.view.UserGeofences",{extend:Ext.grid.Panel,xtype:"userGeofencesView",controller:"basePermissionsController",selModel:{selType:"checkboxmodel",checkOnly:!0,showHeaderCheckbox:!1},listeners:{beforedeselect:"onBeforeDeselect",beforeselect:"onBeforeSelect"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1}]});
+Ext.define("Traccar.view.NotificationsController",{extend:Ext.app.ViewController,alias:"controller.notificationsController",init:function(){this.userId=this.getView().user.getData().id;this.getView().getStore().load({scope:this,callback:function(){Ext.create("Traccar.store.Notifications").load({params:{userId:this.userId},scope:this,callback:function(a,b,c){var d;if(c)for(b=0;b<a.length;b++)d=this.getView().getStore().find("type",a[b].getData().type),c=a[b].getData().attributes,d=this.getView().getStore().getAt(d),
+d.set("attributes",c),d.commit()}})}})},onBeforeCheckChange:function(a,b){var c,d,f;c=a.dataIndex.split(".",2);d=this.getView().getStore().getAt(b);f=d.get(c[0]);f[c[1]]?delete f[c[1]]:f[c[1]]="true";d.set(c[0],f);d.commit()},onCheckChange:function(a,b){var c=this.getView().getStore().getAt(b);Ext.Ajax.request({scope:this,url:"/api/users/notifications",jsonData:{userId:this.userId,type:c.getData().type,attributes:c.getData().attributes},callback:function(a,b,c){b||Traccar.app.showError(c)}})}});
+Ext.define("Traccar.view.Notifications",{extend:Ext.grid.Panel,xtype:"notificationsView",controller:"notificationsController",store:"AllNotifications",selModel:{selType:"cellmodel"},viewConfig:{markDirty:!1},columns:[{text:Strings.notificationType,dataIndex:"type",flex:1,renderer:function(a){a="event"+a.charAt(0).toUpperCase()+a.slice(1);return Strings[a]}},{text:Strings.notificationWeb,dataIndex:"attributes.web",xtype:"checkcolumn",flex:1,listeners:{beforeCheckChange:"onBeforeCheckChange",checkChange:"onCheckChange"},
+renderer:function(a,b,c){a=this.dataIndex.split(".",2);return(new Ext.ux.CheckColumn).renderer(c.get(a[0])[a[1]],b)}},{text:Strings.notificationMail,dataIndex:"attributes.mail",xtype:"checkcolumn",flex:1,listeners:{beforeCheckChange:"onBeforeCheckChange",checkChange:"onCheckChange"},renderer:function(a,b,c){a=this.dataIndex.split(".",2);return(new Ext.ux.CheckColumn).renderer(c.get(a[0])[a[1]],b)}}]});
+Ext.define("Traccar.view.BaseWindow",{extend:Ext.window.Window,width:Traccar.Style.windowWidth,height:Traccar.Style.windowHeight,layout:"fit",modal:!0});
+Ext.define("Traccar.view.UsersController",{extend:Ext.app.ViewController,alias:"controller.users",init:function(){Ext.getStore("Users").load()},onAddClick:function(){var a,b;a=Ext.create("Traccar.model.User");b=Ext.create("Traccar.view.UserDialog");b.down("form").loadRecord(a);b.show()},onEditClick:function(){var a,b;a=this.getView().getSelectionModel().getSelection()[0];b=Ext.create("Traccar.view.UserDialog");b.down("form").loadRecord(a);b.show()},onRemoveClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];
+Ext.Msg.show({title:Strings.settingsUser,message:Strings.sharedRemoveConfirm,buttons:Ext.Msg.YESNO,buttonText:{yes:Strings.sharedRemove,no:Strings.sharedCancel},fn:function(b){var c=Ext.getStore("Users");"yes"===b&&(c.remove(a),c.sync())}})},onDevicesClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.create("Traccar.view.BaseWindow",{title:Strings.deviceTitle,items:{xtype:"userDevicesView",baseObjectName:"userId",linkObjectName:"deviceId",storeName:"AllDevices",linkStoreName:"Devices",
+urlApi:"/api/permissions/devices",baseObject:a.getData().id}}).show()},onGroupsClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.create("Traccar.view.BaseWindow",{title:Strings.settingsGroups,items:{xtype:"userGroupsView",baseObjectName:"userId",linkObjectName:"groupId",storeName:"AllGroups",linkStoreName:"Groups",urlApi:"/api/permissions/groups",baseObject:a.getData().id}}).show()},onGeofencesClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];
+Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedGeofences,items:{xtype:"userGeofencesView",baseObjectName:"userId",linkObjectName:"geofenceId",storeName:"AllGeofences",linkStoreName:"Geofences",urlApi:"/api/permissions/geofences",baseObject:a.getData().id}}).show()},onNotificationsClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedNotifications,modal:!1,items:{xtype:"notificationsView",user:a}}).show()},onSelectionChange:function(a){a=
+0<a.length;this.lookupReference("toolbarEditButton").setDisabled(a);this.lookupReference("toolbarRemoveButton").setDisabled(a);this.lookupReference("userDevicesButton").setDisabled(a);this.lookupReference("userGroupsButton").setDisabled(a);this.lookupReference("userGeofencesButton").setDisabled(a);this.lookupReference("userNotificationsButton").setDisabled(a)}});
+Ext.define("Traccar.view.Users",{extend:Ext.grid.Panel,xtype:"usersView",controller:"users",store:"Users",selType:"rowmodel",tbar:{xtype:"editToolbar",items:[{text:Strings.deviceTitle,disabled:!0,handler:"onDevicesClick",reference:"userDevicesButton"},{text:Strings.settingsGroups,disabled:!0,handler:"onGroupsClick",reference:"userGroupsButton"},{text:Strings.sharedGeofences,disabled:!0,handler:"onGeofencesClick",reference:"userGeofencesButton"},{text:Strings.sharedNotifications,disabled:!0,handler:"onNotificationsClick",
+reference:"userNotificationsButton"}]},listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1},{text:Strings.userEmail,dataIndex:"email",flex:1},{text:Strings.userAdmin,dataIndex:"admin",flex:1}]});
+Ext.define("Traccar.view.GroupDialog",{extend:Traccar.view.BaseEditDialog,controller:"baseEditDialog",title:Strings.groupDialog,items:{xtype:"form",items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName,allowBlank:!1},{xtype:"combobox",name:"groupId",fieldLabel:Strings.groupParent,store:"Groups",queryMode:"local",displayField:"name",valueField:"id"}]}});
+Ext.define("Traccar.view.GroupGeofences",{extend:Ext.grid.Panel,xtype:"groupGeofencesView",controller:"basePermissionsController",selModel:{selType:"checkboxmodel",checkOnly:!0,showHeaderCheckbox:!1},listeners:{beforedeselect:"onBeforeDeselect",beforeselect:"onBeforeSelect"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1}]});
+Ext.define("Traccar.view.GroupsController",{extend:Ext.app.ViewController,alias:"controller.groups",onAddClick:function(){var a,b;a=Ext.create("Traccar.model.Group");a.store=this.getView().getStore();b=Ext.create("Traccar.view.GroupDialog");b.down("form").loadRecord(a);b.show()},onEditClick:function(){var a,b;a=this.getView().getSelectionModel().getSelection()[0];b=Ext.create("Traccar.view.GroupDialog");b.down("form").loadRecord(a);b.show()},onRemoveClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];
+Ext.Msg.show({title:Strings.groupDialog,message:Strings.sharedRemoveConfirm,buttons:Ext.Msg.YESNO,buttonText:{yes:Strings.sharedRemove,no:Strings.sharedCancel},fn:function(b){var c=Ext.getStore("Groups");"yes"===b&&(c.remove(a),c.sync())}})},onGeofencesClick:function(){var a,b;a=Traccar.app.getUser().get("admin");b=this.getView().getSelectionModel().getSelection()[0];Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedGeofences,items:{xtype:"groupGeofencesView",baseObjectName:"groupId",linkObjectName:"geofenceId",
+storeName:a?"AllGeofences":"Geofences",urlApi:"/api/groups/geofences",baseObject:b.getData().id}}).show()},onSelectionChange:function(a){a=0<a.length;this.lookupReference("toolbarEditButton").setDisabled(a);this.lookupReference("toolbarRemoveButton").setDisabled(a);this.lookupReference("toolbarGeofencesButton").setDisabled(a)}});
+Ext.define("Traccar.view.Groups",{extend:Ext.grid.Panel,xtype:"groupsView",controller:"groups",store:"Groups",selType:"rowmodel",tbar:{xtype:"editToolbar",items:[{xtype:"button",disabled:!0,handler:"onGeofencesClick",reference:"toolbarGeofencesButton",glyph:"xf21d@FontAwesome",tooltip:Strings.sharedGeofences,tooltipType:"title"}]},listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1}]});
+Ext.define("Traccar.view.BaseMap",{extend:Ext.form.Panel,xtype:"baseMapView",layout:"fit",getMap:function(){return this.map},getMapView:function(){return this.mapView},initMap:function(){var a,b,c,d,f,e;a=Traccar.app.getUser();b=Traccar.app.getServer();c=a.get("map")||b.get("map");d=b.get("bingKey");c="custom"===c?new ol.layer.Tile({source:new ol.source.XYZ({url:b.get("mapUrl"),attributions:[new ol.Attribution({html:""})]})}):"bingRoad"===c?new ol.layer.Tile({source:new ol.source.BingMaps({key:d,
+imagerySet:"Road"})}):"bingAerial"===c?new ol.layer.Tile({source:new ol.source.BingMaps({key:d,imagerySet:"Aerial"})}):new ol.layer.Tile({source:new ol.source.OSM({})});d=a.get("latitude")||b.get("latitude")||Traccar.Style.mapDefaultLat;f=a.get("longitude")||b.get("longitude")||Traccar.Style.mapDefaultLon;a=a.get("zoom")||b.get("zoom")||Traccar.Style.mapDefaultZoom;this.mapView=new ol.View({center:ol.proj.fromLonLat([f,d]),zoom:a,maxZoom:Traccar.Style.mapMaxZoom});this.map=new ol.Map({target:this.body.dom.id,
+layers:[c],view:this.mapView});e=this.map.getTarget();"string"===typeof e&&(e=Ext.get(e).dom);this.map.on("pointermove",function(a){e.style.cursor=this.forEachFeatureAtPixel(a.pixel,function(){return!0})?"pointer":""});this.map.on("click",function(a){this.map.forEachFeatureAtPixel(a.pixel,function(a){this.fireEvent("selectFeature",a)},this)},this)},listeners:{afterrender:function(){this.initMap()},resize:function(){this.map.updateSize()}}});
+Ext.define("Traccar.GeofenceConverter",{singleton:!0,wktToGeometry:function(a,b){var c,d,f=[],e,g,h;if(0===b.lastIndexOf("POLYGON",0)){if(e=b.match(/\([^\(\)]+\)/),null!==e&&(e=e[0].match(/-?\d+\.?\d*/g),null!==e)){c=a.getProjection();for(d=0;d<e.length;d+=2)g=Number(e[d]),h=Number(e[d+1]),f.push(ol.proj.transform([h,g],"EPSG:4326",c));c=new ol.geom.Polygon([f])}}else 0===b.lastIndexOf("CIRCLE",0)&&(e=b.match(/\([^\(\)]+\)/),null!==e&&(e=e[0].match(/-?\d+\.?\d*/g),null!==e&&(c=a.getProjection(),f=
+ol.proj.transform([Number(e[1]),Number(e[0])],"EPSG:4326",c),d=a.getResolution(),c=c.getPointResolution(d,f),e=Number(e[2])/ol.proj.METERS_PER_UNIT.m*(d/c),c=new ol.geom.Circle(f,e))));return c},geometryToWkt:function(a,b){var c,d,f;if(b instanceof ol.geom.Circle)c=b.getCenter(),d=b.getRadius(),d=[c[0]+d,c[1]],c=ol.proj.transform(c,a,"EPSG:4326"),f=new ol.Sphere(6378137),d=f.haversineDistance(c,ol.proj.transform(d,a,"EPSG:4326")),c="CIRCLE ("+(c[1]+" "+c[0]+", "),c+=Number(d.toFixed(1))+")";else if(b instanceof
+ol.geom.Polygon){b.transform(a,"EPSG:4326");f=b.getCoordinates();c="POLYGON((";for(d=0;d<f[0].length;d+=1)c+=f[0][d][1]+" "+f[0][d][0]+", ";c=c.substring(0,c.length-2)+"))"}return c}});
+Ext.define("Traccar.view.GeofenceMapController",{extend:Ext.app.ViewController,alias:"controller.geofenceMap",onSaveClick:function(a){var b,c;0<this.getView().getFeatures().getLength()&&(b=this.getView().getFeatures().pop().getGeometry(),c=this.getView().getMapView().getProjection(),this.fireEvent("saveArea",Traccar.GeofenceConverter.geometryToWkt(c,b)),a.up("window").close())},onCancelClick:function(a){a.up("window").close()},onTypeSelect:function(a){this.getView().removeInteraction();this.getView().addInteraction(a.getValue())}});
+Ext.define("Traccar.view.GeofenceMap",{extend:Traccar.view.BaseMap,xtype:"geofenceMapView",controller:"geofenceMap",bodyBorder:!0,tbar:{items:[{xtype:"combobox",store:"GeofenceTypes",valueField:"key",displayField:"name",listeners:{select:"onTypeSelect"}},{xtype:"tbfill"},{text:Strings.sharedSave,handler:"onSaveClick"},{text:Strings.sharedCancel,handler:"onCancelClick"}]},getFeatures:function(){return this.features},initMap:function(){var a,b;this.callParent();a=this.map;this.features=new ol.Collection;
+""!==this.area&&(b=Traccar.GeofenceConverter.wktToGeometry(this.mapView,this.area),this.features.push(new ol.Feature(b)),b instanceof ol.geom.Circle?this.mapView.setCenter(b.getCenter()):b instanceof ol.geom.Polygon&&this.mapView.setCenter(b.getCoordinates()[0][0]));(new ol.layer.Vector({source:new ol.source.Vector({features:this.features}),style:new ol.style.Style({fill:new ol.style.Fill({color:Traccar.Style.mapColorOverlay}),stroke:new ol.style.Stroke({color:Traccar.Style.mapColorReport,width:Traccar.Style.mapRouteWidth}),
+image:new ol.style.Circle({radius:Traccar.Style.mapRadiusNormal,fill:new ol.style.Fill({color:Traccar.Style.mapColorReport})})})})).setMap(a);a.addInteraction(new ol.interaction.Modify({features:this.features,deleteCondition:function(a){return ol.events.condition.shiftKeyOnly(a)&&ol.events.condition.singleClick(a)}}))},addInteraction:function(a){this.draw=new ol.interaction.Draw({features:this.features,type:a});this.draw.on("drawstart",function(){this.features.clear()},this);this.map.addInteraction(this.draw)},
+removeInteraction:function(){this.draw&&(this.map.removeInteraction(this.draw),this.draw=null)}});
+Ext.define("Traccar.view.GeofenceDialogController",{extend:Traccar.view.BaseEditDialogController,alias:"controller.geofenceDialog",config:{listen:{controller:{"*":{saveArea:"saveArea"}}}},saveArea:function(a){this.lookupReference("areaField").setValue(a)},onAreaClick:function(a){a=a.up("window").down("form").getRecord();Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedArea,items:{xtype:"geofenceMapView",area:a.get("area")}}).show()}});
+Ext.define("Traccar.view.GeofenceDialog",{extend:Traccar.view.BaseDialog,controller:"geofenceDialog",title:Strings.sharedGeofence,items:{xtype:"form",items:[{xtype:"textfield",name:"name",fieldLabel:Strings.sharedName},{xtype:"textfield",name:"description",fieldLabel:Strings.sharedDescription},{xtype:"hiddenfield",name:"area",allowBlank:!1,reference:"areaField"}]},buttons:[{text:Strings.sharedArea,glyph:"xf21d@FontAwesome",handler:"onAreaClick"},{xtype:"tbfill"},{text:Strings.sharedSave,handler:"onSaveClick"},
+{text:Strings.sharedCancel,handler:"closeView"}]});
+Ext.define("Traccar.view.GeofencesController",{extend:Ext.app.ViewController,alias:"controller.geofences",init:function(){Ext.getStore("Geofences").load()},onAddClick:function(){var a,b;a=Ext.create("Traccar.model.Geofence");a.store=this.getView().getStore();b=Ext.create("Traccar.view.GeofenceDialog");b.down("form").loadRecord(a);b.show()},onEditClick:function(){var a,b;a=this.getView().getSelectionModel().getSelection()[0];b=Ext.create("Traccar.view.GeofenceDialog");b.down("form").loadRecord(a);
+b.show()},onRemoveClick:function(){var a=this.getView().getSelectionModel().getSelection()[0];Ext.Msg.show({title:Strings.sharedGeofence,message:Strings.sharedRemoveConfirm,buttons:Ext.Msg.YESNO,buttonText:{yes:Strings.sharedRemove,no:Strings.sharedCancel},fn:function(b){var c=Ext.getStore("Geofences");"yes"===b&&(c.remove(a),c.sync())}})},onSelectionChange:function(a){a=0<a.length;this.lookupReference("toolbarEditButton").setDisabled(a);this.lookupReference("toolbarRemoveButton").setDisabled(a)}});
+Ext.define("Traccar.view.Geofences",{extend:Ext.grid.Panel,xtype:"geofencesView",controller:"geofences",store:"Geofences",selType:"rowmodel",tbar:{xtype:"editToolbar"},listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1},{text:Strings.sharedDescription,dataIndex:"description",flex:1}]});
+Ext.define("Traccar.view.SettingsMenuController",{extend:Ext.app.ViewController,alias:"controller.settings",init:function(){Traccar.app.getUser().get("admin")&&(this.lookupReference("settingsServerButton").setHidden(!1),this.lookupReference("settingsUsersButton").setHidden(!1))},onUserClick:function(){var a=Ext.create("Traccar.view.UserDialog");a.down("form").loadRecord(Traccar.app.getUser());a.show()},onGroupsClick:function(){Ext.create("Traccar.view.BaseWindow",{title:Strings.settingsGroups,modal:!1,
+items:{xtype:"groupsView"}}).show()},onGeofencesClick:function(){Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedGeofences,modal:!1,items:{xtype:"geofencesView"}}).show()},onServerClick:function(){var a=Ext.create("Traccar.view.ServerDialog");a.down("form").loadRecord(Traccar.app.getServer());a.show()},onUsersClick:function(){Ext.create("Traccar.view.BaseWindow",{title:Strings.settingsUsers,modal:!1,items:{xtype:"usersView"}}).show()},onNotificationsClick:function(){var a=Traccar.app.getUser();
+Ext.create("Traccar.view.BaseWindow",{title:Strings.sharedNotifications,modal:!1,items:{xtype:"notificationsView",user:a}}).show()},onLogoutClick:function(){Ext.create("Traccar.view.LoginController").logout()}});
+Ext.define("Traccar.view.SettingsMenu",{extend:Ext.button.Button,xtype:"settingsMenu",glyph:"xf013@FontAwesome",text:Strings.settingsTitle,menu:{controller:"settings",items:[{text:Strings.settingsUser,handler:"onUserClick"},{text:Strings.settingsGroups,handler:"onGroupsClick"},{text:Strings.sharedGeofences,handler:"onGeofencesClick"},{text:Strings.settingsServer,hidden:!0,handler:"onServerClick",reference:"settingsServerButton"},{text:Strings.settingsUsers,hidden:!0,handler:"onUsersClick",reference:"settingsUsersButton"},
+{text:Strings.sharedNotifications,handler:"onNotificationsClick"},{text:Strings.loginLogout,handler:"onLogoutClick"}]}});
+Ext.define("Traccar.view.Devices",{extend:Ext.grid.Panel,xtype:"devicesView",controller:"devices",rootVisible:!1,initComponent:function(){this.store=Ext.create("Ext.data.ChainedStore",{source:"Devices",groupField:"groupId"});this.callParent()},title:Strings.deviceTitle,selType:"rowmodel",tbar:{xtype:"editToolbar",items:[{xtype:"button",disabled:!0,handler:"onGeofencesClick",reference:"toolbarGeofencesButton",glyph:"xf21d@FontAwesome",tooltip:Strings.sharedGeofences,tooltipType:"title"},{disabled:!0,
+handler:"onCommandClick",reference:"deviceCommandButton",glyph:"xf093@FontAwesome",tooltip:Strings.deviceCommand,tooltipType:"title"},{xtype:"tbfill"},{id:"muteButton",glyph:"xf1f7@FontAwesome",tooltip:Strings.sharedMute,tooltipType:"title",pressed:!0,enableToggle:!0,listeners:{toggle:function(a,b){b?a.setGlyph("xf1f7@FontAwesome"):a.setGlyph("xf0a2@FontAwesome")},scope:this}},{id:"deviceFollowButton",glyph:"xf05b@FontAwesome",tooltip:Strings.deviceFollow,tooltipType:"title",enableToggle:!0,toggleHandler:"onFollowClick"},
+{xtype:"settingsMenu"}]},bbar:[{xtype:"tbtext",html:Strings.groupParent},{xtype:"combobox",store:"Groups",queryMode:"local",displayField:"name",valueField:"id",flex:1,listeners:{change:function(){Ext.isNumber(this.getValue())?this.up("grid").store.filter({id:"groupFilter",filterFn:function(a){var b,c=!0;b=a.get("groupId");for(a=Ext.getStore("Groups");b;)if(b=a.getById(b)){if(b.get("id")===this.getValue()){c=!1;break}b=b.get("groupId")}else b=0;return!c},scope:this}):this.up("grid").store.removeFilter("groupFilter")}}},
+{xtype:"tbtext",html:Strings.sharedSearch},{xtype:"textfield",flex:1,listeners:{change:function(){this.up("grid").store.filter("name",this.getValue())}}}],listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.sharedName,dataIndex:"name",flex:1},{text:Strings.deviceLastUpdate,dataIndex:"lastUpdate",flex:1,renderer:function(a,b,c){switch(c.get("status")){case "online":b.tdCls="view-color-green";break;case "offline":b.tdCls="view-color-red";break;default:b.tdCls="view-color-yellow"}return Traccar.app.getPreference("twelveHourFormat",
+!1)?Ext.Date.format(a,Traccar.Style.dateTimeFormat12):Ext.Date.format(a,Traccar.Style.dateTimeFormat24)}}]});
+Ext.define("Traccar.view.StateController",{extend:Ext.app.ViewController,alias:"controller.state",config:{listen:{controller:{"*":{selectDevice:"selectDevice",selectReport:"selectReport"}},store:{"#LatestPositions":{add:"updateLatest",update:"updateLatest"},"#Positions":{clear:"clearReport"}}}},keys:function(){var a,b,c;c={};b="fixTime latitude longitude valid altitude speed course address protocol".split(" ");for(a=0;a<b.length;a++)c[b[a]]={priority:a,name:Strings["position"+b[a].replace(/^\w/g,
+function(a){return a.toUpperCase()})]};return c}(),updateLatest:function(a,b){var c;Ext.isArray(b)||(b=[b]);for(c=0;c<b.length;c++)this.deviceId===b[c].get("deviceId")&&this.updatePosition(b[c])},formatValue:function(a){return"number"===typeof id?Number(a.toFixed(2)):a},updatePosition:function(a){var b,c;b=Ext.getStore("Attributes");b.removeAll();for(c in a.data)a.data.hasOwnProperty(c)&&void 0!==this.keys[c]&&b.add(Ext.create("Traccar.model.Attribute",{priority:this.keys[c].priority,name:this.keys[c].name,
+value:Traccar.AttributeFormatter.getFormatter(c)(a.get(c))}));a=a.get("attributes");if(a instanceof Object)for(c in a)a.hasOwnProperty(c)&&b.add(Ext.create("Traccar.model.Attribute",{priority:1024,name:c.replace(/^./,function(a){return a.toUpperCase()}),value:Traccar.AttributeFormatter.getFormatter(c)(a[c])}))},selectDevice:function(a){this.deviceId=a.get("id");(a=Ext.getStore("LatestPositions").findRecord("deviceId",this.deviceId,0,!1,!1,!0))?this.updatePosition(a):Ext.getStore("Attributes").removeAll()},
+selectReport:function(a){this.deviceId=null;this.updatePosition(a)},clearReport:function(){Ext.getStore("Attributes").removeAll()}});Ext.define("Traccar.view.State",{extend:Ext.grid.Panel,xtype:"stateView",controller:"state",store:"Attributes",title:Strings.stateTitle,columns:[{text:Strings.stateName,dataIndex:"name",flex:1},{text:Strings.stateValue,dataIndex:"value",flex:1,renderer:function(a,b,c){"Alarm"===c.get("name")&&(b.tdCls="view-color-red");return a}}]});
+Ext.define("Traccar.view.ReportController",{extend:Ext.app.ViewController,alias:"controller.report",config:{listen:{controller:{"*":{selectDevice:"selectDevice",selectReport:"selectReport"}}}},onShowClick:function(){var a,b,c,d;a=this.lookupReference("deviceField").getValue();b=this.lookupReference("fromDateField").getValue();c=this.lookupReference("fromTimeField").getValue();a&&(b=new Date(b.getFullYear(),b.getMonth(),b.getDate(),c.getHours(),c.getMinutes(),c.getSeconds(),c.getMilliseconds()),c=
+this.lookupReference("toDateField").getValue(),d=this.lookupReference("toTimeField").getValue(),c=new Date(c.getFullYear(),c.getMonth(),c.getDate(),d.getHours(),d.getMinutes(),d.getSeconds(),d.getMilliseconds()),d=Ext.getStore("Positions"),d.load({params:{deviceId:a,from:b.toISOString(),to:c.toISOString()}}))},onClearClick:function(){Ext.getStore("Positions").removeAll()},onSelectionChange:function(a){0<a.getCount()&&this.fireEvent("selectReport",a.getLastSelected(),!0)},selectDevice:function(a){a&&
+this.getView().getSelectionModel().deselectAll()},selectReport:function(a){this.getView().getSelectionModel().select([a],!1,!0)}});Ext.define("Traccar.view.CustomTimeField",{extend:Ext.form.field.Time,xtype:"customTimeField",constructor:function(a){a.format=Traccar.app.getPreference("twelveHourFormat",!1)?Traccar.Style.timeFormat12:Traccar.Style.timeFormat24;this.callParent(arguments)}});
+Ext.define("Traccar.view.Report",{extend:Ext.grid.Panel,xtype:"reportView",controller:"report",store:"Positions",title:Strings.reportTitle,tbar:[{xtype:"tbtext",html:Strings.reportDevice},{xtype:"combobox",reference:"deviceField",store:"Devices",valueField:"id",displayField:"name",typeAhead:!0,queryMode:"local"},"-",{xtype:"tbtext",html:Strings.reportFrom},{xtype:"datefield",reference:"fromDateField",startDay:Traccar.Style.weekStartDay,format:Traccar.Style.dateFormat,value:new Date((new Date).getTime()-
+18E5)},{xtype:"customTimeField",reference:"fromTimeField",maxWidth:Traccar.Style.reportTime,value:new Date((new Date).getTime()-18E5)},"-",{xtype:"tbtext",html:Strings.reportTo},{xtype:"datefield",reference:"toDateField",startDay:Traccar.Style.weekStartDay,format:Traccar.Style.dateFormat,value:new Date},{xtype:"customTimeField",reference:"toTimeField",maxWidth:Traccar.Style.reportTime,value:new Date},"-",{text:Strings.reportShow,handler:"onShowClick"},{text:Strings.reportClear,handler:"onClearClick"}],
+listeners:{selectionchange:"onSelectionChange"},columns:[{text:Strings.positionValid,dataIndex:"valid",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("valid")},{text:Strings.positionFixTime,dataIndex:"fixTime",flex:1,xtype:"datecolumn",renderer:Traccar.AttributeFormatter.getFormatter("fixTime")},{text:Strings.positionLatitude,dataIndex:"latitude",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("latitude")},{text:Strings.positionLongitude,dataIndex:"longitude",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("latitude")},
+{text:Strings.positionAltitude,dataIndex:"altitude",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("altitude")},{text:Strings.positionSpeed,dataIndex:"speed",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("speed")},{text:Strings.positionAddress,dataIndex:"address",flex:1,renderer:Traccar.AttributeFormatter.getFormatter("address")}]});
+Ext.define("Traccar.view.MapController",{extend:Ext.app.ViewController,alias:"controller.map",config:{listen:{controller:{"*":{selectDevice:"selectDevice",selectReport:"selectReport"}},store:{"#Devices":{add:"updateDevice",update:"updateDevice"},"#LatestPositions":{add:"updateLatest",update:"updateLatest"},"#Positions":{load:"loadReport",clear:"clearReport"}},component:{"#":{selectFeature:"selectFeature"}}}},init:function(){this.latestMarkers={};this.reportMarkers={}},getDeviceColor:function(a){switch(a.get("status")){case "online":return Traccar.Style.mapColorOnline;
+case "offline":return Traccar.Style.mapColorOffline;default:return Traccar.Style.mapColorUnknown}},changeMarkerColor:function(a,b){return new ol.style.Style({image:new ol.style.Arrow({radius:a.getImage().getRadius(),fill:new ol.style.Fill({color:b}),stroke:a.getImage().getStroke(),rotation:a.getImage().getRotation()}),text:a.getText()})},updateDevice:function(a,b){var c,d,f;Ext.isArray(b)||(b=[b]);for(c=0;c<b.length;c++)d=b[c],f=d.get("id"),f in this.latestMarkers&&(f=this.latestMarkers[f],f.setStyle(this.changeMarkerColor(f.getStyle(),
+this.getDeviceColor(d))))},followSelected:function(){return Ext.getCmp("deviceFollowButton")&&Ext.getCmp("deviceFollowButton").pressed},updateLatest:function(a,b){var c,d,f,e,g,h;Ext.isArray(b)||(b=[b]);for(c=0;c<b.length;c++)if(d=b[c],g=d.get("deviceId"),e=Ext.getStore("Devices").findRecord("id",g,0,!1,!1,!0))f=new ol.geom.Point(ol.proj.fromLonLat([d.get("longitude"),d.get("latitude")])),g in this.latestMarkers?(h=this.latestMarkers[g],h.setGeometry(f)):(h=new ol.Feature(f),h.set("record",e),this.latestMarkers[g]=
+h,this.getView().getLatestSource().addFeature(h),f=this.getLatestMarker(this.getDeviceColor(e)),f.getText().setText(e.get("name")),h.setStyle(f)),h.getStyle().getImage().setRotation(d.get("course")*Math.PI/180),h===this.selectedMarker&&this.followSelected()&&this.getView().getMapView().setCenter(h.getGeometry().getCoordinates())},loadReport:function(a,b){var c,d,f,e,g;this.clearReport(a);if(0<b.length){this.reportRoute=new ol.Feature({geometry:new ol.geom.LineString([])});this.reportRoute.setStyle(this.getRouteStyle());
+this.getView().getRouteSource().addFeature(this.reportRoute);for(c=0;c<b.length;c++)d=b[c],f=ol.proj.fromLonLat([d.get("longitude"),d.get("latitude")]),e=new ol.geom.Point(f),e=new ol.Feature(e),e.set("record",d),this.reportMarkers[d.get("id")]=e,this.getView().getReportSource().addFeature(e),g=this.getReportMarker(),g.getImage().setRotation(d.get("course")*Math.PI/180),e.setStyle(g),this.reportRoute.getGeometry().appendCoordinate(f);this.getView().getMapView().fit(this.reportRoute.getGeometry(),
+this.getView().getMap().getSize())}},clearReport:function(){var a;this.reportRoute&&(this.getView().getRouteSource().removeFeature(this.reportRoute),this.reportRoute=null);if(this.reportMarkers){for(a in this.reportMarkers)this.reportMarkers.hasOwnProperty(a)&&this.getView().getReportSource().removeFeature(this.reportMarkers[a]);this.reportMarkers={}}},getRouteStyle:function(){return new ol.style.Style({stroke:new ol.style.Stroke({color:Traccar.Style.mapRouteColor,width:Traccar.Style.mapRouteWidth})})},
+getMarkerStyle:function(a,b){return new ol.style.Style({image:new ol.style.Arrow({radius:a,fill:new ol.style.Fill({color:b}),stroke:new ol.style.Stroke({color:Traccar.Style.mapArrowStrokeColor,width:Traccar.Style.mapArrowStrokeWidth})}),text:new ol.style.Text({textBaseline:"bottom",fill:new ol.style.Fill({color:Traccar.Style.mapTextColor}),stroke:new ol.style.Stroke({color:Traccar.Style.mapTextStrokeColor,width:Traccar.Style.mapTextStrokeWidth}),offsetY:-a/2-Traccar.Style.mapTextOffset,font:Traccar.Style.mapTextFont})})},
+getLatestMarker:function(a){return this.getMarkerStyle(Traccar.Style.mapRadiusNormal,a)},getReportMarker:function(){return this.getMarkerStyle(Traccar.Style.mapRadiusNormal,Traccar.Style.mapColorReport)},resizeMarker:function(a,b){return new ol.style.Style({image:new ol.style.Arrow({radius:b,fill:a.getImage().getFill(),stroke:a.getImage().getStroke(),rotation:a.getImage().getRotation()}),text:a.getText()})},selectMarker:function(a,b){this.selectedMarker&&this.selectedMarker.setStyle(this.resizeMarker(this.selectedMarker.getStyle(),
+Traccar.Style.mapRadiusNormal));a&&(a.setStyle(this.resizeMarker(a.getStyle(),Traccar.Style.mapRadiusSelected)),b&&this.getView().getMapView().setCenter(a.getGeometry().getCoordinates()));this.selectedMarker=a},selectDevice:function(a,b){this.selectMarker(this.latestMarkers[a.get("id")],b)},selectReport:function(a,b){this.selectMarker(this.reportMarkers[a.get("id")],b)},selectFeature:function(a){(a=a.get("record"))&&(a instanceof Traccar.model.Device?this.fireEvent("selectDevice",a,!1):this.fireEvent("selectReport",
+a,!1))}});
+Ext.define("Traccar.view.Map",{extend:Traccar.view.BaseMap,xtype:"mapView",controller:"map",title:Strings.mapTitle,getLatestSource:function(){return this.latestSource},getRouteSource:function(){return this.routeSource},getReportSource:function(){return this.reportSource},initMap:function(){this.callParent();this.latestSource=new ol.source.Vector({});this.map.addLayer(new ol.layer.Vector({source:this.latestSource}));this.routeSource=new ol.source.Vector({});this.map.addLayer(new ol.layer.Vector({source:this.routeSource}));this.reportSource=
+new ol.source.Vector({});this.map.addLayer(new ol.layer.Vector({source:this.reportSource}))}});
+Ext.define("Traccar.view.Main",{extend:Ext.container.Viewport,alias:"widget.main",layout:"border",defaults:{header:!1,collapsible:!0,split:!0},items:[{region:"west",layout:"border",width:Traccar.Style.deviceWidth,title:Strings.devicesAndState,defaults:{split:!0,flex:1},items:[{region:"center",xtype:"devicesView"},{region:"south",xtype:"stateView"}]},{region:"south",xtype:"reportView",height:Traccar.Style.reportHeight,collapsed:!0,titleCollapse:!0,floatable:!1},{region:"center",xtype:"mapView",header:!0,
+collapsible:!1}]});Ext.define("Traccar.view.MainMobile",{extend:Ext.container.Viewport,alias:"widget.mainMobile",layout:"border",defaults:{header:!1,collapsible:!0,split:!0},items:[{region:"east",xtype:"stateView",flex:4,collapsed:!0,titleCollapse:!0,floatable:!1},{region:"center",xtype:"mapView",collapsible:!1,flex:2},{region:"south",xtype:"devicesView",flex:1}]});
+Ext.define("Traccar.controller.Root",{extend:Ext.app.Controller,init:function(){var a=document.createElement("div");a.className="state-indicator";document.body.appendChild(a);this.isPhone=0!==parseInt(window.getComputedStyle(a).getPropertyValue("z-index"),10)},onLaunch:function(){Ext.Ajax.request({scope:this,url:"/api/server",callback:this.onServerReturn})},onServerReturn:function(a,b,c){Ext.get("spinner").remove();b?(Traccar.app.setServer(Ext.decode(c.responseText)),Ext.Ajax.request({scope:this,
+url:"/api/session",callback:this.onSessionReturn})):Traccar.app.showError(c)},onSessionReturn:function(a,b,c){b?(Traccar.app.setUser(Ext.decode(c.responseText)),this.loadApp()):(this.login=Ext.create("widget.login",{listeners:{scope:this,login:this.onLogin}}),this.login.show())},onLogin:function(){this.login.close();this.loadApp()},loadApp:function(){Ext.getStore("Groups").load();Ext.getStore("Geofences").load();Ext.getStore("Devices").load({scope:this,callback:function(){this.asyncUpdate(!0)}});
+var a=Ext.get("attribution");a&&a.remove();this.isPhone?Ext.create("widget.mainMobile"):Ext.create("widget.main")},beep:function(){this.beepSound||(this.beepSound=new Audio("beep.wav"));this.beepSound.play()},mutePressed:function(){var a=Ext.getCmp("muteButton");return a&&!a.pressed},asyncUpdate:function(){var a,b=this;a=new WebSocket(("https:"===location.protocol?"wss:":"ws:")+"//"+window.location.host+"/api/socket");a.onclose=function(){b.asyncUpdate(!1)};a.onmessage=function(a){var d,f,e,g,h;e=
+Ext.decode(a.data);if(e.devices){g=e.devices;f=Ext.getStore("Devices");for(a=0;a<g.length;a++)(d=f.getById(g[a].id))&&d.set({status:g[a].status,lastUpdate:g[a].lastUpdate},{dirty:!1})}if(e.positions&&!e.events){g=e.positions;f=Ext.getStore("LatestPositions");for(a=0;a<g.length;a++)(d=f.findRecord("deviceId",g[a].deviceId,0,!1,!1,!0))?d.set(g[a]):f.add(Ext.create("Traccar.model.Position",g[a]))}if(e.events){g=e.events;f=Ext.getStore("Events");for(a=0;a<g.length;a++){f.add(g[a]);if("commandResult"===
+g[a].type&&e.positions){for(d=0;d<e.positions.length;d++)if(e.positions[d].id===g[a].positionId){h=e.positions[d].attributes.result;break}h=Strings.eventCommandResult+": "+h}else if("alarm"===g[a].type&&e.positions){d="alarm";(h=Strings[d])||(h=d);for(d=0;d<e.positions.length;d++)if(e.positions[d].id===g[a].positionId&&null!==e.positions[d].attributes.alarm){"string"===typeof e.positions[d].attributes.alarm&&2<=e.positions[d].attributes.alarm.length&&(d="alarm"+e.positions[d].attributes.alarm.charAt(0).toUpperCase()+
+e.positions[d].attributes.alarm.slice(1),(h=Strings[d])||(h=d));break}}else d="event"+g[a].type.charAt(0).toUpperCase()+g[a].type.slice(1),(h=Strings[d])||(h=d);0!==g[a].geofenceId&&(d=Ext.getStore("Geofences").getById(g[a].geofenceId),"undefined"!==typeof d&&(h+=' "'+d.getData().name+'"'));d=Ext.getStore("Devices").getById(g[a].deviceId);"undefined"!==typeof d&&(b.mutePressed()&&b.beep(),Ext.toast(h,d.get("name")))}}}}});
+Ext.define("Traccar.Application",{extend:Ext.app.Application,name:"Traccar",models:"Server User Group Device Position Attribute Command Event Geofence Notification".split(" "),stores:"Groups Devices AllGroups AllDevices Positions LatestPositions Users Attributes MapTypes DistanceUnits SpeedUnits CommandTypes TimeUnits Languages Events Geofences AllGeofences Notifications AllNotifications GeofenceTypes".split(" "),controllers:["Root"],setUser:function(a){this.user=Ext.create("Ext.data.reader.Json",
+{model:"Traccar.model.User"}).readRecords(a).getRecords()[0]},getUser:function(){return this.user},setServer:function(a){this.server=Ext.create("Ext.data.reader.Json",{model:"Traccar.model.Server"}).readRecords(a).getRecords()[0]},getServer:function(){return this.server},getPreference:function(a,b){return this.getUser().get(a)||this.getServer().get(a)||b},showError:function(a){Ext.isString(a)?Ext.Msg.alert(Strings.errorTitle,a):a.responseText?(a=Ext.decode(a.responseText),a.details?Ext.Msg.alert(Strings.errorTitle,
+a.details):Ext.Msg.alert(Strings.errorTitle,a.message)):a.statusText?Ext.Msg.alert(Strings.errorTitle,a.statusText):Ext.Msg.alert(Strings.errorTitle,Strings.errorConnection)}});Ext.application({name:"Traccar",extend:Traccar.Application}); \ No newline at end of file
diff --git a/web/l10n/ar.json b/web/l10n/ar.json
new file mode 100644
index 000000000..ac40da9ee
--- /dev/null
+++ b/web/l10n/ar.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "جاري التحميل...",
+ "sharedSave": "حفظ",
+ "sharedCancel": "إلغاء",
+ "sharedAdd": "إضافة",
+ "sharedEdit": "تعديل",
+ "sharedRemove": "حذف",
+ "sharedRemoveConfirm": "حذف العنصر؟",
+ "sharedKm": "كم",
+ "sharedMi": "ميل",
+ "sharedKn": "عقدة",
+ "sharedKmh": "كم/ساعه",
+ "sharedMph": "ميل/ساعة",
+ "sharedHour": "ساعه",
+ "sharedMinute": "دقيقة",
+ "sharedSecond": "ثانية",
+ "sharedName": "الاسم",
+ "sharedDescription": "الوصف",
+ "sharedSearch": "بحث",
+ "sharedGeofence": "السياج الجغرافي",
+ "sharedGeofences": "السياجات الجغرافية",
+ "sharedNotifications": "التنبيهات",
+ "sharedAttributes": "الخصائص",
+ "sharedAttribute": "خاصية",
+ "sharedArea": "منطقة",
+ "sharedMute": "Mute",
+ "errorTitle": "خطأ",
+ "errorUnknown": "خطأ غير معروف",
+ "errorConnection": "خطأ في الاتصال",
+ "userEmail": "بريد إلكتروني",
+ "userPassword": "كلمة المرور",
+ "userAdmin": "مدير النظام",
+ "userRemember": "Remember",
+ "loginTitle": "تسجيل الدخول",
+ "loginLanguage": "اللغة",
+ "loginRegister": "تسجيل جديد",
+ "loginLogin": "تسجيل الدخول",
+ "loginFailed": "كلمة مرور او بريد خاطئ",
+ "loginCreated": "تم تسجيل مستخدم جديد",
+ "loginLogout": "خروج",
+ "devicesAndState": "الأجهزة والحالة",
+ "deviceDialog": "جهاز",
+ "deviceTitle": "أجهزة",
+ "deviceIdentifier": "المعرف",
+ "deviceLastUpdate": "آخر تحديث",
+ "deviceCommand": "أمر ",
+ "deviceFollow": "متابعة",
+ "groupDialog": "مجموعة",
+ "groupParent": "مجموعة",
+ "groupNoGroup": "لا توجد مجموعة",
+ "settingsTitle": "إعدادات",
+ "settingsUser": "حساب",
+ "settingsGroups": "المجموعات",
+ "settingsServer": "خادم",
+ "settingsUsers": "المستخدمون",
+ "settingsDistanceUnit": "مسافة",
+ "settingsSpeedUnit": "سرعة",
+ "settingsTwelveHourFormat": "صيغة 12-ساعة",
+ "reportTitle": "تقارير",
+ "reportDevice": "جهاز",
+ "reportFrom": "من",
+ "reportTo": "الي",
+ "reportShow": "اظهار",
+ "reportClear": "تفريغ الحقول",
+ "positionFixTime": "وقت",
+ "positionValid": "صالح",
+ "positionLatitude": "خط العرض",
+ "positionLongitude": "خط الطول",
+ "positionAltitude": "ارتفاع عن سطح البحر",
+ "positionSpeed": "السرعة",
+ "positionCourse": "دورة",
+ "positionAddress": "العنوان",
+ "positionProtocol": "بروتوكول",
+ "serverTitle": "اعدادت الخادم",
+ "serverZoom": "تقريب",
+ "serverRegistration": "تسجيل",
+ "serverReadonly": "قراءة فقط",
+ "mapTitle": "خريطة",
+ "mapLayer": "طبقة الخريطة",
+ "mapCustom": "خريطة محددة",
+ "mapOsm": "خرائط اوبن ستريت",
+ "mapBingKey": "مفتاح خرائط Bing",
+ "mapBingRoad": " خرائط الطرق Bing",
+ "mapBingAerial": "خرائط جوية Bing",
+ "mapShapePolygon": "مضلع",
+ "mapShapeCircle": "دائرة",
+ "stateTitle": "حالة",
+ "stateName": "عنصر",
+ "stateValue": "قيمة",
+ "commandTitle": "أمر",
+ "commandSend": "ارسال",
+ "commandType": "النوع",
+ "commandSent": "تم ارسال الأمر",
+ "commandPositionPeriodic": "تقارير دورية",
+ "commandPositionStop": "ايقاف الارسال",
+ "commandEngineStop": "ايقاف المحرك",
+ "commandEngineResume": "تشغيل المحرك",
+ "commandFrequency": "تردد",
+ "commandUnit": "وحدة",
+ "commandCustom": "أمر خاص",
+ "commandPositionSingle": "تقرير مفرد",
+ "commandAlarmArm": "بدء تشغيل المنبه",
+ "commandAlarmDisarm": "تعطيل المنبه",
+ "commandSetTimezone": "حدد التوقيت الزمني",
+ "commandRequestPhoto": "اطلب صورة",
+ "commandRebootDevice": "أعد تشغيل الجهاز",
+ "commandSendSms": "إرسال رسالة قصيرة",
+ "commandSosNumber": "ظبط رقم الطوارئ",
+ "commandSilenceTime": "حدد توقيت الصامت",
+ "commandSetPhonebook": "ضبط سجل الهاتف",
+ "commandVoiceMessage": "رسالة صوتية",
+ "commandOutputControl": "التحكم بالإخراج",
+ "commandAlarmSpeed": "منبه تعدي السرعة",
+ "commandDeviceIdentification": "تعريف الجهاز",
+ "eventDeviceOnline": "الجهاز متصل",
+ "eventDeviceOffline": "الجهاز غير متصل",
+ "eventDeviceMoving": "الجهاز يتحرك",
+ "eventDeviceStopped": "الجهاز متوقف",
+ "eventDeviceOverspeed": "الجهاز متعدٍّ للسرعة",
+ "eventCommandResult": "نتيجة الأمر",
+ "eventGeofenceEnter": "الجهاز قد دخل السياج الجغرافي",
+ "eventGeofenceExit": "الجهاز قد خرج من السياج الجغرافي",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "نوع الملاحظة",
+ "notificationWeb": "أرسل عن طريق صفحة الويب",
+ "notificationMail": "أرسل عن طريق البريد الإلكتروني"
+} \ No newline at end of file
diff --git a/web/l10n/bg.json b/web/l10n/bg.json
new file mode 100644
index 000000000..68d631ec8
--- /dev/null
+++ b/web/l10n/bg.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Зареждане...",
+ "sharedSave": "Запази",
+ "sharedCancel": "Отказ",
+ "sharedAdd": "Добави",
+ "sharedEdit": "Редактирай",
+ "sharedRemove": "Премахни",
+ "sharedRemoveConfirm": "Премахване на Устройство?",
+ "sharedKm": "км",
+ "sharedMi": "мл",
+ "sharedKn": "kn",
+ "sharedKmh": "км/ч",
+ "sharedMph": "мл/ч",
+ "sharedHour": "Час",
+ "sharedMinute": "Минута",
+ "sharedSecond": "Секунда",
+ "sharedName": "Име",
+ "sharedDescription": "Описание",
+ "sharedSearch": "Търси",
+ "sharedGeofence": "Зона",
+ "sharedGeofences": "Зони",
+ "sharedNotifications": "Известия",
+ "sharedAttributes": "Атрибути",
+ "sharedAttribute": "Атрибут",
+ "sharedArea": "Район",
+ "sharedMute": "Изкл. звук",
+ "errorTitle": "Грешка",
+ "errorUnknown": "Непозната Грешка",
+ "errorConnection": "Грешка във връзката",
+ "userEmail": "Пощенска кутия",
+ "userPassword": "Парола",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Вход",
+ "loginLanguage": "Език",
+ "loginRegister": "Регистрация",
+ "loginLogin": "Вход",
+ "loginFailed": "Грешен потребител или парола",
+ "loginCreated": "Регистриран Нов Потребител",
+ "loginLogout": "Изход",
+ "devicesAndState": "Устройства и състояние",
+ "deviceDialog": "Обекти",
+ "deviceTitle": "Устройства",
+ "deviceIdentifier": "Идентификатор",
+ "deviceLastUpdate": "Последно обновяване",
+ "deviceCommand": "Команда",
+ "deviceFollow": "Следвай",
+ "groupDialog": "Група",
+ "groupParent": "Група",
+ "groupNoGroup": "Без група",
+ "settingsTitle": "Настройки",
+ "settingsUser": "Профил",
+ "settingsGroups": "Групи",
+ "settingsServer": "Сървър",
+ "settingsUsers": "Потребител",
+ "settingsDistanceUnit": "Разстояние",
+ "settingsSpeedUnit": "Скорост",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Доклад",
+ "reportDevice": "Устройство",
+ "reportFrom": "От",
+ "reportTo": "До",
+ "reportShow": "Покажи",
+ "reportClear": "Изчисти",
+ "positionFixTime": "Време",
+ "positionValid": "Валидност",
+ "positionLatitude": "Географска Ширина",
+ "positionLongitude": "Географска Дължина",
+ "positionAltitude": "Надморска височина",
+ "positionSpeed": "Скорост",
+ "positionCourse": "Посока",
+ "positionAddress": "Адрес",
+ "positionProtocol": "Протокол",
+ "serverTitle": "Настройки на Сървъра",
+ "serverZoom": "Приближение",
+ "serverRegistration": "Регистрация",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Карта",
+ "mapLayer": "Слой",
+ "mapCustom": "Потребителска Карта",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Многоъгълник",
+ "mapShapeCircle": "Кръг",
+ "stateTitle": "Състояние",
+ "stateName": "Параметър",
+ "stateValue": "Стойност",
+ "commandTitle": "Команда",
+ "commandSend": "Изпрати",
+ "commandType": "Тип",
+ "commandSent": "Съобщението е изпратено",
+ "commandPositionPeriodic": "Периодичен Доклад",
+ "commandPositionStop": "Спри Доклада",
+ "commandEngineStop": "Спри Двигател",
+ "commandEngineResume": "Стартирай Двигател",
+ "commandFrequency": "Честота",
+ "commandUnit": "Обект",
+ "commandCustom": "Персонализирана Команда",
+ "commandPositionSingle": "Единичен доклад",
+ "commandAlarmArm": "Активирай Аларма",
+ "commandAlarmDisarm": "Деактивирай Аларма",
+ "commandSetTimezone": "Задайте Часова Зона",
+ "commandRequestPhoto": "Изпрати Снимка",
+ "commandRebootDevice": "Рестартирай Устройство",
+ "commandSendSms": "Изпрати СМС",
+ "commandSosNumber": "Задай SOS номер",
+ "commandSilenceTime": "Задай Тих Час",
+ "commandSetPhonebook": "Задай Тел. Указател",
+ "commandVoiceMessage": "Гласово Съобщение",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Аларма за Превишена Скорост",
+ "commandDeviceIdentification": "Идентификация на Устройство",
+ "eventDeviceOnline": "Устройството е онлайн",
+ "eventDeviceOffline": "Устройството е офлайн",
+ "eventDeviceMoving": "Устройството е в движение",
+ "eventDeviceStopped": "Устройството е спряло",
+ "eventDeviceOverspeed": "Устройството превишава скоростта",
+ "eventCommandResult": "Резултат от командата",
+ "eventGeofenceEnter": "Устройството влезе в зоната",
+ "eventGeofenceExit": "Устройството излезе от зоната",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Тип на известието",
+ "notificationWeb": "Изпрати през Web",
+ "notificationMail": "Изпрати през Mail"
+} \ No newline at end of file
diff --git a/web/l10n/bn.json b/web/l10n/bn.json
new file mode 100644
index 000000000..16cdc050a
--- /dev/null
+++ b/web/l10n/bn.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "লোড হচ্ছে ...",
+ "sharedSave": "সংরক্ষণ",
+ "sharedCancel": "বাতিল",
+ "sharedAdd": "যোগ",
+ "sharedEdit": "সম্পাদন",
+ "sharedRemove": "অপসারণ",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/cs.json b/web/l10n/cs.json
new file mode 100644
index 000000000..e27f767be
--- /dev/null
+++ b/web/l10n/cs.json
@@ -0,0 +1,136 @@
+{
+ "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",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hodina",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "sharedName": "Jméno",
+ "sharedDescription": "Popis",
+ "sharedSearch": "Hledat",
+ "sharedGeofence": "Geografická hranice",
+ "sharedGeofences": "Geografické hranice",
+ "sharedNotifications": "Upozornění",
+ "sharedAttributes": "Atributy",
+ "sharedAttribute": "Atribut",
+ "sharedArea": "Oblast",
+ "sharedMute": "Mute",
+ "errorTitle": "Chyba",
+ "errorUnknown": "Neznámá chyba",
+ "errorConnection": "Chyba spojení",
+ "userEmail": "Email",
+ "userPassword": "Heslo",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "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í",
+ "devicesAndState": "Zařízení a stav",
+ "deviceDialog": "Zařízení",
+ "deviceTitle": "Zařízení",
+ "deviceIdentifier": "Identifikace",
+ "deviceLastUpdate": "Poslední změna",
+ "deviceCommand": "Příkaz",
+ "deviceFollow": "Sledovat",
+ "groupDialog": "Skupina",
+ "groupParent": "Skupina",
+ "groupNoGroup": "Žádná skupina",
+ "settingsTitle": "Nastavení",
+ "settingsUser": "Účet",
+ "settingsGroups": "Skupiny",
+ "settingsServer": "Server",
+ "settingsUsers": "Uživatelé",
+ "settingsDistanceUnit": "Vzdálenost",
+ "settingsSpeedUnit": "Rychlost",
+ "settingsTwelveHourFormat": "12-hodinový formát",
+ "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",
+ "serverReadonly": "Pouze pro čtení",
+ "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",
+ "mapShapePolygon": "Mnohoúhelník",
+ "mapShapeCircle": "Kruh",
+ "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",
+ "commandCustom": "Volitelný příkaz",
+ "commandPositionSingle": "Jednotné hlášení",
+ "commandAlarmArm": "Aktivovat alarm",
+ "commandAlarmDisarm": "Deaktivovat alarm",
+ "commandSetTimezone": "Nastavit časovou zónu",
+ "commandRequestPhoto": "Vyžádat fotku",
+ "commandRebootDevice": "Restartovat zařízení",
+ "commandSendSms": "Odeslat SMS",
+ "commandSosNumber": "Nastavit SOS číslo",
+ "commandSilenceTime": "Nastavit čas tichého módu",
+ "commandSetPhonebook": "Nastavit telefonní seznam",
+ "commandVoiceMessage": "Hlasová zpráva",
+ "commandOutputControl": "Ovládání výstupu",
+ "commandAlarmSpeed": "Překročení rychlosti alarmu",
+ "commandDeviceIdentification": "Identifikace zařízení",
+ "eventDeviceOnline": "Zařízení je online",
+ "eventDeviceOffline": "Zařízení je offline",
+ "eventDeviceMoving": "Zařízení s pohybuje",
+ "eventDeviceStopped": "Zařízení se zastavilo",
+ "eventDeviceOverspeed": "Zařízení překračuje rychlost",
+ "eventCommandResult": "Výsledek příkazu",
+ "eventGeofenceEnter": "Zařízení vstoupilo do geografické hranice",
+ "eventGeofenceExit": "Zařízení opustilo geografickou hranici",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Typ oznámení",
+ "notificationWeb": "Odeslat přes web",
+ "notificationMail": "Odeslat přes mail"
+} \ No newline at end of file
diff --git a/web/l10n/da.json b/web/l10n/da.json
new file mode 100644
index 000000000..ec8f02816
--- /dev/null
+++ b/web/l10n/da.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading... ",
+ "sharedSave": "Gem",
+ "sharedCancel": "Fortryd",
+ "sharedAdd": "Tilføj",
+ "sharedEdit": "Rediger",
+ "sharedRemove": "Fjern",
+ "sharedRemoveConfirm": "Fjern enhed?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "knob",
+ "sharedKmh": "km/t",
+ "sharedMph": "mph",
+ "sharedHour": "Time",
+ "sharedMinute": "Minut",
+ "sharedSecond": "Sekund",
+ "sharedName": "Navn",
+ "sharedDescription": "Beskrivelse",
+ "sharedSearch": "Søg",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifikationer",
+ "sharedAttributes": "Egenskaber",
+ "sharedAttribute": "Egenskab",
+ "sharedArea": "Område",
+ "sharedMute": "Mute",
+ "errorTitle": "Fejl",
+ "errorUnknown": "Ukendt Fejl",
+ "errorConnection": "Tilslutning fejl",
+ "userEmail": "Email",
+ "userPassword": "Kodeord",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "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",
+ "devicesAndState": "Enheder og status",
+ "deviceDialog": "Enhed",
+ "deviceTitle": "Enheder",
+ "deviceIdentifier": "Imei nr",
+ "deviceLastUpdate": "Seneste opdatering",
+ "deviceCommand": "Kommando",
+ "deviceFollow": "Følg",
+ "groupDialog": "Gruppe",
+ "groupParent": "Gruppe",
+ "groupNoGroup": "Ingen gruppe",
+ "settingsTitle": "Indstillinger",
+ "settingsUser": "Konto",
+ "settingsGroups": "Grupper",
+ "settingsServer": "Server",
+ "settingsUsers": "Brugere",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Hastighed",
+ "settingsTwelveHourFormat": "12 timers format",
+ "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": "Adresse",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Server indstillinger",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrering",
+ "serverReadonly": "Læs",
+ "mapTitle": "Kort",
+ "mapLayer": "Kort opsætning",
+ "mapCustom": "Brugerdefineret Kort",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Cirkel",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Værdi",
+ "commandTitle": "Kommando",
+ "commandSend": "Send",
+ "commandType": "Type",
+ "commandSent": "Kommando er blevet sendt",
+ "commandPositionPeriodic": "Periodisk Rapportering",
+ "commandPositionStop": "Stop Rapportering",
+ "commandEngineStop": "Stop motor",
+ "commandEngineResume": "Genstart motor",
+ "commandFrequency": "Frekvens",
+ "commandUnit": "Enhed",
+ "commandCustom": "Skræddersyet kommando",
+ "commandPositionSingle": "Enkel rapport",
+ "commandAlarmArm": "Armer alarm",
+ "commandAlarmDisarm": "Slå alarm fra",
+ "commandSetTimezone": "Sæt tidszone",
+ "commandRequestPhoto": "Tag billede",
+ "commandRebootDevice": "Genstart enhed",
+ "commandSendSms": "send SMS",
+ "commandSosNumber": "Angiv SOS nummer",
+ "commandSilenceTime": "Angiv lydløs tid",
+ "commandSetPhonebook": "Angiv telefonbog",
+ "commandVoiceMessage": "Tale meddelelse",
+ "commandOutputControl": "Output kontrol",
+ "commandAlarmSpeed": "Hastigheds alarm",
+ "commandDeviceIdentification": "Enheds id",
+ "eventDeviceOnline": "Enhed online",
+ "eventDeviceOffline": "Enhed offline",
+ "eventDeviceMoving": "Enhed i bevægelse",
+ "eventDeviceStopped": "Enhed i stilstand",
+ "eventDeviceOverspeed": "Enhed overskrider hastighed",
+ "eventCommandResult": "Resultat af kommando",
+ "eventGeofenceEnter": "Enhed kom indenfor geofence",
+ "eventGeofenceExit": "Enhed kom udenfor geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type af notifikation",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via mail"
+} \ No newline at end of file
diff --git a/web/l10n/de.json b/web/l10n/de.json
new file mode 100644
index 000000000..61a4567b1
--- /dev/null
+++ b/web/l10n/de.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Lade...",
+ "sharedSave": "Speichern",
+ "sharedCancel": "Abbrechen",
+ "sharedAdd": "Hinzufügen",
+ "sharedEdit": "Bearbeiten",
+ "sharedRemove": "Entfernen",
+ "sharedRemoveConfirm": "Objekt entfernen?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Stunde",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Sekunde",
+ "sharedName": "Name",
+ "sharedDescription": "Beschreibung",
+ "sharedSearch": "Suchen",
+ "sharedGeofence": "Geo-Zaun",
+ "sharedGeofences": "Geo-Zäune",
+ "sharedNotifications": "Benachrichtigungen",
+ "sharedAttributes": "Eigenschaften",
+ "sharedAttribute": "Eigenschaft",
+ "sharedArea": "Gebiet",
+ "sharedMute": "Stummschalten",
+ "errorTitle": "Fehler",
+ "errorUnknown": "Unbekannter Fehler",
+ "errorConnection": "Verbindungsfehler",
+ "userEmail": "Email",
+ "userPassword": "Passwort",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Anmeldung",
+ "loginLanguage": "Sprache",
+ "loginRegister": "Registrieren",
+ "loginLogin": "Anmelden",
+ "loginFailed": "Falsche Emailadresse oder Passwort",
+ "loginCreated": "Neuer Benutzer wurde registriert",
+ "loginLogout": "Abmelden",
+ "devicesAndState": "Geräte und Status",
+ "deviceDialog": "Gerät",
+ "deviceTitle": "Geräte",
+ "deviceIdentifier": "Kennung",
+ "deviceLastUpdate": "Letzte Aktualisierung",
+ "deviceCommand": "Befehl",
+ "deviceFollow": "Folgen",
+ "groupDialog": "Gruppe",
+ "groupParent": "Gruppe",
+ "groupNoGroup": "Keine Gruppe",
+ "settingsTitle": "Einstellungen",
+ "settingsUser": "Benutzerkonto",
+ "settingsGroups": "Gruppen",
+ "settingsServer": "Server",
+ "settingsUsers": "Benutzer",
+ "settingsDistanceUnit": "Entfernung",
+ "settingsSpeedUnit": "Geschwindigkeit",
+ "settingsTwelveHourFormat": "12 Stunden Format",
+ "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",
+ "serverReadonly": "Nur Lesen",
+ "mapTitle": "Karte",
+ "mapLayer": "Karten Layer",
+ "mapCustom": "Benutzerspezifische Karte",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Strassenkarte",
+ "mapBingAerial": "Bing Luftbilder",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Kreis",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Wert",
+ "commandTitle": "Befehl",
+ "commandSend": "Senden",
+ "commandType": "Typ",
+ "commandSent": "Befehl wurde gesendet",
+ "commandPositionPeriodic": "Periodische Berichte",
+ "commandPositionStop": "Bericht stoppen",
+ "commandEngineStop": "Motor Stop",
+ "commandEngineResume": "Motor Start",
+ "commandFrequency": "Frequenz",
+ "commandUnit": "Einheit",
+ "commandCustom": "Benutzerdefinierter Befehl",
+ "commandPositionSingle": "Einzelner Bericht",
+ "commandAlarmArm": "Scharf schalten",
+ "commandAlarmDisarm": "Unscharf schalten",
+ "commandSetTimezone": "Zeitzone festlegen",
+ "commandRequestPhoto": "Foto anfordern",
+ "commandRebootDevice": "Gerät neustarten",
+ "commandSendSms": "SMS senden",
+ "commandSosNumber": "SOS-Nummer festlegen",
+ "commandSilenceTime": "Ruhezeit festlegen",
+ "commandSetPhonebook": "Telefonbuch festlegen",
+ "commandVoiceMessage": "Sprachnachricht",
+ "commandOutputControl": "Berichtsteuerung",
+ "commandAlarmSpeed": "Geschwindigkeitsalarm",
+ "commandDeviceIdentification": "Gerätekennung",
+ "eventDeviceOnline": "Gerät ist online",
+ "eventDeviceOffline": "Gerät ist offline",
+ "eventDeviceMoving": "Gerät ist in Bewegung",
+ "eventDeviceStopped": "Gerät hat gestoppt",
+ "eventDeviceOverspeed": "Gerät überschreitet Tempolimit",
+ "eventCommandResult": "Ergrbnis des Befehls",
+ "eventGeofenceEnter": "Gerät hat Geo-Zaun betreten",
+ "eventGeofenceExit": "Gerät hat Geo-Zaun verlassen",
+ "eventAlarm": "Alarme",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Erschütterungsalarm",
+ "alarmMovement": "Bewegungsalarm",
+ "alarmOverspeed": "Geschwindigkeitsalarm",
+ "alarmFallDown": "Sturzalarm",
+ "alarmLowBattery": "Batteriealarm",
+ "alarmMotion": "Bewegungsalarm",
+ "alarmFault": "Fehleralarm",
+ "notificationType": "Art der Benachrichtigung ",
+ "notificationWeb": "Per Web senden",
+ "notificationMail": "Per E-Mail senden"
+} \ No newline at end of file
diff --git a/web/l10n/el.json b/web/l10n/el.json
new file mode 100644
index 000000000..cbadf67ef
--- /dev/null
+++ b/web/l10n/el.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Φόρτωση...",
+ "sharedSave": "Αποθήκευση",
+ "sharedCancel": "Άκυρον",
+ "sharedAdd": "Προσθήκη",
+ "sharedEdit": "Επεξεργασία",
+ "sharedRemove": "Διαγραφή",
+ "sharedRemoveConfirm": "Διαγραφη στοιχείου;",
+ "sharedKm": "χλμ",
+ "sharedMi": "μίλια",
+ "sharedKn": "κόμβοι",
+ "sharedKmh": "χλμ/ώρα",
+ "sharedMph": "μίλια/ώρα",
+ "sharedHour": "Ώρα",
+ "sharedMinute": "Λεπτά",
+ "sharedSecond": "Δευτερόλεπτα",
+ "sharedName": "Όνομα",
+ "sharedDescription": "Περιγραφή",
+ "sharedSearch": "Αναζήτηση",
+ "sharedGeofence": "Γεωφράχτης",
+ "sharedGeofences": "Γεωφράχτες",
+ "sharedNotifications": "Ειδοποιήσεις",
+ "sharedAttributes": "Παράμετροι",
+ "sharedAttribute": "Παράμετρος",
+ "sharedArea": "Περιοχή",
+ "sharedMute": "Mute",
+ "errorTitle": "Σφάλμα",
+ "errorUnknown": "Άγνωστο σφάλμα",
+ "errorConnection": "Σφάλμα σύνδεσης",
+ "userEmail": "Ηλ. διεύθυνση",
+ "userPassword": "Συνθηματικό",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Σύνδεση",
+ "loginLanguage": "Γλώσσα",
+ "loginRegister": "Εγγραφή",
+ "loginLogin": "Σύνδεση",
+ "loginFailed": "Εσφαλμένη διεύθυνση ή εσφαλμένο συνθηματικό",
+ "loginCreated": "Ο νέος χρήστης καταχωρήθηκε.",
+ "loginLogout": "Αποσύνδεση",
+ "devicesAndState": "Κατάσταση συσκευών",
+ "deviceDialog": "Συσκευή",
+ "deviceTitle": "Συσκευές",
+ "deviceIdentifier": "Αναγνωριστικό",
+ "deviceLastUpdate": "Τελευταία ενημέρωση",
+ "deviceCommand": "Εντολή",
+ "deviceFollow": "Ακολουθώ",
+ "groupDialog": "Ομάδα",
+ "groupParent": "Ομάδα",
+ "groupNoGroup": "Χωρίς Ομάδα",
+ "settingsTitle": "Ρυθμίσεις",
+ "settingsUser": "Λογαριασμός",
+ "settingsGroups": "Ομάδες",
+ "settingsServer": "Εξυπηρετητής",
+ "settingsUsers": "Χρήστες",
+ "settingsDistanceUnit": "Απόσταση",
+ "settingsSpeedUnit": "Ταχύτητα",
+ "settingsTwelveHourFormat": "12ώρη μορφή",
+ "reportTitle": "Αναφορές",
+ "reportDevice": "Συσκευή",
+ "reportFrom": "Από",
+ "reportTo": "Έως",
+ "reportShow": "Προβολή",
+ "reportClear": "Καθαρισμός",
+ "positionFixTime": "Χρόνος",
+ "positionValid": "Έγκυρο",
+ "positionLatitude": "Γ. πλάτος",
+ "positionLongitude": "Γ. μήκος",
+ "positionAltitude": "Υψόμετρο",
+ "positionSpeed": "Ταχύτητα",
+ "positionCourse": "Πορεία",
+ "positionAddress": "Διεύθυνση",
+ "positionProtocol": "Πρωτόκολλο",
+ "serverTitle": "Ρυθμίσεις εξυπηρετητή",
+ "serverZoom": "Εστίαση",
+ "serverRegistration": "Εγγραφή",
+ "serverReadonly": "Μόνο για ανάγνωση",
+ "mapTitle": "Χάρτης",
+ "mapLayer": "Επιλογή χάρτη",
+ "mapCustom": "Προσαρμοσμένος χάρτης",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Κλειδί Bing Maps",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Πολύγωνο",
+ "mapShapeCircle": "Κύκλος",
+ "stateTitle": "Κατάσταση",
+ "stateName": "Παράμετρος",
+ "stateValue": "Τιμή",
+ "commandTitle": "Εντολή",
+ "commandSend": "Αποστολή",
+ "commandType": "Τύπος",
+ "commandSent": "Η εντολή έχει σταλεί.",
+ "commandPositionPeriodic": "Περιοδικές αναφορές",
+ "commandPositionStop": "Λήξη αναφορών",
+ "commandEngineStop": "Κλείσιμο",
+ "commandEngineResume": "Επανεκκίνηση",
+ "commandFrequency": "Συχνότητα",
+ "commandUnit": "Μονάδα",
+ "commandCustom": "Προσαρμοσμένη εντολή",
+ "commandPositionSingle": "Ενιαία αναφορά",
+ "commandAlarmArm": "Ενεργοποίηση συναγερμού",
+ "commandAlarmDisarm": "Απενεργοποίηση συναγερμού",
+ "commandSetTimezone": "Καθορισμός ζώνης ώρας",
+ "commandRequestPhoto": "Αίτημα για φωτογραφία",
+ "commandRebootDevice": "Επανεκκίνηση συσκευής",
+ "commandSendSms": "Αποστολή γραπτού μηνύματος (SMS)",
+ "commandSosNumber": "Καθορισμός αριθμού SOS",
+ "commandSilenceTime": "Καθορισμός χρόνου σιωπής",
+ "commandSetPhonebook": "Καθορισμός τηλεφωνικού καταλόγου",
+ "commandVoiceMessage": "Φωνητικό μήνυμα",
+ "commandOutputControl": "Έλεγχος αποτελεσμάτων",
+ "commandAlarmSpeed": "Υπέρβαση ορίου ταχύτητας",
+ "commandDeviceIdentification": "Αναγνωριστικό συσκευής",
+ "eventDeviceOnline": "Η συσκευή είναι συνδεδεμένη",
+ "eventDeviceOffline": "Η συσκευή είναι αποσυνδεδεμένη",
+ "eventDeviceMoving": "Η συσκευή βρίσκεται σε κίνηση",
+ "eventDeviceStopped": "Η συσκευή έχει σταματήσει",
+ "eventDeviceOverspeed": "Η συσκευή υπερέβει την ταχύτητα",
+ "eventCommandResult": "Αποτέλεσμα εντολής",
+ "eventGeofenceEnter": "Η συσσκευή εισήλθε του γεωφράχτη",
+ "eventGeofenceExit": "Η συσκευή εξήλθε του γεωφράχτη",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Τύπος ειδοποίησης",
+ "notificationWeb": "Αποστολή μέσω διαδικτύου",
+ "notificationMail": "Αποστολή μέσω ηλ. ταχυδρομείου"
+} \ No newline at end of file
diff --git a/web/l10n/es.json b/web/l10n/es.json
new file mode 100644
index 000000000..f8ae21bfc
--- /dev/null
+++ b/web/l10n/es.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Cargando...",
+ "sharedSave": "Guardar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Agregar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Borrar",
+ "sharedRemoveConfirm": "Borrar Elemento?",
+ "sharedKm": "KM",
+ "sharedMi": "MI",
+ "sharedKn": "Nudo",
+ "sharedKmh": "KM/H",
+ "sharedMph": "MPH",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundo",
+ "sharedName": "Nombre",
+ "sharedDescription": "Descripción",
+ "sharedSearch": "Buscar",
+ "sharedGeofence": "Geocerca",
+ "sharedGeofences": "Geocercas",
+ "sharedNotifications": "Notificaciones",
+ "sharedAttributes": "Atributos",
+ "sharedAttribute": "Atributo",
+ "sharedArea": "Área",
+ "sharedMute": "Silenciar",
+ "errorTitle": "Error",
+ "errorUnknown": "Error Desconocido",
+ "errorConnection": "Error de Conexión",
+ "userEmail": "Email",
+ "userPassword": "Contraseña",
+ "userAdmin": "Administrador",
+ "userRemember": "Remember",
+ "loginTitle": "Ingresar",
+ "loginLanguage": "Idioma",
+ "loginRegister": "Registrar",
+ "loginLogin": "Ingresar",
+ "loginFailed": "Dirección de Correo o Contraseña Incorrecta",
+ "loginCreated": "Nuevo Usuario ha sido registrado",
+ "loginLogout": "Salir",
+ "devicesAndState": "Dispositivos y Estado",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Dispositivos",
+ "deviceIdentifier": "Identificador",
+ "deviceLastUpdate": "Última Actualización",
+ "deviceCommand": "Comando",
+ "deviceFollow": "Seguir",
+ "groupDialog": "Grupo",
+ "groupParent": "Grupo",
+ "groupNoGroup": "Sin grupo",
+ "settingsTitle": "Preferencias",
+ "settingsUser": "Cuenta",
+ "settingsGroups": "Grupos",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuarios",
+ "settingsDistanceUnit": "Distancia",
+ "settingsSpeedUnit": "Velocidad",
+ "settingsTwelveHourFormat": "Formato de 12 Hrs",
+ "reportTitle": "Reportes",
+ "reportDevice": "Dispositivos",
+ "reportFrom": "Desde",
+ "reportTo": "Hasta",
+ "reportShow": "Mostrar",
+ "reportClear": "Limpiar",
+ "positionFixTime": "Hora",
+ "positionValid": "Válida",
+ "positionLatitude": "Latitud",
+ "positionLongitude": "Longitud",
+ "positionAltitude": "Altitud",
+ "positionSpeed": "Velocidad",
+ "positionCourse": "Curso",
+ "positionAddress": "Dirección",
+ "positionProtocol": "Protocolo",
+ "serverTitle": "Preferencias Servidor",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrar",
+ "serverReadonly": "Sólo Lectura",
+ "mapTitle": "Mapa",
+ "mapLayer": "Capa de Mapa",
+ "mapCustom": "Mapa Personalizado",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps - Carretera",
+ "mapBingAerial": "Bing Maps - Aéreo",
+ "mapShapePolygon": "Polígono",
+ "mapShapeCircle": "Círculo",
+ "stateTitle": "Estado",
+ "stateName": "Parámetro",
+ "stateValue": "Valor",
+ "commandTitle": "Comando",
+ "commandSend": "Enviar",
+ "commandType": "Tipo",
+ "commandSent": "El Comando ha sido enviado",
+ "commandPositionPeriodic": "Frecuencia de Posiciones",
+ "commandPositionStop": "Detener Reporte de Posiciones",
+ "commandEngineStop": "Apagar motor",
+ "commandEngineResume": "Desbloquear Encendido de Motor",
+ "commandFrequency": "Frequencia",
+ "commandUnit": "Unidad",
+ "commandCustom": "Comando personalizado",
+ "commandPositionSingle": "Un report",
+ "commandAlarmArm": "Armar Alarma",
+ "commandAlarmDisarm": "Desarmar Alarma",
+ "commandSetTimezone": "Establecer zona horaria",
+ "commandRequestPhoto": "Solicitar Foto",
+ "commandRebootDevice": "Reiniciar dispositivo",
+ "commandSendSms": "Enviar SMS",
+ "commandSosNumber": "Establecer el número SOS",
+ "commandSilenceTime": "Setear horario de silencio",
+ "commandSetPhonebook": "Establecer contacto",
+ "commandVoiceMessage": "Mensaje de voz",
+ "commandOutputControl": "Control de Salidas",
+ "commandAlarmSpeed": "Alerta de Velocidad",
+ "commandDeviceIdentification": "Identificación de Dispositivo",
+ "eventDeviceOnline": "El dispositivo está en linea",
+ "eventDeviceOffline": "El dispositivo está fuera de linea",
+ "eventDeviceMoving": "El dispositivo se está moviendo",
+ "eventDeviceStopped": "El dispositivo está parado",
+ "eventDeviceOverspeed": "El dispositivo excedió el limite de velocidad",
+ "eventCommandResult": "Resultado de comando",
+ "eventGeofenceEnter": "El dispositivo ha ingresado a la geocerca",
+ "eventGeofenceExit": "El dispositivo ha salido de la geocerca",
+ "eventAlarm": "Alarmas",
+ "alarm": "Alarma",
+ "alarmSos": "Alarma de SOS",
+ "alarmVibration": "Alarma de vibración",
+ "alarmMovement": "Alarma de movimiento",
+ "alarmOverspeed": "Alarma de exceso de velocidad",
+ "alarmFallDown": "Alarma de caida",
+ "alarmLowBattery": "Alarma de bateria baja",
+ "alarmMotion": "Alarma de movimiento",
+ "alarmFault": "Alarma de fallo",
+ "notificationType": "Tipo de Notificación",
+ "notificationWeb": "Envíar vía Web",
+ "notificationMail": "Envíar vía Email"
+} \ No newline at end of file
diff --git a/web/l10n/fa.json b/web/l10n/fa.json
new file mode 100644
index 000000000..5bfec4bb1
--- /dev/null
+++ b/web/l10n/fa.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "در حال بارگزارى ...",
+ "sharedSave": "ذخيره",
+ "sharedCancel": "انصراف",
+ "sharedAdd": "اضافه كردن",
+ "sharedEdit": "ویرایش",
+ "sharedRemove": "پاک کردن",
+ "sharedRemoveConfirm": "پاک کردن آیتم",
+ "sharedKm": "کیلومتر",
+ "sharedMi": "مایل",
+ "sharedKn": "kn",
+ "sharedKmh": "کیلومتر بر ساعت",
+ "sharedMph": "مایل بر ساعت",
+ "sharedHour": "ساعت",
+ "sharedMinute": "دقيقه",
+ "sharedSecond": "ثانيه",
+ "sharedName": "نام",
+ "sharedDescription": "توضیحات",
+ "sharedSearch": "جستجو",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "خطا",
+ "errorUnknown": "خطا ناشناخته",
+ "errorConnection": "خطا در اتصال",
+ "userEmail": "نام كاربرى ( ايميل )",
+ "userPassword": "گذرواژه",
+ "userAdmin": "مدیر",
+ "userRemember": "Remember",
+ "loginTitle": "ورود",
+ "loginLanguage": "انتخاب زبان",
+ "loginRegister": "ثبت نام",
+ "loginLogin": "ورود",
+ "loginFailed": "نام كاربرى ( ايميل ) يا گذرواژه اشتباه است",
+ "loginCreated": "ثبت نام با موفقيت انجام شد",
+ "loginLogout": "خروج",
+ "devicesAndState": "دستگاه ها و وضعیت",
+ "deviceDialog": "دستگاه",
+ "deviceTitle": "دستگاه ها",
+ "deviceIdentifier": "سريال دستگاه",
+ "deviceLastUpdate": "آخرين بروزرسانى",
+ "deviceCommand": "فرمان",
+ "deviceFollow": "تعقیب",
+ "groupDialog": "گروه",
+ "groupParent": "گروه",
+ "groupNoGroup": "بدون گروه",
+ "settingsTitle": "تنظيمات",
+ "settingsUser": "حساب كاربرى",
+ "settingsGroups": "گروه ها",
+ "settingsServer": "سرور",
+ "settingsUsers": "کاربر",
+ "settingsDistanceUnit": "فاصله",
+ "settingsSpeedUnit": "سرعت",
+ "settingsTwelveHourFormat": "فرمت 12 ساعتی",
+ "reportTitle": "گزارشات ",
+ "reportDevice": "دستگاه",
+ "reportFrom": "از",
+ "reportTo": "تا",
+ "reportShow": "نمایش",
+ "reportClear": "خالی کردن",
+ "positionFixTime": "زمان",
+ "positionValid": "معتبر",
+ "positionLatitude": "عرض جغرافيايى",
+ "positionLongitude": "طول جغرافيايى",
+ "positionAltitude": "ارتفاع",
+ "positionSpeed": "سرعت",
+ "positionCourse": "دوره",
+ "positionAddress": "آدرس",
+ "positionProtocol": "پروتوکل",
+ "serverTitle": "تنظیمات سرور",
+ "serverZoom": "بزرگنمایی",
+ "serverRegistration": "ثبت نام",
+ "serverReadonly": "فقط خواندنی",
+ "mapTitle": "نقشه",
+ "mapLayer": "لایه های نقشه",
+ "mapCustom": "نقشه سفارشی",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "وضعیت",
+ "stateName": "ویژگی",
+ "stateValue": "مقدار",
+ "commandTitle": "فرمان",
+ "commandSend": "ارسال",
+ "commandType": "نوع",
+ "commandSent": "دستور ارسال گردید",
+ "commandPositionPeriodic": "Periodic Reporting",
+ "commandPositionStop": "Stop Reporting",
+ "commandEngineStop": "Engine Stop",
+ "commandEngineResume": "Engine Resume",
+ "commandFrequency": "فرکانس",
+ "commandUnit": "واحد",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "ارسال پیام کوتاه",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/fi.json b/web/l10n/fi.json
new file mode 100644
index 000000000..9309ab1a1
--- /dev/null
+++ b/web/l10n/fi.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Ladataan...",
+ "sharedSave": "Tallenna",
+ "sharedCancel": "Peruuta",
+ "sharedAdd": "Lisää",
+ "sharedEdit": "Muokkaa",
+ "sharedRemove": "Poista",
+ "sharedRemoveConfirm": "Poista kohde?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Tunti",
+ "sharedMinute": "Minuutti",
+ "sharedSecond": "Sekunti",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Virhe",
+ "errorUnknown": "Tuntematon virhe",
+ "errorConnection": "Yhteysvirhe",
+ "userEmail": "Email",
+ "userPassword": "Salasana",
+ "userAdmin": "Ylläpito",
+ "userRemember": "Remember",
+ "loginTitle": "Kirjaudu",
+ "loginLanguage": "Kieli",
+ "loginRegister": "Rekisteröidy",
+ "loginLogin": "Kirjaudu",
+ "loginFailed": "Virheellinen email tai salasana",
+ "loginCreated": "Uusi käyttäjä on rekisteröitynyt",
+ "loginLogout": "Kirjaudu ulos",
+ "devicesAndState": "Laitteet ja Tilat",
+ "deviceDialog": "Laite",
+ "deviceTitle": "Laitteet",
+ "deviceIdentifier": "Tunniste",
+ "deviceLastUpdate": "Viimeisin päivitys",
+ "deviceCommand": "Komento",
+ "deviceFollow": "Seuraa",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Asetukset",
+ "settingsUser": "Tili",
+ "settingsGroups": "Groups",
+ "settingsServer": "Palvelin",
+ "settingsUsers": "Käyttäjät",
+ "settingsDistanceUnit": "Etäisyys",
+ "settingsSpeedUnit": "Nopeus",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Raportit",
+ "reportDevice": "Laite",
+ "reportFrom": "Mistä",
+ "reportTo": "Mihin",
+ "reportShow": "Näytä",
+ "reportClear": "Tyhjennä",
+ "positionFixTime": "Aika",
+ "positionValid": "Kelvollinen",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Korkeus",
+ "positionSpeed": "Nopeus",
+ "positionCourse": "Suunta",
+ "positionAddress": "Osoite",
+ "positionProtocol": "Protokolla",
+ "serverTitle": "Palvelinasetukset",
+ "serverZoom": "Lähennä",
+ "serverRegistration": "Rekisteröinti",
+ "serverReadonly": "Vain luku",
+ "mapTitle": "Kartta",
+ "mapLayer": "Karttataso",
+ "mapCustom": "Oma kartta",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps avain",
+ "mapBingRoad": "Bign Maps tiet",
+ "mapBingAerial": "Bing Maps ilmakuva",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Tila",
+ "stateName": "Ominaisuus",
+ "stateValue": "Arvo",
+ "commandTitle": "Komento",
+ "commandSend": "Lähetä",
+ "commandType": "Tyyppi",
+ "commandSent": "Komento on lähetetty",
+ "commandPositionPeriodic": "Määräaikaisraportointi",
+ "commandPositionStop": "Lopeta raportointi",
+ "commandEngineStop": "Sammuta moottori",
+ "commandEngineResume": "Palauta moottori",
+ "commandFrequency": "Taajuus",
+ "commandUnit": "Yksikkö",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/fr.json b/web/l10n/fr.json
new file mode 100644
index 000000000..487dd7acd
--- /dev/null
+++ b/web/l10n/fr.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Chargement...",
+ "sharedSave": "Enregistrer",
+ "sharedCancel": "Annuler",
+ "sharedAdd": "Ajouter",
+ "sharedEdit": "Editer",
+ "sharedRemove": "Effacer",
+ "sharedRemoveConfirm": "Effacer objet?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "nd",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Heure",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Seconde",
+ "sharedName": "Nom",
+ "sharedDescription": "Description",
+ "sharedSearch": "Recherche",
+ "sharedGeofence": "Périmètre virtuel",
+ "sharedGeofences": "Périmètres virtuels",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributs",
+ "sharedAttribute": "Attribut",
+ "sharedArea": "Aire",
+ "sharedMute": "Mute",
+ "errorTitle": "Erreur",
+ "errorUnknown": "Erreur inconnue",
+ "errorConnection": "Erreur de connexion",
+ "userEmail": "Email",
+ "userPassword": "Mot de Passe",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Identification",
+ "loginLanguage": "Langue",
+ "loginRegister": "Inscription",
+ "loginLogin": "Se connecter",
+ "loginFailed": "Adresse email ou mot de passe incorrect",
+ "loginCreated": "Nouvel utilisateur enregistré",
+ "loginLogout": "Déconnexion",
+ "devicesAndState": "Dispositifs et Etat",
+ "deviceDialog": "Dispositif",
+ "deviceTitle": "Dispositifs",
+ "deviceIdentifier": "Identifiant",
+ "deviceLastUpdate": "Dernière mise à jour",
+ "deviceCommand": "Commande",
+ "deviceFollow": "Suivre",
+ "groupDialog": "Groupe",
+ "groupParent": "Groupe",
+ "groupNoGroup": "Sans groupe",
+ "settingsTitle": "Paramètres",
+ "settingsUser": "Compte",
+ "settingsGroups": "Groupes",
+ "settingsServer": "Serveur",
+ "settingsUsers": "Utilisateurs",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Vitesse",
+ "settingsTwelveHourFormat": "Format d'heure - 12 heures",
+ "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": "Orientation",
+ "positionAddress": "Adresse",
+ "positionProtocol": "Protocole",
+ "serverTitle": "Paramètres de serveur",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Inscription",
+ "serverReadonly": "Lecture seule",
+ "mapTitle": "Carte",
+ "mapLayer": "Couche cartographique",
+ "mapCustom": "Carte personnalisée",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Map Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygone",
+ "mapShapeCircle": "Cercle",
+ "stateTitle": "Etat",
+ "stateName": "Paramètre",
+ "stateValue": "Valeur",
+ "commandTitle": "Commande",
+ "commandSend": "Envoyer",
+ "commandType": "Type",
+ "commandSent": "Commande envoyée",
+ "commandPositionPeriodic": "Périodicité du rapport de position",
+ "commandPositionStop": "Arrêt du rapport de position",
+ "commandEngineStop": "Arrêt moteur",
+ "commandEngineResume": "Démarrage moteur",
+ "commandFrequency": "Fréquence",
+ "commandUnit": "Unité",
+ "commandCustom": "Commande personnalisée",
+ "commandPositionSingle": "Rapport de position unique",
+ "commandAlarmArm": "Activer l'alarme",
+ "commandAlarmDisarm": "Désactiver l'alarme",
+ "commandSetTimezone": "Régler le fuseau horaire",
+ "commandRequestPhoto": "Demander une photo",
+ "commandRebootDevice": "Redémarrer l'appareil",
+ "commandSendSms": "Envoyer un SMS",
+ "commandSosNumber": "Régler le n° SOS",
+ "commandSilenceTime": "Définir le temps de silence",
+ "commandSetPhonebook": "Définir l'annuaire",
+ "commandVoiceMessage": "Message vocal",
+ "commandOutputControl": "Contrôle de la sortie",
+ "commandAlarmSpeed": "Alarme de dépassement de vitesse",
+ "commandDeviceIdentification": "Identification de l'appareil",
+ "eventDeviceOnline": "L'appareil est en ligne",
+ "eventDeviceOffline": "L'appareil est hors-ligne",
+ "eventDeviceMoving": "L'appareil est en mouvement",
+ "eventDeviceStopped": "L'appareil est arrêté",
+ "eventDeviceOverspeed": "L'appareil dépasse la vitesse",
+ "eventCommandResult": "Résultat de la commande",
+ "eventGeofenceEnter": "L'appareil est entré dans un périmètre virtuel",
+ "eventGeofenceExit": "L'appareil est sorti d'un périmètre virtuel",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type de notification",
+ "notificationWeb": "Envoyer par internet",
+ "notificationMail": "Envoyer par E-mail"
+} \ No newline at end of file
diff --git a/web/l10n/he.json b/web/l10n/he.json
new file mode 100644
index 000000000..a2bb338bb
--- /dev/null
+++ b/web/l10n/he.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "בטעינה...",
+ "sharedSave": "שמור",
+ "sharedCancel": "ביטול",
+ "sharedAdd": "הוסף",
+ "sharedEdit": "ערוך",
+ "sharedRemove": "הסר",
+ "sharedRemoveConfirm": "הסר פריט",
+ "sharedKm": "ק\"מ",
+ "sharedMi": "מייל",
+ "sharedKn": "kn",
+ "sharedKmh": "ק\"מ/שעה",
+ "sharedMph": "מייל/שעה",
+ "sharedHour": "שעה",
+ "sharedMinute": "דקה",
+ "sharedSecond": "שנייה",
+ "sharedName": "שם",
+ "sharedDescription": "תיאור",
+ "sharedSearch": "חיפוש",
+ "sharedGeofence": "גדר וירטואלית",
+ "sharedGeofences": "גדרות וירטואליות",
+ "sharedNotifications": "התראות",
+ "sharedAttributes": "מאפיינים",
+ "sharedAttribute": "מאפיין",
+ "sharedArea": "איזור",
+ "sharedMute": "Mute",
+ "errorTitle": "שגיאה",
+ "errorUnknown": "שגיאה לא ידועה",
+ "errorConnection": "בעייה בחיבור",
+ "userEmail": "אימייל",
+ "userPassword": "סיסמה",
+ "userAdmin": "אדמין",
+ "userRemember": "זכור אותי",
+ "loginTitle": "כניסה",
+ "loginLanguage": "שפה",
+ "loginRegister": "הרשם",
+ "loginLogin": "כניסה",
+ "loginFailed": "אימייל או סיסמה שגויים",
+ "loginCreated": "משתמש חדש נרשם",
+ "loginLogout": "יציאה",
+ "devicesAndState": "מכשירים וסטטוס",
+ "deviceDialog": "מכשיר",
+ "deviceTitle": "מכשירים",
+ "deviceIdentifier": "מזהה",
+ "deviceLastUpdate": "עודכן לאחרונה",
+ "deviceCommand": "פקודה",
+ "deviceFollow": "עקוב",
+ "groupDialog": "קבוצה",
+ "groupParent": "קבוצה",
+ "groupNoGroup": "ללא קבוצה",
+ "settingsTitle": "הגדרות",
+ "settingsUser": "חשבון",
+ "settingsGroups": "קבוצות",
+ "settingsServer": "שרת",
+ "settingsUsers": "משתמשים",
+ "settingsDistanceUnit": "מרחק",
+ "settingsSpeedUnit": "מהירות",
+ "settingsTwelveHourFormat": "פורמט של 12 שעות",
+ "reportTitle": "דו\"חות",
+ "reportDevice": "מכשיר",
+ "reportFrom": "מ-",
+ "reportTo": "עד",
+ "reportShow": "הצג",
+ "reportClear": "נקה",
+ "positionFixTime": "זמן",
+ "positionValid": "תקין",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "מהירות",
+ "positionCourse": "מסלול",
+ "positionAddress": "כתובת",
+ "positionProtocol": "פרוטוקול",
+ "serverTitle": "הגדרות שרת",
+ "serverZoom": "זום",
+ "serverRegistration": "הרשמה",
+ "serverReadonly": "לקריאה בלבד",
+ "mapTitle": "מפה",
+ "mapLayer": "שכבת מפה",
+ "mapCustom": "מפה בהתאמה",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "פוליגון",
+ "mapShapeCircle": "מעגל",
+ "stateTitle": "מצב",
+ "stateName": "תכונה",
+ "stateValue": "ערך",
+ "commandTitle": "פקודה",
+ "commandSend": "שליחה",
+ "commandType": "סוג",
+ "commandSent": "הפקודה נשלחה",
+ "commandPositionPeriodic": "דיווח תקופתי",
+ "commandPositionStop": "עצור דיווח",
+ "commandEngineStop": "דומם מנוע",
+ "commandEngineResume": "הפעל מנוע",
+ "commandFrequency": "תדירות",
+ "commandUnit": "יחידה",
+ "commandCustom": "פקודה בהתאמה אישית",
+ "commandPositionSingle": "דו\"ח יחיד",
+ "commandAlarmArm": "הפעלת אזעקה",
+ "commandAlarmDisarm": "נטרול אזעקה",
+ "commandSetTimezone": "קבע איזור זמן",
+ "commandRequestPhoto": "בקשה לתמונה",
+ "commandRebootDevice": "איתחול המכשיר",
+ "commandSendSms": "שלח סמס",
+ "commandSosNumber": "קבע מספר חירום",
+ "commandSilenceTime": "קבע משך זמן הדממה",
+ "commandSetPhonebook": "הגדר ספר טלפונים",
+ "commandVoiceMessage": "הודעה קולית",
+ "commandOutputControl": "בקרת פלט",
+ "commandAlarmSpeed": "התראת מהירות",
+ "commandDeviceIdentification": "זיהוי מכשיר",
+ "eventDeviceOnline": "המכשיר און לין",
+ "eventDeviceOffline": "המכשיר מנותק",
+ "eventDeviceMoving": "המכשיר בתזוזה",
+ "eventDeviceStopped": "המכשיר עצר",
+ "eventDeviceOverspeed": "המכשיר עבר את המהירות המותרת",
+ "eventCommandResult": "תוצאות הפקודה",
+ "eventGeofenceEnter": "המכשיר נכנס לתחום המוגדר",
+ "eventGeofenceExit": "המכשיר יצא מהתחום המוגדר",
+ "eventAlarm": "אזעקות",
+ "alarm": "אזעקה",
+ "alarmSos": "אתרעת SOS",
+ "alarmVibration": "אזעקת רטט",
+ "alarmMovement": "אזעקת תנועה",
+ "alarmOverspeed": "אזעקת מהירות יתר",
+ "alarmFallDown": "אזעקת נפילה",
+ "alarmLowBattery": "אזעקת סוללה חלשה",
+ "alarmMotion": "אזעקת תזוזה",
+ "alarmFault": "אזעקת שווא",
+ "notificationType": "סוג ההתראה",
+ "notificationWeb": "שלח דרך ווב",
+ "notificationMail": "שלח באימייל"
+} \ No newline at end of file
diff --git a/web/l10n/hi.json b/web/l10n/hi.json
new file mode 100644
index 000000000..1fff378cb
--- /dev/null
+++ b/web/l10n/hi.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "लोड हो रहा है...",
+ "sharedSave": "सुरक्षित करें",
+ "sharedCancel": "रद्द करें ",
+ "sharedAdd": "जोड़ें ",
+ "sharedEdit": "संपादित करें",
+ "sharedRemove": "हटाएं ",
+ "sharedRemoveConfirm": "आइटम हटाएं ?",
+ "sharedKm": "किमी ( किलोमीटर )",
+ "sharedMi": "एम आई ",
+ "sharedKn": "के.एन.",
+ "sharedKmh": "किमी / घंटा",
+ "sharedMph": "मील प्रति घंटा",
+ "sharedHour": "घंटा",
+ "sharedMinute": "मिनट",
+ "sharedSecond": "सैकंड ",
+ "sharedName": "नाम",
+ "sharedDescription": "विवरण",
+ "sharedSearch": "खोजें",
+ "sharedGeofence": "जिओफेंस / भूगौलिक परिधि",
+ "sharedGeofences": "जिओफेंसस / भूगौलिक परिधियां",
+ "sharedNotifications": "सूचनाएं",
+ "sharedAttributes": "गुण",
+ "sharedAttribute": "गुण",
+ "sharedArea": "क्षेत्र",
+ "sharedMute": "Mute",
+ "errorTitle": "त्रुटि",
+ "errorUnknown": "अज्ञात त्रुटि",
+ "errorConnection": "कनेक्शन त्रुटि",
+ "userEmail": "ईमेल",
+ "userPassword": "पासवर्ड / गोपनीय शब्द ",
+ "userAdmin": "एडमिन / व्यवस्थापक",
+ "userRemember": "Remember",
+ "loginTitle": "लॉगिन / प्रवेश करें ",
+ "loginLanguage": "भाषा",
+ "loginRegister": "रजिस्टर / पंजीकृत करें",
+ "loginLogin": "लॉगिन / प्रवेश करें ",
+ "loginFailed": "ई-मेल पता या पासवर्ड गलत है",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "लॉगआउट / निष्कासन करें",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "उपकरण",
+ "deviceTitle": "उपकरण",
+ "deviceIdentifier": "पहचानकर्ता",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "आदेश",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "सेटिंग्स",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "सर्वर",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "गति",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Reports",
+ "reportDevice": "उपकरण",
+ "reportFrom": "From",
+ "reportTo": "To",
+ "reportShow": "Show",
+ "reportClear": "Clear",
+ "positionFixTime": "समय",
+ "positionValid": "Valid",
+ "positionLatitude": "अक्षांश / अक्षरेखा",
+ "positionLongitude": "देशान्तर",
+ "positionAltitude": "ऊंचाई",
+ "positionSpeed": "गति",
+ "positionCourse": "मार्ग",
+ "positionAddress": "Address",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server Settings",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registration",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "State",
+ "stateName": "Attribute",
+ "stateValue": "Value",
+ "commandTitle": "आदेश",
+ "commandSend": "भेजें / प्रेषित करें",
+ "commandType": "Type",
+ "commandSent": "कमांड / आदेश भेज दी गयी है ",
+ "commandPositionPeriodic": "Periodic Reporting",
+ "commandPositionStop": "Stop Reporting",
+ "commandEngineStop": "Engine Stop",
+ "commandEngineResume": "Engine Resume",
+ "commandFrequency": "फ्रीक्वेंसी / आवृत्ति",
+ "commandUnit": "इकाई",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/hr.json b/web/l10n/hr.json
new file mode 100644
index 000000000..37e4537f2
--- /dev/null
+++ b/web/l10n/hr.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Save",
+ "sharedCancel": "Cancel",
+ "sharedAdd": "Add",
+ "sharedEdit": "Edit",
+ "sharedRemove": "Remove",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/hu.json b/web/l10n/hu.json
new file mode 100644
index 000000000..bc9604a39
--- /dev/null
+++ b/web/l10n/hu.json
@@ -0,0 +1,136 @@
+{
+ "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",
+ "sharedKn": "csomó",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Óra",
+ "sharedMinute": "Perc",
+ "sharedSecond": "Másodperc",
+ "sharedName": "Név",
+ "sharedDescription": "Leírás",
+ "sharedSearch": "Keresés",
+ "sharedGeofence": "Geokerítés",
+ "sharedGeofences": "Geokerítések",
+ "sharedNotifications": "Értesítések",
+ "sharedAttributes": "Tulajdonságok",
+ "sharedAttribute": "Tulajdonság",
+ "sharedArea": "Terület",
+ "sharedMute": "Mute",
+ "errorTitle": "Hiba",
+ "errorUnknown": "Ismeretlen hiba",
+ "errorConnection": "Kapcsolódási hiba",
+ "userEmail": "Email",
+ "userPassword": "Jelszó",
+ "userAdmin": "Adminisztrátor",
+ "userRemember": "Remember",
+ "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",
+ "devicesAndState": "Eszközök és állapotuk",
+ "deviceDialog": "Eszköz",
+ "deviceTitle": "Eszközök",
+ "deviceIdentifier": "Azonosító",
+ "deviceLastUpdate": "Utolsó frissítés",
+ "deviceCommand": "Parancs",
+ "deviceFollow": "Követ",
+ "groupDialog": "Csoport",
+ "groupParent": "Csoport",
+ "groupNoGroup": "Nincs Csoport",
+ "settingsTitle": "Beállítások",
+ "settingsUser": "Fiók",
+ "settingsGroups": "Csoportok",
+ "settingsServer": "Szerver",
+ "settingsUsers": "Felhasználók",
+ "settingsDistanceUnit": "Távolság",
+ "settingsSpeedUnit": "Sebesség",
+ "settingsTwelveHourFormat": "12-órás formátum",
+ "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ó",
+ "serverReadonly": "Csak olvasható",
+ "mapTitle": "Térkép",
+ "mapLayer": "Térkép réteg",
+ "mapCustom": "Egyéni térkép",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps kulcs",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Poligon",
+ "mapShapeCircle": "Kör",
+ "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",
+ "commandCustom": "Egyedi parancs",
+ "commandPositionSingle": "Egyszeri jelentés",
+ "commandAlarmArm": "Riasztó élesítés",
+ "commandAlarmDisarm": "Riasztó kikapcsolás",
+ "commandSetTimezone": "Időzóna beállítás",
+ "commandRequestPhoto": "Kép lekérés",
+ "commandRebootDevice": "Eszköz újraindítása",
+ "commandSendSms": "SMS küldés",
+ "commandSosNumber": "SOS szám beállítás",
+ "commandSilenceTime": "Csendes idő beállítás",
+ "commandSetPhonebook": "Telefonkönyv beállítás",
+ "commandVoiceMessage": "Hangüzenet",
+ "commandOutputControl": "Kimenet Ellenőrzés",
+ "commandAlarmSpeed": "Riasztás Gyorshajtásról",
+ "commandDeviceIdentification": "Eszköz azonosító",
+ "eventDeviceOnline": "Eszköz online",
+ "eventDeviceOffline": "Eszköz offline",
+ "eventDeviceMoving": "Eszköz mozog",
+ "eventDeviceStopped": "Eszköz megállt",
+ "eventDeviceOverspeed": "Eszköz túllépte a sebességkorlátot",
+ "eventCommandResult": "Parancs eredmény",
+ "eventGeofenceEnter": "Eszköz belépett a geokerítésbe",
+ "eventGeofenceExit": "Eszköz kilépett a geokerítésből",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Értesítés Típusa",
+ "notificationWeb": "Küldés Weben",
+ "notificationMail": "Küldés E-mailben"
+} \ No newline at end of file
diff --git a/web/l10n/hy.json b/web/l10n/hy.json
new file mode 100644
index 000000000..37e4537f2
--- /dev/null
+++ b/web/l10n/hy.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Save",
+ "sharedCancel": "Cancel",
+ "sharedAdd": "Add",
+ "sharedEdit": "Edit",
+ "sharedRemove": "Remove",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/id.json b/web/l10n/id.json
new file mode 100644
index 000000000..1fed27962
--- /dev/null
+++ b/web/l10n/id.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Memuat...",
+ "sharedSave": "Simpan",
+ "sharedCancel": "Batal",
+ "sharedAdd": "Tambah",
+ "sharedEdit": "Ubah",
+ "sharedRemove": "Hapus",
+ "sharedRemoveConfirm": "Hapus item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mp/h",
+ "sharedHour": "Jam",
+ "sharedMinute": "Menit",
+ "sharedSecond": "Detik",
+ "sharedName": "Nama",
+ "sharedDescription": "Description",
+ "sharedSearch": "Cari",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Error tidak diketahui",
+ "errorConnection": "Koneksi error",
+ "userEmail": "Email",
+ "userPassword": "Sandi",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Masuk",
+ "loginLanguage": "Bahasa",
+ "loginRegister": "Daftar",
+ "loginLogin": "Masuk",
+ "loginFailed": "Email atau password salah",
+ "loginCreated": "Pengguna baru telah terdaftar",
+ "loginLogout": "Keluar",
+ "devicesAndState": "Perangkat dan Status",
+ "deviceDialog": "Perangkat",
+ "deviceTitle": "Perangkat",
+ "deviceIdentifier": "Identifikasi",
+ "deviceLastUpdate": "Terbaru",
+ "deviceCommand": "Perintah",
+ "deviceFollow": "Ikuti",
+ "groupDialog": "Grup",
+ "groupParent": "Grup",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Pengaturan",
+ "settingsUser": "Akun",
+ "settingsGroups": "Grup",
+ "settingsServer": "Server",
+ "settingsUsers": "Pengguna",
+ "settingsDistanceUnit": "Jarak",
+ "settingsSpeedUnit": "Kecepatan",
+ "settingsTwelveHourFormat": "Format 12 Jam",
+ "reportTitle": "Laporan",
+ "reportDevice": "Perangkat",
+ "reportFrom": "Dari",
+ "reportTo": "Ke",
+ "reportShow": "Tampil",
+ "reportClear": "Bersihkan",
+ "positionFixTime": "Waktu",
+ "positionValid": "Benar",
+ "positionLatitude": "Latitude",
+ "positionLongitude": "Longitude",
+ "positionAltitude": "Ketinggian",
+ "positionSpeed": "Kecepatan",
+ "positionCourse": "Arah",
+ "positionAddress": "Alamat",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Pengaturan Server",
+ "serverZoom": "Perbesar",
+ "serverRegistration": "Pendaftaran",
+ "serverReadonly": "Hanya Dilihat",
+ "mapTitle": "Peta",
+ "mapLayer": "Layer Peta",
+ "mapCustom": "Peta Buatan",
+ "mapOsm": "Peta Open Street",
+ "mapBingKey": "Key untuk Peta Bing",
+ "mapBingRoad": "Peta Jalan Bing",
+ "mapBingAerial": "Peta Udara Bing",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Status",
+ "stateName": "atribut",
+ "stateValue": "Nilai",
+ "commandTitle": "Perintah",
+ "commandSend": "Kirim",
+ "commandType": "Tipe",
+ "commandSent": "Perintah terkirim",
+ "commandPositionPeriodic": "Laporan berkala",
+ "commandPositionStop": "Stop Laporan",
+ "commandEngineStop": "Stop Mesin",
+ "commandEngineResume": "Mulai Mesin",
+ "commandFrequency": "Frekuensi",
+ "commandUnit": "unit",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/it.json b/web/l10n/it.json
new file mode 100644
index 000000000..ae9184a83
--- /dev/null
+++ b/web/l10n/it.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Salva",
+ "sharedCancel": "Cancella",
+ "sharedAdd": "Aggiungi",
+ "sharedEdit": "Modifica",
+ "sharedRemove": "Rimuovi",
+ "sharedRemoveConfirm": "Rimuovere oggetto?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Ora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Secondo",
+ "sharedName": "Nome",
+ "sharedDescription": "Descrizione",
+ "sharedSearch": "Cerca",
+ "sharedGeofence": "GeoRecinto",
+ "sharedGeofences": "GeoRecinto",
+ "sharedNotifications": "Notifiche",
+ "sharedAttributes": "Attributi",
+ "sharedAttribute": "Attributo",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Errore",
+ "errorUnknown": "Errore sconosciuto",
+ "errorConnection": "Errore di connessione",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Lingua",
+ "loginRegister": "Registrazione",
+ "loginLogin": "Login",
+ "loginFailed": "Indirizzo email o password errati",
+ "loginCreated": "Un nuovo utente si e` registrato",
+ "loginLogout": "Logout",
+ "devicesAndState": "Dispositivi e stato",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Dispositivi",
+ "deviceIdentifier": "Identificativo",
+ "deviceLastUpdate": "Ultimo aggiornamento",
+ "deviceCommand": "Comando",
+ "deviceFollow": "Segui",
+ "groupDialog": "Gruppo",
+ "groupParent": "Gruppo",
+ "groupNoGroup": "Nessun Gruppo",
+ "settingsTitle": "Impostazioni",
+ "settingsUser": "Account",
+ "settingsGroups": "Gruppi",
+ "settingsServer": "Server",
+ "settingsUsers": "Utenti",
+ "settingsDistanceUnit": "Distanza",
+ "settingsSpeedUnit": "Velocità",
+ "settingsTwelveHourFormat": "Formato 12 ore",
+ "reportTitle": "Reports",
+ "reportDevice": "Dispositivo",
+ "reportFrom": "Da",
+ "reportTo": "A",
+ "reportShow": "Visualizza",
+ "reportClear": "Pulisci",
+ "positionFixTime": "Tempo",
+ "positionValid": "Valido",
+ "positionLatitude": "Latitudine",
+ "positionLongitude": "Longitudine",
+ "positionAltitude": "Altitudine",
+ "positionSpeed": "Velocità",
+ "positionCourse": "Percorso",
+ "positionAddress": "Indirizzo",
+ "positionProtocol": "Protocollo",
+ "serverTitle": "Impostazioni Server",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registrazione",
+ "serverReadonly": "Sola lettura",
+ "mapTitle": "Mappa",
+ "mapLayer": "Livelli Mappa",
+ "mapCustom": "Mappa Personalizzata",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Poligono",
+ "mapShapeCircle": "Cerchio",
+ "stateTitle": "Stato",
+ "stateName": "Attributo",
+ "stateValue": "Valore",
+ "commandTitle": "Commando",
+ "commandSend": "Invia",
+ "commandType": "Tipo",
+ "commandSent": "Commando inviato",
+ "commandPositionPeriodic": "Report periodici",
+ "commandPositionStop": "Ferma i report",
+ "commandEngineStop": "Ferma Engine",
+ "commandEngineResume": "Riavvio Engine",
+ "commandFrequency": "Frequenza",
+ "commandUnit": "Unità ",
+ "commandCustom": "Comando personalizzato",
+ "commandPositionSingle": "Report singolo",
+ "commandAlarmArm": "Attiva allarme",
+ "commandAlarmDisarm": "Disattiva Allarme",
+ "commandSetTimezone": "Imposta Timezone",
+ "commandRequestPhoto": "Richiedi foto",
+ "commandRebootDevice": "Riavvia dispositivo",
+ "commandSendSms": "Invia SMS",
+ "commandSosNumber": "Imposta Numero SOS",
+ "commandSilenceTime": "Imposta Orario Silenzione",
+ "commandSetPhonebook": "Imposta rubrica",
+ "commandVoiceMessage": "Messaggio vocale",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Dispositivo online",
+ "eventDeviceOffline": "Dispositivo offline",
+ "eventDeviceMoving": "Dispositivo in movimento",
+ "eventDeviceStopped": "Dispositivo fermo",
+ "eventDeviceOverspeed": "Dispostivo troppo veloce",
+ "eventCommandResult": "Risultato comando",
+ "eventGeofenceEnter": "Il dipositivo e` entrato nel GeoRecinto",
+ "eventGeofenceExit": "Il dipositivo e` uscito dal GeoRecinto",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Tipo notica",
+ "notificationWeb": "Invia tramite Web",
+ "notificationMail": "Invia tramite Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ja.json b/web/l10n/ja.json
new file mode 100644
index 000000000..37e4537f2
--- /dev/null
+++ b/web/l10n/ja.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Save",
+ "sharedCancel": "Cancel",
+ "sharedAdd": "Add",
+ "sharedEdit": "Edit",
+ "sharedRemove": "Remove",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ka.json b/web/l10n/ka.json
new file mode 100644
index 000000000..f8f8d50a5
--- /dev/null
+++ b/web/l10n/ka.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "იტვირთება...",
+ "sharedSave": "შენახვა",
+ "sharedCancel": "უარყოფა",
+ "sharedAdd": "დამატება",
+ "sharedEdit": "შეცვლა",
+ "sharedRemove": "წაშლა",
+ "sharedRemoveConfirm": "გსურთ წაშლა ?",
+ "sharedKm": "კმ",
+ "sharedMi": "მლ",
+ "sharedKn": "kn",
+ "sharedKmh": "კმ/სთ",
+ "sharedMph": "მლ/სთ",
+ "sharedHour": "საათი",
+ "sharedMinute": "წუთი",
+ "sharedSecond": "წამი",
+ "sharedName": "დასახელება",
+ "sharedDescription": "Description",
+ "sharedSearch": "ძებნა",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "შეცდომა",
+ "errorUnknown": "უცნობი შეცდომა",
+ "errorConnection": "კავშირის შეცდომა",
+ "userEmail": "ელ-ფოსტა",
+ "userPassword": "პაროლი",
+ "userAdmin": "ადმინი",
+ "userRemember": "Remember",
+ "loginTitle": "ავტორიზაცია",
+ "loginLanguage": "ენა",
+ "loginRegister": "რეგისტრაცია",
+ "loginLogin": "შესვლა",
+ "loginFailed": "არასწორი ელ-ფოსტა ან პაროლი",
+ "loginCreated": "ახალი მომხარებელი დარეგისტრირდა",
+ "loginLogout": "გამოსვლა",
+ "devicesAndState": "მოწყობილობები და სტატუსი",
+ "deviceDialog": "მოწყობილობა",
+ "deviceTitle": "მოწყობილობები",
+ "deviceIdentifier": "იდენტიფიკატორი",
+ "deviceLastUpdate": "ბოლო განახლება",
+ "deviceCommand": "ბრძანება",
+ "deviceFollow": "გაყოლა",
+ "groupDialog": "ჯგუფი",
+ "groupParent": "ჯგუფი",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "პარამეტრები",
+ "settingsUser": "პროფილი",
+ "settingsGroups": "ჯგუფები",
+ "settingsServer": "სერვერი",
+ "settingsUsers": "მომხამრებლები",
+ "settingsDistanceUnit": "მანძილი",
+ "settingsSpeedUnit": "სიჩქარე",
+ "settingsTwelveHourFormat": "12-საათიანი ფორმატი",
+ "reportTitle": "რეპორტები",
+ "reportDevice": "მოწყობილობა",
+ "reportFrom": "დან",
+ "reportTo": "მდე",
+ "reportShow": "ჩვენება",
+ "reportClear": "გასუფთავება",
+ "positionFixTime": "დრო",
+ "positionValid": "ვარგისი",
+ "positionLatitude": "განედი",
+ "positionLongitude": "გრძედი",
+ "positionAltitude": "სიმაღლე",
+ "positionSpeed": "სიჩქარე",
+ "positionCourse": "კურსი",
+ "positionAddress": "მისამართი",
+ "positionProtocol": "პროტოკოლი",
+ "serverTitle": "სერვერის პარამეტრები",
+ "serverZoom": "ზუმი",
+ "serverRegistration": "რეგისტრაცია",
+ "serverReadonly": "მხოლოდ ნახვის",
+ "mapTitle": "რუკა",
+ "mapLayer": "რუკის ფენა",
+ "mapCustom": "მომხმარებლის რუკა",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "სტატუსი",
+ "stateName": "ატრიბუტი",
+ "stateValue": "მნიშვნელობა",
+ "commandTitle": "ბრძანება",
+ "commandSend": "გაგზავნა",
+ "commandType": "ტიპი",
+ "commandSent": "ბრძანება გაიგზავნა",
+ "commandPositionPeriodic": "პერიოდული რეპორტი",
+ "commandPositionStop": "რეპორტის შეჩერება",
+ "commandEngineStop": "ძრავის გამორთვა",
+ "commandEngineResume": "ძრავის ჩართვა",
+ "commandFrequency": "სიხშირე",
+ "commandUnit": "ერთეული",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ku.json b/web/l10n/ku.json
new file mode 100644
index 000000000..37e4537f2
--- /dev/null
+++ b/web/l10n/ku.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Loading...",
+ "sharedSave": "Save",
+ "sharedCancel": "Cancel",
+ "sharedAdd": "Add",
+ "sharedEdit": "Edit",
+ "sharedRemove": "Remove",
+ "sharedRemoveConfirm": "Remove item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hour",
+ "sharedMinute": "Minute",
+ "sharedSecond": "Second",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Error",
+ "errorUnknown": "Unknown error",
+ "errorConnection": "Connection error",
+ "userEmail": "Email",
+ "userPassword": "Password",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Login",
+ "loginLanguage": "Language",
+ "loginRegister": "Register",
+ "loginLogin": "Login",
+ "loginFailed": "Incorrect email address or password",
+ "loginCreated": "New user has been registered",
+ "loginLogout": "Logout",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Device",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "Speed",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Map",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/lo.json b/web/l10n/lo.json
new file mode 100644
index 000000000..bfd641ac9
--- /dev/null
+++ b/web/l10n/lo.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "ກຳລັງໂຫລດ...",
+ "sharedSave": "ບັນທຶກ",
+ "sharedCancel": "ຍົກເລີກ",
+ "sharedAdd": "ເພີ່ມ",
+ "sharedEdit": "ແກ້ໄຂ",
+ "sharedRemove": "ລົບອອກ",
+ "sharedRemoveConfirm": "ລົບລາຍການນີ້ບໍ່?",
+ "sharedKm": "ກມ.",
+ "sharedMi": "ໄມລ໌",
+ "sharedKn": "ນ໊ອດ",
+ "sharedKmh": "ກມ. /ຊມ.",
+ "sharedMph": "ໄມລ໌ຕໍ່ຊົ່ວໂມງ",
+ "sharedHour": "ຊົ່ວໂມງ",
+ "sharedMinute": "ນາທີ",
+ "sharedSecond": "ວິນາທີ",
+ "sharedName": "ຊື່",
+ "sharedDescription": "ລັກສະນະ",
+ "sharedSearch": "ຄົ້ນຫາ",
+ "sharedGeofence": "ເຂດພື້ນທີ່",
+ "sharedGeofences": "ເຂດພື້ນທີ່",
+ "sharedNotifications": "ການແຈ້ງເຕືອນ",
+ "sharedAttributes": "ຄຸນລັກສະນະ",
+ "sharedAttribute": "ຄຸນລັກສະນະ",
+ "sharedArea": "ພື້ນທີ່",
+ "sharedMute": "ປິດສຽງ",
+ "errorTitle": "ຜິດພາດ",
+ "errorUnknown": "ຂໍ້ຜິດພາດທີ່ບໍ່ຮູ້ຈັກ",
+ "errorConnection": "ການເຊື່ອມຕໍ່ຜິດພາດ",
+ "userEmail": "ອີເມວ",
+ "userPassword": "ລະຫັດຜ່ານ",
+ "userAdmin": "ຜູ້ເບິ່ງແຍງລະບົບ",
+ "userRemember": "ຈື່ໄວ້",
+ "loginTitle": "ເຂົ້າສູ່ລະບົບ",
+ "loginLanguage": "ພາສາ",
+ "loginRegister": "ລົງທະບຽນ",
+ "loginLogin": "ເຂົ້າສູ່ລະບົບ",
+ "loginFailed": "ທີ່ຢູ່ອີເມວຫລືລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ",
+ "loginCreated": "ຜູ້ໃຊ້ໃຫມ່ ໄດ້ຮັບການລົງທະບຽນ",
+ "loginLogout": "ອອກຈາກລະບົບ",
+ "devicesAndState": "ອຸປະກອນແລະສະຖານະ",
+ "deviceDialog": "ເຄື່ອງ/ອຸປະກອນ",
+ "deviceTitle": "ເຄື່ອງ/ອຸປະກອນ",
+ "deviceIdentifier": "ລະບຸເລກອຸປະກອນ",
+ "deviceLastUpdate": "ແກ້ໄຂລ່າສຸດ",
+ "deviceCommand": "ຄຳສັ່ງ",
+ "deviceFollow": "ຕິດຕາມ",
+ "groupDialog": "ກຸ່ມ",
+ "groupParent": "ກຸ່ມ",
+ "groupNoGroup": "ບໍ່ຈັດໃນກຸ່ມ",
+ "settingsTitle": "ການຕັ້ງຄ່າ",
+ "settingsUser": "ບັນຊີຜູ້ໃຊ້",
+ "settingsGroups": "ຕັ້ງຄ່າກຸ່ມ",
+ "settingsServer": "ຕັ້ງຄ່າລະບົບ",
+ "settingsUsers": "ຕັ້ງຄ່າຜູ້ໃຊ້ງານ",
+ "settingsDistanceUnit": "ຫນ່ວຍໄລຍະທາງ",
+ "settingsSpeedUnit": "ຫນ່ວຍຄວາມໄວ",
+ "settingsTwelveHourFormat": "ຮູບແບບເວລາ 12 ຊົ່ວໂມງ",
+ "reportTitle": "ລາຍງານ",
+ "reportDevice": "ລາຍງານເຄື່ອງ/ອຸປະກອນ",
+ "reportFrom": "ຈາກ",
+ "reportTo": "ໄປເຖິງ",
+ "reportShow": "ສະແດງ",
+ "reportClear": "ລົບລ້າງລາຍງານ",
+ "positionFixTime": "ເວລາ",
+ "positionValid": "ຖືກຕ້ອງ",
+ "positionLatitude": "ລາຕິຈູດ",
+ "positionLongitude": "ລອງຈິຈູດ",
+ "positionAltitude": "ລະດັບຄວາມສູງ",
+ "positionSpeed": "ຄວາມໄວ",
+ "positionCourse": "ທິດທາງ",
+ "positionAddress": "ທີ່ຢູ່",
+ "positionProtocol": "ໂປຣໂຕຄໍລ໌",
+ "serverTitle": "ການຕັ້ງຄ່າເຊີເວີ້",
+ "serverZoom": "ຂະຫຍາຍ +/-",
+ "serverRegistration": "ລົງທະບຽນ",
+ "serverReadonly": "ອ່ານໄດ້ຢ່າງດຽວ",
+ "mapTitle": "ແຜ່ນທີ",
+ "mapLayer": "ຊັ້ນແຜ່ນທີ",
+ "mapCustom": "ແຜ່ນທີ່ທີ່ກຳຫນົດເອງ",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps ສຳຄັນ",
+ "mapBingRoad": "Bing Maps ຖະຫນົນ",
+ "mapBingAerial": "Bing Maps ທາງອາກາດ",
+ "mapShapePolygon": "ໂພລີກອນ",
+ "mapShapeCircle": "ວົງກົມ",
+ "stateTitle": "ສະຖານະ",
+ "stateName": "ຄຸນລັກສະນະ",
+ "stateValue": "ມູນຄ່າ",
+ "commandTitle": "ຄຳສັ່ງ",
+ "commandSend": "ສົ່ງ",
+ "commandType": "ຊະນິດ",
+ "commandSent": "ຄຳສັ່ງໄດ້ຖືກສົ່ງແລ້ວ",
+ "commandPositionPeriodic": "ແກ້ໄຂຕ່ຳແຫນ່ງ",
+ "commandPositionStop": "ຕ່ຳແຫນ່ງ ຢຸດ",
+ "commandEngineStop": "ດັບເຄື່ອງຈັກ",
+ "commandEngineResume": "ຕິດເຄື່ອງຈັກຄືນໃຫມ່",
+ "commandFrequency": "ຄວາມຖີ່",
+ "commandUnit": "ຫນ່ວຍ",
+ "commandCustom": "ຄຳສັ່ງກຳຫນົດເອງ",
+ "commandPositionSingle": "ລາຍງານຕ່ຳແຫນ່ງດຽວ",
+ "commandAlarmArm": "ແຈ້ງເຕືອນຕິດຕໍ່ສາຂາ",
+ "commandAlarmDisarm": "ແຈ້ງເຕືອນຍົກເລີກຕິດຕໍ່ສາຂາ",
+ "commandSetTimezone": "ຕັ້ງຄ່າເຂດເວລາ",
+ "commandRequestPhoto": "ສັ່ງຖ່າຍຮູບ",
+ "commandRebootDevice": "ຣີບູດ",
+ "commandSendSms": "ສົ່ງ SMS",
+ "commandSosNumber": "ຕັ້ງຄ່າເລກໝາຍໂທສຸກເສີນ SOS",
+ "commandSilenceTime": "ຕັ້ງຄ່າຊ່ວງເວລາຢຸດນິ່ງ",
+ "commandSetPhonebook": "ຕັ້ງຄ່າສະໝຸດໂທລະສັບ",
+ "commandVoiceMessage": "ຂໍ້ຄວາມສຽງ",
+ "commandOutputControl": "ຄວບຄຸມຂໍ້ມູນທີ່ສົ່ງອອກ",
+ "commandAlarmSpeed": "ແຈ້ງເຕືອນຄວາມໄວເກີນກຳນົດ",
+ "commandDeviceIdentification": "ໝາຍເລກອຸປະກອນ",
+ "eventDeviceOnline": "ອຸປະກອນເຊື່ອມຕໍ່ແລ້ວ",
+ "eventDeviceOffline": "ອຸປະກອນບໍ່ໄດ້ເຊື່ອມຕໍ່",
+ "eventDeviceMoving": "ອຸປະກອນກຳລັງເຄື່ອນທີ່",
+ "eventDeviceStopped": "ອຸປະກອນບໍ່ເຄື່ອນໄຫວ",
+ "eventDeviceOverspeed": "ອຸປະກອນເກີນກຳນົດຄວາມໄວ",
+ "eventCommandResult": "ຜົນຮັບຈາກຄຳສັ່ງ",
+ "eventGeofenceEnter": "ອຸປະກອນເຂົ້າໃນເຂດພື້ນທີ່",
+ "eventGeofenceExit": "ອຸປະກອນອອກນອກເຂດພື້ນທີ່",
+ "eventAlarm": "ລາຍການແຈ້ງເຕືອນ",
+ "alarm": "ແຈ້ງເຕືອນ",
+ "alarmSos": "ແຈ້ງເຕືອນ SOS",
+ "alarmVibration": "ແຈ້ງເຕືອນແບບສັ່ນ",
+ "alarmMovement": "ແຈ້ງເຕືອນມີການເຄື່ອນທີ່",
+ "alarmOverspeed": "ແຈ້ງເຕືອນຄວາມໄວສູງເກີນກຳນົດ",
+ "alarmFallDown": "ແຈ້ງເຕືອນການຕົກ",
+ "alarmLowBattery": "ແຈ້ງເຕືອນແບັດເຕີລີ້ອ່ອນ",
+ "alarmMotion": "ແຈ້ງເຕື່ອນການເຄື່ອນທີ່",
+ "alarmFault": "ແຈ້ງເຕື່ອນຜິດພາດ",
+ "notificationType": "ຊະນິດການແຈ້ງເຕືອນ",
+ "notificationWeb": "ສົ່ງທາງເວັບ",
+ "notificationMail": "ສົ່ງທາງເມວ"
+} \ No newline at end of file
diff --git a/web/l10n/lt.json b/web/l10n/lt.json
new file mode 100644
index 000000000..4ea7b5847
--- /dev/null
+++ b/web/l10n/lt.json
@@ -0,0 +1,136 @@
+{
+ "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",
+ "sharedKn": "mazgai",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Valanda(-os)",
+ "sharedMinute": "Minutė(-es)",
+ "sharedSecond": "Sekundė(-es)",
+ "sharedName": "Pavadinimas",
+ "sharedDescription": "Description",
+ "sharedSearch": "Paieška",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Klaida",
+ "errorUnknown": "Nenumatyta klaida",
+ "errorConnection": "Ryšio klaida",
+ "userEmail": "Vartotojo vardas",
+ "userPassword": "Slaptažodis",
+ "userAdmin": "Administratorius",
+ "userRemember": "Remember",
+ "loginTitle": "Prisijungimas",
+ "loginLanguage": "Kalba",
+ "loginRegister": "Registruotis",
+ "loginLogin": "Prisijungti",
+ "loginFailed": "Neteisingas el.paštas ir/ar slaptažodis",
+ "loginCreated": "Registracija sėkminga",
+ "loginLogout": "Atsijungti",
+ "devicesAndState": "Prietaisai ir Statusas",
+ "deviceDialog": "Prietaisas",
+ "deviceTitle": "Prietaisai",
+ "deviceIdentifier": "Identifikacinis kodas",
+ "deviceLastUpdate": "Naujausias atnaujinimas",
+ "deviceCommand": "Komanda",
+ "deviceFollow": "Sekti",
+ "groupDialog": "Grupė",
+ "groupParent": "Grupė",
+ "groupNoGroup": "Nenurodyta grupė",
+ "settingsTitle": "Nustatymai",
+ "settingsUser": "Paskyra",
+ "settingsGroups": "Grupės",
+ "settingsServer": "Serveris",
+ "settingsUsers": "Vartotojai",
+ "settingsDistanceUnit": "Atstumas",
+ "settingsSpeedUnit": "Greitis",
+ "settingsTwelveHourFormat": "12-val formatas",
+ "reportTitle": "Ataskaita",
+ "reportDevice": "Prietaisas",
+ "reportFrom": "Nuo",
+ "reportTo": "Iki",
+ "reportShow": "Rodyti",
+ "reportClear": "Valyti",
+ "positionFixTime": "Laikas",
+ "positionValid": "Galiojantis",
+ "positionLatitude": "Platuma",
+ "positionLongitude": "Ilguma",
+ "positionAltitude": "Aukštis",
+ "positionSpeed": "Greitis",
+ "positionCourse": "Eiga",
+ "positionAddress": "Adresas",
+ "positionProtocol": "Protokolas",
+ "serverTitle": "Serverio nustatymai",
+ "serverZoom": "Priartinimas",
+ "serverRegistration": "Registracija",
+ "serverReadonly": "Skaitymo",
+ "mapTitle": "Žemėlapis",
+ "mapLayer": "Žemėlapio sluoksnis",
+ "mapCustom": "Pasirinktinis Žemėlapis",
+ "mapOsm": "Open Street žemėlapis",
+ "mapBingKey": "Bing Maps raktas",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Būklė",
+ "stateName": "Parametras",
+ "stateValue": "Reikšmė",
+ "commandTitle": "Komanda",
+ "commandSend": "Siųsti",
+ "commandType": "Tipas",
+ "commandSent": "Komanda buvo išsiųsta",
+ "commandPositionPeriodic": "Periodinės ataskaitos",
+ "commandPositionStop": "Stabdyti ataskaitas",
+ "commandEngineStop": "Stabdyti variklį",
+ "commandEngineResume": "Paleisti variklį",
+ "commandFrequency": "Dažnis",
+ "commandUnit": "Vienetai",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ml.json b/web/l10n/ml.json
new file mode 100644
index 000000000..eaf288e9f
--- /dev/null
+++ b/web/l10n/ml.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "ലോഡുചെയ്യുന്നു ..",
+ "sharedSave": "രക്ഷിക്കും",
+ "sharedCancel": "റദ്ദാക്കുക",
+ "sharedAdd": "ചേര്‍ക്കുക",
+ "sharedEdit": "തിരുത്തുക",
+ "sharedRemove": "നീക്കം ചെയ്യുക",
+ "sharedRemoveConfirm": "വിഷയം നീക്കം ചെയ്യുക",
+ "sharedKm": "കിലോമീറ്റർ",
+ "sharedMi": "നാഴിക",
+ "sharedKn": "കുരുക്ക്",
+ "sharedKmh": "കിലോമീറ്റർ / മണിക്കൂർ",
+ "sharedMph": "മണിക്കൂറിൽ മൈൽ",
+ "sharedHour": "മണിക്കൂര്",
+ "sharedMinute": "മിനിറ്റ്",
+ "sharedSecond": "സെക്കന്റ്",
+ "sharedName": "പേര്\n",
+ "sharedDescription": "വിവരണം",
+ "sharedSearch": "തിരയൽ",
+ "sharedGeofence": "എർത്ത് വേലി",
+ "sharedGeofences": "ശില്പ്പശാല എർത്ത്",
+ "sharedNotifications": "അറിയിപ്പുകൾ",
+ "sharedAttributes": "ഗുണവിശേഷങ്ങൾ",
+ "sharedAttribute": "ഗുണവിശേഷങ്ങ",
+ "sharedArea": "പ്രദേശം",
+ "sharedMute": "Mute",
+ "errorTitle": "പിശക്‌",
+ "errorUnknown": "അജ്ഞാത പിശക്",
+ "errorConnection": "കണക്ഷൻ പിശക്",
+ "userEmail": "ഇമെയിൽ",
+ "userPassword": "രഹസ്യ കോഡ്‌",
+ "userAdmin": "നിർവാജി ",
+ "userRemember": "Remember",
+ "loginTitle": "അകത്തു പ്രവേശിക്കുക",
+ "loginLanguage": "ഭാഷ",
+ "loginRegister": "രെജിസ്റ്റർ ",
+ "loginLogin": "അകത്തു പ്രവേശിക്കുക",
+ "loginFailed": "തെറ്റായ ഇമെയിൽ വിലാസവും പാസ്വേഡും",
+ "loginCreated": "പുതിയ ഉപയോക്താവ് രജിസ്റ്റർ ചെയ്തു",
+ "loginLogout": "പുറത്തുകടക്കുക",
+ "devicesAndState": "സാധനങ്ങളിന് നില ",
+ "deviceDialog": "ഉപകരണം",
+ "deviceTitle": "സാധനങ്ങളിന് ",
+ "deviceIdentifier": "ഐഡന്റിഫയർ",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Command",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Settings",
+ "settingsUser": "Account",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Users",
+ "settingsDistanceUnit": "Distance",
+ "settingsSpeedUnit": "വേഗം",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Reports",
+ "reportDevice": "ഉപകരണം",
+ "reportFrom": "From",
+ "reportTo": "To",
+ "reportShow": "Show",
+ "reportClear": "Clear",
+ "positionFixTime": "സമയം",
+ "positionValid": "Valid",
+ "positionLatitude": "അക്ഷാംശം",
+ "positionLongitude": "രേഖാംശം",
+ "positionAltitude": "Altitude",
+ "positionSpeed": "വേഗം",
+ "positionCourse": "Course",
+ "positionAddress": "Address",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server Settings",
+ "serverZoom": "വലുതാക്കിയോ ചെറുതാക്കിയോ കാണിക്കുക",
+ "serverRegistration": "രജിസ്ട്രേഷൻ",
+ "serverReadonly": "Readonly",
+ "mapTitle": "ഭൂപടം",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Custom Map",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "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",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ms.json b/web/l10n/ms.json
new file mode 100644
index 000000000..ecb769e9a
--- /dev/null
+++ b/web/l10n/ms.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Memuatkan...",
+ "sharedSave": "Simpan",
+ "sharedCancel": "Batal",
+ "sharedAdd": "Tambah",
+ "sharedEdit": "Ubah",
+ "sharedRemove": "Hapus",
+ "sharedRemoveConfirm": "Hapuskan item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Jam",
+ "sharedMinute": "Minit",
+ "sharedSecond": "Saat",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Ralat",
+ "errorUnknown": "Ralat tidak diketahui",
+ "errorConnection": "Ralat penyambungan",
+ "userEmail": "Emel",
+ "userPassword": "Katalaluan",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Log masuk",
+ "loginLanguage": "Bahasa",
+ "loginRegister": "Daftar",
+ "loginLogin": "Log masuk",
+ "loginFailed": "Kesalahan emel atau katalaluan",
+ "loginCreated": "Pengguna baru telah didaftarkan",
+ "loginLogout": "Keluar",
+ "devicesAndState": "Peranti dan State",
+ "deviceDialog": "Peranti",
+ "deviceTitle": "Peranti",
+ "deviceIdentifier": "IMEI/ID",
+ "deviceLastUpdate": "Kemaskini Terakhir",
+ "deviceCommand": "Arahan",
+ "deviceFollow": "Ikut",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Tetapan",
+ "settingsUser": "Akaun",
+ "settingsGroups": "Groups",
+ "settingsServer": "Server",
+ "settingsUsers": "Pengguna",
+ "settingsDistanceUnit": "Jarak",
+ "settingsSpeedUnit": "Kelajuan",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Laporan",
+ "reportDevice": "Peranti",
+ "reportFrom": "Daripada",
+ "reportTo": "Ke",
+ "reportShow": "Papar",
+ "reportClear": "Kosongkan",
+ "positionFixTime": "Masa",
+ "positionValid": "Sah",
+ "positionLatitude": "Latitud",
+ "positionLongitude": "Longitud",
+ "positionAltitude": "Altitud",
+ "positionSpeed": "Kelajuan",
+ "positionCourse": "Course",
+ "positionAddress": "Alamat",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Tetapan Server",
+ "serverZoom": "Besarkan",
+ "serverRegistration": "Pendaftaran",
+ "serverReadonly": "Baca Sahaja",
+ "mapTitle": "Peta",
+ "mapLayer": "Map Layer",
+ "mapCustom": "Peta Lain",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Negeri",
+ "stateName": "Atribut",
+ "stateValue": "Nilai",
+ "commandTitle": "Arahan",
+ "commandSend": "Hantar",
+ "commandType": "Jenis",
+ "commandSent": "Arahan telah dihantar",
+ "commandPositionPeriodic": "Laporan Berkala",
+ "commandPositionStop": "Hentikan Laporan",
+ "commandEngineStop": "Matikan Enjin",
+ "commandEngineResume": "Hidupkan Enjin",
+ "commandFrequency": "Frekuensi",
+ "commandUnit": "Unit",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/nb.json b/web/l10n/nb.json
new file mode 100644
index 000000000..db6273d96
--- /dev/null
+++ b/web/l10n/nb.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Laster...",
+ "sharedSave": "Lagre",
+ "sharedCancel": "Avbryt",
+ "sharedAdd": "Legg til",
+ "sharedEdit": "Endre",
+ "sharedRemove": "Fjern",
+ "sharedRemoveConfirm": "Fjern element?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/t",
+ "sharedMph": "mph",
+ "sharedHour": "Time",
+ "sharedMinute": "Minutt",
+ "sharedSecond": "Sekund",
+ "sharedName": "Navn",
+ "sharedDescription": "Beskrivelse",
+ "sharedSearch": "Søk",
+ "sharedGeofence": "geo-gjerde",
+ "sharedGeofences": "Geo-gjerder",
+ "sharedNotifications": "Varsel",
+ "sharedAttributes": "Egenskaper",
+ "sharedAttribute": "Egenskap",
+ "sharedArea": "Område",
+ "sharedMute": "Mute",
+ "errorTitle": "Feil",
+ "errorUnknown": "Ukjent feil",
+ "errorConnection": "Forbindelse feilet",
+ "userEmail": "E-post",
+ "userPassword": "Passord",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Logg inn",
+ "loginLanguage": "Språk",
+ "loginRegister": "Registrer",
+ "loginLogin": "Logg inn",
+ "loginFailed": "Feil e-post eller passord",
+ "loginCreated": "Ny bruker har blitt registrert",
+ "loginLogout": "Logg ut",
+ "devicesAndState": "Enheter og status",
+ "deviceDialog": "Enhet",
+ "deviceTitle": "Enheter",
+ "deviceIdentifier": "Identifikator",
+ "deviceLastUpdate": "Sist oppdatert",
+ "deviceCommand": "Kommando",
+ "deviceFollow": "Følg",
+ "groupDialog": "Gruppe",
+ "groupParent": "Gruppe",
+ "groupNoGroup": "Ingen gruppe",
+ "settingsTitle": "Innstillinger",
+ "settingsUser": "Konto",
+ "settingsGroups": "Grupper",
+ "settingsServer": "Server",
+ "settingsUsers": "Brukere",
+ "settingsDistanceUnit": "Avstand",
+ "settingsSpeedUnit": "Hastighet",
+ "settingsTwelveHourFormat": "Tolvtimersformat",
+ "reportTitle": "Rapporter",
+ "reportDevice": "Enhet",
+ "reportFrom": "Fra",
+ "reportTo": "Til",
+ "reportShow": "Vis",
+ "reportClear": "Nullstill",
+ "positionFixTime": "Tid",
+ "positionValid": "Gyldig",
+ "positionLatitude": "Breddegrad",
+ "positionLongitude": "Lengdegrad",
+ "positionAltitude": "Høyde",
+ "positionSpeed": "Hastighet",
+ "positionCourse": "Retning",
+ "positionAddress": "Adresse",
+ "positionProtocol": "Protokoll",
+ "serverTitle": "Serverinnstillinger",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registering",
+ "serverReadonly": "Skrivebeskyttet",
+ "mapTitle": "Kart",
+ "mapLayer": "Kartlag",
+ "mapCustom": "Egendefinert kart",
+ "mapOsm": "Open Street-kart",
+ "mapBingKey": "Bing Maps-nøkkel",
+ "mapBingRoad": "Bing Maps-veg",
+ "mapBingAerial": "Bing Maps-flyfoto",
+ "mapShapePolygon": "Mangekant",
+ "mapShapeCircle": "Sirkel",
+ "stateTitle": "Status",
+ "stateName": "Egenskap",
+ "stateValue": "Verdi",
+ "commandTitle": "Kommando",
+ "commandSend": "Send",
+ "commandType": "Type",
+ "commandSent": "Kommando har blitt sendt",
+ "commandPositionPeriodic": "Periodisk rapportering",
+ "commandPositionStop": "Stopp rapportering",
+ "commandEngineStop": "Stopp motor",
+ "commandEngineResume": "Fortsett motor",
+ "commandFrequency": "Frekvens",
+ "commandUnit": "Enhet",
+ "commandCustom": "Egendefinert kommando",
+ "commandPositionSingle": "Enkel-rapportering",
+ "commandAlarmArm": "Slå alarm på",
+ "commandAlarmDisarm": "Slå alarm av",
+ "commandSetTimezone": "Sett tidssone",
+ "commandRequestPhoto": "Be om foto",
+ "commandRebootDevice": "Omstart enhet",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Sett SOS-nummer",
+ "commandSilenceTime": "Sett stilletid",
+ "commandSetPhonebook": "Sett telefonbok",
+ "commandVoiceMessage": "Talemelding",
+ "commandOutputControl": "Utgangkontroll",
+ "commandAlarmSpeed": "Fartsgrensealarm",
+ "commandDeviceIdentification": "Enhetsidentifikasjon",
+ "eventDeviceOnline": "Enhet er tilkoblet",
+ "eventDeviceOffline": "Enhet er frakoblet",
+ "eventDeviceMoving": "Enheten beveger seg",
+ "eventDeviceStopped": "Enheten har stoppet",
+ "eventDeviceOverspeed": "Enheten bryter fartsgrensen",
+ "eventCommandResult": "Kommandoresultat",
+ "eventGeofenceEnter": "Enheten har kommet inn i geo-gjerde",
+ "eventGeofenceExit": "Enheten har forlatt geo-gjerde",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Varseltype",
+ "notificationWeb": "Send via web",
+ "notificationMail": "Send via e-post"
+} \ No newline at end of file
diff --git a/web/l10n/ne.json b/web/l10n/ne.json
new file mode 100644
index 000000000..c36b9a6fb
--- /dev/null
+++ b/web/l10n/ne.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "लोड हुँदै ",
+ "sharedSave": "सुरक्षित गर्ने ",
+ "sharedCancel": "रद्ध गर्ने ",
+ "sharedAdd": "थप्ने",
+ "sharedEdit": "सच्याउने",
+ "sharedRemove": "हटाउने ",
+ "sharedRemoveConfirm": "हटाउने हो?",
+ "sharedKm": "कि मि ",
+ "sharedMi": "माइल",
+ "sharedKn": "kn",
+ "sharedKmh": "कि मि /घण्टा ",
+ "sharedMph": "माइल /घण्टा ",
+ "sharedHour": "घण्टा ",
+ "sharedMinute": "मिनेट ",
+ "sharedSecond": "सेकेन्ड ",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "त्रुटी",
+ "errorUnknown": "अज्ञात त्रुटी ",
+ "errorConnection": "जडान मा त्रुटी भयो ",
+ "userEmail": "इ मेल ",
+ "userPassword": "गोप्य शब्द ",
+ "userAdmin": "ब्यबस्थापक",
+ "userRemember": "Remember",
+ "loginTitle": "लगिन गर्ने ",
+ "loginLanguage": "भाषा ",
+ "loginRegister": "दर्ता गर्ने",
+ "loginLogin": "भित्रिने ",
+ "loginFailed": "इ मेल वा गोप्य शब्द गलत भयो ",
+ "loginCreated": "नया प्रयोगकर्ता दर्ता भयो ",
+ "loginLogout": "बाहिरिने ",
+ "devicesAndState": "यन्त्रहरू तथा अवस्था ",
+ "deviceDialog": "यन्त्र",
+ "deviceTitle": "यन्त्रहरू ",
+ "deviceIdentifier": "परिचायक ",
+ "deviceLastUpdate": "अन्तिम अपडेट ",
+ "deviceCommand": "आदेश ",
+ "deviceFollow": "पिछा गर्ने ",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "सेटिंग ",
+ "settingsUser": "खाता ",
+ "settingsGroups": "Groups",
+ "settingsServer": "सर्भर ",
+ "settingsUsers": "प्रयोगकर्ताहरु ",
+ "settingsDistanceUnit": "दुरी ",
+ "settingsSpeedUnit": "गति ",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "प्रतिबेदनहरु ",
+ "reportDevice": "यन्त्र ",
+ "reportFrom": "बाट ",
+ "reportTo": "सम्म ",
+ "reportShow": "देखाउने ",
+ "reportClear": "सफा गर्ने ",
+ "positionFixTime": "समय ",
+ "positionValid": "ठिक",
+ "positionLatitude": "अक्षांश",
+ "positionLongitude": "देशान्तर ",
+ "positionAltitude": "उचाई ",
+ "positionSpeed": "गति ",
+ "positionCourse": "दिशा ",
+ "positionAddress": "ठेगाना ",
+ "positionProtocol": "प्रोटोकल ",
+ "serverTitle": "सर्भर सेटिंग",
+ "serverZoom": "ठुलो बनाउने ",
+ "serverRegistration": "दर्ता ",
+ "serverReadonly": "पढ्ने मात्रै ",
+ "mapTitle": "नक्शा ",
+ "mapLayer": "नक्शा को तह ",
+ "mapCustom": "अनुकुल नक्शा ",
+ "mapOsm": "ओपन स्ट्रिट नक्शा ",
+ "mapBingKey": "बिंग नक्शाको चाबी (कि) ",
+ "mapBingRoad": "बिंग नक्शा (सडक)",
+ "mapBingAerial": "बिंग नक्शा (एरियल)",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "अवस्था ",
+ "stateName": "गुण ",
+ "stateValue": "मूल्य ",
+ "commandTitle": "आदेश ",
+ "commandSend": "पठाउने ",
+ "commandType": "प्रकार ",
+ "commandSent": "आदेश पठाईएको छ ",
+ "commandPositionPeriodic": "आवधिक प्रतिबेदन ",
+ "commandPositionStop": "प्रतिबेदन बन्द गर्ने ",
+ "commandEngineStop": "इन्जिन बन्द गर्ने ",
+ "commandEngineResume": "इन्जिन खोल्ने ",
+ "commandFrequency": "आव्रती ",
+ "commandUnit": "इकाई ",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/nl.json b/web/l10n/nl.json
new file mode 100644
index 000000000..85e2071ff
--- /dev/null
+++ b/web/l10n/nl.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Laden...",
+ "sharedSave": "Bewaren",
+ "sharedCancel": "Annuleren",
+ "sharedAdd": "Toevoegen",
+ "sharedEdit": "Bewerken",
+ "sharedRemove": "Verwijderen",
+ "sharedRemoveConfirm": "Item Verwijderen?",
+ "sharedKm": "km",
+ "sharedMi": "mijlen",
+ "sharedKn": "knopen",
+ "sharedKmh": "km/h",
+ "sharedMph": "mijlen per uur",
+ "sharedHour": "Uur",
+ "sharedMinute": "Minuut",
+ "sharedSecond": "Seconde",
+ "sharedName": "Naam",
+ "sharedDescription": "Omschrijving",
+ "sharedSearch": "Zoeken",
+ "sharedGeofence": "Geografisch gebied",
+ "sharedGeofences": "Gegrafische gebieden",
+ "sharedNotifications": "Melding",
+ "sharedAttributes": "Attributen",
+ "sharedAttribute": "Attribuut",
+ "sharedArea": "Gebied",
+ "sharedMute": "Mute",
+ "errorTitle": "Fout",
+ "errorUnknown": "Onbekende fout",
+ "errorConnection": "Verbindingsfout",
+ "userEmail": "Email",
+ "userPassword": "Wachtwoord",
+ "userAdmin": "Administrator",
+ "userRemember": "Remember",
+ "loginTitle": "Inloggen",
+ "loginLanguage": "Taal",
+ "loginRegister": "Registreren",
+ "loginLogin": "Inloggen",
+ "loginFailed": "Onjuiste emailadres of wachtwoord",
+ "loginCreated": "Nieuwe gebruiker werd geregistreerd",
+ "loginLogout": "Uitloggen",
+ "devicesAndState": "Apparaat en Status",
+ "deviceDialog": "Apparaat",
+ "deviceTitle": "Apparaten",
+ "deviceIdentifier": "Identifier",
+ "deviceLastUpdate": "Laatste Update",
+ "deviceCommand": "Commando",
+ "deviceFollow": "Volg",
+ "groupDialog": "Groep",
+ "groupParent": "Groep",
+ "groupNoGroup": "Geen groep",
+ "settingsTitle": "Instellingen",
+ "settingsUser": "Account",
+ "settingsGroups": "Groepen",
+ "settingsServer": "Server",
+ "settingsUsers": "Gebruikers",
+ "settingsDistanceUnit": "Afstand",
+ "settingsSpeedUnit": "Snelheid",
+ "settingsTwelveHourFormat": "12-uur indeling",
+ "reportTitle": "Rapportages",
+ "reportDevice": "Apparaat",
+ "reportFrom": "Van",
+ "reportTo": "Naar",
+ "reportShow": "Laat zien",
+ "reportClear": "Leegmaken",
+ "positionFixTime": "Tijd",
+ "positionValid": "Geldig",
+ "positionLatitude": "Breedtegraad",
+ "positionLongitude": "Lengtegraad",
+ "positionAltitude": "hoogte",
+ "positionSpeed": "Snelheid",
+ "positionCourse": "Koers",
+ "positionAddress": "Adres",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Server Instellingen",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registratie",
+ "serverReadonly": "Alleen lezen",
+ "mapTitle": "Kaart",
+ "mapLayer": "Kaart laag",
+ "mapCustom": "Aangepaste Map",
+ "mapOsm": "OpenStreetMap",
+ "mapBingKey": "Bing Maps sleutel",
+ "mapBingRoad": "Bing Maps Wegen",
+ "mapBingAerial": "Bing Maps Luchtfoto",
+ "mapShapePolygon": "Polygoon",
+ "mapShapeCircle": "Cirkel",
+ "stateTitle": "Status",
+ "stateName": "Parameter",
+ "stateValue": "Waarde",
+ "commandTitle": "Commando",
+ "commandSend": "Verstuur",
+ "commandType": "Type",
+ "commandSent": "Commando Verstuurd",
+ "commandPositionPeriodic": "Periodiek Rapporteren",
+ "commandPositionStop": "Stop Rapporteren",
+ "commandEngineStop": "Motor Stoppen",
+ "commandEngineResume": "Motor Hervatten",
+ "commandFrequency": "Frequentie",
+ "commandUnit": "Eenheid",
+ "commandCustom": "Custom commando",
+ "commandPositionSingle": "Enkel commando",
+ "commandAlarmArm": "Schakel alarm in",
+ "commandAlarmDisarm": "Schakel alarm uit",
+ "commandSetTimezone": "Stel tijdzone in",
+ "commandRequestPhoto": "Vraag foto",
+ "commandRebootDevice": "Herstart apparaat",
+ "commandSendSms": "Stuur SMS",
+ "commandSosNumber": "Bewerk SOS nummer in",
+ "commandSilenceTime": "Bewerk stille tijd",
+ "commandSetPhonebook": "Bewerk telefoonboek",
+ "commandVoiceMessage": "Spraak bericht",
+ "commandOutputControl": "Output control",
+ "commandAlarmSpeed": "Hoge snelheid alarm",
+ "commandDeviceIdentification": "Apparaat indentificeren",
+ "eventDeviceOnline": "Apparaat is online",
+ "eventDeviceOffline": "Apparaat is offline",
+ "eventDeviceMoving": "Apparaat beweegt",
+ "eventDeviceStopped": "Apparaat is gestopt",
+ "eventDeviceOverspeed": "Apparaat overschrijdt snelheid",
+ "eventCommandResult": "Commando resultaat",
+ "eventGeofenceEnter": "Appraat is binnen geografisch gebied",
+ "eventGeofenceExit": "Apparaat verlaat geografisch gebied",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type notificatie",
+ "notificationWeb": "Stuur via web",
+ "notificationMail": "Stuur via mail"
+} \ No newline at end of file
diff --git a/web/l10n/nn.json b/web/l10n/nn.json
new file mode 100644
index 000000000..c79ed1546
--- /dev/null
+++ b/web/l10n/nn.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Lastar...",
+ "sharedSave": "Lagre",
+ "sharedCancel": "Avbryt",
+ "sharedAdd": "Legg til",
+ "sharedEdit": "Endre",
+ "sharedRemove": "Fjern",
+ "sharedRemoveConfirm": "Fjern element?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/t",
+ "sharedMph": "mph",
+ "sharedHour": "Time",
+ "sharedMinute": "Minutt",
+ "sharedSecond": "Sekund",
+ "sharedName": "Namn",
+ "sharedDescription": "Beskriving",
+ "sharedSearch": "Søk",
+ "sharedGeofence": "Geo-gjerde",
+ "sharedGeofences": "Geo-gjerde",
+ "sharedNotifications": "Varsel",
+ "sharedAttributes": "Eigenskapar",
+ "sharedAttribute": "Eigenskap",
+ "sharedArea": "Område",
+ "sharedMute": "Mute",
+ "errorTitle": "Feil",
+ "errorUnknown": "Ukjent feil",
+ "errorConnection": "Forbindelse feila",
+ "userEmail": "E-post",
+ "userPassword": "Passord",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Logg inn",
+ "loginLanguage": "Språk",
+ "loginRegister": "Registrer",
+ "loginLogin": "Logg inn",
+ "loginFailed": "Feil e-post eller passord",
+ "loginCreated": "Ny brukar har blitt registrert",
+ "loginLogout": "Logg ut",
+ "devicesAndState": "Einingar og status",
+ "deviceDialog": "Eining",
+ "deviceTitle": "Einingar",
+ "deviceIdentifier": "Identifikator",
+ "deviceLastUpdate": "Sist oppdatert",
+ "deviceCommand": "Kommando",
+ "deviceFollow": "Følj",
+ "groupDialog": "Gruppe",
+ "groupParent": "Gruppe",
+ "groupNoGroup": "Inga gruppe",
+ "settingsTitle": "Innstillingar",
+ "settingsUser": "Konto",
+ "settingsGroups": "Gruppar",
+ "settingsServer": "Tenar",
+ "settingsUsers": "Brukarar",
+ "settingsDistanceUnit": "Avstand",
+ "settingsSpeedUnit": "Hastigheit",
+ "settingsTwelveHourFormat": "Tolvtimersformat",
+ "reportTitle": "Rapportar",
+ "reportDevice": "Eining",
+ "reportFrom": "Frå",
+ "reportTo": "Til",
+ "reportShow": "Syn",
+ "reportClear": "Nullstill",
+ "positionFixTime": "Tid",
+ "positionValid": "Gyldig",
+ "positionLatitude": "Breddegrad",
+ "positionLongitude": "Lengdegrad",
+ "positionAltitude": "Høgde",
+ "positionSpeed": "Hastigheit",
+ "positionCourse": "Retning",
+ "positionAddress": "Adresse",
+ "positionProtocol": "Protokoll",
+ "serverTitle": "Tenarinnstillingar",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Registering",
+ "serverReadonly": "Skrivebeskytta",
+ "mapTitle": "Kart",
+ "mapLayer": "Kartlag",
+ "mapCustom": "Eigedefinert kart",
+ "mapOsm": "Open Street-kart",
+ "mapBingKey": "Bing Maps-nøkkel",
+ "mapBingRoad": "Bing Maps-veg",
+ "mapBingAerial": "Bing Maps-flyfoto",
+ "mapShapePolygon": "Mangekant",
+ "mapShapeCircle": "Sirkel",
+ "stateTitle": "Status",
+ "stateName": "Eigenskap",
+ "stateValue": "Verdi",
+ "commandTitle": "Kommando",
+ "commandSend": "Send",
+ "commandType": "Type",
+ "commandSent": "Kommando har blitt send",
+ "commandPositionPeriodic": "Periodisk rapportering",
+ "commandPositionStop": "Stopp rapportering",
+ "commandEngineStop": "Stopp motor",
+ "commandEngineResume": "Fortsett motor",
+ "commandFrequency": "Frekvens",
+ "commandUnit": "Eining",
+ "commandCustom": "Eigendefinert kommando",
+ "commandPositionSingle": "Enkel-rapportering",
+ "commandAlarmArm": "Slå alarm på",
+ "commandAlarmDisarm": "Slå alarm av",
+ "commandSetTimezone": "Sett opp tidssone",
+ "commandRequestPhoto": "Be om foto",
+ "commandRebootDevice": "Omstart eining",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SMS-nummer",
+ "commandSilenceTime": "Sett stilletid",
+ "commandSetPhonebook": "Sett telefonkatalog",
+ "commandVoiceMessage": "Talemelding",
+ "commandOutputControl": "Utgangkontroll",
+ "commandAlarmSpeed": "Fartsgrensealarm",
+ "commandDeviceIdentification": "Einingsidentifikasjon",
+ "eventDeviceOnline": "Eining er tilkopla",
+ "eventDeviceOffline": "Eininga er fråkopla",
+ "eventDeviceMoving": "Eininga rører seg",
+ "eventDeviceStopped": "Eininga er stoppa",
+ "eventDeviceOverspeed": "Eininga bryt fartsgrensa",
+ "eventCommandResult": "Kommandoresultat",
+ "eventGeofenceEnter": "Eininga har komme inn i geo-gjerde",
+ "eventGeofenceExit": "Eininga har forlatt geo-gjerde",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Varseltype",
+ "notificationWeb": "Send via web",
+ "notificationMail": "Send via e-post"
+} \ No newline at end of file
diff --git a/web/l10n/pl.json b/web/l10n/pl.json
new file mode 100644
index 000000000..742103c4f
--- /dev/null
+++ b/web/l10n/pl.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Wczytywanie...",
+ "sharedSave": "Zapisz",
+ "sharedCancel": "Anuluj",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Edytuj",
+ "sharedRemove": "Usuń",
+ "sharedRemoveConfirm": "Usuń obiekt?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Godzina",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Bląd",
+ "errorUnknown": "Nieznany błąd",
+ "errorConnection": "Błąd przy połączeniu",
+ "userEmail": "Email",
+ "userPassword": "Hasło",
+ "userAdmin": "Administrator",
+ "userRemember": "Remember",
+ "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",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Urządzenie",
+ "deviceTitle": "Urządzenia",
+ "deviceIdentifier": "Identyfikator",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Zdarzenie",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Ustawienia",
+ "settingsUser": "Konto",
+ "settingsGroups": "Groups",
+ "settingsServer": "Serwer",
+ "settingsUsers": "Użytkownicy",
+ "settingsDistanceUnit": "Dystans",
+ "settingsSpeedUnit": "Prędkość",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Mapa",
+ "mapLayer": "Mapa",
+ "mapCustom": "Własna mapa",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Lokalizacja",
+ "stateName": "Właściwości",
+ "stateValue": "Wartość",
+ "commandTitle": "Zdarzenie",
+ "commandSend": "Wyślij",
+ "commandType": "Typ",
+ "commandSent": "Komenda została wysłana",
+ "commandPositionPeriodic": "Pozycja - Fix",
+ "commandPositionStop": "Pozycja - Stop",
+ "commandEngineStop": "Silnik - Stop",
+ "commandEngineResume": "Silnik - Praca",
+ "commandFrequency": "Częstotliwość",
+ "commandUnit": "Jednostka",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/pt.json b/web/l10n/pt.json
new file mode 100644
index 000000000..3492bdc5c
--- /dev/null
+++ b/web/l10n/pt.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Carregando...",
+ "sharedSave": "Salvar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Adicionar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Remover",
+ "sharedRemoveConfirm": "Remover item?",
+ "sharedKm": "Km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "Km/h",
+ "sharedMph": "Mph",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundo",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Erro",
+ "errorUnknown": "Erro desconhecido",
+ "errorConnection": "Erro de conexão",
+ "userEmail": "E-mail",
+ "userPassword": "Senha",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "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",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Devices",
+ "deviceIdentifier": "Identificador",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Comando",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Configurações",
+ "settingsUser": "Conta",
+ "settingsGroups": "Groups",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuário",
+ "settingsDistanceUnit": "Distância",
+ "settingsSpeedUnit": "Velocidade",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Mapa",
+ "mapLayer": "Camada Mapa",
+ "mapCustom": "Mapa personalizado",
+ "mapOsm": "Open Street Mapa",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Mapas Estrada",
+ "mapBingAerial": "Bing Mapas Aérea",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Estado",
+ "stateName": "Parâmetro",
+ "stateValue": "Valor",
+ "commandTitle": "Comando",
+ "commandSend": "Enviar",
+ "commandType": "Tipo",
+ "commandSent": "Comando foi enviado",
+ "commandPositionPeriodic": "Posição Tempo",
+ "commandPositionStop": "Parar Posição",
+ "commandEngineStop": "Bloqueio Veículo",
+ "commandEngineResume": "Desbloqueio Veículo",
+ "commandFrequency": "Frequência",
+ "commandUnit": "Unidade",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ 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..9d613dd1c
--- /dev/null
+++ b/web/l10n/pt_BR.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Carregando...",
+ "sharedSave": "Gravar",
+ "sharedCancel": "Cancelar",
+ "sharedAdd": "Adicionar",
+ "sharedEdit": "Editar",
+ "sharedRemove": "Remover",
+ "sharedRemoveConfirm": "Remover item?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hora",
+ "sharedMinute": "Minuto",
+ "sharedSecond": "Segundo",
+ "sharedName": "Nome",
+ "sharedDescription": "Descrição",
+ "sharedSearch": "Busca",
+ "sharedGeofence": "Geocerca",
+ "sharedGeofences": "Geocercas",
+ "sharedNotifications": "Notificações",
+ "sharedAttributes": "Atributos",
+ "sharedAttribute": "Atributo",
+ "sharedArea": "Área",
+ "sharedMute": "Mudo",
+ "errorTitle": "Erro",
+ "errorUnknown": "Erro desconhecido",
+ "errorConnection": "Erro de conexão",
+ "userEmail": "Email",
+ "userPassword": "Senha",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "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",
+ "devicesAndState": "Dispositivo e Estado",
+ "deviceDialog": "Dispositivo",
+ "deviceTitle": "Dispositivos",
+ "deviceIdentifier": "Identificador",
+ "deviceLastUpdate": "Última Atualização",
+ "deviceCommand": "Comando",
+ "deviceFollow": "Seguir",
+ "groupDialog": "Grupo",
+ "groupParent": "Grupo",
+ "groupNoGroup": "Sem Grupo",
+ "settingsTitle": "Configurações",
+ "settingsUser": "Conta",
+ "settingsGroups": "Grupos",
+ "settingsServer": "Servidor",
+ "settingsUsers": "Usuários",
+ "settingsDistanceUnit": "Distância",
+ "settingsSpeedUnit": "Velocidade",
+ "settingsTwelveHourFormat": "Formato de 12 Horas",
+ "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",
+ "serverReadonly": "Somente leitura",
+ "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",
+ "mapShapePolygon": "Polígono",
+ "mapShapeCircle": "Círculo",
+ "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": "Desligar Motor",
+ "commandEngineResume": "Religar Motor",
+ "commandFrequency": "Frequencia",
+ "commandUnit": "Unidade",
+ "commandCustom": "Comando personalizado",
+ "commandPositionSingle": "Relatório único",
+ "commandAlarmArm": "Ativar Alarme",
+ "commandAlarmDisarm": "Desativar Alarme",
+ "commandSetTimezone": "Definir fuso horário",
+ "commandRequestPhoto": "Pegar foto",
+ "commandRebootDevice": "Reiniciar dispositivo",
+ "commandSendSms": "Enviar SMS",
+ "commandSosNumber": "Definir numero SOS",
+ "commandSilenceTime": "Silencioso",
+ "commandSetPhonebook": "Definir lista telefônica",
+ "commandVoiceMessage": "Mensagem de voz",
+ "commandOutputControl": "Controle de saída",
+ "commandAlarmSpeed": "Alarme de excesso de velocidade",
+ "commandDeviceIdentification": "Identificação do dispositivo",
+ "eventDeviceOnline": "Dispositivo está on-line",
+ "eventDeviceOffline": "Dispositivo está offline",
+ "eventDeviceMoving": "Dispositivo está se movendo",
+ "eventDeviceStopped": "Dispositivo está parado",
+ "eventDeviceOverspeed": "Dispositivo excede a velocidade",
+ "eventCommandResult": "Resultado do comando",
+ "eventGeofenceEnter": "Dispositivo entrou geocerca",
+ "eventGeofenceExit": "Dispositivo saiu geocerca",
+ "eventAlarm": "Alarmes",
+ "alarm": "Alarme",
+ "alarmSos": "Alarme SOS",
+ "alarmVibration": "Alarme de Vibração",
+ "alarmMovement": "Alarme de Movimento",
+ "alarmOverspeed": "Alarme de Alta Velocidade",
+ "alarmFallDown": "Alarme de Queda",
+ "alarmLowBattery": "Alarme de Bateria Fraca",
+ "alarmMotion": "Alarme de Movimento",
+ "alarmFault": "Alarme de Problema",
+ "notificationType": "Tipo de Notificação",
+ "notificationWeb": "Enviar via Web",
+ "notificationMail": "Enviar via Email"
+} \ No newline at end of file
diff --git a/web/l10n/ro.json b/web/l10n/ro.json
new file mode 100644
index 000000000..950eb2845
--- /dev/null
+++ b/web/l10n/ro.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Se încarcă",
+ "sharedSave": "Salvează",
+ "sharedCancel": "Anulează",
+ "sharedAdd": "Adaugă",
+ "sharedEdit": "Modifică",
+ "sharedRemove": "Elimină",
+ "sharedRemoveConfirm": "Ștergeți obiectul?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Oră",
+ "sharedMinute": "Minut",
+ "sharedSecond": "Secundă",
+ "sharedName": "Nume",
+ "sharedDescription": "Descriere",
+ "sharedSearch": "Căutare",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notificările",
+ "sharedAttributes": "Atribute",
+ "sharedAttribute": "Atribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Eroare",
+ "errorUnknown": "Eroare necunoscută",
+ "errorConnection": "Eroare de conexiune",
+ "userEmail": "Email",
+ "userPassword": "Parolă",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Autentificare",
+ "loginLanguage": "Limbă",
+ "loginRegister": "Înregistrare",
+ "loginLogin": "Intră în cont",
+ "loginFailed": "E-mail sau parolă incorectă",
+ "loginCreated": "Un utilizator nou a fost înregistrat",
+ "loginLogout": "Deconectare",
+ "devicesAndState": "Stare dispozitive",
+ "deviceDialog": "Dispozitiv",
+ "deviceTitle": "Dispozitive",
+ "deviceIdentifier": "Identificator",
+ "deviceLastUpdate": "Ultima actualizare",
+ "deviceCommand": "Comandă",
+ "deviceFollow": "Urmareste",
+ "groupDialog": "Grup",
+ "groupParent": "Grup",
+ "groupNoGroup": "Nici-un grup",
+ "settingsTitle": "Setări",
+ "settingsUser": "Cont",
+ "settingsGroups": "Grupuri",
+ "settingsServer": "Server",
+ "settingsUsers": "Utilizatori",
+ "settingsDistanceUnit": "Distanţă",
+ "settingsSpeedUnit": "Viteză",
+ "settingsTwelveHourFormat": "12-oră",
+ "reportTitle": "Rapoarte",
+ "reportDevice": "Dispozitiv",
+ "reportFrom": "De la ",
+ "reportTo": "Până la",
+ "reportShow": "Arată",
+ "reportClear": "Sterge",
+ "positionFixTime": "Timp",
+ "positionValid": "Valabil",
+ "positionLatitude": "Latitudine",
+ "positionLongitude": "Longitudine",
+ "positionAltitude": "Altitudine",
+ "positionSpeed": "Viteză",
+ "positionCourse": "Curs",
+ "positionAddress": "Adresă",
+ "positionProtocol": "Protocol",
+ "serverTitle": "Setări server",
+ "serverZoom": "Zoom",
+ "serverRegistration": "Înregistrare",
+ "serverReadonly": "Doar citire",
+ "mapTitle": "Hartă",
+ "mapLayer": "Strat Hartă",
+ "mapCustom": "Personalizare Hartă",
+ "mapOsm": "Hartă Open Street",
+ "mapBingKey": "Cheie Hărți Bing",
+ "mapBingRoad": "Bing Hartă Drumuri",
+ "mapBingAerial": "Bing Hartă Aeriană",
+ "mapShapePolygon": "Poligon",
+ "mapShapeCircle": "Cerc",
+ "stateTitle": "Stare",
+ "stateName": "Atribut",
+ "stateValue": "Valoare",
+ "commandTitle": "Comandă",
+ "commandSend": "Trimite",
+ "commandType": "Tip",
+ "commandSent": "Comandă a fost trimisa",
+ "commandPositionPeriodic": "Raportarea Periodică",
+ "commandPositionStop": "Oprire Raportare",
+ "commandEngineStop": "Blocare Motor",
+ "commandEngineResume": "Deblocare Motor",
+ "commandFrequency": "Frecvenţă",
+ "commandUnit": "Unitate",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Trimite SMS",
+ "commandSosNumber": "Set număr SOS",
+ "commandSilenceTime": "Set Timp Silențios",
+ "commandSetPhonebook": "Set Agendă telefonică",
+ "commandVoiceMessage": "Vesaj Vocal",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/ru.json b/web/l10n/ru.json
new file mode 100644
index 000000000..412443f15
--- /dev/null
+++ b/web/l10n/ru.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Загрузка...",
+ "sharedSave": "Сохранить",
+ "sharedCancel": "Отмена",
+ "sharedAdd": "Добавить",
+ "sharedEdit": "Редактировать",
+ "sharedRemove": "Удалить",
+ "sharedRemoveConfirm": "Удалить элемент?",
+ "sharedKm": "км",
+ "sharedMi": "мили",
+ "sharedKn": "уз",
+ "sharedKmh": "км/ч",
+ "sharedMph": "миль/ч",
+ "sharedHour": "Часы",
+ "sharedMinute": "Минуты",
+ "sharedSecond": "Секунды",
+ "sharedName": "Имя",
+ "sharedDescription": "Описание",
+ "sharedSearch": "Поиск",
+ "sharedGeofence": "Геозона",
+ "sharedGeofences": "Геозоны",
+ "sharedNotifications": "Уведомления",
+ "sharedAttributes": "Атрибуты",
+ "sharedAttribute": "Атрибут",
+ "sharedArea": "Область",
+ "sharedMute": "Mute",
+ "errorTitle": "Ошибка",
+ "errorUnknown": "Неизвестная ошибка",
+ "errorConnection": "Ошибка соединения",
+ "userEmail": "Email",
+ "userPassword": "Пароль",
+ "userAdmin": "Администратор",
+ "userRemember": "Remember",
+ "loginTitle": "Вход",
+ "loginLanguage": "Язык",
+ "loginRegister": "Регистрация",
+ "loginLogin": "Вход",
+ "loginFailed": "Неправильный email адрес или пароль",
+ "loginCreated": "Новый пользователь зарегистрирован",
+ "loginLogout": "Выход",
+ "devicesAndState": "Устройства и Состояния",
+ "deviceDialog": "Устройство",
+ "deviceTitle": "Устройства",
+ "deviceIdentifier": "Идентификатор",
+ "deviceLastUpdate": "Последнее Обновление",
+ "deviceCommand": "Команда",
+ "deviceFollow": "Следовать",
+ "groupDialog": "Группа",
+ "groupParent": "Группа",
+ "groupNoGroup": "Без Группы",
+ "settingsTitle": "Настройки",
+ "settingsUser": "Аккаунт",
+ "settingsGroups": "Группы",
+ "settingsServer": "Сервер",
+ "settingsUsers": "Пользователи",
+ "settingsDistanceUnit": "Расстояние",
+ "settingsSpeedUnit": "Скорость",
+ "settingsTwelveHourFormat": "12-часовой формат",
+ "reportTitle": "Отчеты",
+ "reportDevice": "Устройство",
+ "reportFrom": "С",
+ "reportTo": "По",
+ "reportShow": "Показать",
+ "reportClear": "Очистить",
+ "positionFixTime": "Время",
+ "positionValid": "Корректность",
+ "positionLatitude": "Широта",
+ "positionLongitude": "Долгота",
+ "positionAltitude": "Высота",
+ "positionSpeed": "Скорость",
+ "positionCourse": "Курс",
+ "positionAddress": "Адрес",
+ "positionProtocol": "Протокол",
+ "serverTitle": "Настройки Сервера",
+ "serverZoom": "Приближение",
+ "serverRegistration": "Регистрация",
+ "serverReadonly": "Только Просмотр",
+ "mapTitle": "Карта",
+ "mapLayer": "Слой Карты",
+ "mapCustom": "Пользовательская карта",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Ключ Bing Maps",
+ "mapBingRoad": "Bing Maps Дороги",
+ "mapBingAerial": "Bing Maps Спутник",
+ "mapShapePolygon": "Многоугольник",
+ "mapShapeCircle": "Круг",
+ "stateTitle": "Состояние",
+ "stateName": "Параметр",
+ "stateValue": "Значение",
+ "commandTitle": "Команда",
+ "commandSend": "Отправить",
+ "commandType": "Тип",
+ "commandSent": "Команда отправлена",
+ "commandPositionPeriodic": "Начать Отслеживание",
+ "commandPositionStop": "Отменить Отслеживание",
+ "commandEngineStop": "Заблокировать Двигатель",
+ "commandEngineResume": "Разблокировать Двигатель",
+ "commandFrequency": "Частота",
+ "commandUnit": "Единицы",
+ "commandCustom": "Пользовательская команда",
+ "commandPositionSingle": "Разовое Отслеживание",
+ "commandAlarmArm": "Активировать Сигнализацию",
+ "commandAlarmDisarm": "Деактивировать Сигнализацию",
+ "commandSetTimezone": "Настроить Часовой пояс",
+ "commandRequestPhoto": "Запросить Фото",
+ "commandRebootDevice": "Перезагрузить Устройство",
+ "commandSendSms": "Отправить СМС",
+ "commandSosNumber": "Настроить Экстренный Номер",
+ "commandSilenceTime": "Настроить Время Тишины",
+ "commandSetPhonebook": "Настроить Телефонную книгу",
+ "commandVoiceMessage": "Голосовое Сообщение",
+ "commandOutputControl": "Контроль Выхода",
+ "commandAlarmSpeed": "Превышение Скорости",
+ "commandDeviceIdentification": "Идентификация Устройства",
+ "eventDeviceOnline": "Устройство в сети",
+ "eventDeviceOffline": "Устройство не в сети",
+ "eventDeviceMoving": "Устройство движется",
+ "eventDeviceStopped": "Устройство остановилось",
+ "eventDeviceOverspeed": "Устройство превышает скорость",
+ "eventCommandResult": "Результат команды",
+ "eventGeofenceEnter": "Устройство вошло в геозону",
+ "eventGeofenceExit": "Устройство покинуло геозону",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Тип уведомления",
+ "notificationWeb": "Отправлять через Веб",
+ "notificationMail": "Отправлять через Почту"
+} \ No newline at end of file
diff --git a/web/l10n/si.json b/web/l10n/si.json
new file mode 100644
index 000000000..8a76ca968
--- /dev/null
+++ b/web/l10n/si.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "පූරණය කරමින් ...",
+ "sharedSave": "සුරකින්න",
+ "sharedCancel": "අවලංගු කරන්න",
+ "sharedAdd": "එක් කරන්න",
+ "sharedEdit": "සංස්කරණය කරන්න",
+ "sharedRemove": "ඉවත් කරන්න",
+ "sharedRemoveConfirm": "අයිතමය ඉවත් කරන්න ද?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "පැය",
+ "sharedMinute": "මිනිත්තු",
+ "sharedSecond": "තත්පර",
+ "sharedName": "නම",
+ "sharedDescription": "විස්තරය",
+ "sharedSearch": "සොයන්න",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "නිවේදන",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "ප්‍රදේශය",
+ "sharedMute": "Mute",
+ "errorTitle": "දෝෂයක් ",
+ "errorUnknown": "නොදන්නා දෝෂයක් !",
+ "errorConnection": "සම්බන්ධතා දෝෂයක් !",
+ "userEmail": "විද්යුත් තැපෑල",
+ "userPassword": "මුරපදය",
+ "userAdmin": "පරිපාලක",
+ "userRemember": "Remember",
+ "loginTitle": "පිවිසුම් ගිණුම",
+ "loginLanguage": "භාෂාව",
+ "loginRegister": "ලියාපදිංචි කරන්න",
+ "loginLogin": "පිවිසුම",
+ "loginFailed": "ඊ-මේල් ලිපිනය හෝ මුරපදය වැරදිය !",
+ "loginCreated": "නව පරිශීලක ලියාපදිංචි කරන ලදි !",
+ "loginLogout": "ඉවත්වන්න",
+ "devicesAndState": "උපාංග සහ ස්වභාවය",
+ "deviceDialog": "උපාංගය",
+ "deviceTitle": "උපාංග",
+ "deviceIdentifier": "හඳුනාගැනීමේ කේතය",
+ "deviceLastUpdate": "අවසන් යාවත්කාලීනය",
+ "deviceCommand": "විධානය",
+ "deviceFollow": "Follow",
+ "groupDialog": "සමූහය",
+ "groupParent": "සමූහය",
+ "groupNoGroup": "සමූහ එපා",
+ "settingsTitle": "සැකසුම්",
+ "settingsUser": "ගිණුම",
+ "settingsGroups": "සමූහ",
+ "settingsServer": "සේවාදායකය",
+ "settingsUsers": "පරිශීලකයන්",
+ "settingsDistanceUnit": "දුර",
+ "settingsSpeedUnit": "වේගය",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "වාර්තා",
+ "reportDevice": "උපාංගය",
+ "reportFrom": "සිට",
+ "reportTo": "දක්වා",
+ "reportShow": "පෙන්වන්න",
+ "reportClear": "ඉවත් කරන්න",
+ "positionFixTime": "කාලය",
+ "positionValid": "වලංගු",
+ "positionLatitude": "අක්ෂාංශ",
+ "positionLongitude": "දේශාංශ",
+ "positionAltitude": "උන්නතාංශය",
+ "positionSpeed": "වේගය",
+ "positionCourse": "දිගංශය",
+ "positionAddress": "ලිපිනය",
+ "positionProtocol": "ප්රොටොකෝලය",
+ "serverTitle": "සේවාදායකයේ සැකසුම්",
+ "serverZoom": "විශාලනය",
+ "serverRegistration": "ලියාපදිංචි කිරීම",
+ "serverReadonly": "Readonly",
+ "mapTitle": "සිතියම",
+ "mapLayer": "සිතියම් ස්තරය",
+ "mapCustom": "අභිරුචි සිතියම",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "බහුඅශ්‍රය",
+ "mapShapeCircle": "වෘත්තය",
+ "stateTitle": "තත්වය",
+ "stateName": "පරාමිතිය",
+ "stateValue": "අගය",
+ "commandTitle": "විධානය",
+ "commandSend": "යවන්න",
+ "commandType": "වර්ගය",
+ "commandSent": "විධානය යවා ඇත",
+ "commandPositionPeriodic": "ආවර්තිතව වාර්තා කරන්න",
+ "commandPositionStop": "වාර්තා කිරීම නවත්වන්න",
+ "commandEngineStop": "එන්ජිම නවත්වන්න",
+ "commandEngineResume": "එන්ජිම නැවත ආරම්භ කරන්න",
+ "commandFrequency": "සංඛ්යාතය",
+ "commandUnit": "ඒකකය",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/sk.json b/web/l10n/sk.json
new file mode 100644
index 000000000..6d36c3dd6
--- /dev/null
+++ b/web/l10n/sk.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Načítava...",
+ "sharedSave": "Uložiť",
+ "sharedCancel": "Zrušiť",
+ "sharedAdd": "Pridať",
+ "sharedEdit": "Upraviť",
+ "sharedRemove": "Odstrániť",
+ "sharedRemoveConfirm": "Odstrániť položku?",
+ "sharedKm": "Km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "Km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Hodina",
+ "sharedMinute": "Minúta",
+ "sharedSecond": "Sekunda",
+ "sharedName": "Meno",
+ "sharedDescription": "Popis",
+ "sharedSearch": "Hľadať",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifikácie",
+ "sharedAttributes": "Atribúty",
+ "sharedAttribute": "Atribút",
+ "sharedArea": "Oblasť",
+ "sharedMute": "Mute",
+ "errorTitle": "Chyba",
+ "errorUnknown": "Neznáma chyba",
+ "errorConnection": "Chyba pripojenia",
+ "userEmail": "E-mail",
+ "userPassword": "Heslo",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "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ť",
+ "devicesAndState": "Zariadenia a Status",
+ "deviceDialog": "Zariadenie",
+ "deviceTitle": "Zariadena",
+ "deviceIdentifier": "Identifikátor",
+ "deviceLastUpdate": "Posledný update",
+ "deviceCommand": "Príkaz",
+ "deviceFollow": "Nasleduj",
+ "groupDialog": "Skupina",
+ "groupParent": "Skupina",
+ "groupNoGroup": "Žiadna skupina",
+ "settingsTitle": "Nastavenia",
+ "settingsUser": "Účet",
+ "settingsGroups": "Skupiny",
+ "settingsServer": "Server",
+ "settingsUsers": "Užívatelia",
+ "settingsDistanceUnit": "Vzdialenosť",
+ "settingsSpeedUnit": "Rýchlosť jazdy",
+ "settingsTwelveHourFormat": "12-hodinový formát",
+ "reportTitle": "Správy",
+ "reportDevice": "Zariadenie",
+ "reportFrom": "Od",
+ "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",
+ "serverReadonly": "Iba na čítanie",
+ "mapTitle": "Mapa",
+ "mapLayer": "Mapové vrstvy",
+ "mapCustom": "Vlastná mapa",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Klúč Bing Maps",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Arial",
+ "mapShapePolygon": "Polygón",
+ "mapShapeCircle": "Kruh",
+ "stateTitle": "Štát",
+ "stateName": "Parameter",
+ "stateValue": "Hodnota",
+ "commandTitle": "Príkaz",
+ "commandSend": "Odoslať",
+ "commandType": "Typ",
+ "commandSent": "Príkaz bol odoslaný",
+ "commandPositionPeriodic": "Pravidelné podávanie správ",
+ "commandPositionStop": "Zastavte podávanie správ",
+ "commandEngineStop": "Zastavenie motora",
+ "commandEngineResume": "Spustenie motora",
+ "commandFrequency": "Frekvencia",
+ "commandUnit": "Jednotka",
+ "commandCustom": "Vlastný príkaz",
+ "commandPositionSingle": "Jednoduché podávanie správ",
+ "commandAlarmArm": "Nastaviť upozornenie",
+ "commandAlarmDisarm": "Zrušiť upozornenie",
+ "commandSetTimezone": "Nastaviť časovú zónu",
+ "commandRequestPhoto": "Poslať fotku",
+ "commandRebootDevice": "Rebootovať zariadenie",
+ "commandSendSms": "Postať SMS",
+ "commandSosNumber": "Nastaviť čislo SOS",
+ "commandSilenceTime": "Nastav tichý čas",
+ "commandSetPhonebook": "Nastav telefónny zoznam",
+ "commandVoiceMessage": "Hlasové správy",
+ "commandOutputControl": "Výstupná kontrola",
+ "commandAlarmSpeed": "Upozornenie na prekročenie rýchlosti",
+ "commandDeviceIdentification": "Identifikácia zariadenia",
+ "eventDeviceOnline": "Zariadenie je online",
+ "eventDeviceOffline": "Zariadenie je offline",
+ "eventDeviceMoving": "Zariadenie je v pohybe",
+ "eventDeviceStopped": "Zariadenie je zastavené",
+ "eventDeviceOverspeed": "Zariadenie prekročilo rýchlosť",
+ "eventCommandResult": "Výsledok príkazu",
+ "eventGeofenceEnter": "Zariadenie vstúpilo geofence zóny",
+ "eventGeofenceExit": "Zariadenie opustilo geofence zónu",
+ "eventAlarm": "Upozornenia",
+ "alarm": "Upozornenie",
+ "alarmSos": "SOS upozornenie",
+ "alarmVibration": "Vibračné upozornenie",
+ "alarmMovement": "Upozornenie pohnutia",
+ "alarmOverspeed": "Upozornenie prekročenia rýchlosti ",
+ "alarmFallDown": "Upozornenie FallDown ",
+ "alarmLowBattery": "Upozornenie LowBattery",
+ "alarmMotion": "Upozornenie pohybu",
+ "alarmFault": "Upozorneie poruchy",
+ "notificationType": "Typ notifikácie",
+ "notificationWeb": "Poslať cez Web",
+ "notificationMail": "Poslať e-mailom"
+} \ No newline at end of file
diff --git a/web/l10n/sl.json b/web/l10n/sl.json
new file mode 100644
index 000000000..fc5e5e309
--- /dev/null
+++ b/web/l10n/sl.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Nalagam...",
+ "sharedSave": "Shrani",
+ "sharedCancel": "Prekini",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Uredi",
+ "sharedRemove": "Odstrani",
+ "sharedRemoveConfirm": "Odstranim zapis?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Ura",
+ "sharedMinute": "Minuta",
+ "sharedSecond": "Sekunda",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Napaka",
+ "errorUnknown": "Neznana napaka",
+ "errorConnection": "Napaka v povezavi",
+ "userEmail": "E-Pošta",
+ "userPassword": "Geslo",
+ "userAdmin": "Admin",
+ "userRemember": "Remember",
+ "loginTitle": "Prijava",
+ "loginLanguage": "Jezik",
+ "loginRegister": "Registracija",
+ "loginLogin": "Prijava",
+ "loginFailed": "Nepravilna e-pošta ali geslo",
+ "loginCreated": "Nov uporabnik je registriran",
+ "loginLogout": "Odjava",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Naprave",
+ "deviceTitle": "Naprave",
+ "deviceIdentifier": "Identifikacija",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Ukaz",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Nastavitve",
+ "settingsUser": "Račun",
+ "settingsGroups": "Groups",
+ "settingsServer": "Strežnik",
+ "settingsUsers": "Uporabniki",
+ "settingsDistanceUnit": "Razdalja",
+ "settingsSpeedUnit": "Hitrost",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "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",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Karta",
+ "mapLayer": "Zemljevidi",
+ "mapCustom": "Poljubna karta",
+ "mapOsm": "Open Street Karta",
+ "mapBingKey": "Bing Mapk Ključ",
+ "mapBingRoad": "Bing Maps Ceste",
+ "mapBingAerial": "Bing Maps Satelit",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Stanje",
+ "stateName": "Parameter",
+ "stateValue": "Vrednost",
+ "commandTitle": "Ukaz",
+ "commandSend": "Pošlji",
+ "commandType": "Tip",
+ "commandSent": "Ukaz poslan",
+ "commandPositionPeriodic": "Periodično poročanje",
+ "commandPositionStop": "Ustavi poročanje",
+ "commandEngineStop": "Ugasni motor",
+ "commandEngineResume": "Prižgi motor",
+ "commandFrequency": "Frekvenca",
+ "commandUnit": "Naprava",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/sr.json b/web/l10n/sr.json
new file mode 100644
index 000000000..1b36e514e
--- /dev/null
+++ b/web/l10n/sr.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Učitava...",
+ "sharedSave": "Sačuvaj",
+ "sharedCancel": "Odustani",
+ "sharedAdd": "Dodaj",
+ "sharedEdit": "Podesi",
+ "sharedRemove": "Ukloni",
+ "sharedRemoveConfirm": "Ukloniti jedinicu?",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Čas",
+ "sharedMinute": "Minut",
+ "sharedSecond": "Sekunda",
+ "sharedName": "Ime",
+ "sharedDescription": "Opis",
+ "sharedSearch": "Traži",
+ "sharedGeofence": "Geoograda",
+ "sharedGeofences": "Geoograde",
+ "sharedNotifications": "Obaveštenja",
+ "sharedAttributes": "Osobine",
+ "sharedAttribute": "Osobina",
+ "sharedArea": "Oblast",
+ "sharedMute": "Nečujno",
+ "errorTitle": "Greška",
+ "errorUnknown": "Nepoznata greška",
+ "errorConnection": "Greška u konekciji",
+ "userEmail": "Email",
+ "userPassword": "Lozinka",
+ "userAdmin": "Admin",
+ "userRemember": "Zapamti",
+ "loginTitle": "Prijava",
+ "loginLanguage": "Jezik",
+ "loginRegister": "Registruj se",
+ "loginLogin": "Prijava",
+ "loginFailed": "Neispravna email adresa ili lozinka",
+ "loginCreated": "Novi korisnik je registrovan",
+ "loginLogout": "Odjava",
+ "devicesAndState": "Uređaji i Stanje ",
+ "deviceDialog": "Uređaj",
+ "deviceTitle": "Uređaji",
+ "deviceIdentifier": "Identifikator",
+ "deviceLastUpdate": "Poslednji kontakt",
+ "deviceCommand": "Komanda",
+ "deviceFollow": "Prati",
+ "groupDialog": "Grupa",
+ "groupParent": "Grupa",
+ "groupNoGroup": "Nema grupe",
+ "settingsTitle": "Podešavanja",
+ "settingsUser": "Nalog",
+ "settingsGroups": "Grupe",
+ "settingsServer": "Server",
+ "settingsUsers": "Korisnici",
+ "settingsDistanceUnit": "Udaljenost",
+ "settingsSpeedUnit": "Brzina",
+ "settingsTwelveHourFormat": "12-časovni format",
+ "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",
+ "serverReadonly": "Readonly verzija",
+ "mapTitle": "Mapa",
+ "mapLayer": "Vrsta Mape",
+ "mapCustom": "Prilagođena mapa",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Višeugao",
+ "mapShapeCircle": "Krug",
+ "stateTitle": "Stanje",
+ "stateName": "Parametar",
+ "stateValue": "Vrednost",
+ "commandTitle": "Komanda",
+ "commandSend": "Pošalji",
+ "commandType": "Tip",
+ "commandSent": "Komanda je poslata",
+ "commandPositionPeriodic": "Periodično izveštavanje",
+ "commandPositionStop": "Prekini izveštavanja",
+ "commandEngineStop": "Zaustavi motor",
+ "commandEngineResume": "Pokreni motor",
+ "commandFrequency": "Frekvencija",
+ "commandUnit": "Jedinica",
+ "commandCustom": "Prilagođena komanda",
+ "commandPositionSingle": "Izveštaj za jednog",
+ "commandAlarmArm": "Omogući alarm",
+ "commandAlarmDisarm": "Onemogući alarm",
+ "commandSetTimezone": "Podesi vremensku zonu",
+ "commandRequestPhoto": "Zahtevaj fotografiju",
+ "commandRebootDevice": "Ponovo pokreni uređaj",
+ "commandSendSms": "Pošalji SMS",
+ "commandSosNumber": "Podesi SOS broj",
+ "commandSilenceTime": "Podesi nečujno vreme ",
+ "commandSetPhonebook": "Podesi kontakte",
+ "commandVoiceMessage": "Glasovna poruka",
+ "commandOutputControl": "Kontrola izlaza",
+ "commandAlarmSpeed": "Alarm prekoračenja brzine",
+ "commandDeviceIdentification": "Identifikacija uređaja",
+ "eventDeviceOnline": "Uređaj je na mreži",
+ "eventDeviceOffline": "Uređaj je van mreže",
+ "eventDeviceMoving": "Uređaj se kreće",
+ "eventDeviceStopped": "Uređaj je zaustavljen",
+ "eventDeviceOverspeed": "Uređaj prelazi brzinu",
+ "eventCommandResult": "Stanje komande",
+ "eventGeofenceEnter": "Uređaj je ušao u geoogradu",
+ "eventGeofenceExit": "Uređaj je izašao iz geoograde",
+ "eventAlarm": "Alarmi",
+ "alarm": "Alarm",
+ "alarmSos": "SOS alarm",
+ "alarmVibration": "Alarm vibracija",
+ "alarmMovement": "Alarm Kretanja",
+ "alarmOverspeed": "Prekoračenje brzine alarm",
+ "alarmFallDown": "Padanje Alarm",
+ "alarmLowBattery": "Slaba baterija alarm",
+ "alarmMotion": "Alarm kretanja",
+ "alarmFault": "Alarm greške",
+ "notificationType": "Tip obaveštenja",
+ "notificationWeb": "Pošalji preko Web-a",
+ "notificationMail": "Pošalji putem Email-a"
+} \ No newline at end of file
diff --git a/web/l10n/ta.json b/web/l10n/ta.json
new file mode 100644
index 000000000..f328fcaf1
--- /dev/null
+++ b/web/l10n/ta.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "பதிவு செய்",
+ "sharedSave": "சேமி",
+ "sharedCancel": "ரத்து செய்",
+ "sharedAdd": "சேர்க்க",
+ "sharedEdit": "தொகுக்க",
+ "sharedRemove": "நீக்குக",
+ "sharedRemoveConfirm": "நீக்கம் உறுதி செய்?",
+ "sharedKm": "கிமீ",
+ "sharedMi": "மைல்",
+ "sharedKn": "கடல் மைல்",
+ "sharedKmh": "கிமீ/மணிக்கு",
+ "sharedMph": "மைல்/மணிக்கு",
+ "sharedHour": "மணி நேரம்",
+ "sharedMinute": "நிமிடம்",
+ "sharedSecond": "விநாடி",
+ "sharedName": "பெயர்",
+ "sharedDescription": "விளக்கம்",
+ "sharedSearch": "தேடுக",
+ "sharedGeofence": "பூகோள வேலி",
+ "sharedGeofences": "பூகோள வேலிகள்",
+ "sharedNotifications": "அறிவிப்புகள்",
+ "sharedAttributes": "பண்புகள்",
+ "sharedAttribute": "பண்பு",
+ "sharedArea": "பகுதி",
+ "sharedMute": "Mute",
+ "errorTitle": "பிழை",
+ "errorUnknown": "அறியப்படாத பிழை",
+ "errorConnection": "இணைப்புப் பிழை",
+ "userEmail": "மின்னஞ்சல்",
+ "userPassword": "கடவுச்சொல்",
+ "userAdmin": "நிர்வாகி",
+ "userRemember": "Remember",
+ "loginTitle": "உள் நுழை",
+ "loginLanguage": "மொழி",
+ "loginRegister": "பதிவு செய்ய",
+ "loginLogin": "உள்நுழைய",
+ "loginFailed": "தவறான மின்னஞ்சல் முகவரி அல்லது கடவுச்சொல்",
+ "loginCreated": "புதிய பயனர் பதிவு செய்யப்பட்டுள்ளது",
+ "loginLogout": "வெளியேறு",
+ "devicesAndState": "கருவிகள் மற்றும் அதன் நிலை",
+ "deviceDialog": "சாதனம்",
+ "deviceTitle": "சாதனம்",
+ "deviceIdentifier": "அடையாளங்காட்டி",
+ "deviceLastUpdate": "கடைசியாக புதுப்பிக்கப்பட்டது",
+ "deviceCommand": "கட்டளை",
+ "deviceFollow": "பின்தொடர்",
+ "groupDialog": "குழு",
+ "groupParent": "குழு",
+ "groupNoGroup": "குழு இல்லை",
+ "settingsTitle": "அமைப்பு",
+ "settingsUser": "கணக்கு",
+ "settingsGroups": "குழுக்கள்",
+ "settingsServer": "சர்வர்",
+ "settingsUsers": "உறுப்பினர்கள்",
+ "settingsDistanceUnit": "தூரம்",
+ "settingsSpeedUnit": "வேகம்",
+ "settingsTwelveHourFormat": "12 மணி நேர வடிவம்",
+ "reportTitle": "அறிக்கை",
+ "reportDevice": "சாதனம்",
+ "reportFrom": "இருந்து",
+ "reportTo": "வரை",
+ "reportShow": "காண்பி",
+ "reportClear": "அழி",
+ "positionFixTime": "நேரம்",
+ "positionValid": "செல்லுபடியான",
+ "positionLatitude": "அட்சரேகை",
+ "positionLongitude": "தீர்க்கரேகை",
+ "positionAltitude": "உயரம்",
+ "positionSpeed": "வேகம்",
+ "positionCourse": "பாடநெறி",
+ "positionAddress": "முகவரி",
+ "positionProtocol": "புரோட்டோகால்",
+ "serverTitle": "சர்வர் அமைப்பு",
+ "serverZoom": "பெரிதாக்கு",
+ "serverRegistration": "பதிவுசெய்ய",
+ "serverReadonly": "படிக்கமட்டும்",
+ "mapTitle": "வரைபடம்",
+ "mapLayer": "வரைபடம் அடுக்கு",
+ "mapCustom": "விருப்ப வரைபடம்",
+ "mapOsm": "திறமூல தெரு வரைபடம்",
+ "mapBingKey": "பிங் வரைபட கீ",
+ "mapBingRoad": "பிங் சாலை வரைபடம்",
+ "mapBingAerial": "பிங் வான்வழி வரைபடம்",
+ "mapShapePolygon": "பலகோணம்",
+ "mapShapeCircle": "வட்டம்",
+ "stateTitle": "நிலை",
+ "stateName": "சாட்டு",
+ "stateValue": "மதிப்பு",
+ "commandTitle": "கட்டளை",
+ "commandSend": "அனுப்பு",
+ "commandType": "டைப்",
+ "commandSent": "கட்டளை அனுப்பப்பட்டது",
+ "commandPositionPeriodic": "காலமுறை அறிக்கையிடல்",
+ "commandPositionStop": "அறிக்கையிடுதல் நிறுத்து ",
+ "commandEngineStop": "எஞ்சின் நிறுத்து",
+ "commandEngineResume": "எஞ்சின் தொடங்க",
+ "commandFrequency": "காலஇடைவெளி",
+ "commandUnit": "அலகு",
+ "commandCustom": "விருப்பமான கட்டளை",
+ "commandPositionSingle": "ஒற்றை அறிக்கை",
+ "commandAlarmArm": "அலறிமணி துவக்கம்",
+ "commandAlarmDisarm": "அலறிமணி நிறுத்தம்",
+ "commandSetTimezone": "நேர மண்டலம்",
+ "commandRequestPhoto": "புகைப்படம் வேண்டு",
+ "commandRebootDevice": "சாதன மறுதுவக்கம்",
+ "commandSendSms": "குருஞ்செதி அனுப்பு",
+ "commandSosNumber": "அவசர அழைப்பு எண்(SOS)",
+ "commandSilenceTime": "அமைதி நேரம் அமைக்க",
+ "commandSetPhonebook": "தொலைபேசிப்புத்தகம் அமை",
+ "commandVoiceMessage": "குரல் செய்தி",
+ "commandOutputControl": "வெளியீட்டு கட்டுப்பாடு",
+ "commandAlarmSpeed": "அதி வேக அலறி ",
+ "commandDeviceIdentification": "\nசாதன அடையாளம்",
+ "eventDeviceOnline": "சாதனம் இணைப்பில் உள்ளது",
+ "eventDeviceOffline": "சாதன இணைப்பு துண்டிக்கபட்டது",
+ "eventDeviceMoving": "சாதனம் நகருகிறது",
+ "eventDeviceStopped": "சாதனம் நின்றுவிட்டது",
+ "eventDeviceOverspeed": "சாதனம் நிர்ணயித்த வேகத் திற்கு மேல்",
+ "eventCommandResult": "கட்டளை விளைவு",
+ "eventGeofenceEnter": "சாதனம் பூகோள வேலியினுள் நுழைந்துள்ளது",
+ "eventGeofenceExit": "சாதனம் பூகோள வேலியை விட்டு வெளியேறியது",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "type of notification",
+ "notificationWeb": "வலைதளம் வழி அனுப்புக ",
+ "notificationMail": "மின்னஞ்சல் வழி அனுப்புக"
+} \ No newline at end of file
diff --git a/web/l10n/th.json b/web/l10n/th.json
new file mode 100644
index 000000000..63373804e
--- /dev/null
+++ b/web/l10n/th.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "กำลังโหลด",
+ "sharedSave": "จัดเก็บแฟ้มข้อมูล",
+ "sharedCancel": "ยกเลิก",
+ "sharedAdd": "เพิ่ม",
+ "sharedEdit": "ตรวจแก้ ปรับเปลี่ยนข้อมูล",
+ "sharedRemove": "ลบรายการ",
+ "sharedRemoveConfirm": "ยืนยันลบรายการ",
+ "sharedKm": "กม.",
+ "sharedMi": "ไมล์",
+ "sharedKn": "น๊อต",
+ "sharedKmh": "กม./ชม.",
+ "sharedMph": "ไมล์ต่อชั่วโมง",
+ "sharedHour": "ชั่วโมง",
+ "sharedMinute": "นาที",
+ "sharedSecond": "วินาที",
+ "sharedName": "ชื่อ",
+ "sharedDescription": "ลักษณะ",
+ "sharedSearch": "ค้นหา",
+ "sharedGeofence": "เขตพื้นที่",
+ "sharedGeofences": "เขตพื้นที่",
+ "sharedNotifications": "การแจ้งเตือน",
+ "sharedAttributes": "คุณลักษณะ",
+ "sharedAttribute": "คุณลักษณะ",
+ "sharedArea": "พื้นที่",
+ "sharedMute": "Mute",
+ "errorTitle": "ผิดพลาด",
+ "errorUnknown": "ข้อผิดพลาดที่ไม่รู้จัก",
+ "errorConnection": "การเชื่อมต่อผิดพลาด",
+ "userEmail": "อีเมล์",
+ "userPassword": "รหัสผ่าน",
+ "userAdmin": "ผู้ดูแลระบบ",
+ "userRemember": "Remember",
+ "loginTitle": "เข้าสู่ระบบ",
+ "loginLanguage": "ภาษา",
+ "loginRegister": "ลงทะเบียน",
+ "loginLogin": "เข้าสู่ระบบ",
+ "loginFailed": "ที่อยู่อีเมลหรือรหัสผ่านไม่ถูกต้อง",
+ "loginCreated": "ผู้ใช้ใหม่ ได้รับการลงทะเบียน",
+ "loginLogout": "ออกจากระบบ",
+ "devicesAndState": "อุปกรณ์และสถานะ",
+ "deviceDialog": "เครื่อง/อุปกรณ์",
+ "deviceTitle": "เครื่อง/อุปกรณ์",
+ "deviceIdentifier": "ระบุเลขอุปกรณ์",
+ "deviceLastUpdate": "แก้ไขล่าสุด",
+ "deviceCommand": "คำสั่ง",
+ "deviceFollow": "ติดตาม",
+ "groupDialog": "กลุ่ม",
+ "groupParent": "กลุ่ม",
+ "groupNoGroup": "ไม่จัดกลุ่ม",
+ "settingsTitle": "การตั้งค่า",
+ "settingsUser": "บัญชีผู้ใช้",
+ "settingsGroups": "ตั้งค่ากลุ่ม",
+ "settingsServer": "ตั้งค่าระบบ",
+ "settingsUsers": "ตั้งค่าผู้ใช้งาน",
+ "settingsDistanceUnit": "หน่วยระยะทาง",
+ "settingsSpeedUnit": "หน่วยความเร็ว",
+ "settingsTwelveHourFormat": "รูปแบบเวลา 12 ชั่วโมง",
+ "reportTitle": "รายงาน",
+ "reportDevice": "รายงานเครื่อง/อุปกรณ์",
+ "reportFrom": "จาก",
+ "reportTo": "ไปถึง",
+ "reportShow": "แสดง",
+ "reportClear": "ล้างรายงาน",
+ "positionFixTime": "เวลา",
+ "positionValid": "ถูกต้อง",
+ "positionLatitude": "ละติจูด",
+ "positionLongitude": "ลองจิจูด",
+ "positionAltitude": "ระดับความสูง",
+ "positionSpeed": "ความเร็ว",
+ "positionCourse": "ทิศทาง",
+ "positionAddress": "ที่อยู่",
+ "positionProtocol": "โปรโตคอล",
+ "serverTitle": "การตั้งค่าเซิร์ฟเวอ",
+ "serverZoom": "ชยาย +/-",
+ "serverRegistration": "ลงทะเบียน",
+ "serverReadonly": "อ่านได้อย่างเดียว",
+ "mapTitle": "แผนที่",
+ "mapLayer": "ชั้นแผนที่",
+ "mapCustom": "แผนที่ที่กำหนดเอง",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps สำคัญ",
+ "mapBingRoad": "Bing Maps ถนน",
+ "mapBingAerial": "Bing Maps ทางอากาศ",
+ "mapShapePolygon": "โพลิกอน",
+ "mapShapeCircle": "วงกลม",
+ "stateTitle": "สถานะ",
+ "stateName": "พารามิเตอร์",
+ "stateValue": "มูลค่า",
+ "commandTitle": "คำสั่ง",
+ "commandSend": "ส่ง",
+ "commandType": "ชนิด",
+ "commandSent": "คำสั่งถูกส่งไปแล้ว",
+ "commandPositionPeriodic": "แก้ไขตำแหน่ง",
+ "commandPositionStop": "ตำแหน่ง หยุด",
+ "commandEngineStop": "ดับเครื่องยนต์",
+ "commandEngineResume": "ติดครื่องยนต์ใหม่",
+ "commandFrequency": "ความถี่",
+ "commandUnit": "หน่วย",
+ "commandCustom": "คำสั่งกำหนดเอง",
+ "commandPositionSingle": "รายงานตำแหน่งเดียว",
+ "commandAlarmArm": "แจ้งเตือนติดต่อสาขา",
+ "commandAlarmDisarm": "แจ้งเตือนยกเลิกติดต่อสาขา",
+ "commandSetTimezone": "ตั้งค่าเขตเวลา",
+ "commandRequestPhoto": "สั่งถ่ายภาพ",
+ "commandRebootDevice": "รีบูต",
+ "commandSendSms": "ส่ง SMS",
+ "commandSosNumber": "ตั้งค่าเลขหมายโทรฉุกเฉิน SOS",
+ "commandSilenceTime": "ตั้งค่าช่วงเาลาหยุดนิ่ง",
+ "commandSetPhonebook": "ตั้งค่าสมุดโทรศัพท์",
+ "commandVoiceMessage": "ข้อความเสียง",
+ "commandOutputControl": "ควบคุมข้อมูลที่ส่งออก",
+ "commandAlarmSpeed": "แจ้งเตือนความเร็วเกินกำหนด",
+ "commandDeviceIdentification": "หมายเลขอุปกรณ์",
+ "eventDeviceOnline": "อุปกรณ์เชื่อมต่อแล้ว",
+ "eventDeviceOffline": "อุปกรณ์ไม่ได้เชื่อมต่อ",
+ "eventDeviceMoving": "อุปกรณ์กำลังเคลื่อนที่",
+ "eventDeviceStopped": "อุปกรณ์ไม่เคลื่อนไหว",
+ "eventDeviceOverspeed": "อุปกรณ์เกินกำหนดความเร็ว",
+ "eventCommandResult": "ผลลัพธ์จากคำสั่ง",
+ "eventGeofenceEnter": "อุปกรณ์เข้าในเขตพื้นที่",
+ "eventGeofenceExit": "อุปกรณ์ออกนอกเขตพื้นที่",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "ชนิดการแจ้งเตือน",
+ "notificationWeb": "ส่งทางเว็บ",
+ "notificationMail": "ส่งทางเมล์"
+} \ No newline at end of file
diff --git a/web/l10n/tr.json b/web/l10n/tr.json
new file mode 100644
index 000000000..7a00586c2
--- /dev/null
+++ b/web/l10n/tr.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Yükleniyor...",
+ "sharedSave": "Kaydet",
+ "sharedCancel": "İptal",
+ "sharedAdd": "Ekle",
+ "sharedEdit": "Düzenle",
+ "sharedRemove": "Kaldır",
+ "sharedRemoveConfirm": "Öğeyi kaldır",
+ "sharedKm": "km",
+ "sharedMi": "mil",
+ "sharedKn": "Knot",
+ "sharedKmh": "km/s",
+ "sharedMph": "mil/s",
+ "sharedHour": "Saat",
+ "sharedMinute": "Dakika",
+ "sharedSecond": "Saniye",
+ "sharedName": "İsim",
+ "sharedDescription": "Açıklama",
+ "sharedSearch": "Arama",
+ "sharedGeofence": "Güvenli Bölge",
+ "sharedGeofences": "Güvenli Bölgeler",
+ "sharedNotifications": "Bildirimler",
+ "sharedAttributes": "Nitelikler",
+ "sharedAttribute": "Nitelik",
+ "sharedArea": "Bölge",
+ "sharedMute": "Mute",
+ "errorTitle": "Hata",
+ "errorUnknown": "Bilinmeyen hata ",
+ "errorConnection": "Bağlantı Hatası",
+ "userEmail": "Eposta",
+ "userPassword": "Şifre",
+ "userAdmin": "Yönetici",
+ "userRemember": "Remember",
+ "loginTitle": "Oturum aç",
+ "loginLanguage": "Lisan",
+ "loginRegister": "Kayıt",
+ "loginLogin": "Oturumu aç",
+ "loginFailed": "Geçersiz eposta veya şifre",
+ "loginCreated": "Yeni kullanıcı kaydedildi",
+ "loginLogout": "Oturumu sonlandır",
+ "devicesAndState": "Cihazlar ve Bölge",
+ "deviceDialog": "Cihaz",
+ "deviceTitle": "Cihazlar",
+ "deviceIdentifier": "Kimlik",
+ "deviceLastUpdate": "Son Güncelleme",
+ "deviceCommand": "Komut",
+ "deviceFollow": "Takip",
+ "groupDialog": "Grup",
+ "groupParent": "Grup",
+ "groupNoGroup": "Grupsuz",
+ "settingsTitle": "Ayarlar",
+ "settingsUser": "Hesap",
+ "settingsGroups": "Gruplar",
+ "settingsServer": "Sunucu",
+ "settingsUsers": "Kullanıcı",
+ "settingsDistanceUnit": "Mesafe",
+ "settingsSpeedUnit": "Hız",
+ "settingsTwelveHourFormat": "12 saat formatı",
+ "reportTitle": "Raporlar",
+ "reportDevice": "Aygıt",
+ "reportFrom": "Başlangıç",
+ "reportTo": "Varış",
+ "reportShow": "Göster",
+ "reportClear": "Temizle",
+ "positionFixTime": "Süre",
+ "positionValid": "Geçerli",
+ "positionLatitude": "Enlem",
+ "positionLongitude": "Boylam",
+ "positionAltitude": "Rakım",
+ "positionSpeed": "Sürat",
+ "positionCourse": "Yön",
+ "positionAddress": "Adres",
+ "positionProtocol": "Protokol",
+ "serverTitle": "Sunucu Ayarları",
+ "serverZoom": "Yakınlaştırma",
+ "serverRegistration": "Kayıt",
+ "serverReadonly": "Saltokunur",
+ "mapTitle": "Harita",
+ "mapLayer": "Harita Katmanı",
+ "mapCustom": "Özelleştirilmiş Harita",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Çokgen",
+ "mapShapeCircle": "Çember",
+ "stateTitle": "Bölge",
+ "stateName": "Özellik",
+ "stateValue": "Değer",
+ "commandTitle": "Komut",
+ "commandSend": "Gönder",
+ "commandType": "Tip",
+ "commandSent": "Komut gönderildi",
+ "commandPositionPeriodic": "Periyodik Rapor",
+ "commandPositionStop": "Raporlamayı Durdur",
+ "commandEngineStop": "Motoru Durdur",
+ "commandEngineResume": "Motoru Çalıştır",
+ "commandFrequency": "Frekans",
+ "commandUnit": "Ünite",
+ "commandCustom": "Özel komut",
+ "commandPositionSingle": "Tekil Raporlama",
+ "commandAlarmArm": "Alarm Kur",
+ "commandAlarmDisarm": "Alarmı Kapat",
+ "commandSetTimezone": "Zaman Dilimini Belirle",
+ "commandRequestPhoto": "Fotoğraf İste",
+ "commandRebootDevice": "Aygıtı Yeniden Başlat",
+ "commandSendSms": "SMS Gönder",
+ "commandSosNumber": "Acil Durum Numarasını Belirle",
+ "commandSilenceTime": "Sessiz Zamanı Belirle",
+ "commandSetPhonebook": "Telefon Defterini Belirle",
+ "commandVoiceMessage": "Ses Mesajı",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Cihaz çevrimiçi",
+ "eventDeviceOffline": "Cihaz çevrimdışı",
+ "eventDeviceMoving": "Cihaz hareket halinde",
+ "eventDeviceStopped": "Cihaz durdu",
+ "eventDeviceOverspeed": "Cihaz hızı aştı",
+ "eventCommandResult": "Komut sonucu",
+ "eventGeofenceEnter": "Cihaz güvenli bölgede",
+ "eventGeofenceExit": "Cihaz güvenli bölgeden çıktı",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Bildirim tipi",
+ "notificationWeb": "Wed ile gönder",
+ "notificationMail": "E-posta ile gönder"
+} \ No newline at end of file
diff --git a/web/l10n/uk.json b/web/l10n/uk.json
new file mode 100644
index 000000000..02096ec5d
--- /dev/null
+++ b/web/l10n/uk.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Завантаження... ",
+ "sharedSave": "Зберегти",
+ "sharedCancel": "Відміна",
+ "sharedAdd": "Додати",
+ "sharedEdit": "Редагувати",
+ "sharedRemove": "Видалити",
+ "sharedRemoveConfirm": "Видалити пункт?",
+ "sharedKm": "км",
+ "sharedMi": "Милi",
+ "sharedKn": "kn",
+ "sharedKmh": "км/год",
+ "sharedMph": "Миль/год",
+ "sharedHour": "Години",
+ "sharedMinute": "Хвилини",
+ "sharedSecond": "Секунди",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "Помилка",
+ "errorUnknown": "Невiдома помилка",
+ "errorConnection": "Помилка з'єднання",
+ "userEmail": "E-mail",
+ "userPassword": "Пароль",
+ "userAdmin": "Адмiнiстратор",
+ "userRemember": "Remember",
+ "loginTitle": "Логiн",
+ "loginLanguage": "Мова",
+ "loginRegister": "Реєстрація",
+ "loginLogin": "Ввійти",
+ "loginFailed": "Неправильне адреса електронної пошти або пароль",
+ "loginCreated": "Новий користувач був зареєстрований",
+ "loginLogout": "Вийти",
+ "devicesAndState": "Devices and State",
+ "deviceDialog": "Пристрій",
+ "deviceTitle": " Прилади",
+ "deviceIdentifier": "Iдентифікатор",
+ "deviceLastUpdate": "Last Update",
+ "deviceCommand": "Команда",
+ "deviceFollow": "Follow",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "Налаштування",
+ "settingsUser": "Аккаунт",
+ "settingsGroups": "Groups",
+ "settingsServer": "Сервер",
+ "settingsUsers": "Користувач",
+ "settingsDistanceUnit": "Відстань",
+ "settingsSpeedUnit": "Швидкість",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "Звіти",
+ "reportDevice": "Пристрій ",
+ "reportFrom": "З",
+ "reportTo": "До",
+ "reportShow": "Показати",
+ "reportClear": "Очистити",
+ "positionFixTime": "Час ",
+ "positionValid": "Дійсний",
+ "positionLatitude": "Широта",
+ "positionLongitude": "Довгота ",
+ "positionAltitude": "Висота",
+ "positionSpeed": "Швидкість ",
+ "positionCourse": "Курс",
+ "positionAddress": "Адреса",
+ "positionProtocol": "Протокол",
+ "serverTitle": "Налаштування сервера",
+ "serverZoom": "Наближення",
+ "serverRegistration": "Реєстрація",
+ "serverReadonly": "Readonly",
+ "mapTitle": "Карта",
+ "mapLayer": "Шар карти",
+ "mapCustom": "Користувальницька карта",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Ключ Bing Maps ",
+ "mapBingRoad": "Bing Maps Дороги",
+ "mapBingAerial": "Bing Maps Супутник",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "Стан",
+ "stateName": "Атрибут",
+ "stateValue": "Значення ",
+ "commandTitle": "Команда ",
+ "commandSend": "Послати. ",
+ "commandType": "Тип",
+ "commandSent": "Команда була відправлена",
+ "commandPositionPeriodic": "Періодична звітність",
+ "commandPositionStop": "Скасувати відстеження. ",
+ "commandEngineStop": "Заблокувати двигун ",
+ "commandEngineResume": "Розблокувати двигун",
+ "commandFrequency": "Частота",
+ "commandUnit": "Одиниці",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file
diff --git a/web/l10n/vi.json b/web/l10n/vi.json
new file mode 100644
index 000000000..55d356751
--- /dev/null
+++ b/web/l10n/vi.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "Đang tải...",
+ "sharedSave": "Lưu",
+ "sharedCancel": "Hủy",
+ "sharedAdd": "Thêm mới",
+ "sharedEdit": "Chỉnh sửa",
+ "sharedRemove": "Xóa",
+ "sharedRemoveConfirm": "Xóa lựa chọn?",
+ "sharedKm": "km",
+ "sharedMi": "dặm",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Giờ",
+ "sharedMinute": "Phút",
+ "sharedSecond": "Giây",
+ "sharedName": "Tên",
+ "sharedDescription": "Mô tả",
+ "sharedSearch": "Tìm kiếm",
+ "sharedGeofence": "Giới hạn địa lý",
+ "sharedGeofences": "Giới hạn địa lý",
+ "sharedNotifications": "Thông báo",
+ "sharedAttributes": "Thuộc tính",
+ "sharedAttribute": "Thuộc tính",
+ "sharedArea": "Khu vực",
+ "sharedMute": "Mute",
+ "errorTitle": "Lỗi",
+ "errorUnknown": "Lỗi không xác định",
+ "errorConnection": "Lỗi kết nối",
+ "userEmail": "Email",
+ "userPassword": "Mật khẩu",
+ "userAdmin": "Quản trị",
+ "userRemember": "Remember",
+ "loginTitle": "Đăng nhập",
+ "loginLanguage": "Ngôn ngữ",
+ "loginRegister": "Đăng ký",
+ "loginLogin": "Đăng nhập",
+ "loginFailed": "Sai mật khẩu hoặc địa chỉ email",
+ "loginCreated": "Người dùng mới đã được đăng ký",
+ "loginLogout": "Đăng xuất",
+ "devicesAndState": "Các thiết bị và trạng thái",
+ "deviceDialog": "Thiết bị",
+ "deviceTitle": "Các thiết bị",
+ "deviceIdentifier": "Định danh",
+ "deviceLastUpdate": "Cập nhật lần cuối",
+ "deviceCommand": "Lệnh",
+ "deviceFollow": "Theo dõi",
+ "groupDialog": "Nhóm",
+ "groupParent": "Nhóm",
+ "groupNoGroup": "Không có nhóm",
+ "settingsTitle": "Cài đặt",
+ "settingsUser": "Tài khoản",
+ "settingsGroups": "Nhóm",
+ "settingsServer": "Máy chủ",
+ "settingsUsers": "Người dùng",
+ "settingsDistanceUnit": "Khoảng cách",
+ "settingsSpeedUnit": "Tốc độ",
+ "settingsTwelveHourFormat": "Định dạng 12h",
+ "reportTitle": "Báo cáo",
+ "reportDevice": "Thiết bị",
+ "reportFrom": "Từ",
+ "reportTo": "Đến",
+ "reportShow": "Hiển thị",
+ "reportClear": "Xóa",
+ "positionFixTime": "Thời gian",
+ "positionValid": "Có hiệu lực",
+ "positionLatitude": "Vĩ độ",
+ "positionLongitude": "Kinh độ",
+ "positionAltitude": "Độ cao",
+ "positionSpeed": "Tốc độ",
+ "positionCourse": "Hướng",
+ "positionAddress": "Địa chỉ",
+ "positionProtocol": "Giao thức",
+ "serverTitle": "Cài đặt máy chủ",
+ "serverZoom": "Phóng to",
+ "serverRegistration": "Đăng ký",
+ "serverReadonly": "Chỉ đọc",
+ "mapTitle": "Bản đồ",
+ "mapLayer": "Lớp bản đồ",
+ "mapCustom": "Bản đồ tùy chỉnh",
+ "mapOsm": "Open Street Map",
+ "mapBingKey": "Bing Maps Key",
+ "mapBingRoad": "Bing Maps Road",
+ "mapBingAerial": "Bing Maps Aerial",
+ "mapShapePolygon": "Đa giác",
+ "mapShapeCircle": "Vòng tròn",
+ "stateTitle": "Trạng thái",
+ "stateName": "Thuộc tính",
+ "stateValue": "Giá trị",
+ "commandTitle": "Lệnh",
+ "commandSend": "Gửi",
+ "commandType": "Loại",
+ "commandSent": "Lệnh đã được gửi",
+ "commandPositionPeriodic": "Báo cáo định kỳ",
+ "commandPositionStop": "Dừng báo cáo",
+ "commandEngineStop": "Tắt máy",
+ "commandEngineResume": "Bật máy",
+ "commandFrequency": "Tần suất",
+ "commandUnit": "Đơn vị",
+ "commandCustom": "Lệnh tùy chỉnh",
+ "commandPositionSingle": "Báo cáo đơn",
+ "commandAlarmArm": "Báo động cho phép",
+ "commandAlarmDisarm": "Báo động không cho phép",
+ "commandSetTimezone": "Thiết lập múi giờ",
+ "commandRequestPhoto": "Yêu cầu ảnh",
+ "commandRebootDevice": "Khởi động lại thiết bị",
+ "commandSendSms": "Gửi tin nhắn",
+ "commandSosNumber": "Thiết lập số khẩn cấp",
+ "commandSilenceTime": "Thiêt lập giờ im lặng",
+ "commandSetPhonebook": "Thiết lập danh bạ điện thoại",
+ "commandVoiceMessage": "Tin nhắn thoại",
+ "commandOutputControl": "Điều khiển đầu ra",
+ "commandAlarmSpeed": "Báo động quá tốc độ",
+ "commandDeviceIdentification": "Định danh thiết bị",
+ "eventDeviceOnline": "Thiết bị trực tuyến",
+ "eventDeviceOffline": "Thiết bị ngoại tuyến",
+ "eventDeviceMoving": "Thiết bị đang di chuyển",
+ "eventDeviceStopped": "Thiết bị đã dừng",
+ "eventDeviceOverspeed": "Thiết bị vượt quá tốc độ",
+ "eventCommandResult": "Kết quả lệnh",
+ "eventGeofenceEnter": "Thiết bị đã đi vào giới hạn địa lý",
+ "eventGeofenceExit": "Thiết bị đã thoát khỏi giới hạn địa lý",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Loại thông báo",
+ "notificationWeb": "Gửi từ web",
+ "notificationMail": "Gửi từ mail"
+} \ No newline at end of file
diff --git a/web/l10n/zh.json b/web/l10n/zh.json
new file mode 100644
index 000000000..bb9761d43
--- /dev/null
+++ b/web/l10n/zh.json
@@ -0,0 +1,136 @@
+{
+ "sharedLoading": "加载",
+ "sharedSave": "保存",
+ "sharedCancel": "取消",
+ "sharedAdd": "新建",
+ "sharedEdit": "编辑",
+ "sharedRemove": "移除",
+ "sharedRemoveConfirm": "要移除选项吗?",
+ "sharedKm": "千米",
+ "sharedMi": "海里",
+ "sharedKn": "kn",
+ "sharedKmh": "千米/小时",
+ "sharedMph": "每小时英里数",
+ "sharedHour": "小时",
+ "sharedMinute": "分钟",
+ "sharedSecond": "秒",
+ "sharedName": "Name",
+ "sharedDescription": "Description",
+ "sharedSearch": "Search",
+ "sharedGeofence": "Geofence",
+ "sharedGeofences": "Geofences",
+ "sharedNotifications": "Notifications",
+ "sharedAttributes": "Attributes",
+ "sharedAttribute": "Attribute",
+ "sharedArea": "Area",
+ "sharedMute": "Mute",
+ "errorTitle": "错误",
+ "errorUnknown": "未知错误",
+ "errorConnection": "连接错误",
+ "userEmail": "邮箱",
+ "userPassword": "密码",
+ "userAdmin": "管理员",
+ "userRemember": "Remember",
+ "loginTitle": "登录",
+ "loginLanguage": "语言",
+ "loginRegister": "注册",
+ "loginLogin": "登录",
+ "loginFailed": "邮箱地址或密码不对",
+ "loginCreated": "新用户已经被注册了",
+ "loginLogout": "登出",
+ "devicesAndState": "设备和状态",
+ "deviceDialog": "设备",
+ "deviceTitle": "设备",
+ "deviceIdentifier": "标识符",
+ "deviceLastUpdate": "最后更新",
+ "deviceCommand": "指令",
+ "deviceFollow": "遵循",
+ "groupDialog": "Group",
+ "groupParent": "Group",
+ "groupNoGroup": "No Group",
+ "settingsTitle": "设置",
+ "settingsUser": "账户",
+ "settingsGroups": "Groups",
+ "settingsServer": "服务器",
+ "settingsUsers": "用户",
+ "settingsDistanceUnit": "距离",
+ "settingsSpeedUnit": "速度",
+ "settingsTwelveHourFormat": "12-hour Format",
+ "reportTitle": "报表",
+ "reportDevice": "设备",
+ "reportFrom": "开始",
+ "reportTo": "结束",
+ "reportShow": "显示",
+ "reportClear": "清空",
+ "positionFixTime": "时间",
+ "positionValid": "有效",
+ "positionLatitude": "纬度",
+ "positionLongitude": "经度",
+ "positionAltitude": "海拔",
+ "positionSpeed": "速度",
+ "positionCourse": "航向",
+ "positionAddress": "地址",
+ "positionProtocol": "协议",
+ "serverTitle": "服务器设置",
+ "serverZoom": "缩放",
+ "serverRegistration": "注册",
+ "serverReadonly": "只读",
+ "mapTitle": "地图",
+ "mapLayer": "地图图层",
+ "mapCustom": "自定义地图",
+ "mapOsm": "OpenStreetMap 地图",
+ "mapBingKey": "Bing 旅游重点",
+ "mapBingRoad": "Bing 公路线路地图",
+ "mapBingAerial": "Bing 航测地图",
+ "mapShapePolygon": "Polygon",
+ "mapShapeCircle": "Circle",
+ "stateTitle": "状态",
+ "stateName": "参数",
+ "stateValue": "数值",
+ "commandTitle": "命令",
+ "commandSend": "发送",
+ "commandType": "类型",
+ "commandSent": "命令已发送",
+ "commandPositionPeriodic": "位置获取",
+ "commandPositionStop": "位置停止",
+ "commandEngineStop": "引擎熄火",
+ "commandEngineResume": "引擎启动",
+ "commandFrequency": "频率",
+ "commandUnit": "单位",
+ "commandCustom": "Custom command",
+ "commandPositionSingle": "Single Reporting",
+ "commandAlarmArm": "Arm Alarm",
+ "commandAlarmDisarm": "Disarm Alarm",
+ "commandSetTimezone": "Set Timezone",
+ "commandRequestPhoto": "Request Photo",
+ "commandRebootDevice": "Reboot Device",
+ "commandSendSms": "Send SMS",
+ "commandSosNumber": "Set SOS Number",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "Set Phonebook",
+ "commandVoiceMessage": "Voice Message",
+ "commandOutputControl": "Output Control",
+ "commandAlarmSpeed": "Overspeed Alarm",
+ "commandDeviceIdentification": "Device Identification",
+ "eventDeviceOnline": "Device is online",
+ "eventDeviceOffline": "Device is offline",
+ "eventDeviceMoving": "Device is moving",
+ "eventDeviceStopped": "Device is stopped",
+ "eventDeviceOverspeed": "Device exceeds the speed",
+ "eventCommandResult": "Command result",
+ "eventGeofenceEnter": "Device has entered geofence",
+ "eventGeofenceExit": "Device has exited geofence",
+ "eventAlarm": "Alarms",
+ "alarm": "Alarm",
+ "alarmSos": "SOS Alarm",
+ "alarmVibration": "Vibration Alarm",
+ "alarmMovement": "Movement Alarm",
+ "alarmOverspeed": "Overspeed Alarm",
+ "alarmFallDown": "FallDown Alarm",
+ "alarmLowBattery": "LowBattery Alarm",
+ "alarmMotion": "Motion Alarm",
+ "alarmFault": "Fault Alarm",
+ "notificationType": "Type of Notification",
+ "notificationWeb": "Send via Web",
+ "notificationMail": "Send via Mail"
+} \ No newline at end of file