';
+
+ // Loop over the lists to display.
+ foreach($decodedJSON as $listObject) {
+ echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
';
+
+ // Loop over the entries of the current list.
+ foreach($listObject->{'listEntries'} as $listEntryObject) {
+ $keysAsHTMLArray = array();
+ $valuesAsHTMLArray = array();
+
+ // Loop over the keys of the current list entry.
+ foreach($listEntryObject->{'keys'} as $key) {
+
+ if (is_null($key->{'href'})) {
+ array_push($keysAsHTMLArray, translate($i18n, $i18nDefault, $key->{'key'}, [], [], []));
+ } else {
+ array_push($keysAsHTMLArray, translate($i18n, $i18nDefault, $key->{'key'}, [$key->{'href'}], [], []));
+ }
+ }
+
+ // Loop over the values of the current list entry.
+ foreach($listEntryObject->{'values'} as $value) {
+
+ if (is_null($value->{'href'})) {
+ array_push($valuesAsHTMLArray, translate($i18n, $i18nDefault, $value->{'value'}, [], [], []));
+ } else {
+ array_push($valuesAsHTMLArray, translate($i18n, $i18nDefault, $value->{'value'}, [$value->{'href'}], [], []));
+ }
+ }
+
+ echo '
+
';
+ echo implode(' ', $keysAsHTMLArray);
+ echo '
';
+
+ // Some lists have an icon column.
+ if ($listObject->{'isListWithIcons'}) {
+ echo '
'
+ .implode(' ', $valuesAsHTMLArray).'
+
+
';
+ $iconObject = $listEntryObject->{'icon'};
+ if (!is_null($iconObject)){
+ echo '
';
+ }
+ } else {
+ echo '
'
+ .implode(' ', $valuesAsHTMLArray).'';
+ }
+
+ echo '
+
';
+ }
+
+ // Some lists end with examples, i.e. 3 images with descriptions.
+ if (!is_null($listObject->{'examples'})) {
+ $examplesObject = $listObject->{'examples'};
+ $examplesObjectImages = $examplesObject->{'images'};
+ $examplesObjectDescriptions = $examplesObject->{'descriptions'};
+
+ echo '
+
+ '.translate($i18n, $i18nDefault, 'examples', [], [], []).':
+
+
+
+
';
+
+
+ for($i = 0; $i < count($examplesObjectImages); ++$i) {
+ $linesAsHTMLArray = array();
+
+ foreach($examplesObjectDescriptions[$i]->{'lines'} as $line) {
+ array_push($linesAsHTMLArray, translate($i18n, $i18nDefault, $line, [], [], []));
+ }
+
+ echo '
+
+
+
+
'
+ .implode(' ', $linesAsHTMLArray).'
+
+
';
+ }
+
+ echo '
+
';
+ }
+ }
+ echo '
';
+ }
+
+ // Convert the content of the links JSON file to HTML.
+/* function addListLinks($jsonPath, $i18n, $i18nDefault) {
+ global $pathToWebFolder;
+ $expandSectionCounter = 0;
+
+ $decodedJSON = getDecodedJSON($jsonPath);
+ echo '
';
+
+ // Loop over the lists to display.
+ foreach($decodedJSON as $listObject) {
+ echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
';
+
+ // Loop over the sections of the current list.
+ foreach($listObject->{'sections'} as $sectionObject) {
+ if ($sectionObject->{'isExpandable'}) {
+ $sectionToggleChecked = '';
+
+ if ($sectionObject->{'isExpandedByDefault'}) {
+ $sectionToggleChecked = 'checked="checked"';
+ }
+
+ echo '
'.translate($i18n, $i18nDefault, $sectionOb$
+ }
+
+ echo '
';
+
+ // Loop over the entries of the current section.
+ foreach($sectionObject->{'listEntries'} as $listEntryObject) {
+ echo '
+
';
+
+ // Choose lock icon according to https or http connection.
+ if (substr($listEntryObject->{'href'}, 0, 5) == 'https') {
+ echo '
+ [ '.htmlentities($listEntryObject->{'sourceText'}).' ]
'.htmlentities($li$
+
+
';
+ }
+ echo '
';
+ }
+ }
+ echo '
';
+ }
+*/
+
+ // Convert the content of the links JSON file to HTML.
+ function addListLinks($jsonPath, $i18n, $i18nDefault) {
+ global $pathToWebFolder;
+ $expandSectionCounter = 0;
+
+ $decodedJSON = getDecodedJSON($jsonPath);
+ echo '
';
+
+ // Loop over the lists to display.
+ foreach($decodedJSON as $listObject) {
+ echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
';
+
+ // Loop over the sections of the current list.
+ foreach($listObject->{'sections'} as $sectionObject) {
+ if ($sectionObject->{'isExpandable'}) {
+ $sectionToggleChecked = '';
+
+ if ($sectionObject->{'isExpandedByDefault'}) {
+ $sectionToggleChecked = 'checked="checked"';
+ }
+
+ echo '
+
'.translate($i18n, $i18nDefault, $sectionObject->{'sectionTitle'}, [], [], []).' ';
+ }
+
+ echo '
';
+
+ // Loop over the entries of the current section.
+ foreach($sectionObject->{'listEntries'} as $listEntryObject) {
+ echo '
';
+ }
+ echo '
';
+ }
+ }
+ echo '
';
+ }
+
+ // Convert the content of the credits and licenses JSON file to HTML.
+ function addListCredits($jsonPath, $i18n, $i18nDefault) {
+ global $pathToWebFolder;
+
+ $decodedJSON = getDecodedJSON($jsonPath);
+
+ // Loop over the lists to display.
+ foreach($decodedJSON as $listObject) {
+ echo '';
+
+ // Loop over the entries of the current list.
+ foreach($listObject->{'listEntries'} as $listEntryObject) {
+ echo '
'
+ .translate($i18n, $i18nDefault, $listEntryObject->{'type'}, [], [], []).'
+
';
+
+ // Loop over the credits of the current list entry.
+ foreach($listEntryObject->{'credits'} as $credit) {
+ $hrefCredit = $credit->{'href-credit'};
+ $hrefLicense = $credit->{'href-license'};
+
+ if (substr($hrefCredit, 0, 4) != 'http') {
+ $hrefCredit = $pathToWebFolder.$hrefCredit;
+ }
+
+ if (substr($hrefLicense, 0, 4) != 'http') {
+ $hrefLicense = $pathToWebFolder.$hrefLicense;
+ }
+
+ echo '
';
+ }
+ }
+ }
+ }
+
+ // Create a HTML list that contains the supported languages (i18n).
+ function addListLanguages($initialLanguage, $i18n, $i18nDefault) {
+ global $pathToWebFolder, $embedPerma;
+
+
+ $supportedLanguages = [
+ 'de' => 'deutsch',
+ 'en' => 'english',
+ 'es' => 'español',
+ 'fr' => 'français',
+ 'it' => 'italiano',
+ 'ru' => 'русский'
+ ];
+
+ echo '
+
+
+ ';
+ }
+?>
+
diff --git a/www/sunders/apple-touch-icon.png b/www/sunders/apple-touch-icon.png
new file mode 100644
index 0000000..55261d5
Binary files /dev/null and b/www/sunders/apple-touch-icon.png differ
diff --git a/www/sunders/camera.php b/www/sunders/camera.php
new file mode 100644
index 0000000..96707f7
--- /dev/null
+++ b/www/sunders/camera.php
@@ -0,0 +1,445 @@
+id = $valId;
+ $this->lat = $valLat;
+ $this->lon = $valLon;
+ }
+ }
+
+ function mergeNeighbor(&$clusterGrid, $posCell, $pos) {
+ global $divDiag2;
+
+ if (!array_key_exists($pos, $clusterGrid)) {
+ /* the neighbor is empty */
+ return;
+ }
+
+ $neighbor = $clusterGrid[$pos];
+
+ if ($neighbor['count'] == 0) {
+ /* The neighbor is merged to an other cell, yet */
+ return;
+ }
+
+ $cell = $clusterGrid[$posCell];
+
+ /* Calculate the (square of) distance from the cell to its neighbor */
+ $lonDist = ($cell['longitude']/$cell['count']) - ($neighbor['longitude']/$neighbor['count']);
+ $latDist = ($cell['latitude'] /$cell['count']) - ($neighbor['latitude'] /$neighbor['count']);
+ $dist = ($lonDist * $lonDist) + ($latDist * $latDist);
+
+ if ($dist < $divDiag2 / 10) {
+ $count = $cell['count'] + $neighbor['count'];
+ $clusterGrid[$posCell]['latitude'] = $cell['latitude'] + $neighbor['latitude'];
+ $clusterGrid[$posCell]['longitude'] = $cell['longitude'] + $neighbor['longitude'];
+ $clusterGrid[$posCell]['count'] = $count;
+ $clusterGrid[$posCell]['points'] = array_merge($cell['points'], $neighbor['points']);
+ /* Invalidate the merged neighbor */
+ $clusterGrid[$pos]['count'] = 0;
+ }
+ }
+
+ function mergeNeighborhood(&$clusterGrid, $pos) {
+ global $divWCount, $divHCount;
+
+ if ($clusterGrid[$pos]['count'] == 0) {
+ /* cell merged yet */
+ return;
+ }
+
+ $latLon = explode(',', $clusterGrid[$pos]['grid'] );
+ if ($latLon[0] > 0 && $latLon[1] < $divHCount - 1) {
+ if ($latLon[0] > 0) {
+ $posNeigh = ($latLon[0] - 1) . ',' . ($latLon[1] + 1);
+ mergeNeighbor($clusterGrid, $pos, $posNeigh);
+ }
+
+ $posNeigh = $latLon[0] . ',' . ($latLon[1] + 1);
+ mergeNeighbor($clusterGrid, $pos, $posNeigh);
+
+ if ($latLon[0] < $divWCount - 1) {
+ $posNeigh = ($latLon[0] + 1) . ',' . ($latLon[1] + 1);
+ mergeNeighbor($clusterGrid, $pos, $posNeigh);
+ }
+ }
+
+ if ($latLon[0] < $divWCount - 1) {
+ $posNeigh = ($latLon[0] + 1) . ',' . $latLon[1];
+ mergeNeighbor($clusterGrid, $pos, $posNeigh);
+ }
+ }
+
+ /* Recursive calculation of the quick hull algo
+ $isBottom : 1 if bottom point is searched, -1 if top point is searched */
+ function quickHullCalc(&$pointList, $count, $minPoint, $maxPoint, $isBottom) {
+
+ $msg = 'Quick count='.$count.', min=('.$minPoint->id.','.$minPoint->lat.','.$minPoint->lon.'), max=('.$minPoint->id.','.$minPoint->lat.','.$minPoint->lon.'), isBottom='.$isBottom;
+
+ $farthestPoint = null;
+ $farthestDist = 0;
+ $outsideList = array();
+ $outsideListCount = 0;
+
+ if ($maxPoint->lon != $minPoint->lon) {
+ /* Get the line equation as y = mx + p */
+ $m = ($maxPoint->lat - $minPoint->lat) / ($maxPoint->lon - $minPoint->lon);
+ $p = ($maxPoint->lat * $minPoint->lon - $minPoint->lat * $maxPoint->lon) / ($minPoint->lon - $maxPoint->lon);
+ } else {
+ /* The line equation is y = p */
+ $m = null;
+ $p = $minPoint->lat;
+ $coef = (($minPoint->lon > $maxPoint->lon) ? 1 : -1);
+ }
+
+ /* For each point, check whether :
+ - it is on the right side of the line
+ - it is the farthest from the line
+ */
+ foreach ($pointList as $point) {
+ if (isset($m)) {
+ $dist = $isBottom * ($m * $point->lon - $point->lat + $p);
+ } else {
+ $dist = $coef * ($point->lon - $p);
+ }
+ if ($dist > 0
+ && $point->id != $minPoint->id
+ && $point->id != $maxPoint->id) {
+
+ array_push($outsideList, $point);
+ $outsideListCount++;
+
+ if ($dist > $farthestDist) {
+ $farthestPoint = $point;
+ $farthestDist = $dist;
+ }
+ }
+ }
+
+ if ($outsideListCount == 0) {
+ return array($minPoint);
+ } else if ($outsideListCount == 1) {
+ return array($minPoint, $outsideList[0]);
+ } else {
+ return array_merge(
+ quickHullCalc($outsideList, $outsideListCount, $minPoint, $farthestPoint, $isBottom),
+ quickHullCalc($outsideList, $outsideListCount, $farthestPoint, $maxPoint, $isBottom));
+ }
+ }
+
+ /* This function receives a list of points [lat, lon] and returns a list of points [lat, lon]
+ representing the minimal convex polygon containing the points */
+ function quickHull(&$pointList, $count) {
+
+ $msg= 'Quick count='.$count;
+
+ if ($count == 0) {
+ return array();
+ } else if ($count == 1) {
+ return array($pointList[0]);
+ } else if ($count == 2) {
+ return array($pointList[0], $pointList[1]);
+ }
+
+ /* retrieves the min and max points on the x axe */
+ $minPoint = $pointList[0];
+ $maxPoint = $pointList[0];
+
+ foreach ($pointList as $point) {
+ if ($point->lon < $minPoint->lon || ($point->lon == $minPoint->lon && $point->lat < $minPoint->lat)) {
+ $minPoint = $point;
+ }
+ if ($point->lon > $maxPoint->lon || ($point->lon == $maxPoint->lon && $point->lat > $maxPoint->lat)) {
+ $maxPoint = $point;
+ }
+ }
+
+ $bottomPoints = quickHullCalc($pointList, $count, $minPoint, $maxPoint, 1);
+ $topPoints = quickHullCalc($pointList, $count, $maxPoint, $minPoint, -1);
+ return array_merge($bottomPoints, $topPoints);
+ }
+
+
+
+
+ $GRID_MAX_ZOOM = 16;
+ $GRID_CELL_PIXEL = 90;
+
+ /* Check if parameters are not empty */
+ if ( !array_key_exists('bbox', $_GET)
+ || !array_key_exists('zoom', $_GET)
+ || !array_key_exists('width', $_GET)
+ || !array_key_exists('height', $_GET)) {
+ header('Content-type: application/json');
+ $result = '{"error":"bbox, zoom, width and height parameters are required. '
+ .(array_key_exists('bbox', $_GET) ? '' : 'bbox is empty. ')
+ .(array_key_exists('zoom', $_GET) ? '' : 'zoom is empty. ')
+ .(array_key_exists('width', $_GET) ? '' : 'width is empty. ')
+ .(array_key_exists('height', $_GET) ? '' : 'height is empty. ')
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ /* Check zoom */
+ $zoom = $_GET['zoom'];
+
+ if ( !is_numeric($zoom)
+ || intval($zoom) < 1
+ || intval($zoom) > 19) {
+ header('Content-type: application/json');
+ $result = '{"error":"unexpected zoom value : '
+ .htmlentities($zoom)
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ /* Check bounds box --> bbox=boundsSW.lng,boundsSW.lat,boundsNE.lng,boundsNE.lat */
+ $bbox = explode(',', $_GET['bbox']);
+
+ if ( !is_numeric($bbox[0]) || $bbox[0] > 180 // 0 = SW.lng
+ || !is_numeric($bbox[2]) || $bbox[2] < -180 // 2 = NE.lng
+ || !is_numeric($bbox[1]) || $bbox[1] < -90 || $bbox[1] > 90 // 1 = SW.lat
+ || !is_numeric($bbox[3]) || $bbox[3] < -90 || $bbox[3] > 90) { // 3 = NE.lat
+ header('Content-type: application/json');
+ $result = '{"error":"unexpected bbox longitude and latitude values : '
+ .'lon ['.htmlentities($bbox[0]).', '.htmlentities($bbox[2]).'], '
+ .'lat ['.htmlentities($bbox[1]).', '.htmlentities($bbox[3]).']'
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ if ($bbox[0] >= $bbox[2]) { // 0 = SW.lng | 2 = NE.lng
+ header('Content-type: application/json');
+ $result = '{"error":"min longitude greater than max longitude : '
+ .'lon ['.htmlentities($bbox[0]).', '.htmlentities($bbox[2]).']'
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ if ($bbox[1] >= $bbox[3]) { // 1 = SW.lat | 3 = NE.lat
+ header('Content-type: application/json');
+ $result = '{"error":"min latitude greater than max latitude : '
+ .'lat ['.htmlentities($bbox[1]).', '.htmlentities($bbox[3]).']'
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ $lonMin = $bbox[0]; // 0 = SW.lng
+ $lonMax = $bbox[2]; // 2 = NE.lng
+ $latMin = $bbox[1]; // 1 = SW.lat
+ $latMax = $bbox[3]; // 3 = NE.lat
+
+ $pixelWidth = (int) $_GET['width'];
+ $pixelHeight = (int) $_GET['height'];
+
+ if ($pixelWidth == 0 || $pixelHeight == 0) {
+ header('Content-type: application/json');
+ $result = '{"error":"width or height is null : '
+ .htmlentities($pixelWidth).'x'.htmlentities($pixelHeight)
+ .'"}';
+ echo $result;
+ exit;
+ }
+
+ $lonWidth = $lonMax - $lonMin; // NE.lng - SW.lng
+ $latHeight = $latMax - $latMin; // NE.lat - SW.lat
+
+ $divWCount = ((int) ($pixelWidth / $GRID_CELL_PIXEL)) + 1;
+ $divHCount = ((int) ($pixelHeight / $GRID_CELL_PIXEL)) + 1;
+
+ $divWidth = $lonWidth / $divWCount;
+ $divHeight = $latHeight / $divHCount;
+ $divDiag2 = ($divWidth * $divWidth) + ($divHeight * $divHeight);
+
+ /* Connect to database */
+ $mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, MYSQL_DB);
+ if($mysqli->connect_errno) {
+ header('Content-type: application/json');
+ $result = '{"error":"error while connecting to db : ' . $mysqli->error . '"}';
+ echo $result;
+ exit;
+ }
+
+ $rqtLonMin = $lonMin; // SW.lng
+ $rqtLonMax = $lonMax; // NE.lng
+
+ /* Indicates whether the map displays the -180/180° longitude */
+ if ($rqtLonMax - $rqtLonMin > 360) {
+ $rqtLonMin = -180;
+ $rqtLonMax = 180;
+ }
+
+ /* Select the nodes to be returned, and cluster them on a grid if necessary */
+ if ($rqtLonMin >= -180 && $lonMax <= 180) {
+ $sql='SELECT id, latitude, longitude
+ FROM position
+ WHERE latitude between ? and ?
+ AND longitude between ? and ?';
+ } else {
+ $sql='SELECT id, latitude, longitude
+ FROM position
+ WHERE latitude between ? and ?
+ AND (longitude between ? and 1800000000 OR longitude between -1800000000 and ?)';
+
+ while ($rqtLonMin < -180) {
+ $rqtLonMin += 360;
+ }
+ while ($rqtLonMax > 180) {
+ $rqtLonMax -= 360;
+ }
+ }
+
+ $rqtLonMin = bcmul($rqtLonMin, 10000000, 0); // SW.lng
+ $rqtLonMax = bcmul($rqtLonMax, 10000000, 0); // NE.lng
+ $rqtLatMin = bcmul($latMin, 10000000, 0); // SW.lat
+ $rqtLatMax = bcmul($latMax, 10000000, 0); // NE.lat
+
+ $resArray = array();
+ $nbFetch = 0;
+
+ if ($stmt = $mysqli->prepare($sql)) {
+ $stmt->bind_param('iiii', $rqtLatMin, $rqtLatMax, $rqtLonMin, $rqtLonMax); // SW.lat, NE.lat, SW.lng, NE.lng
+
+ $stmt->execute();
+
+ $stmt->bind_result($id, $latitude, $longitude);
+
+ while ($stmt->fetch()) {
+ $nbFetch++;
+
+ $latitude = bcdiv($latitude, 10000000, 7);
+ $longitude = bcdiv($longitude, 10000000, 7);
+
+ while ($longitude < $lonMin) { // $lonMin = SW.lng
+ $longitude += 360;
+ }
+ while ($longitude > $lonMax) { // $lonMax = NE.lng
+ $longitude -= 360;
+ }
+
+ /* Initialize the current point */
+ if ($zoom >= $GRID_MAX_ZOOM) {
+ array_push($resArray, array(
+ 'points' => array(new OsmPoint($id, $latitude, $longitude)),
+ 'latitude' => $latitude,
+ 'longitude' => $longitude,
+ 'count' => 1 ));
+ } else {
+ $posLat = (int) (($latitude - $latMin) / $divHeight); // $latMin = SW.lat
+ $posLon = (int) (($longitude - $lonMin) / $divWidth); // $lonMin = SW.lng
+ $pos = $posLon.','.$posLat;
+
+ if (!array_key_exists($pos, $resArray)) {
+ $resArray[$pos] = array(
+ 'points' => array(),
+ 'latitude' => 0,
+ 'longitude' => 0,
+ 'count' => 0,
+ 'grid' => $pos);
+ }
+
+ $elt = new OsmPoint($id, $latitude, $longitude);
+ array_push($resArray[$pos]['points'], $elt);
+
+ /* Increment the number of points */
+ $resArray[$pos]['count']++;
+ $resArray[$pos]['latitude'] += $latitude;
+ $resArray[$pos]['longitude'] += $longitude;
+ }
+ }
+
+ $stmt->close();
+ } else {
+ $mysqli->close();
+ header('Content-type: application/json');
+ $result = '{"error":"Error while request : ' . $mysqli->error . '"}';
+ echo $result;
+ exit;
+ }
+
+ /* Unify some clusters if nodes center are near */
+ $pointsCount = 0;
+ if ($zoom < $GRID_MAX_ZOOM) {
+ foreach($resArray as $val) {
+ mergeNeighborhood($resArray, $val['grid']);
+ $pointsCount += $val['count'];
+ }
+ }
+
+ $result='[';
+ $separator='';
+
+ /* Writing selected points */
+ $sql='SELECT k, v
+ FROM tag
+ WHERE id = ?
+ AND k NOT IN ("lat", "lon")';
+
+ $stmt = $mysqli->prepare($sql);
+ $stmt->bind_param('d', $id);
+ $stmt->bind_result($k, $v);
+
+ /* Writing grouped items or not */
+ foreach($resArray as $val) {
+ if ($val['count'] > 0) {
+ $result = $result.$separator
+ .'{"lat":"'.($val['latitude'] / $val['count']).'"'
+ .',"lon":"'.($val['longitude'] / $val['count']).'"';
+
+ if ($val['count'] == 1) {
+ $id = $val['points'][0]->id;
+ $result = $result.',"id":"'.$id.'"';
+
+ $stmt->execute();
+
+ while($stmt->fetch()) {
+ $result = $result.',"'.htmlentities($k).'":"'.htmlentities($v, ENT_COMPAT, 'UTF-8').'"';
+ }
+ } else {
+ $result = $result
+ .',"count":"'.$val['count'].'"'
+ .',"multi":"yes"'
+ .',"poly":[';
+
+ if ($pointsCount < MAX_POINTS_FOR_QUICKHULL) {
+ $convexPoly = quickHull($val['points'], $val['count']);
+ $sepPoly = '';
+ foreach($convexPoly as $point) {
+ $result = $result.$sepPoly.'{'
+ .'"lat":"'.$point->lat.'"'
+ .',"id":"'.$point->id.'"'
+ .',"lon":"'.$point->lon.'"}';
+ $sepPoly=',';
+ }
+ }
+ $result=$result.']';
+ }
+
+ $result = $result.'}';
+ $separator=',';
+ }
+ }
+
+ $stmt->close();
+
+ $result = $result . ']';
+
+ $mysqli->close();
+
+ header('Content-type: application/json; Charset : utf-8');
+ echo $result;
+?>
diff --git a/www/sunders/config.php.example b/www/sunders/config.php.example
new file mode 100644
index 0000000..6df3a3f
--- /dev/null
+++ b/www/sunders/config.php.example
@@ -0,0 +1,17 @@
+
diff --git a/www/sunders/css/spinner.css b/www/sunders/css/spinner.css
new file mode 100644
index 0000000..a687599
--- /dev/null
+++ b/www/sunders/css/spinner.css
@@ -0,0 +1,179 @@
+.spinner-bar {
+ display: flex;
+ justify-content: space-between;
+ width: 360px;
+}
+
+@keyframes spinner1 {
+ 0% { opacity: 1; }
+ 5% { opacity: 1; }
+ 10% { opacity: 0.2; }
+ 90% { opacity: 0.2; }
+ 95% { opacity: 1; }
+ 100% { opacity: 1; }
+}
+
+@keyframes spinner2 {
+ 0% { opacity: 0.2; }
+ 5% { opacity: 1; }
+ 10% { opacity: 1; }
+ 15% { opacity: 0.2; }
+ 85% { opacity: 0.2; }
+ 90% { opacity: 1; }
+ 95% { opacity: 1; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner3 {
+ 0% { opacity: 0.2; }
+ 5% { opacity: 0.2; }
+ 10% { opacity: 1; }
+ 15% { opacity: 1; }
+ 20% { opacity: 0.2; }
+ 80% { opacity: 0.2; }
+ 85% { opacity: 1; }
+ 90% { opacity: 1; }
+ 95% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner4 {
+ 0% { opacity: 0.2; }
+ 10% { opacity: 0.2; }
+ 15% { opacity: 1; }
+ 20% { opacity: 1; }
+ 25% { opacity: 0.2; }
+ 75% { opacity: 0.2; }
+ 80% { opacity: 1; }
+ 85% { opacity: 1; }
+ 90% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner5 {
+ 0% { opacity: 0.2; }
+ 15% { opacity: 0.2; }
+ 20% { opacity: 1; }
+ 25% { opacity: 1; }
+ 30% { opacity: 0.2; }
+ 70% { opacity: 0.2; }
+ 75% { opacity: 1; }
+ 80% { opacity: 1; }
+ 85% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner6 {
+ 0% { opacity: 0.2; }
+ 20% { opacity: 0.2; }
+ 25% { opacity: 1; }
+ 30% { opacity: 1; }
+ 35% { opacity: 0.2; }
+ 65% { opacity: 0.2; }
+ 70% { opacity: 1; }
+ 75% { opacity: 1; }
+ 80% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner7 {
+ 0% { opacity: 0.2; }
+ 25% { opacity: 0.2; }
+ 30% { opacity: 1; }
+ 35% { opacity: 1; }
+ 40% { opacity: 0.2; }
+ 60% { opacity: 0.2; }
+ 65% { opacity: 1; }
+ 70% { opacity: 1; }
+ 75% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner8 {
+ 0% { opacity: 0.2; }
+ 30% { opacity: 0.2; }
+ 35% { opacity: 1; }
+ 40% { opacity: 1; }
+ 45% { opacity: 0.2; }
+ 55% { opacity: 0.2; }
+ 60% { opacity: 1; }
+ 65% { opacity: 1; }
+ 70% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner9 {
+ 0% { opacity: 0.2; }
+ 35% { opacity: 0.2; }
+ 40% { opacity: 1; }
+ 45% { opacity: 1; }
+ 50% { opacity: 0.2; }
+ 55% { opacity: 1; }
+ 60% { opacity: 1; }
+ 65% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+@keyframes spinner10 {
+ 0% { opacity: 0.2; }
+ 40% { opacity: 0.2; }
+ 45% { opacity: 1; }
+ 55% { opacity: 1; }
+ 60% { opacity: 0.2; }
+ 100% { opacity: 0.2; }
+}
+
+.spinner {
+ animation-duration: 2s;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+.spinner1 {
+ animation-name: spinner1;
+}
+
+.spinner2 {
+ animation-name: spinner2;
+}
+
+.spinner3 {
+ animation-name: spinner3;
+}
+
+.spinner4 {
+ animation-name: spinner4;
+}
+
+.spinner5 {
+ animation-name: spinner5;
+}
+
+.spinner6 {
+ animation-name: spinner6;
+}
+
+.spinner7 {
+ animation-name: spinner7;
+}
+
+.spinner8 {
+ animation-name: spinner8;
+}
+
+.spinner9 {
+ animation-name: spinner9;
+}
+
+.spinner10 {
+ animation-name: spinner10;
+}
+
+/* MOBILE SETTINGS */
+@media only screen and (max-width: 600px) {
+ .spinner-bar {
+ width: 100%;
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+}
diff --git a/www/sunders/css/stats.css b/www/sunders/css/stats.css
new file mode 100644
index 0000000..b317fe6
--- /dev/null
+++ b/www/sunders/css/stats.css
@@ -0,0 +1,588 @@
+/* ICON COLORS */
+
+.icon0-color { color: #6c5d53; } /* gray */
+.icon1-color { color: #d40055; } /* red */
+.icon2-color { color: #0055d4; } /* blue */
+.icon3-color { color: #00d455; } /* green */
+.iconxxx-color { color: #a1a1b3; } /* text color */
+
+/* ICON FILL COLORS */
+
+.icon0-fill { fill: #6c5d53; } /* gray */
+.icon1-fill { fill: #d40055; } /* red */
+.icon2-fill { fill: #0055d4; } /* blue */
+.icon3-fill { fill: #00d455; } /* green */
+.iconxxx-fill { fill: #a1a1b3; } /* text color */
+
+/* ICON STROKE COLORS */
+
+.icon0-stroke { stroke: #6c5d53; } /* gray */
+.icon1-stroke { stroke: #d40055; } /* red */
+.icon2-stroke { stroke: #0055d4; } /* blue */
+.icon3-stroke { stroke: #00d455; } /* green */
+.iconxxx-stroke { stroke: #a1a1b3; } /* text color */
+
+/* ICON BACKGROUND COLORS */
+
+.icon0-bg { background: #6c5d53; } /* gray */
+.icon1-bg { background: #d40055; } /* red */
+.icon2-bg { background: #0055d4; } /* blue */
+.icon3-bg { background: #00d455; } /* green */
+.iconxxx-bg { background: #a1a1b3; } /* text color */
+
+/* ICON BORDER TOP COLORS */
+
+.icon0-bt { border-top: 1px solid #6c5d53; } /* gray */
+.icon1-bt { border-top: 1px solid #d40055; } /* red */
+.icon2-bt { border-top: 1px solid #0055d4; } /* blue */
+.icon3-bt { border-top: 1px solid #00d455; } /* green */
+.iconxxx-bt { border-top: 1px solid #a1a1b3; } /* text color */
+
+/* ICON BORDER BOTTOM COLORS */
+
+.icon0-bb { border-bottom: 1px solid #6c5d53; } /* gray */
+.icon1-bb { border-bottom: 1px solid #d40055; } /* red */
+.icon2-bb { border-bottom: 1px solid #0055d4; } /* blue */
+.icon3-bb { border-bottom: 1px solid #00d455; } /* green */
+.iconxxx-bb { border-bottom: 1px solid #a1a1b3; } /* text color */
+
+/* CHART COLORS */
+
+.color0-color { color: #6c5d53; } /* gray */
+.color1-color { color: rgb(117, 60,123); }
+.color2-color { color: rgb(179,121,216); }
+.color3-color { color: rgb(202, 45,197); }
+.color4-color { color: rgb(170, 0,120); }
+.color5-color { color: rgb(209, 15, 85); }
+.color6-color { color: rgb(236, 75, 24); }
+.color7-color { color: rgb(247,147, 30); }
+.color8-color { color: rgb(252,226,108); }
+.color9-color { color: rgb(198,242, 94); }
+.color10-color { color: rgb(159,196, 55); }
+.color11-color { color: rgb( 87,226, 76); }
+.color12-color { color: rgb( 64,164, 66); }
+.color13-color { color: rgb( 5,222,158); }
+.color14-color { color: rgb(196,252,240); }
+.color15-color { color: rgb(100,186,170); }
+.color16-color { color: rgb( 45,166,162); }
+.color17-color { color: rgb( 26,167,238); }
+.color18-color { color: rgb( 93,102,232); }
+.color19-color { color: rgb( 53, 60,152); }
+.color20-color { color: rgb( 53, 11,122); }
+.colorxxx-color { color: #a1a1b3; } /* text color */
+
+/* CHART FILL COLORS */
+
+.color0-fill { fill: #6c5d53; } /* gray */
+.color1-fill { fill: rgb(117, 60,123); }
+.color2-fill { fill: rgb(179,121,216); }
+.color3-fill { fill: rgb(202, 45,197); }
+.color4-fill { fill: rgb(170, 0,120); }
+.color5-fill { fill: rgb(209, 15, 85); }
+.color6-fill { fill: rgb(236, 75, 24); }
+.color7-fill { fill: rgb(247,147, 30); }
+.color8-fill { fill: rgb(252,226,108); }
+.color9-fill { fill: rgb(198,242, 94); }
+.color10-fill { fill: rgb(159,196, 55); }
+.color11-fill { fill: rgb( 87,226, 76); }
+.color12-fill { fill: rgb( 64,164, 66); }
+.color13-fill { fill: rgb( 5,222,158); }
+.color14-fill { fill: rgb(196,252,240); }
+.color15-fill { fill: rgb(100,186,170); }
+.color16-fill { fill: rgb( 45,166,162); }
+.color17-fill { fill: rgb( 26,167,238); }
+.color18-fill { fill: rgb( 93,102,232); }
+.color19-fill { fill: rgb( 53, 60,152); }
+.color20-fill { fill: rgb( 53, 11,122); }
+.colorxxx-fill { fill: #a1a1b3; } /* text color */
+
+/* CHART STROKE COLORS */
+
+.color0-stroke { stroke: #6c5d53; } /* gray */
+.color1-stroke { stroke: rgb(117, 60,123); }
+.color2-stroke { stroke: rgb(179,121,216); }
+.color3-stroke { stroke: rgb(202, 45,197); }
+.color4-stroke { stroke: rgb(170, 0,120); }
+.color5-stroke { stroke: rgb(209, 15, 85); }
+.color6-stroke { stroke: rgb(236, 75, 24); }
+.color7-stroke { stroke: rgb(247,147, 30); }
+.color8-stroke { stroke: rgb(252,226,108); }
+.color9-stroke { stroke: rgb(198,242, 94); }
+.color10-stroke { stroke: rgb(159,196, 55); }
+.color11-stroke { stroke: rgb( 87,226, 76); }
+.color12-stroke { stroke: rgb( 64,164, 66); }
+.color13-stroke { stroke: rgb( 5,222,158); }
+.color14-stroke { stroke: rgb(196,252,240); }
+.color15-stroke { stroke: rgb(100,186,170); }
+.color16-stroke { stroke: rgb( 45,166,162); }
+.color17-stroke { stroke: rgb( 26,167,238); }
+.color18-stroke { stroke: rgb( 93,102,232); }
+.color19-stroke { stroke: rgb( 53, 60,152); }
+.color20-stroke { stroke: rgb( 53, 11,122); }
+.colorxxx-stroke { stroke: #a1a1b3; } /* text color */
+
+/* CHART BACKGROUD COLORS */
+
+.color0-bg { background: #6c5d53; } /* gray */
+.color1-bg { background: rgb(117, 60,123); }
+.color2-bg { background: rgb(179,121,216); }
+.color3-bg { background: rgb(202, 45,197); }
+.color4-bg { background: rgb(170, 0,120); }
+.color5-bg { background: rgb(209, 15, 85); }
+.color6-bg { background: rgb(236, 75, 24); }
+.color7-bg { background: rgb(247,147, 30); }
+.color8-bg { background: rgb(252,226,108); }
+.color9-bg { background: rgb(198,242, 94); }
+.color10-bg { background: rgb(159,196, 55); }
+.color11-bg { background: rgb( 87,226, 76); }
+.color12-bg { background: rgb( 64,164, 66); }
+.color13-bg { background: rgb( 5,222,158); }
+.color14-bg { background: rgb(196,252,240); }
+.color15-bg { background: rgb(100,186,170); }
+.color16-bg { background: rgb( 45,166,162); }
+.color17-bg { background: rgb( 26,167,238); }
+.color18-bg { background: rgb( 93,102,232); }
+.color19-bg { background: rgb( 53, 60,152); }
+.color20-bg { background: rgb( 53, 11,122); }
+.colorxxx-bg { background: #a1a1b3; } /* text color */
+
+/* CHART BORDER TOP COLORS */
+
+.color0-bt { border-top: 1px solid #6c5d53; } /* gray */
+.color1-bt { border-top: 1px solid rgb(117, 60,123); }
+.color2-bt { border-top: 1px solid rgb(179,121,216); }
+.color3-bt { border-top: 1px solid rgb(202, 45,197); }
+.color4-bt { border-top: 1px solid rgb(170, 0,120); }
+.color5-bt { border-top: 1px solid rgb(209, 15, 85); }
+.color6-bt { border-top: 1px solid rgb(236, 75, 24); }
+.color7-bt { border-top: 1px solid rgb(247,147, 30); }
+.color8-bt { border-top: 1px solid rgb(252,226,108); }
+.color9-bt { border-top: 1px solid rgb(198,242, 94); }
+.color10-bt { border-top: 1px solid rgb(159,196, 55); }
+.color11-bt { border-top: 1px solid rgb( 87,226, 76); }
+.color12-bt { border-top: 1px solid rgb( 64,164, 66); }
+.color13-bt { border-top: 1px solid rgb( 5,222,158); }
+.color14-bt { border-top: 1px solid rgb(196,252,240); }
+.color15-bt { border-top: 1px solid rgb(100,186,170); }
+.color16-bt { border-top: 1px solid rgb( 45,166,162); }
+.color17-bt { border-top: 1px solid rgb( 26,167,238); }
+.color18-bt { border-top: 1px solid rgb( 93,102,232); }
+.color19-bt { border-top: 1px solid rgb( 53, 60,152); }
+.color20-bt { border-top: 1px solid rgb( 53, 11,122); }
+.colorxxx-bt { border-top: 1px solid #a1a1b3; } /* text color */
+
+/* CHART BORDER BOTTOM COLORS */
+
+.color0-bb { border-bottom: 1px solid #6c5d53; } /* gray */
+.color1-bb { border-bottom: 1px solid rgb(117, 60,123); }
+.color2-bb { border-bottom: 1px solid rgb(179,121,216); }
+.color3-bb { border-bottom: 1px solid rgb(202, 45,197); }
+.color4-bb { border-bottom: 1px solid rgb(170, 0,120); }
+.color5-bb { border-bottom: 1px solid rgb(209, 15, 85); }
+.color6-bb { border-bottom: 1px solid rgb(236, 75, 24); }
+.color7-bb { border-bottom: 1px solid rgb(247,147, 30); }
+.color8-bb { border-bottom: 1px solid rgb(252,226,108); }
+.color9-bb { border-bottom: 1px solid rgb(198,242, 94); }
+.color10-bb { border-bottom: 1px solid rgb(159,196, 55); }
+.color11-bb { border-bottom: 1px solid rgb( 87,226, 76); }
+.color12-bb { border-bottom: 1px solid rgb( 64,164, 66); }
+.color13-bb { border-bottom: 1px solid rgb( 5,222,158); }
+.color14-bb { border-bottom: 1px solid rgb(196,252,240); }
+.color15-bb { border-bottom: 1px solid rgb(100,186,170); }
+.color16-bb { border-bottom: 1px solid rgb( 45,166,162); }
+.color17-bb { border-bottom: 1px solid rgb( 26,167,238); }
+.color18-bb { border-bottom: 1px solid rgb( 93,102,232); }
+.color19-bb { border-bottom: 1px solid rgb( 53, 60,152); }
+.color20-bb { border-bottom: 1px solid rgb( 53, 11,122); }
+.colorxxx-bb { border-bottom: 1px solid #a1a1b3; } /* text color */
+
+body {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ background: #222233;
+ color: #a1a1b3;
+ font-family: sans-serif;
+}
+
+.light {
+ font-weight: 100;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+.right {
+ text-align: right;
+}
+
+text {
+ fill: #a1a1b3;
+}
+
+a {
+ color: #0192d9;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #a1a1b3;
+}
+
+a text {
+ fill: #0192d9;
+}
+
+div.selected {
+ border-bottom: solid 2px #0192d9;
+}
+
+div.unselected {
+ border-bottom: solid 2px #222233;
+}
+
+.header, .footer {
+ text-align: center;
+ margin: 0 10%;
+}
+
+.header:hover, .footer:hover {
+ background: rgba(161, 161, 179, 0.2);
+}
+
+.header {
+ margin-top: 60px;
+}
+
+.footer {
+ margin-bottom: 60px;
+}
+
+.distance {
+ margin: 0 10% 3% 10%;
+}
+
+.to-be-translated {
+ color: #d40055;
+}
+.to-be-translated a {
+ color: #ac39ac;
+ text-decoration: none;
+}
+
+.to-be-translated a:hover {
+ color: #d40055;
+}
+
+@media (orientation: landscape) {
+ .pie {
+ flex-direction: row;
+ }
+
+ .pie .pie-chart {
+ width: 50%;
+ }
+
+ .pie .pie-legend {
+ width: 40%;
+ padding-left: 10%;
+ }
+}
+
+@media (orientation: portrait) {
+ .pie {
+ flex-direction: column;
+ }
+
+ .pie > div {
+ width: 100%;
+ }
+
+ .pie .pie-legend {
+ margin-top: 50px;
+ }
+}
+
+/* TOTAL CHART */
+
+.vb-total {
+ margin: 10%;
+}
+
+.g-total > text {
+ text-anchor: middle;
+}
+
+.g-total .number {
+ font-size: 20px;
+}
+
+.g-total .text {
+ font-size: 3px;
+}
+
+/* NAVI */
+
+.navi-section-check {
+ display: none;
+}
+
+.navi-section-check + .navi-section-toggle {
+ cursor: pointer;
+ display: block;
+}
+
+/* checkbox = false --> hide navi section */
+.navi-section-check ~ .navi-section {
+ display: none;
+}
+
+/* checkbox = true --> hide toggle button */
+.navi-section-check:checked + .navi-section-toggle {
+ display: none;
+}
+
+/* checkbox = true --> show navi section */
+.navi-section-check:checked ~ .navi-section {
+ display: block;
+}
+
+.navi-section-toggle {
+ margin: 0 10%;
+}
+
+.navi-section-toggle:hover {
+ background: rgba(161, 161, 179, 0.2);
+}
+
+.navi-section-toggle .navi-text {
+ fill: #0192d9;
+ font-size: 3px;
+}
+
+.navi-row {
+ display: flex;
+ flex-direction: row;
+ margin: 0 10%;
+}
+
+.navi-row.cats .navi-text {
+ font-size: 10px;
+}
+
+.navi-row.years .navi-text, .navi-row.months .navi-text {
+ font-size: 17px;
+}
+
+.navi-row.lines .navi-text {
+ font-size: 6.5px;
+}
+
+.navi-element:hover {
+ background: rgba(161, 161, 179, 0.2);
+}
+
+.navi-text {
+ text-anchor: middle;
+ font-weight: lighter;
+}
+
+/* PIE CHART */
+
+.pie {
+ display: flex;
+ align-items: flex-start;
+ margin: 10%;
+}
+
+.pie-slice-link {
+ cursor: pointer;
+}
+
+.pie-text {
+ text-anchor: middle;
+ font-size: 6px;
+}
+
+.g-pie path {
+ stroke: #222233;
+}
+
+.g-pie .donut-hole {
+ fill: #222233;
+}
+
+.pie-legend-row {
+ margin-bottom: 10px;
+}
+
+.pie-legend-row > div {
+ display: flex;
+ flex-direction: row;
+}
+
+.square {
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.square-double {
+ min-width: 40px;
+ min-height: 20px;
+}
+
+/* PIE CHART LEGEND */
+
+.pie-legend-section-check {
+ display: none;
+}
+
+/* checkbox = false
+ -- show section 'less'
+ -- show button 'more'
+ -- hide section 'more'
+ -- hide button 'less' */
+.pie-legend-section-check ~ .pie-legend-less {
+ display: block;
+}
+
+.pie-legend-section-check ~ .pie-legend-section-toggle-more {
+ display: block;
+}
+
+.pie-legend-section-check ~ .pie-legend-more {
+ display: none;
+}
+
+.pie-legend-section-check ~ .pie-legend-section-toggle-less {
+ display: none;
+}
+
+/* checkbox = true
+ -- show section 'more'
+ -- show button 'less'
+ -- hide section 'less'
+ -- hide button 'more' */
+
+.pie-legend-section-check:checked ~ .pie-legend-more {
+ display: block;
+}
+
+.pie-legend-section-check:checked ~ .pie-legend-section-toggle-less {
+ display: block;
+}
+
+.pie-legend-section-check:checked ~ .pie-legend-less {
+ display: none;
+}
+
+.pie-legend-section-check:checked ~ .pie-legend-section-toggle-more {
+ display: none;
+}
+
+.pie-legend label {
+ cursor: pointer;
+ height: 40px;
+ background-repeat: no-repeat;
+ background-position: 40px;
+ background-color: transparent;
+}
+
+.pie-legend-section-toggle-more {
+ background-image: url('../images/button_more_blue.png');
+}
+
+.pie-legend-section-toggle-more:hover {
+ background-image: url('../images/button_more_gray.png');
+}
+
+.pie-legend-section-toggle-less {
+ background-image: url('../images/button_less_blue.png');
+}
+
+.pie-legend-section-toggle-less:hover {
+ background-image: url('../images/button_less_gray.png');
+}
+
+/* TIME CHART */
+
+.time {
+ display: flex;
+ flex-direction: column;
+ margin: 10%;
+}
+
+.time-chart {
+ margin-bottom: 50px;
+}
+
+.line-text {
+ text-anchor: middle;
+ font-weight: lighter;
+}
+
+.g-time {
+ fill: none;
+ stroke-width: 4px;
+}
+
+.day .g-time {
+ stroke-width: 10px;
+}
+
+.h-grid, .v-grid {
+ stroke: #a1a1b3;
+}
+
+.h-grid {
+ stroke-width: 2px;
+ stroke-opacity: 0.1;
+}
+
+.v-grid {
+ stroke-dasharray:0.5%, 1%;
+ stroke-opacity: 0.2;
+}
+
+.day .h-grid {
+ stroke-width: 5px;
+}
+
+.day .v-grid {
+ stroke-width: 3px;
+}
+
+.v-label {
+ text-anchor: middle;
+}
+
+.time-legend table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+.time-legend .title {
+ padding-bottom: 50px;
+ text-align: center;
+ font-size: 1.2rem;
+}
+
+.time .row-distance {
+ font-size: 0.2rem;
+}
+
+.time .row-title {
+ font-size: 0.8rem;
+}
+
+tfoot td {
+ font-weight: bold;
+ text-align: center;
+ padding-top: 8px;
+}
+
+/*.even-bg {
+ background: rgba(161, 161, 179, 0.1);
+}*/
diff --git a/www/sunders/css/sunders.css b/www/sunders/css/sunders.css
new file mode 100644
index 0000000..8011f9f
--- /dev/null
+++ b/www/sunders/css/sunders.css
@@ -0,0 +1,766 @@
+/* COLORS
+background: #222233 / 34, 34, 51
+text: #a1a1b3 / 161,161,179
+links: #0192d9 / 1,146,217
+
+beige: #f1eee8 / 241,238,232
+lightblue: #0192d9 / 1,146,217
+darkblue: #050585 / 5, 5,133
+gray: #d9d0c9 / 217,208,201
+purple: #ac39ac / 172, 57,172
+
+red icon: #d40055 / 212, 0, 85
+blue icon: #0055d4 / 0, 85,212
+green icon: #00d455 / 0,212, 85
+gray icon: #6c5d53 / 108, 93, 83
+yellow icon: #ffdd55 / 255,221, 85 */
+
+html {
+ height: 100%;
+}
+
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+ font-family: sans-serif;
+}
+
+#map {
+ width: 100%;
+ height: 100%;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+.monospace {
+ font-family: monospace;
+ font-size: 1.5em;
+}
+
+.text-small {
+ font-size: 0.8em;
+}
+
+.text-medium {
+ font-size: 0.9em;
+}
+
+.w-20 {
+ width: 20px;
+}
+
+.w-45 {
+ width: 45px;
+ min-width: 45px;
+}
+
+.w-120 {
+ width: 120px;
+ min-width: 120px;
+}
+
+.w-240 {
+ width: 240px;
+}
+
+.w-260 {
+ width: 260px;
+}
+
+.w-315 {
+ width: 315px;
+}
+
+.w-340 {
+ width: 340px;
+}
+
+.pl-20 {
+ padding-left: 20px;
+}
+
+.slider-toggle-input[type=checkbox] {
+ position: absolute;
+ opacity: 0;
+}
+
+.slider-toggle-input[type=checkbox]:checked ~ .slider-overlay,
+.slider-toggle-input[type=checkbox]:checked ~ .slider {
+ transform: translate3d(0, 0, 0);
+}
+
+.slider-toggle-input[type=checkbox]:checked ~ .slider-toggle-button {
+ transform: translate3d(-490px, 0, 0) rotate(180deg);
+}
+
+.slider-toggle-button {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ z-index: 250000;
+ cursor: pointer;
+ transform-origin: 20px 20px;
+ transition: transform .8s;
+}
+
+.slider-toggle-bar {
+ display: none;
+}
+
+.slider-overlay {
+ position: absolute;
+ right: 30px;
+ width: 470px;
+ z-index: 200000;
+ transform: translate3d(490px, 0, 0);
+ transition: all .8s;
+}
+
+/*#news.slider-overlay {
+ display: flex;
+ align-items: flex-end;
+ top: 95px;
+ right: -255px;
+ color: #ffdd55;
+ font-weight: bold;
+}
+
+#news.slider-overlay .text {
+ padding-left: 10px;
+}*/
+
+#anchorbar.slider-overlay {
+ top: 10px;
+}
+
+#buttonbar.slider-overlay {
+ top: 52px;
+}
+
+.topbar {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ position: absolute;
+ width: 470px;
+ height: 40px;
+ background: #0192d9;
+ color: #f1eee8;
+}
+
+.topbar.anchorbar {
+ background-color: rgba(1, 146, 217, 0.9);
+}
+
+.topbar.buttonbar {
+ background-color: rgba(1, 146, 217, 0.6);
+}
+
+.mobile-bar-padding {
+ width: 0;
+}
+
+.bar-button {
+ width: 80px;
+ height: 30px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: transparent;
+ border: 1px solid transparent;
+ cursor: pointer;
+}
+
+.bar-button:hover {
+ border: 1px solid #f1eee8;
+}
+
+.bar-button.main {
+ width: 120px;
+}
+
+.bar-button.search {
+ background-image: url('../images/button_search.png');
+}
+
+.bar-button.stats {
+ background-image: url('../images/button_stats.png');
+}
+
+.bar-button.permalink {
+ background-image: url('../images/button_permalink.png');
+}
+
+.search-group {
+ position: relative;
+}
+
+#search-overlay {
+ display: none;
+ position: absolute;
+ top: 42px;
+ width: 430px;
+ padding: 30px 20px;
+ background-color: rgba(1, 146, 217, 0.9);
+ color: #f1eee8;
+}
+
+.search-field-row {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#search-input {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #222233;
+ border: 1px solid #f1eee8;
+ border-radius: 0px;
+ border-right: none;
+ color: #f1eee8;
+ width: 320px;
+ height: 30px;
+ line-height: 30px;
+ padding: 0px 10px;
+ font-family: monospace;
+ font-weight: bold;
+}
+
+#search-input:focus {
+ outline: 0;
+}
+
+.search-button {
+ width: 34px;
+ height: 32px;
+ background-image: url('../images/button_search.png');
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: #222233;
+ border: 1px solid #f1eee8;
+ border-left: 1px solid transparent;
+ color: #f1eee8;
+ cursor: pointer;
+}
+
+.search-button:hover {
+ border-left: 1px solid #f1eee8;
+}
+
+.search-button:focus {
+ outline: 0;
+}
+
+#search-results-overlay {
+ display: none;
+ position: absolute;
+ top: 136px;
+ bottom: 0;
+ width: 470px;
+ overflow-y: auto;
+ background: #0192d9;
+ background-color: rgba(1, 146, 217, 0.9);
+ color: #f1eee8;
+}
+
+#search-spinner-block {
+ display: none;
+ padding: 20px 0;
+}
+
+#search-spinner {
+ display: flex;
+ justify-content: center;
+}
+
+#search-results-list-block {
+ display: none;
+ padding: 20px 0;
+}
+
+#search-results-list {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.search-result {
+ width: 370px;
+ padding: 15px 20px;
+ border: 1px solid transparent;
+ border-bottom: 1px dotted #f1eee8;
+ line-height: 25px;
+ cursor: pointer;
+}
+
+.search-result:first-child {
+ border-top: 1px dotted #f1eee8;
+}
+
+.search-result:hover {
+ background-color: #222233;
+}
+
+.search-more {
+ width: 100px;
+ height: 30px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: transparent;
+ border: 1px solid transparent;
+ cursor: pointer;
+}
+
+.search-more:hover {
+ border: 1px solid #f1eee8;
+}
+
+.search-more.search-previous {
+ background-image: url('../images/button_previous.png');
+ margin-bottom: 10px;
+}
+
+.search-more.search-next {
+ background-image: url('../images/button_next.png');
+ margin-top: 10px;
+}
+
+.close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 20px;
+ height: 20px;
+ background-image: url('../images/close.png');
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: transparent;
+ border: 1px solid transparent;
+ cursor: pointer;
+}
+
+.close:hover {
+ border: 1px solid #f1eee8;
+}
+
+.language-toggle-input {
+ display: none;
+}
+
+.language-toggle-input[type=checkbox]:checked ~ .language-toggle-button #language li ul {
+ display: block;
+}
+
+#language {
+ background-image: url('../images/button_language.png');
+ list-style:none;
+ padding: 0;
+ z-index: 300000;
+}
+
+#language li {
+ position: relative;
+ text-align: center;
+}
+
+#language ul {
+ display: none;
+ list-style: none;
+ position: absolute;
+ padding: 0;
+}
+
+#language ul a {
+ color: #f1eee8;
+ font-family: monospace;
+ font-size: 1em;
+ text-decoration: none;
+}
+
+#language ul li {
+ width: 80px;
+ height: 30px;
+ line-height: 30px;
+ margin-top: 2px;
+ background-color: rgba(1, 146, 217, 0.9);
+ border: 1px solid #f1eee8;
+}
+
+#language ul a:first-child li {
+ margin-top: 18px;
+}
+
+#language ul li:hover {
+ background-color: rgba(1, 146, 217, 0.6);
+}
+
+.language-current {
+ font-weight: bold;
+}
+
+.slider {
+ display: flex;
+ flex-direction: column;
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ width: 500px;
+ height: 100%;
+ z-index: 100000;
+ background: #f1eee8;
+ background-color: rgba(34, 34, 51, 0.95);
+ color: #a1a1b3;
+ overflow-y: auto;
+ transform: translate3d(490px, 0, 0);
+ transition: all .8s;
+}
+
+.slider a {
+ color: #0192d9;
+ text-decoration: none;
+}
+
+.slider a:hover {
+ color: #a1a1b3;
+}
+
+.slider-item {
+ box-sizing: border-box;
+ flex-shrink: 0;
+ padding-left: 40px;
+ padding-right: 40px;
+}
+
+.slider-logo {
+ padding: 140px 0 20px 0;
+}
+
+.slider-logo img {
+ display: block;
+ margin: 0 auto;
+}
+
+.slider-title {
+ padding-top: 120px;
+ padding-bottom: 20px;
+ padding-left: 40px;
+}
+
+.slider-subtitle {
+ text-align: center;
+}
+
+.slider-translation {
+ text-align: center;
+ font-style: italic;
+ padding: 20px 40px 0 40px;
+}
+
+.slider-list-title {
+ padding-top: 40px;
+ padding-bottom: 20px;
+ padding-left: 20px;
+ font-weight: bold;
+}
+
+.text-small .slider-list-title {
+ font-size: 1.25em;
+}
+
+.slider-list-section {
+ padding-left: 20px;
+ font-weight: bold;
+ font-size: 0.9em;
+}
+
+.slider-list-section-toggle {
+ display: none;
+}
+
+.slider-list-section-toggle + .slider-list-section {
+ cursor: pointer;
+ display: block;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+.slider-list-section-toggle + .slider-list-section + div {
+ display: none;
+}
+
+.slider-list-section-toggle:checked + .slider-list-section + div {
+ display: block;
+}
+
+.slider-list-section-toggle + .slider-list-section:before {
+ content: "\002B\2000"; /*plus icon + whitespace*/
+ display: block;
+ float: left;
+}
+
+.slider-list-section-toggle:checked + .slider-list-section:before {
+ content: "\2212\2000"; /*minus icon + whitespace*/
+}
+
+.slider-list-entry {
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ padding-top: 10px;
+ padding-left: 20px;
+}
+
+.example-boxes {
+ display: flex;
+ flex-direction: row;
+ width: 100%;
+}
+
+.example-boxes .example-box {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+}
+
+.example-boxes .example-box .example-box-image {
+ border: 1px solid #a1a1b3;
+ margin: 5px;
+ padding: 5px;
+}
+
+.example-boxes .example-box .example-box-description {
+ margin: 10px;
+}
+
+.slider-footer {
+ padding-top: 40px;
+ padding-bottom: 40px;
+ text-align: center;
+}
+
+.slider-footer-title {
+ font-weight: bold;
+ padding-bottom: 10px;
+}
+
+.slider-credit-type {
+ padding-top: 6px;
+}
+
+.slider-onion-link {
+ padding-top: 6px;
+ font-size: 1.5em;
+}
+
+/* MOBILE SETTINGS */
+@media only screen and (max-width: 600px) {
+ .slider,
+ .slider-item,
+ .slider-list-entry .fieldofview,
+ .slider-overlay,
+ .slider-toggle-bar,
+ .topbar,
+ .w-240,
+ .w-260,
+ .w-315,
+ .w-340 {
+ width: 100%;
+ }
+
+ .slider-toggle-button {
+ display: none;
+ }
+
+ .slider-toggle-bar {
+ display: inherit;
+ }
+
+ .slider-overlay {
+ right: 0;
+ }
+
+ .slider-toggle-bar {
+ position: absolute;
+ bottom: 16px;
+ z-index: 250000;
+ cursor: pointer;
+ background-color: rgba(1, 146, 217, 0.6);
+ line-height: 40px;
+ text-align: center;
+ font-weight: bold;
+ color: #f1eee8;
+ }
+
+ .slider-toggle-bar.toggle-false {
+ display: none;
+ }
+
+ .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-overlay {
+ width: 470px;
+ right: 20px;
+ }
+
+ .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-toggle-bar.toggle-false {
+ display: inherit;
+ }
+
+ .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-toggle-bar.toggle-true {
+ display: none;
+ }
+
+ .topbar {
+ position: inherit;
+ }
+
+ .slider {
+ transform: translate3d(500px, 0, 0);
+ }
+
+ .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider {
+ right: 0px;
+ width: 500px;
+ }
+
+ .slider-item, .slider-translation {
+ padding-left: 20px;
+ padding-right: 20px;
+ }
+
+ .slider-list-entry,
+ .slider-list-section,
+ .slider-list-title {
+ padding-left: 10px;
+ }
+
+ .example-boxes {
+ flex-direction: column;
+ }
+
+ .example-boxes .example-box {
+ flex-direction: row;
+ }
+
+ .example-boxes .example-box .example-box-image {
+ margin-left: 10px;
+ }
+
+ .slider-footer {
+ padding-bottom: 80px;
+ }
+
+ #search-overlay {
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+ }
+
+ .search-field-row {
+ padding-right: 40px;
+ padding-left: 40px;
+ }
+
+ #search-results-overlay {
+ width: 100%;
+ }
+
+ .search-result {
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+ }
+
+ .search-result div {
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+}
+
+/* Label with number of composite cameras. */
+.composite-cameras-label {
+ background-color: rgba(1, 146, 217, 0.66);
+ background-clip: padding-box;
+ color: #fff;
+ border: 4px solid rgba(0,0,0,0.25);
+ border-radius: 4px;
+ font-weight: bold;
+ padding: 3px 6px;
+ box-shadow: none;
+}
+
+.composite-cameras-label.leaflet-tooltip-right::before {
+ left: -4px;
+ border-right-color: rgba(0,0,0,0.25);
+}
+
+.composite-cameras-label.leaflet-tooltip-left::before {
+ right: -4px;
+ border-left-color: rgba(0,0,0,0.25);
+}
+
+.cover {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ background: #222233;
+ color: #a1a1b3;
+}
+
+.to-be-translated {
+ color: #d40055;
+}
+.to-be-translated a {
+ color: #ac39ac;
+ text-decoration: none;
+}
+
+.to-be-translated a:hover {
+ color: #d40055;
+}
+
+/* overwrite leaflet styles */
+
+.leaflet-popup-content-wrapper {
+ background: rgba(34, 34, 51, 0.95);
+ color: #a1a1b3;
+ font-size: 0.9rem;
+ border-radius: 5px;
+}
+
+.leaflet-popup-content-wrapper a {
+ color: #0192d9;
+ text-decoration: none;
+}
+
+.leaflet-popup-content-wrapper a:hover {
+ color: #a1a1b3;
+}
+
+.leaflet-popup-tip {
+ background: rgba(34, 34, 51, 0.95);
+ color: #a1a1b3;
+}
+
+.leaflet-bar a {
+ background: rgba(34, 34, 51, 0.95);
+ color: #a1a1b3;
+}
+
+.leaflet-bar a:hover {
+ background: rgba(34, 34, 51, 0.8);
+ color: #a1a1b3;
+}
+
+.leaflet-container a.leaflet-popup-close-button {
+ top: 4px;
+ right: 4px;
+}
+
diff --git a/www/sunders/de/camera.php b/www/sunders/de/camera.php
new file mode 100644
index 0000000..d85146c
--- /dev/null
+++ b/www/sunders/de/camera.php
@@ -0,0 +1,3 @@
+
diff --git a/www/sunders/de/images b/www/sunders/de/images
new file mode 120000
index 0000000..e4c5bd0
--- /dev/null
+++ b/www/sunders/de/images
@@ -0,0 +1 @@
+../images/
\ No newline at end of file
diff --git a/www/sunders/de/index.php b/www/sunders/de/index.php
new file mode 100644
index 0000000..624af27
--- /dev/null
+++ b/www/sunders/de/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/de/stats/index.php b/www/sunders/de/stats/index.php
new file mode 100644
index 0000000..2ed4131
--- /dev/null
+++ b/www/sunders/de/stats/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/decode-json.php b/www/sunders/decode-json.php
new file mode 100644
index 0000000..2786de7
--- /dev/null
+++ b/www/sunders/decode-json.php
@@ -0,0 +1,10 @@
+
diff --git a/www/sunders/en/camera.php b/www/sunders/en/camera.php
new file mode 100644
index 0000000..d85146c
--- /dev/null
+++ b/www/sunders/en/camera.php
@@ -0,0 +1,3 @@
+
diff --git a/www/sunders/en/images b/www/sunders/en/images
new file mode 120000
index 0000000..e4c5bd0
--- /dev/null
+++ b/www/sunders/en/images
@@ -0,0 +1 @@
+../images/
\ No newline at end of file
diff --git a/www/sunders/en/index.php b/www/sunders/en/index.php
new file mode 100644
index 0000000..1471328
--- /dev/null
+++ b/www/sunders/en/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/en/stats/index.php b/www/sunders/en/stats/index.php
new file mode 100644
index 0000000..9276942
--- /dev/null
+++ b/www/sunders/en/stats/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/es/camera.php b/www/sunders/es/camera.php
new file mode 100644
index 0000000..d85146c
--- /dev/null
+++ b/www/sunders/es/camera.php
@@ -0,0 +1,3 @@
+
diff --git a/www/sunders/es/images b/www/sunders/es/images
new file mode 120000
index 0000000..e4c5bd0
--- /dev/null
+++ b/www/sunders/es/images
@@ -0,0 +1 @@
+../images/
\ No newline at end of file
diff --git a/www/sunders/es/index.php b/www/sunders/es/index.php
new file mode 100644
index 0000000..20ea3d6
--- /dev/null
+++ b/www/sunders/es/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/es/stats/index.php b/www/sunders/es/stats/index.php
new file mode 100644
index 0000000..2ce49c5
--- /dev/null
+++ b/www/sunders/es/stats/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/favicon.ico b/www/sunders/favicon.ico
new file mode 100644
index 0000000..6a84cc4
Binary files /dev/null and b/www/sunders/favicon.ico differ
diff --git a/www/sunders/favicon.png b/www/sunders/favicon.png
new file mode 100644
index 0000000..ac0b662
Binary files /dev/null and b/www/sunders/favicon.png differ
diff --git a/www/sunders/files/license_Leaflet.txt b/www/sunders/files/license_Leaflet.txt
new file mode 100644
index 0000000..0cb916b
--- /dev/null
+++ b/www/sunders/files/license_Leaflet.txt
@@ -0,0 +1,23 @@
+Copyright (c) 2010-2021, Vladimir Agafonkin
+Copyright (c) 2010-2011, CloudMade
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are
+permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of
+ conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ of conditions and the following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/www/sunders/files/license_Semicircle.txt b/www/sunders/files/license_Semicircle.txt
new file mode 100644
index 0000000..6afb772
--- /dev/null
+++ b/www/sunders/files/license_Semicircle.txt
@@ -0,0 +1,20 @@
+Copyright 2013 - 2017, Jieter
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/www/sunders/files/license_osmcamera.txt b/www/sunders/files/license_osmcamera.txt
new file mode 100644
index 0000000..419b85c
--- /dev/null
+++ b/www/sunders/files/license_osmcamera.txt
@@ -0,0 +1,9 @@
+* The leafletembed.js file is licensed under CC-by-sa (http://creativecommons.org/licenses/by-sa/2.0/), as it was initially derived from code found in that article : http://switch2osm.org/using-tiles/getting-started-with-leaflet/
+
+* The images *fixed*png and speedCamera.png in the www/images directory are also licensed under that CC-by-sa (http://creativecommons.org/licenses/by-sa/2.0/), as they are derived from the OpenStreetMap wiki (http://wiki.openstreetmap.org/wiki/File:Surveillance.png and http://wiki.openstreetmap.org/wiki/File:Fixed_speed_camera.png).
+
+* The Mobile-detect.php file is developped by Victor Stanciu and Serban Ghita and is licensed under MIT license (http://opensource.org/licenses/mit-license.php).
+
+* The preset file www/camera_preset_all.xml is derived from the one of JOSM, and is licensed under GPL v3 (http://www.gnu.org/copyleft/gpl.html)
+
+* Everything else is under the WTFPL (http://en.wikipedia.org/wiki/WTFPL).
diff --git a/www/sunders/files/sunders.asc b/www/sunders/files/sunders.asc
new file mode 100644
index 0000000..da0b837
--- /dev/null
+++ b/www/sunders/files/sunders.asc
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBF5kIygBEADC30garhcvDYy/HZd9Rq3jA2P5uD0CtgCQFV8H2RdWq4IeyxU1
+2HUsNO2w/Hhcea9eoAL3vyNlLwmhqH+DrH1T03vqs6s9zvhN5zeA7M/2iHla02BT
+NV3MrG0vSaLZI8MiGvDNOQ4l8RIP8miefutxlg63xcmqKsvFUaH3r+zXp7Xv/nBE
+53ICUj9i0vfqdUSSNq7yuc9S+nyzMbuwptCAYbVsuzdC/n8HJ3a/egXUvbWCMuZa
+zbWkwjc9JC7b7T3XrhRBT4j3FxMLw5z/bi5fgLgWx/ZUjSKRXmlEHfAqTpRxSDww
+358qnaPHP/VYRYtYFSttbIroWPDclWPlaUIpmkOxkbMm5oTXdqyvgt3VFefZFtxa
+l/et4/nsq0fV8FvTtTAEWTLCWmc5A5UGiE11qlTeC9ZzYGv+N0eXx9VvS30+Se+z
+SAkfUvxTA+dlEHrpizC7MxgBHUldN2NxcHE6T21FCqZgbY8xDHRziftAt6ajNeSP
+oKwQX30lBKqHq0u25LdBcpheNkcNG0r05/33/uuZbCE9Bt4wTeuxIESn+gc0Jwk6
+wD/kWox3eEz7rGSAp/LW8bgRoU3JXjEtb/RZ85wbGGMrHDnOuItgfYqy3dgILbYN
+xosOHIdYjama6luW7KPb6gIME2T7N5obWF59rVrVetZsfq5F17GQNFp0SwARAQAB
+tDpTdXJ2ZWlsbGFuY2UgdW5kZXIgU3VydmVpbGxhbmNlIDxoZWxsb0BzdW5kZXJz
+LnViZXIuc3BhY2U+iQJUBBMBCgA+AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheA
+FiEEglIBC/3ZXWzd1HQVOABXT/sARiIFAmbeAQQFCQryrdwACgkQOABXT/sARiL8
+OA/+Ox8b1spu4s57v48zwqSjOzngSD/t0KMmLnomAeqkTLEvnbH8GQVUMpzJoJve
+keE56bstpHcwGYlhmoLOhc0jeNLnNFumFD0j6fEfNsUjZOmXeMmA+ZOhCS1TL5O3
+dliGrlxSZX9njwhRQp2eNCZ/PIHN9YExM1J6ERnkczmsIiyXLlN34a5C39oRucmF
+gVIqe4LDdBZpTSTdEoF1JBGnBwEOvdbrLe6j7nS9Fz4/M7CLtmqPMR2SnXiymrtb
+7XIB5TJDe08NvuroHRbu3prvECX5pl6bLRrj/55Bxyq3BY5FsrdmZAtxYfZqcDQO
+spySu7FYwT7Khoqu8SYpt3wS8hPkKejOmHngUkiwUzM4x/V4qbQRqhEoMpAYCCCZ
+lnfdXcgXT/AnItAInqQ2tOx0ThNWJbyJVWveU/zNPQCUh0i6RGyGQLQ2hyizgX2p
+9rHUqJ/FsqjZIsl2AwLmQsQ2UvhveQKLTGLu1Jemk84KjAkxbf/80929mXgv/Z66
+5m4KMOsGAT4t6j3v70nKLtLfv1NUUmOopdgWSRNyFwRlNBI+e76IzMwvyVmsRVox
+rbu8eAWq1xZUGlzTVh6YoJZz+FCSH9NO4Nx9qrHnBlStot4tXqhoDYIBDAFDty1p
+hEgZLLI9PCFavCd+TCOCofBe4KzIIGVY1yFygBbuYvk1grK5Ag0EXmQjKAEQAMG8
+i6Bq2fpbwqByysGCiSqt/BxofpgPC+Ctdte3524w6KognVfPYABvU/U2BvtMhJ8Z
+2ZQW0A42UCPS5ornmzFdNG5y5VxjshrkvI2kZK/bwc+8kG3XY8ocBGMbC2sUrvVR
+ff2w9KhAUPHFI0vsotvsmzoE5C1gjllB98gA83lWoHvEsETZ44SsGv9ozFVuNx1T
+KIdmCcU9xWMxCoEA6PFtQJquH+AzUG+3j8gA/zTPkwKa9i4GnanJYgff0iXu05pe
++SOb7vvaLMzJ0bl3/2Rghl0aoVJIO9uDF0vq18ugD0YGRRlqn4Ye0DW2N08WzB8s
+JEGKvdDArYkhj/S7RMBTJyHrQ8fhmB/oGNjiUMghc7Cg18XaIfNrYln/8+JRhPuQ
+w8p9C3CjN8JsmiUz07ZHOf0zPHTa9UgpNO+Nl7he/X9g9oR9eiLiAdKK7Se0W9Kk
+Q6yfIIgO/dWNO4g6ye256YC/1a0sxtLis3k9mWKxPOBCh7y1DKcoh1Fn0LGhc0wG
+pXddrE9pTvSguV/PnyxcEmqOBk4Z2PVOlRuD9GBYWkfjAL+qPJ3AZvbC+JzgqQ5y
+prqeECFw/ndsz2maEM+1XlpOSY9/gbeTEJDfz7khza8pljhkX/1XzLRRc9u546hE
+C+P6lDpHQWp2vkeZv6a4qKWqIDMFwWMAIgK5Z9TRABEBAAGJAjwEGAEKACYCGwwW
+IQSCUgEL/dldbN3UdBU4AFdP+wBGIgUCZt4ByQUJCvKuoQAKCRA4AFdP+wBGIgXp
+D/4gnMLj0vMToXgXPy9P+K7Z8kic8hayAOTturDhK+8mISCF8GMIHyHFuKJJShBv
+oQd9Y+jniTBpmq0rUggLKXABMUkSWRnvMfKG2E1Hk4PRgjby4kFrvhSNg7JMpJHF
+iemR5iAXYsZMxYg15P2Oi7Yo4Ggrw02tXsGGk6qoZIV+1pWNFmSP4/ymsA7edcAW
+BlKMk6I2JHBVi4ek2tj4pKWoWzgGRHzP4OS1RfIXgOBMllKJxEl8l1hQXOMgEiCx
+uLtmzQyKlJgEWII5oQOxmezVW44PP2sioXxHHNXrfH5No1JXF0gZwMemDfP15Yej
+qraFNSp6v8UTCzbLzJcyoEnV6WGC7So6AV0X8KnHR+Ee/uL5K7HMpyXIE2NmQp3G
+nRv3T3xZOEmF+H6oj3babDsBfuZ3xUqj+BgDRMYFA3XfNrsAh7ZE5GM4ecoQf0Hg
+mFhkgvQ1FGkUTdPd2StJbV1WmyhoawDDD/j8OcZPy+ShhsGK7H+vaPzfrALUNtZT
+ur5IpuLR46eGUCWVH2DC1IKDKBa/SgSH3motn1yvRGbKR4G84Ii/+MT2gmNcjWso
+Ve+m58QiydeAt1UpBIRGNTn3QYSx/ybqIW+RH68JVA2k93iFwJi2m6Ob7qnlqKIG
+O4rU36FBY0jnhhEq+aJ4/7pj4jjsiicTUMxLYjd1tczUfg==
+=qsyN
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/www/sunders/fr/camera.php b/www/sunders/fr/camera.php
new file mode 100644
index 0000000..d85146c
--- /dev/null
+++ b/www/sunders/fr/camera.php
@@ -0,0 +1,3 @@
+
diff --git a/www/sunders/fr/images b/www/sunders/fr/images
new file mode 120000
index 0000000..e4c5bd0
--- /dev/null
+++ b/www/sunders/fr/images
@@ -0,0 +1 @@
+../images/
\ No newline at end of file
diff --git a/www/sunders/fr/index.php b/www/sunders/fr/index.php
new file mode 100644
index 0000000..2946f9f
--- /dev/null
+++ b/www/sunders/fr/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/fr/stats/index.php b/www/sunders/fr/stats/index.php
new file mode 100644
index 0000000..a4028c4
--- /dev/null
+++ b/www/sunders/fr/stats/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/i18n.php b/www/sunders/i18n.php
new file mode 100644
index 0000000..9091e79
--- /dev/null
+++ b/www/sunders/i18n.php
@@ -0,0 +1,80 @@
+{'texts'}->{$key};
+
+ if (empty($text)) {
+ $i18n = $i18nDefault;
+ $text = $i18n->{'texts'}->{$key};
+
+ if (!empty($text) && substr($key, -4) != '-alt') {
+ $openTagToBeTranslated = '
';
+ $closeTagToBeTranslated = ' ';
+ }
+ }
+
+ $textLinkArray = explode ('@@' , $text); // A @@ at the beginning/end of $text leads to an empty string as the first/last element of $textLinkArray.
+ $isTextWithoutLinks = count($textLinkArray) == 1;
+ $translatedText = '';
+
+ if ($isTextWithoutLinks) {
+ $translatedText = $translatedText.htmlentities($text);
+ } else {
+ foreach ($textLinkArray as $phrase) {
+ if (substr($phrase, 0, 2) == 'LT') { // link with a text to be translated
+ $index = (int)substr($phrase, 2, 2);
+ $translatedText = $translatedText.'
'.htmlentities($i18n->{'links'}->{$key}[$index]).' '.htmlentities(substr($phrase, 4));
+ } elseif (substr($phrase, 0, 2) == 'LF') { // link with a fix text
+ $index = (int)substr($phrase, 2, 2);
+ $translatedText = $translatedText.'
'.htmlentities($linksWithFixedText[1][$index]).' '.htmlentities(substr($phrase, 4));
+ } elseif (substr($phrase, 0, 2) == 'TF') { // fix text
+ $index = (int)substr($phrase, 2, 2);
+ $translatedText = $translatedText.htmlentities($fixedTexts[$index].substr($phrase, 4));
+ } else {
+ $translatedText = $translatedText.htmlentities($phrase);
+ }
+ }
+ }
+
+ return $openTagToBeTranslated.$translatedText.$closeTagToBeTranslated;
+ }
+?>
diff --git a/www/sunders/i18n/common/de.json b/www/sunders/i18n/common/de.json
new file mode 100644
index 0000000..7642776
--- /dev/null
+++ b/www/sunders/i18n/common/de.json
@@ -0,0 +1,33 @@
+{
+ "texts": {
+ "what-alt": "um was es hier geht",
+ "how-alt": "wie du mitmachen kannst",
+ "where-alt": "wo es mehr infos gibt",
+ "search-button-alt": "in OpenStreetMap suchen",
+ "permalink-button-alt": "Permalink mit Koordinaten erzeugen",
+ "stats-button-alt": "Upload-Statistiken",
+ "language-button-alt": "Sprache ändern",
+ "subtitle": "(Überwachung unter Überwachung)",
+ "translation": "",
+ "what-show": "Surveillance under Surveillance (Überwachung unter Überwachung) zeigt dir Kameras und Wachleute, die dich überwachen — fast überall. Du kannst ihren Standort sehen und, falls die Informationen verfügbar sind, welcher Art sie sind, welches Gebiet sie überwachen oder weitere interessante Fakten.",
+ "what-icons": "Unterschiedliche Symbole und Farben geben dir einen schnellen Überblick über die erfassten Überwachungseinträge. Klicke auf ein Symbol auf der Karte, um die verfügbaren Informationen zum zugehörigen Eintrag anzuzeigen.",
+ "how-osm": "Surveillance under Surveillance (Überwachung unter Überwachung) verwendet und zeigt Daten von OpenStreetMap-Mitwirkenden, die auf der regulären @@LF00-Seite nicht angezeigt werden. @@LT00 oder @@LT01, wenn du selbst neue Kameras oder Wachleute eintragen oder bestehende Einträge überarbeiten möchtest.",
+ "how-update": "Unsere Datenbank wird stündlich aktualisiert. Deshalb kann es einige Zeit dauern bis deine OSM-Einträge auf der Surveillance under Surveillance Karte angezeigt werden.",
+ "how-keyval": "Dies sind die gebräuchlichsten Schlüssel/Wert-Kombinationen, um einen Überwachungseintrag bei OpenStreetMap zu beschreiben:",
+ "how-fork": "Neben der Mitarbeit bei OpenStreetMap, kannst du dieses Projekt auch bei @@LF00 forken.",
+ "where-sites": "Besuch die folgenden Seiten zu überwachungsrelevanten Themen:",
+ "footer-pgp": "Hier ist unser @@LT00 — benutz ihn!",
+ "footer-note": "Bitte beachte, dass nur verschlüsselte Emails beantwortet werden.",
+ "footer-your-key": "Teil uns mit, wo wir deinen PGP-Schlüssel finden.",
+ "footer-help": "Hilfe zum Thema Verschlüsselung gibt es @@LT00.",
+ "at": "ät",
+ "dot": "punkt",
+ "new-stats": "neue Statistiken!",
+ "gdpr": "BEIM BESUCH DIESER SEITE WERDEN KEINE PERSÖNLICHEN DATEN GESAMMELT!"
+ },
+ "links": {
+ "how-osm": [ "Verwende dein existierendes OSM-Konto", "lege ein neues Konto an" ],
+ "footer-pgp": [ "PGP-Schlüssel" ],
+ "footer-help": [ "hier" ]
+ }
+}
diff --git a/www/sunders/i18n/common/en.json b/www/sunders/i18n/common/en.json
new file mode 100644
index 0000000..77116f5
--- /dev/null
+++ b/www/sunders/i18n/common/en.json
@@ -0,0 +1,32 @@
+{
+ "texts": {
+ "what-alt": "what this is about",
+ "how-alt": "how to participate",
+ "where-alt": "where to get more info",
+ "search-button-alt": "search OpenStreetMap",
+ "permalink-button-alt": "create permalink with coordinates",
+ "stats-button-alt": "upload statistics",
+ "language-button-alt": "change language",
+ "subtitle": "",
+ "translation": "",
+ "what-show": "Surveillance under Surveillance shows you cameras and guards — watching you — almost everywhere. You can see where they are located and, if the information is available, what type they are, the area they observe, or other interesting facts.",
+ "what-icons": "Different icons and colors give you a quick overview about the indexed surveillance entries. Click on those icons on the map to get the available information.",
+ "how-osm": "Surveillance under Surveillance uses data from OpenStreetMap contributors that is not visualized on the regular @@LF00 site. If you like to add new cameras or guards or if you like to revise existing entries @@LT00 or @@LT01.",
+ "how-update": "Our database is updated once an hour. So it might take a while until your OSM entries are visible on the Surveillance under Surveillance map.",
+ "how-keyval": "These are the most common key/value combinations to describe a surveillance node at OpenStreetMap:",
+ "how-fork": "Besides contributing to OpenStreetMap feel free to fork this project on @@LF00.",
+ "where-sites": "Visit the following sites about surveillance related topics:",
+ "footer-pgp": "Here is our @@LT00 — use it!",
+ "footer-note": "Please note that only encrypted emails will be answered.",
+ "footer-your-key": "Let us know where we can find your PGP key.",
+ "footer-help": "Get help for @@LF00 / @@LF01 / @@LF02.",
+ "at": "at",
+ "dot": "dot",
+ "new-stats": "new statistics!",
+ "gdpr": "NO PERSONAL DATA IS COLLECTED WHEN YOU VISIT THIS SITE!"
+ },
+ "links": {
+ "how-osm": [ "use your existing OSM account", "create a new one" ],
+ "footer-pgp": [ "PGP key" ]
+ }
+}
diff --git a/www/sunders/i18n/common/es.json b/www/sunders/i18n/common/es.json
new file mode 100644
index 0000000..9eb30f2
--- /dev/null
+++ b/www/sunders/i18n/common/es.json
@@ -0,0 +1,32 @@
+{
+ "texts": {
+ "what-alt": "de que se trata",
+ "how-alt": "como participar",
+ "where-alt": "donde puedo obtener mas información",
+ "search-button-alt": "buscar en OpenStreetMap",
+ "permalink-button-alt": "crearte un enlace permanente",
+ "stats-button-alt": "estadística de subir",
+ "language-button-alt": "cambiar de idioma",
+ "subtitle": "(Vigilando a la Vigilancia)",
+ "translation": "",
+ "what-show": "Surveillance under Surveillance (vigilando a la vigilancia) muestra las cámaras y los guardas — que te vigilan — en casi todos lados. Podes ver su ubicación y, si la información esta disponible, de que tipo son, el área de cobertura u otra información relevante.",
+ "what-icons": "Diferentes iconos y colores dan una idea sobre las entradas cargadas. Hace clic sobre esos iconos en el mapa para ver la información disponible.",
+ "how-osm": "Surveillance under Surveillance (vigilando a la vigilancia) usa datos de OpenStreetMap, éstos no están visibles por defecto en el mapa regular del sitio de @@LF00. Si querés agregar nuevas cámaras o guardias, o si deseas revisar las entradas existentes podes @@LT01 en OSM o @@LT00.",
+ "how-update": "Nuestra base de datos se actualiza cada una hora. Así que puede tomar un rato hasta que los cambios en OSM se vean reflejados en este mapa.",
+ "how-keyval": "Estos son las propiedades mas comunes para describir un nodo de vigilancia en OpenStreetMap:",
+ "how-fork": "Aparte de contribuir a Openstreetmap te invitamos a modificar este proyecto en @@LF00.",
+ "where-sites": "Podés visitar estos sitios que tratan sobre temas relacionas a la vigilancia:",
+ "footer-pgp": "Esta es nuestra @@LT00 — Usala!",
+ "footer-note": "Tené en cuenta que solo los correos cifrados serán respondidos.",
+ "footer-your-key": "Envianos o decinos donde podemos conseguir tu llave.",
+ "footer-help": "Si necesitas ayuda con PGP, @@LF00 / @@LF01 / @@LF02.",
+ "at": "en",
+ "dot": "punto",
+ "new-stats": "¡nuevo!",
+ "gdpr": "¡NO SE RECOGEN DATOS PERSONALES CUANDO USTED VISITA ESTE SITIO!"
+ },
+ "links": {
+ "how-osm": [ "usar una que ya tengas", "crearte una cuenta" ],
+ "footer-pgp": [ "llave PGP" ]
+ }
+}
diff --git a/www/sunders/i18n/common/fr.json b/www/sunders/i18n/common/fr.json
new file mode 100644
index 0000000..02a1635
--- /dev/null
+++ b/www/sunders/i18n/common/fr.json
@@ -0,0 +1,32 @@
+{
+ "texts": {
+ "what-alt": "utilisation",
+ "how-alt": "comment participer",
+ "where-alt": "où s'informer",
+ "search-button-alt": "chercher sur OpenStreetMap",
+ "permalink-button-alt": "créer un lien permanent à ces coordonnées",
+ "stats-button-alt": "statistiques sur les données",
+ "language-button-alt": "changer langue",
+ "subtitle": "(Surveillance sous Surveillance)",
+ "translation": "",
+ "what-show": "Surveillance under Surveillance vous montre les caméras et gardes — qui vous regardent — presque partout. Vous pouvez voir leurs emplacements et, si l'information est connue, de quels types elles sont, la zone surveillée, ou autres faits intéressants.",
+ "what-icons": "Différentes icônes et couleurs vous donnent un aperçu des surveillances indexées. Cliquez sur ces icônes sur la carte pour avoir toutes les informations possibles.",
+ "how-osm": "Surveillance under Surveillance utilise les données des contributeurs OpenStreetMap qui ne sont pas visibles sur le site @@LF00. Si vous souhaitez ajouter de nouvelles caméras/gardes ou si vous voulez modifier les données existantes, @@LT00 ou @@LT01.",
+ "how-update": "Notre base de donnée est mise à jour toutes les heures. Il se peut donc qu'il faille un certain temps avant que vos modifications sur OSM soient visible sur la carte Surveillance under Surveillance.",
+ "how-keyval": "Voici les étiquettes clé/valeur les plus courantes dans OpenStreetMap pour qualifier les noeuds de type “surveillance”:",
+ "how-fork": "En plus de contribuer à OpenStreetMap, n'hésitez pas à forker ce projet sur @@LF00.",
+ "where-sites": "Visitez les sites suivants qui traitent de sujets liés à la surveillance :",
+ "footer-pgp": "Voici notre @@LT00 — utilisez-là !",
+ "footer-note": "Notez que seuls les mails chiffrés recevront une réponse.",
+ "footer-your-key": "Dites-nous où nous pouvons trouver votre clef PGP.",
+ "footer-help": "Trouvez de l'aide pour @@LF00 / @@LF01 / @@LF02.",
+ "at": "at",
+ "dot": "point",
+ "new-stats": "nouveau!",
+ "gdpr": "AUCUNE DONNÉE PERSONNELLE N'EST COLLECTÉE LORS DE VOTRE VISITE SUR CE SITE!"
+ },
+ "links": {
+ "how-osm": [ "utilisez votre compte OSM", "créez-en un" ],
+ "footer-pgp": [ "clef PGP" ]
+ }
+}
diff --git a/www/sunders/i18n/common/it.json b/www/sunders/i18n/common/it.json
new file mode 100644
index 0000000..99430d2
--- /dev/null
+++ b/www/sunders/i18n/common/it.json
@@ -0,0 +1,32 @@
+{
+ "texts": {
+ "what-alt": "di che cosa si tratta",
+ "how-alt": "come partecipare",
+ "where-alt": "dove trovo altre info",
+ "search-button-alt": "cerca su OpenStreetMap",
+ "permalink-button-alt": "crea permalink con le coordinate",
+ "stats-button-alt": "statistiche dell'upload ",
+ "language-button-alt": "cambia lingua",
+ "subtitle": "(Sorveglianza sotto Sorveglianza)",
+ "translation": "",
+ "what-show": "Surveillance under Surveillance (Sorveglianza sotto Sorveglianza) è un sito che ti mostra telecamere e guardie — che ti osservano — quasi ovunque. Puoi vedere dove si trovano e, se l'informazione è disponibile, di che tipologia,l'area che osservano o altri fatti interessanti.",
+ "what-icons": "Icone e colori diversi ti danno una rapida panoramica sui differenti tipi di sorveglianza. Clicca su queste icone sulla mappa per ottenere le informazioni disponibili.",
+ "how-osm": "Surveillance under Surveillance utilizza i dati di OpenStreetMap che non sono visualizzati sul normale @@LF00 sito. Se vuoi aggiungere altre telecamere o guardie o se vuoi rivedere le voci esistenti usa il tuo account entries @@LT00 o creane uno nuovo @@LT01.",
+ "how-update": "Il nostro database viene aggiornato una volta ogni ora. Quindi potrebbe essere necessario un po' di tempo prima che le tue segnalazioni OSM siano visibili sulla mappa di Surveillance under Surveillance.",
+ "how-keyval": "These are the most common key/value combinations to describe a surveillance node at OpenStreetMap:",
+ "how-fork": "Oltre a contribuire a OpenStreetMap sentiti libero di fare un fork di questo progetto su @@LF00.",
+ "where-sites": "Visita i seguenti siti su argomenti relativi alla sorveglianz:",
+ "footer-pgp": "Qui la nostra @@LT00 — usala!",
+ "footer-note": "Si risponde solo a email crittate.",
+ "footer-your-key": "Facci sapere dove possiamo trovare la tua chiave PGP.",
+ "footer-help": "Ottieni aiuto per @@LF00 / @@LF01 / @@LF02.",
+ "at": "at",
+ "dot": "dot",
+ "new-stats": "new statistics!",
+ "gdpr": "NESSUN DATO PERSONALE VIENE RACCOLTO QUANDO VISITI QUESTO SITO!"
+ },
+ "links": {
+ "how-osm": [ "usa il tuo account OSM", "creane uno nuovo" ],
+ "footer-pgp": [ "PGP key" ]
+ }
+}
diff --git a/www/sunders/i18n/common/ru.json b/www/sunders/i18n/common/ru.json
new file mode 100644
index 0000000..9d89390
--- /dev/null
+++ b/www/sunders/i18n/common/ru.json
@@ -0,0 +1,32 @@
+{
+ "texts": {
+ "what-alt": "",
+ "how-alt": "",
+ "where-alt": "",
+ "search-button-alt": "",
+ "permalink-button-alt": "",
+ "stats-button-alt": "",
+ "language-button-alt": "",
+ "subtitle": "",
+ "translation": "This site has not been translated yet. You can help to offer this site in RUSSIAN by sending us your translation via email. Please scroll down for our address. Thanks a lot!",
+ "what-show": "",
+ "what-icons": "",
+ "how-osm": "",
+ "how-update": "",
+ "how-keyval": "",
+ "how-fork": "",
+ "where-sites": "",
+ "footer-pgp": "",
+ "footer-note": "",
+ "footer-your-key": "",
+ "footer-help": "",
+ "at": "",
+ "dot": "",
+ "new-stats": "новые!",
+ "gdpr": ""
+ },
+ "links": {
+ "how-osm": [ "" ],
+ "footer-pgp": [ "" ]
+ }
+}
diff --git a/www/sunders/i18n/countries/de.json b/www/sunders/i18n/countries/de.json
new file mode 100644
index 0000000..b8e8ea5
--- /dev/null
+++ b/www/sunders/i18n/countries/de.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "noch nicht lokalisiert",
+ "--": "nicht lokalisierbar",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Ascension",
+ "AD": "Andorra",
+ "AE": "Vereinigte Arabische Emirate",
+ "AF": "Afghanistan",
+ "AG": "Antigua und Barbuda",
+ "AH": "",
+ "AI": "Anguilla",
+ "AJ": "",
+ "AK": "",
+ "AL": "Albanien",
+ "AM": "Armenien",
+ "AN": "Niederländische Antillen",
+ "AO": "Angola",
+ "AP": "",
+ "AQ": "Antarktika",
+ "AR": "Argentinien",
+ "AS": "Amerikanisch-Samoa",
+ "AT": "Österreich",
+ "AU": "Australien",
+ "AV": "",
+ "AW": "Aruba",
+ "AX": "Åland",
+ "AY": "",
+ "AZ": "Aserbaidschan",
+
+ "BA": "Bosnien und Herzegowina",
+ "BB": "Barbados",
+ "BC": "",
+ "BD": "Bangladesch",
+ "BE": "Belgien",
+ "BF": "Burkina Faso",
+ "BG": "Bulgarien",
+ "BH": "Bahrain",
+ "BI": "Burundi",
+ "BJ": "Benin",
+ "BK": "",
+ "BL": "Saint-Barthélemy",
+ "BM": "Bermuda",
+ "BN": "Brunei",
+ "BO": "Bolivien",
+ "BP": "",
+ "BQ": "Karibische Niederlande",
+ "BR": "Brasilien",
+ "BS": "Bahamas",
+ "BT": "Bhutan",
+ "BU": "Birma (Myanmar)",
+ "BV": "Bouvetinsel",
+ "BW": "Botswana",
+ "BX": "",
+ "BY": "Weißrussland",
+ "BZ": "Belize",
+
+ "CA": "Kanada",
+ "CB": "",
+ "CC": "Kokosinseln",
+ "CD": "Demokratische Republik Kongo",
+ "CE": "",
+ "CF": "Zentralafrikanische Republik",
+ "CG": "Republik Kongo",
+ "CH": "Schweiz",
+ "CI": "Elfenbeinküste",
+ "CJ": "",
+ "CK": "Cookinseln",
+ "CL": "Chile",
+ "CM": "Kamerun",
+ "CN": "Volksrepublik China",
+ "CO": "Kolumbien",
+ "CP": "Clipperton-Insel",
+ "CQ": "",
+ "CR": "Costa Rica",
+ "CS": "Tschechoslowakei (Serbien und Montenegro)",
+ "CT": "",
+ "CU": "Kuba",
+ "CV": "Kap Verde",
+ "CW": "Curaçao",
+ "CX": "Weihnachtsinsel",
+ "CY": "Zypern",
+ "CZ": "Tschechische Republik",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Deutschland",
+ "DF": "",
+ "DG": "Diego Garcia",
+ "DH": "",
+ "DI": "",
+ "DJ": "Dschibuti",
+ "DK": "Dänemark",
+ "DL": "",
+ "DM": "Dominica",
+ "DN": "",
+ "DO": "Dominikanische Republik",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Benin",
+ "DZ": "Algerien",
+
+ "EA": "Melilla",
+ "EB": "",
+ "EC": "Ecuador",
+ "ED": "",
+ "EE": "Estland",
+ "EF": "",
+ "EG": "Ägypten",
+ "EH": "Westsahara",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Eritrea",
+ "ES": "Spanien",
+ "ET": "Äthiopien",
+ "EU": "",
+ "EV": "",
+ "EW": "Estland",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Finnland",
+ "FJ": "Fidschi",
+ "FK": "Falklandinseln",
+ "FL": "Liechtenstein",
+ "FM": "Föderierte Staaten von Mikronesien",
+ "FN": "",
+ "FO": "Färöer",
+ "FP": "",
+ "FQ": "",
+ "FR": "Frankreich",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Gabun",
+ "GB": "Vereinigtes Königreich",
+ "GC": "",
+ "GD": "Grenada",
+ "GE": "Georgien",
+ "GF": "Französisch-Guayana",
+ "GG": "Guernsey",
+ "GH": "Ghana",
+ "GI": "Gibraltar",
+ "GJ": "",
+ "GK": "",
+ "GL": "Grönland",
+ "GM": "Gambia",
+ "GN": "Guinea",
+ "GO": "",
+ "GP": "Guadeloupe",
+ "GQ": "Äquatorialguinea",
+ "GR": "Griechenland",
+ "GS": "Südgeorgien und die Südlichen Sandwichinseln",
+ "GT": "Guatemala",
+ "GU": "Guam",
+ "GV": "",
+ "GW": "Guinea-Bissau",
+ "GX": "",
+ "GY": "Guyana",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Hongkong",
+ "HL": "",
+ "HM": "Heard und McDonaldinseln",
+ "HN": "Honduras",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Kroatien",
+ "HS": "",
+ "HT": "Haiti",
+ "HU": "Ungarn",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Kanarische Inseln",
+ "ID": "Indonesien",
+ "IE": "Irland",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Israel",
+ "IM": "Isle of Man",
+ "IN": "Indien",
+ "IO": "Britisches Territorium im Indischen Ozean",
+ "IP": "",
+ "IQ": "Irak",
+ "IR": "Iran",
+ "IS": "Island",
+ "IT": "Italien",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Jamaika",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Jersey",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Jamaika",
+ "JN": "",
+ "JO": "Jordanien",
+ "JP": "Japan",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Kenia",
+ "KF": "",
+ "KG": "Kirgisistan",
+ "KH": "Kambodscha",
+ "KI": "Kiribati",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Komoren",
+ "KN": "St. Kitts und Nevis",
+ "KO": "",
+ "KP": "Nordkorea",
+ "KQ": "",
+ "KR": "Südkorea",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Kuwait",
+ "KX": "",
+ "KY": "Kaimaninseln",
+ "KZ": "Kasachstan",
+
+ "LA": "Laos",
+ "LB": "Libanon",
+ "LC": "St. Lucia",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Liechtenstein",
+ "LJ": "",
+ "LK": "Sri Lanka",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Liberia",
+ "LS": "Lesotho",
+ "LT": "Litauen",
+ "LU": "Luxemburg",
+ "LV": "Lettland",
+ "LW": "",
+ "LX": "",
+ "LY": "Libyen",
+ "LZ": "",
+
+ "MA": "Marokko",
+ "MB": "",
+ "MC": "Monaco",
+ "MD": "Moldawien",
+ "ME": "Montenegro",
+ "MF": "Saint-Martin",
+ "MG": "Madagaskar",
+ "MH": "Marshallinseln",
+ "MI": "",
+ "MJ": "",
+ "MK": "Mazedonien",
+ "ML": "Mali",
+ "MM": "Myanmar",
+ "MN": "Mongolei",
+ "MO": "Macau",
+ "MP": "Nördliche Marianen",
+ "MQ": "Martinique",
+ "MR": "Mauretanien",
+ "MS": "Montserrat",
+ "MT": "Malta",
+ "MU": "Mauritius",
+ "MV": "Malediven",
+ "MW": "Malawi",
+ "MX": "Mexiko",
+ "MY": "Malaysia",
+ "MZ": "Mosambik",
+
+ "NA": "Namibia",
+ "NB": "",
+ "NC": "Neukaledonien",
+ "ND": "",
+ "NE": "Niger",
+ "NF": "Norfolkinsel",
+ "NG": "Nigeria",
+ "NH": "",
+ "NI": "Nicaragua",
+ "NJ": "",
+ "NK": "",
+ "NL": "Niederlande",
+ "NM": "",
+ "NN": "",
+ "NO": "Norwegen",
+ "NP": "Nepal",
+ "NQ": "",
+ "NR": "Nauru",
+ "NS": "",
+ "NT": "",
+ "NU": "Niue",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "Neuseeland",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Oman",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Panama",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Peru",
+ "PF": "Französisch-Polynesien",
+ "PG": "Papua-Neuguinea",
+ "PH": "Philippinen",
+ "PI": "Philippinen",
+ "PJ": "",
+ "PK": "Pakistan",
+ "PL": "Polen",
+ "PM": "Saint-Pierre und Miquelon",
+ "PN": "Pitcairninseln",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Puerto Rico",
+ "PS": "Staat Palästina",
+ "PT": "Portugal",
+ "PU": "",
+ "PV": "",
+ "PW": "Palau",
+ "PX": "",
+ "PY": "Paraguay",
+ "PZ": "",
+
+ "QA": "Katar",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Argentinien",
+ "RB": "Bolivia; Botswana",
+ "RC": "Taiwan (Republik China)",
+ "RD": "",
+ "RE": "Réunion",
+ "RF": "",
+ "RG": "",
+ "RH": "Haiti",
+ "RI": "Indonesien",
+ "RJ": "",
+ "RK": "",
+ "RL": "Libanon",
+ "RM": "Madagaskar",
+ "RN": "Niger",
+ "RO": "Rumänien",
+ "RP": "Philippinen",
+ "RQ": "",
+ "RR": "",
+ "RS": "Serbien",
+ "RT": "",
+ "RU": "Russland",
+ "RV": "",
+ "RW": "Ruanda",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Saudi-Arabien",
+ "SB": "Salomonen",
+ "SC": "Seychellen",
+ "SD": "Sudan",
+ "SE": "Schweden",
+ "SF": "Finnland",
+ "SG": "Singapur",
+ "SH": "St. Helena, Ascension und Tristan da Cunha",
+ "SI": "Slowenien",
+ "SJ": "Spitzbergen und Jan Mayen",
+ "SK": "Slowakei",
+ "SL": "Sierra Leone",
+ "SM": "San Marino",
+ "SN": "Senegal",
+ "SO": "Somalia",
+ "SP": "",
+ "SQ": "",
+ "SR": "Surinam",
+ "SS": "Südsudan",
+ "ST": "São Tomé und Príncipe",
+ "SU": "Union der Sozialistischen Sowjetrepubliken (UdSSR)",
+ "SV": "El Salvador",
+ "SW": "",
+ "SX": "Sint Maarten",
+ "SY": "Syrien",
+ "SZ": "Swasiland",
+
+ "TA": "Tristan da Cunha",
+ "TB": "",
+ "TC": "Turks- und Caicosinseln",
+ "TD": "Tschad",
+ "TE": "",
+ "TF": "Französische Süd- und Antarktisgebiete",
+ "TG": "Togo",
+ "TH": "Thailand",
+ "TI": "",
+ "TJ": "Tadschikistan",
+ "TK": "Tokelau",
+ "TL": "Osttimor",
+ "TM": "Turkmenistan",
+ "TN": "Tunesien",
+ "TO": "Tonga",
+ "TP": "Osttimor",
+ "TQ": "",
+ "TR": "Türkei",
+ "TS": "",
+ "TT": "Trinidad und Tobago",
+ "TU": "",
+ "TV": "Tuvalu",
+ "TW": "Taiwan (Republik China)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Tansania",
+
+ "UA": "Ukraine",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Uganda",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "Vereinigtes Königreich",
+ "UL": "",
+ "UM": "Kleinere Inselbesitzungen der Vereinigten Staaten",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "Vereinigte Staaten von Amerika (USA)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Uruguay",
+ "UZ": "Usbekistan",
+
+ "VA": "Vatikanstadt",
+ "VB": "",
+ "VC": "St. Vincent und die Grenadinen",
+ "VD": "",
+ "VE": "Venezuela",
+ "VF": "",
+ "VG": "Britische Jungferninseln",
+ "VH": "",
+ "VI": "Amerikanische Jungferninseln",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Vietnam",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Vanuatu",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Wallis und Futuna",
+ "WG": "Grenada",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "St. Lucia",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Samoa",
+ "WT": "",
+ "WU": "",
+ "WV": "St. Vincent und die Grenadinen",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Kosovo",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Jemen",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Mayotte",
+ "YU": "Jugoslawien",
+ "YV": "Venezuela",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "Südafrika",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Sambia",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Zaire",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Simbabwe",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/countries/en.json b/www/sunders/i18n/countries/en.json
new file mode 100644
index 0000000..5c8e0c8
--- /dev/null
+++ b/www/sunders/i18n/countries/en.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "not localized yet",
+ "--": "unable to localize",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Ascension Island",
+ "AD": "Andorra",
+ "AE": "United Arab Emirates",
+ "AF": "Afghanistan",
+ "AG": "Antigua and Barbuda",
+ "AH": "",
+ "AI": "Anguilla",
+ "AJ": "",
+ "AK": "",
+ "AL": "Albania",
+ "AM": "Armenia",
+ "AN": "Netherlands Antilles",
+ "AO": "Angola",
+ "AP": "",
+ "AQ": "Antarctica",
+ "AR": "Argentina",
+ "AS": "American Samoa",
+ "AT": "Austria",
+ "AU": "Australia",
+ "AV": "",
+ "AW": "Aruba",
+ "AX": "Åland Islands",
+ "AY": "",
+ "AZ": "Azerbaijan",
+
+ "BA": "Bosnia and Herzegovina",
+ "BB": "Barbados",
+ "BC": "",
+ "BD": "Bangladesh",
+ "BE": "Belgium",
+ "BF": "Burkina Faso",
+ "BG": "Bulgaria",
+ "BH": "Bahrain",
+ "BI": "Burundi",
+ "BJ": "Benin",
+ "BK": "",
+ "BL": "Saint Barthélemy",
+ "BM": "Bermuda",
+ "BN": "Brunei",
+ "BO": "Bolivia",
+ "BP": "",
+ "BQ": "Caribbean Netherlands",
+ "BR": "Brazil",
+ "BS": "Bahamas",
+ "BT": "Bhutan",
+ "BU": "Burma (Myanmar)",
+ "BV": "Bouvet Island",
+ "BW": "Botswana",
+ "BX": "",
+ "BY": "Belarus",
+ "BZ": "Belize",
+
+ "CA": "Canada",
+ "CB": "",
+ "CC": "Cocos Islands",
+ "CD": "Democratic Republic of the Congo",
+ "CE": "",
+ "CF": "Central African Republic",
+ "CG": "Republic of the Congo",
+ "CH": "Switzerland",
+ "CI": "Ivory Coast",
+ "CJ": "",
+ "CK": "Cook Islands",
+ "CL": "Chile",
+ "CM": "Cameroon",
+ "CN": "People's Republic of China",
+ "CO": "Colombia",
+ "CP": "Clipperton Island",
+ "CQ": "",
+ "CR": "Costa Rica",
+ "CS": "Czechoslovakia (Serbia and Montenegro)",
+ "CT": "",
+ "CU": "Cuba",
+ "CV": "Cape Verde",
+ "CW": "Curaçao",
+ "CX": "Christmas Island",
+ "CY": "Cyprus",
+ "CZ": "Czech Republic",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Germany",
+ "DF": "",
+ "DG": "Diego Garcia",
+ "DH": "",
+ "DI": "",
+ "DJ": "Djibouti",
+ "DK": "Denmark",
+ "DL": "",
+ "DM": "Dominica",
+ "DN": "",
+ "DO": "Dominican Republic",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Benin",
+ "DZ": "Algeria",
+
+ "EA": "Melilla",
+ "EB": "",
+ "EC": "Ecuador",
+ "ED": "",
+ "EE": "Estonia",
+ "EF": "",
+ "EG": "Egypt",
+ "EH": "Western Sahara",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Eritrea",
+ "ES": "Spain",
+ "ET": "Ethiopia",
+ "EU": "",
+ "EV": "",
+ "EW": "Estonia",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Finland",
+ "FJ": "Fiji",
+ "FK": "Falkland Islands",
+ "FL": "Liechtenstein",
+ "FM": "Federated States of Micronesia",
+ "FN": "",
+ "FO": "Faroe Islands",
+ "FP": "",
+ "FQ": "",
+ "FR": "France",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Gabon",
+ "GB": "United Kingdom",
+ "GC": "",
+ "GD": "Grenada",
+ "GE": "Georgia",
+ "GF": "French Guiana",
+ "GG": "Guernsey",
+ "GH": "Ghana",
+ "GI": "Gibraltar",
+ "GJ": "",
+ "GK": "",
+ "GL": "Greenland",
+ "GM": "Gambia",
+ "GN": "Guinea",
+ "GO": "",
+ "GP": "Guadeloupe",
+ "GQ": "Equatorial Guinea",
+ "GR": "Greece",
+ "GS": "South Georgia and the South Sandwich Islands",
+ "GT": "Guatemala",
+ "GU": "Guam",
+ "GV": "",
+ "GW": "Guinea-Bissau",
+ "GX": "",
+ "GY": "Guyana",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Hong Kong",
+ "HL": "",
+ "HM": "Heard Island and McDonald Islands",
+ "HN": "Honduras",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Croatia",
+ "HS": "",
+ "HT": "Haiti",
+ "HU": "Hungary",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Canary Islands",
+ "ID": "Indonesia",
+ "IE": "Ireland",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Israel",
+ "IM": "Isle of Man",
+ "IN": "India",
+ "IO": "British Indian Ocean Territory",
+ "IP": "",
+ "IQ": "Iraq",
+ "IR": "Iran",
+ "IS": "Iceland",
+ "IT": "Italy",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Jamaica",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Jersey",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Jamaica",
+ "JN": "",
+ "JO": "Jordan",
+ "JP": "Japan",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Kenya",
+ "KF": "",
+ "KG": "Kyrgyzstan",
+ "KH": "Cambodia",
+ "KI": "Kiribati",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Comoros",
+ "KN": "Saint Kitts and Nevis",
+ "KO": "",
+ "KP": "North Korea",
+ "KQ": "",
+ "KR": "South Korea",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Kuwait",
+ "KX": "",
+ "KY": "Cayman Islands",
+ "KZ": "Kazakhstan",
+
+ "LA": "Laos",
+ "LB": "Lebanon",
+ "LC": "Saint Lucia",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Liechtenstein",
+ "LJ": "",
+ "LK": "Sri Lanka",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Liberia",
+ "LS": "Lesotho",
+ "LT": "Lithuania",
+ "LU": "Luxembourg",
+ "LV": "Latvia",
+ "LW": "",
+ "LX": "",
+ "LY": "Libya",
+ "LZ": "",
+
+ "MA": "Morocco",
+ "MB": "",
+ "MC": "Monaco",
+ "MD": "Moldova",
+ "ME": "Montenegro",
+ "MF": "Saint Martin",
+ "MG": "Madagascar",
+ "MH": "Marshall Islands",
+ "MI": "",
+ "MJ": "",
+ "MK": "Macedonia",
+ "ML": "Mali",
+ "MM": "Myanmar",
+ "MN": "Mongolia",
+ "MO": "Macau",
+ "MP": "Northern Mariana Islands",
+ "MQ": "Martinique",
+ "MR": "Mauritania",
+ "MS": "Montserrat",
+ "MT": "Malta",
+ "MU": "Mauritius",
+ "MV": "Maldives",
+ "MW": "Malawi",
+ "MX": "Mexico",
+ "MY": "Malaysia",
+ "MZ": "Mozambique",
+
+ "NA": "Namibia",
+ "NB": "",
+ "NC": "New Caledonia",
+ "ND": "",
+ "NE": "Niger",
+ "NF": "Norfolk Island",
+ "NG": "Nigeria",
+ "NH": "",
+ "NI": "Nicaragua",
+ "NJ": "",
+ "NK": "",
+ "NL": "Netherlands",
+ "NM": "",
+ "NN": "",
+ "NO": "Norway",
+ "NP": "Nepal",
+ "NQ": "",
+ "NR": "Nauru",
+ "NS": "",
+ "NT": "",
+ "NU": "Niue",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "New Zealand",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Oman",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Panama",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Peru",
+ "PF": "French Polynesia",
+ "PG": "Papua New Guinea",
+ "PH": "Philippines",
+ "PI": "Philippines",
+ "PJ": "",
+ "PK": "Pakistan",
+ "PL": "Poland",
+ "PM": "Saint Pierre and Miquelon",
+ "PN": "Pitcairn Islands",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Puerto Rico",
+ "PS": "State of Palestine",
+ "PT": "Portugal",
+ "PU": "",
+ "PV": "",
+ "PW": "Palau",
+ "PX": "",
+ "PY": "Paraguay",
+ "PZ": "",
+
+ "QA": "Qatar",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Argentina",
+ "RB": "Bolivia; Botswana",
+ "RC": "Taiwan (Republic of China)",
+ "RD": "",
+ "RE": "Réunion",
+ "RF": "",
+ "RG": "",
+ "RH": "Haiti",
+ "RI": "Indonesia",
+ "RJ": "",
+ "RK": "",
+ "RL": "Lebanon",
+ "RM": "Madagascar",
+ "RN": "Niger",
+ "RO": "Romania",
+ "RP": "Philippines",
+ "RQ": "",
+ "RR": "",
+ "RS": "Serbia",
+ "RT": "",
+ "RU": "Russia",
+ "RV": "",
+ "RW": "Rwanda",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Saudi Arabia",
+ "SB": "Solomon Islands",
+ "SC": "Seychelles",
+ "SD": "Sudan",
+ "SE": "Sweden",
+ "SF": "Finland",
+ "SG": "Singapore",
+ "SH": "Saint Helena, Ascension and Tristan da Cunha",
+ "SI": "Slovenia",
+ "SJ": "Svalbard and Jan Mayen",
+ "SK": "Slovakia",
+ "SL": "Sierra Leone",
+ "SM": "San Marino",
+ "SN": "Senegal",
+ "SO": "Somalia",
+ "SP": "",
+ "SQ": "",
+ "SR": "Suriname",
+ "SS": "South Sudan",
+ "ST": "São Tomé and Príncipe",
+ "SU": "Union of Soviet Socialist Republics (USSR)",
+ "SV": "El Salvador",
+ "SW": "",
+ "SX": "Sint Maarten",
+ "SY": "Syria",
+ "SZ": "Swaziland",
+
+ "TA": "Tristan da Cunha",
+ "TB": "",
+ "TC": "Turks and Caicos Islands",
+ "TD": "Chad",
+ "TE": "",
+ "TF": "French Southern and Antarctic Lands",
+ "TG": "Togo",
+ "TH": "Thailand",
+ "TI": "",
+ "TJ": "Tajikistan",
+ "TK": "Tokelau",
+ "TL": "East Timor",
+ "TM": "Turkmenistan",
+ "TN": "Tunisia",
+ "TO": "Tonga",
+ "TP": "East Timor",
+ "TQ": "",
+ "TR": "Turkey",
+ "TS": "",
+ "TT": "Trinidad and Tobago",
+ "TU": "",
+ "TV": "Tuvalu",
+ "TW": "Taiwan (Republic of China)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Tanzania",
+
+ "UA": "Ukraine",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Uganda",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "United Kingdom",
+ "UL": "",
+ "UM": "United States Minor Outlying Islands",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "United States of America (USA)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Uruguay",
+ "UZ": "Uzbekistan",
+
+ "VA": "Vatican City",
+ "VB": "",
+ "VC": "Saint Vincent and the Grenadines",
+ "VD": "",
+ "VE": "Venezuela",
+ "VF": "",
+ "VG": "British Virgin Islands",
+ "VH": "",
+ "VI": "United States Virgin Islands",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Vietnam",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Vanuatu",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Wallis and Futuna",
+ "WG": "Grenada",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "Saint Lucia",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Samoa",
+ "WT": "",
+ "WU": "",
+ "WV": "Saint Vincent and the Grenadines",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Kosovo",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Yemen",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Mayotte",
+ "YU": "Yugoslavia",
+ "YV": "Venezuela",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "South Africa",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Zambia",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Zaire",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Zimbabwe",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/countries/es.json b/www/sunders/i18n/countries/es.json
new file mode 100644
index 0000000..1feaf61
--- /dev/null
+++ b/www/sunders/i18n/countries/es.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "aún no localizado",
+ "--": "incapaz de localizar",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Isla Ascensión",
+ "AD": "Andorra",
+ "AE": "Emiratos Árabes Unidos",
+ "AF": "Afganistán",
+ "AG": "Antigua y Barbuda",
+ "AH": "",
+ "AI": "Anguila",
+ "AJ": "",
+ "AK": "",
+ "AL": "Albania",
+ "AM": "Armenia",
+ "AN": "Antillas Neerlandesas",
+ "AO": "Angola",
+ "AP": "",
+ "AQ": "Antártida",
+ "AR": "Argentina",
+ "AS": "Samoa Americana",
+ "AT": "Austria",
+ "AU": "Australia",
+ "AV": "",
+ "AW": "Aruba",
+ "AX": "Åland",
+ "AY": "",
+ "AZ": "Azerbaiyán",
+
+ "BA": "Bosnia y Herzegovina",
+ "BB": "Barbados",
+ "BC": "",
+ "BD": "Bangladés",
+ "BE": "Bélgica",
+ "BF": "Burkina Faso",
+ "BG": "Bulgaria",
+ "BH": "Baréin",
+ "BI": "Burundi",
+ "BJ": "Benín",
+ "BK": "",
+ "BL": "San Bartolomé",
+ "BM": "Bermudas",
+ "BN": "Brunéi",
+ "BO": "Bolivia",
+ "BP": "",
+ "BQ": "Caribe Neerlandés",
+ "BR": "Brasil",
+ "BS": "Bahamas",
+ "BT": "Bután",
+ "BU": "Birmania (Myanmar)",
+ "BV": "Isla Bouvet",
+ "BW": "Botsuana",
+ "BX": "",
+ "BY": "Bielorrusia",
+ "BZ": "Belice",
+
+ "CA": "Canadá",
+ "CB": "",
+ "CC": "Islas Cocos",
+ "CD": "República Democrática del Congo",
+ "CE": "",
+ "CF": "República Centroafricana",
+ "CG": "República del Congo",
+ "CH": "Suiza",
+ "CI": "Costa de Marfil",
+ "CJ": "",
+ "CK": "Islas Cook",
+ "CL": "Chile",
+ "CM": "Camerún",
+ "CN": "República Popular China",
+ "CO": "Colombia",
+ "CP": "Isla Clipperton",
+ "CQ": "",
+ "CR": "Costa Rica",
+ "CS": "Checoslovaquia (Serbia y Montenegro)",
+ "CT": "",
+ "CU": "Cuba",
+ "CV": "Cabo Verde",
+ "CW": "Curazao",
+ "CX": "Isla de Navidad",
+ "CY": "Chipre",
+ "CZ": "República Checa",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Alemania",
+ "DF": "",
+ "DG": "Diego García",
+ "DH": "",
+ "DI": "",
+ "DJ": "Yibuti",
+ "DK": "Dinamarca",
+ "DL": "",
+ "DM": "Dominica",
+ "DN": "",
+ "DO": "República Dominicana",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Benín",
+ "DZ": "Argelia",
+
+ "EA": "Melilla",
+ "EB": "",
+ "EC": "Ecuador",
+ "ED": "",
+ "EE": "Estonia",
+ "EF": "",
+ "EG": "Egipto",
+ "EH": "Sahara Occidental",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Eritrea",
+ "ES": "España",
+ "ET": "Etiopía",
+ "EU": "",
+ "EV": "",
+ "EW": "Estonia",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Finlandia",
+ "FJ": "Fiyi",
+ "FK": "Islas Malvinas",
+ "FL": "Liechtenstein",
+ "FM": "Estados Federados de Micronesia",
+ "FN": "",
+ "FO": "Islas Feroe",
+ "FP": "",
+ "FQ": "",
+ "FR": "Francia",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Gabón",
+ "GB": "Reino Unido",
+ "GC": "",
+ "GD": "Granada",
+ "GE": "Georgia",
+ "GF": "Guayana Francesa",
+ "GG": "Guernsey",
+ "GH": "Ghana",
+ "GI": "Gibraltar",
+ "GJ": "",
+ "GK": "",
+ "GL": "Groenlandia",
+ "GM": "Gambia",
+ "GN": "Guinea",
+ "GO": "",
+ "GP": "Guadalupe",
+ "GQ": "Guinea Ecuatorial",
+ "GR": "Grecia",
+ "GS": "Islas Georgias del Sur y Sandwich del Sur",
+ "GT": "Guatemala",
+ "GU": "Guam",
+ "GV": "",
+ "GW": "Guinea-Bisáu",
+ "GX": "",
+ "GY": "Guyana",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Hong Kong",
+ "HL": "",
+ "HM": "Islas Heard y McDonald",
+ "HN": "Honduras",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Croacia",
+ "HS": "",
+ "HT": "Haití",
+ "HU": "Hungría",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Canarias",
+ "ID": "Indonesia",
+ "IE": "Irlanda",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Israel",
+ "IM": "Isla de Man",
+ "IN": "India",
+ "IO": "Territorio Británico del Océano Índico",
+ "IP": "",
+ "IQ": "Irak",
+ "IR": "Irán",
+ "IS": "Islandia",
+ "IT": "Italia",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Jamaica",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Jersey",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Jamaica",
+ "JN": "",
+ "JO": "Jordania",
+ "JP": "Japón",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Kenia",
+ "KF": "",
+ "KG": "Kirguistán",
+ "KH": "Camboya",
+ "KI": "Kiribati",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Comoras",
+ "KN": "San Cristóbal y Nieves",
+ "KO": "",
+ "KP": "Corea del Norte",
+ "KQ": "",
+ "KR": "Corea del Sur",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Kuwait",
+ "KX": "",
+ "KY": "Islas Caimán",
+ "KZ": "Kazajistán",
+
+ "LA": "Laos",
+ "LB": "Líbano",
+ "LC": "Santa Lucía",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Liechtenstein",
+ "LJ": "",
+ "LK": "Sri Lanka",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Liberia",
+ "LS": "Lesoto",
+ "LT": "Lituania",
+ "LU": "Luxemburgo",
+ "LV": "Letonia",
+ "LW": "",
+ "LX": "",
+ "LY": "Libia",
+ "LZ": "",
+
+ "MA": "Marruecos",
+ "MB": "",
+ "MC": "Mónaco",
+ "MD": "Moldavia",
+ "ME": "Montenegro",
+ "MF": "San Martín",
+ "MG": "Madagascar",
+ "MH": "Islas Marshall",
+ "MI": "",
+ "MJ": "",
+ "MK": "Macedonia",
+ "ML": "Malí",
+ "MM": "Myanmar",
+ "MN": "Mongolia",
+ "MO": "Macao",
+ "MP": "Islas Marianas del Norte",
+ "MQ": "Martinica",
+ "MR": "Mauritania",
+ "MS": "Montserrat",
+ "MT": "Malta",
+ "MU": "Mauricio",
+ "MV": "Maldivas",
+ "MW": "Malaui",
+ "MX": "México",
+ "MY": "Malasia",
+ "MZ": "Mozambique",
+
+ "NA": "Namibia",
+ "NB": "",
+ "NC": "Nueva Caledonia",
+ "ND": "",
+ "NE": "Níger",
+ "NF": "Isla Norfolk",
+ "NG": "Nigeria",
+ "NH": "",
+ "NI": "Nicaragua",
+ "NJ": "",
+ "NK": "",
+ "NL": "Países Bajos",
+ "NM": "",
+ "NN": "",
+ "NO": "Noruega",
+ "NP": "Nepal",
+ "NQ": "",
+ "NR": "Nauru",
+ "NS": "",
+ "NT": "",
+ "NU": "Niue",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "Nueva Zelanda",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Omán",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Panamá",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Perú",
+ "PF": "Polinesia Francesa",
+ "PG": "Papúa Nueva Guinea",
+ "PH": "Filipinas",
+ "PI": "Filipinas",
+ "PJ": "",
+ "PK": "Pakistán",
+ "PL": "Polonia",
+ "PM": "San Pedro y Miquelón",
+ "PN": "Islas Pitcairn",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Puerto Rico",
+ "PS": "Estado de Palestina",
+ "PT": "Portugal",
+ "PU": "",
+ "PV": "",
+ "PW": "Palaos",
+ "PX": "",
+ "PY": "Paraguay",
+ "PZ": "",
+
+ "QA": "Catar",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Argentina",
+ "RB": "Bolivia; Botsuana",
+ "RC": "Taiwán (República de China)",
+ "RD": "",
+ "RE": "Reunión",
+ "RF": "",
+ "RG": "",
+ "RH": "Haití",
+ "RI": "Indonesia",
+ "RJ": "",
+ "RK": "",
+ "RL": "Líbano",
+ "RM": "Madagascar",
+ "RN": "Níger",
+ "RO": "Rumania",
+ "RP": "Filipinas",
+ "RQ": "",
+ "RR": "",
+ "RS": "Serbia",
+ "RT": "",
+ "RU": "Rusia",
+ "RV": "",
+ "RW": "Ruanda",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Arabia Saudita",
+ "SB": "Islas Salomón",
+ "SC": "Seychelles",
+ "SD": "Sudán",
+ "SE": "Suecia",
+ "SF": "Finlandia",
+ "SG": "Singapur",
+ "SH": "Santa Elena, Ascensión y Tristán de Acuña",
+ "SI": "Eslovenia",
+ "SJ": "Svalbard y Jan Mayen",
+ "SK": "Eslovaquia",
+ "SL": "Sierra Leona",
+ "SM": "San Marino",
+ "SN": "Senegal",
+ "SO": "Somalia",
+ "SP": "",
+ "SQ": "",
+ "SR": "Surinam",
+ "SS": "Sudán del Sur",
+ "ST": "Santo Tomé y Príncipe",
+ "SU": "Unión de Repúblicas Socialistas Soviéticas (URSS)",
+ "SV": "El Salvador",
+ "SW": "",
+ "SX": "Sint Maarten",
+ "SY": "Siria",
+ "SZ": "Suazilandia",
+
+ "TA": "Tristán de Acuña",
+ "TB": "",
+ "TC": "Islas Turcas y Caicos",
+ "TD": "Chad",
+ "TE": "",
+ "TF": "Tierras Australes y Antárticas Francesas",
+ "TG": "Togo",
+ "TH": "Tailandia",
+ "TI": "",
+ "TJ": "Tayikistán",
+ "TK": "Tokelau",
+ "TL": "Timor Oriental",
+ "TM": "Turkmenistán",
+ "TN": "Túnez",
+ "TO": "Tonga",
+ "TP": "Timor Oriental",
+ "TQ": "",
+ "TR": "Turquía",
+ "TS": "",
+ "TT": "Trinidad y Tobago",
+ "TU": "",
+ "TV": "Tuvalu",
+ "TW": "Taiwán (República de China)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Tanzania",
+
+ "UA": "Ucrania",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Uganda",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "Reino Unido",
+ "UL": "",
+ "UM": "Islas Ultramarinas Menores de Estados Unidos",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "Estados Unidos de América (USA)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Uruguay",
+ "UZ": "Uzbekistán",
+
+ "VA": "Ciudad del Vaticano",
+ "VB": "",
+ "VC": "San Vicente y las Granadinas",
+ "VD": "",
+ "VE": "Venezuela",
+ "VF": "",
+ "VG": "Islas Vírgenes Británicas",
+ "VH": "",
+ "VI": "Islas Vírgenes de los Estados Unidos",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Vietnam",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Vanuatu",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Wallis y Futuna",
+ "WG": "Grenada",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "Santa Lucía",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Samoa",
+ "WT": "",
+ "WU": "",
+ "WV": "San Vicente y las Granadinas",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Kosovo",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Yemen",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Mayotte",
+ "YU": "Yugoslavia",
+ "YV": "Venezuela",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "Sudáfrica",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Zambia",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Zaire",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Zimbabue",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/countries/fr.json b/www/sunders/i18n/countries/fr.json
new file mode 100644
index 0000000..47a4705
--- /dev/null
+++ b/www/sunders/i18n/countries/fr.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "pas encore localisé",
+ "--": "incapable de localiser",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Île de l'Ascension",
+ "AD": "Andorre",
+ "AE": "Émirats arabes unis",
+ "AF": "Afghanistan",
+ "AG": "Antigua-et-Barbuda",
+ "AH": "",
+ "AI": "Anguilla",
+ "AJ": "",
+ "AK": "",
+ "AL": "Albanie",
+ "AM": "Arménie",
+ "AN": "Antilles néerlandaises",
+ "AO": "Angola",
+ "AP": "",
+ "AQ": "Antarctique",
+ "AR": "Argentine",
+ "AS": "Samoa américaines",
+ "AT": "Autriche",
+ "AU": "Australie",
+ "AV": "",
+ "AW": "Aruba",
+ "AX": "Åland",
+ "AY": "",
+ "AZ": "Azerbaïdjan",
+
+ "BA": "Bosnie-Herzégovine",
+ "BB": "Barbade",
+ "BC": "",
+ "BD": "Bangladesh",
+ "BE": "Belgique",
+ "BF": "Burkina Faso",
+ "BG": "Bulgarie",
+ "BH": "Bahreïn",
+ "BI": "Burundi",
+ "BJ": "Bénin",
+ "BK": "",
+ "BL": "Saint-Barthélemy",
+ "BM": "Bermudes",
+ "BN": "Brunei",
+ "BO": "Bolivie",
+ "BP": "",
+ "BQ": "Pays-Bas caribéens",
+ "BR": "Brésil",
+ "BS": "Bahamas",
+ "BT": "Bhoutan",
+ "BU": "Birmanie (Myanmar)",
+ "BV": "Île Bouvet",
+ "BW": "Botswana",
+ "BX": "",
+ "BY": "Biélorussie",
+ "BZ": "Belize",
+
+ "CA": "Canada",
+ "CB": "",
+ "CC": "Îles Cocos",
+ "CD": "République démocratique du Congo",
+ "CE": "",
+ "CF": "République centrafricaine",
+ "CG": "République du Congo",
+ "CH": "Suisse",
+ "CI": "Côte d'Ivoire",
+ "CJ": "",
+ "CK": "Îles Cook",
+ "CL": "Chili",
+ "CM": "Cameroun",
+ "CN": "République populaire de Chine",
+ "CO": "Colombie",
+ "CP": "Île de Clipperton",
+ "CQ": "",
+ "CR": "Costa Rica",
+ "CS": "Tchécoslovaquie (Serbie-et-Monténégro)",
+ "CT": "",
+ "CU": "Cuba",
+ "CV": "Cap-Vert",
+ "CW": "Curaçao",
+ "CX": "Île Christmas",
+ "CY": "Chypre",
+ "CZ": "République tchèque",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Allemagne",
+ "DF": "",
+ "DG": "Diego Garcia",
+ "DH": "",
+ "DI": "",
+ "DJ": "Djibouti",
+ "DK": "Danemark",
+ "DL": "",
+ "DM": "Dominique",
+ "DN": "",
+ "DO": "République dominicaine",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Bénin",
+ "DZ": "Algérie",
+
+ "EA": "Melilla",
+ "EB": "",
+ "EC": "Équateur",
+ "ED": "",
+ "EE": "Estonie",
+ "EF": "",
+ "EG": "Égypte",
+ "EH": "Sahara occidental",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Érythrée",
+ "ES": "Espagne",
+ "ET": "Éthiopie",
+ "EU": "",
+ "EV": "",
+ "EW": "Estonie",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Finlande",
+ "FJ": "Fidji",
+ "FK": "Îles Malouines",
+ "FL": "Liechtenstein",
+ "FM": "États fédérés de Micronésie",
+ "FN": "",
+ "FO": "Îles Féroé",
+ "FP": "",
+ "FQ": "",
+ "FR": "France",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Gabon",
+ "GB": "Royaume-Uni",
+ "GC": "",
+ "GD": "Grenade",
+ "GE": "Géorgie",
+ "GF": "Guyane",
+ "GG": "Guernesey",
+ "GH": "Ghana",
+ "GI": "Gibraltar",
+ "GJ": "",
+ "GK": "",
+ "GL": "Groenland",
+ "GM": "Gambie",
+ "GN": "Guinée",
+ "GO": "",
+ "GP": "Guadeloupe",
+ "GQ": "Guinée équatoriale",
+ "GR": "Grèce",
+ "GS": "Géorgie du Sud-et-les Îles Sandwich du Sud",
+ "GT": "Guatemala",
+ "GU": "Guam",
+ "GV": "",
+ "GW": "Guinée-Bissau",
+ "GX": "",
+ "GY": "Guyana",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Hong Kong",
+ "HL": "",
+ "HM": "Îles Heard-et-MacDonald",
+ "HN": "Honduras",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Croatie",
+ "HS": "",
+ "HT": "Haïti",
+ "HU": "Hongrie",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Îles Canaries",
+ "ID": "Indonésie",
+ "IE": "Irlande",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Israël",
+ "IM": "Île de Man",
+ "IN": "Inde",
+ "IO": "Territoire britannique de l'océan Indien",
+ "IP": "",
+ "IQ": "Irak",
+ "IR": "Iran",
+ "IS": "Islande",
+ "IT": "Italie",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Jamaïque",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Jersey",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Jamaïque",
+ "JN": "",
+ "JO": "Jordanie",
+ "JP": "Japon",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Kenya",
+ "KF": "",
+ "KG": "Kirghizistan",
+ "KH": "Cambodge",
+ "KI": "Kiribati",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Comores",
+ "KN": "Saint-Christophe-et-Niévès",
+ "KO": "",
+ "KP": "Corée du Nord",
+ "KQ": "",
+ "KR": "Corée du Sud",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Koweït",
+ "KX": "",
+ "KY": "Îles Caïmans",
+ "KZ": "Kazakhstan",
+
+ "LA": "Laos",
+ "LB": "Liban",
+ "LC": "Sainte-Lucie",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Liechtenstein",
+ "LJ": "",
+ "LK": "Sri Lanka",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Liberia",
+ "LS": "Lesotho",
+ "LT": "Lituanie",
+ "LU": "Luxembourg",
+ "LV": "Lettonie",
+ "LW": "",
+ "LX": "",
+ "LY": "Libye",
+ "LZ": "",
+
+ "MA": "Maroc",
+ "MB": "",
+ "MC": "Monaco",
+ "MD": "Moldavie",
+ "ME": "Monténégro",
+ "MF": "Saint-Martin",
+ "MG": "Madagascar",
+ "MH": "Îles Marshall",
+ "MI": "",
+ "MJ": "",
+ "MK": "Macédoine",
+ "ML": "Mali",
+ "MM": "Myanmar",
+ "MN": "Mongolie",
+ "MO": "Macao",
+ "MP": "Îles Mariannes du Nord",
+ "MQ": "Martinique",
+ "MR": "Mauritanie",
+ "MS": "Montserrat",
+ "MT": "Malte",
+ "MU": "Maurice",
+ "MV": "Maldives",
+ "MW": "Malawi",
+ "MX": "Mexique",
+ "MY": "Malaisie",
+ "MZ": "Mozambique",
+
+ "NA": "Namibie",
+ "NB": "",
+ "NC": "Nouvelle-Calédonie",
+ "ND": "",
+ "NE": "Niger",
+ "NF": "Île Norfolk",
+ "NG": "Nigeria",
+ "NH": "",
+ "NI": "Nicaragua",
+ "NJ": "",
+ "NK": "",
+ "NL": "Pays-Bas",
+ "NM": "",
+ "NN": "",
+ "NO": "Norvège",
+ "NP": "Népal",
+ "NQ": "",
+ "NR": "Nauru",
+ "NS": "",
+ "NT": "",
+ "NU": "Niue",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "Nouvelle-Zélande",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Oman",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Panama",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Pérou",
+ "PF": "Polynésie française",
+ "PG": "Papouasie-Nouvelle-Guinée",
+ "PH": "Philippines",
+ "PI": "Philippines",
+ "PJ": "",
+ "PK": "Pakistan",
+ "PL": "Pologne",
+ "PM": "Saint-Pierre-et-Miquelon",
+ "PN": "Îles Pitcairn",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Porto Rico",
+ "PS": "État de Palestine",
+ "PT": "Portugal",
+ "PU": "",
+ "PV": "",
+ "PW": "Palaos",
+ "PX": "",
+ "PY": "Paraguay",
+ "PZ": "",
+
+ "QA": "Qatar",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Argentine",
+ "RB": "Bolivie; Botswana",
+ "RC": "Taïwan (République de Chine)",
+ "RD": "",
+ "RE": "La Réunion",
+ "RF": "",
+ "RG": "",
+ "RH": "Haïti",
+ "RI": "Indonésie",
+ "RJ": "",
+ "RK": "",
+ "RL": "Liban",
+ "RM": "Madagascar",
+ "RN": "Niger",
+ "RO": "Roumanie",
+ "RP": "Philippines",
+ "RQ": "",
+ "RR": "",
+ "RS": "Serbie",
+ "RT": "",
+ "RU": "Russie",
+ "RV": "",
+ "RW": "Rwanda",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Arabie saoudite",
+ "SB": "Salomon",
+ "SC": "Seychelles",
+ "SD": "Soudan",
+ "SE": "Suède",
+ "SF": "Finlande",
+ "SG": "Singapour",
+ "SH": "Sainte-Hélène, Ascension et Tristan da Cunha",
+ "SI": "Slovénie",
+ "SJ": "Svalbard et Jan Mayen",
+ "SK": "Slovaquie",
+ "SL": "Sierra Leone",
+ "SM": "Saint-Marin",
+ "SN": "Sénégal",
+ "SO": "Somalie",
+ "SP": "",
+ "SQ": "",
+ "SR": "Suriname",
+ "SS": "Soudan du Sud",
+ "ST": "Sao Tomé-et-Principe",
+ "SU": "Union des républiques socialistes soviétiques (URSS)",
+ "SV": "Salvador",
+ "SW": "",
+ "SX": "Saint-Martin",
+ "SY": "Syrie",
+ "SZ": "Swaziland",
+
+ "TA": "Tristan da Cunha",
+ "TB": "",
+ "TC": "Îles Turks-et-Caïcos",
+ "TD": "Tchad",
+ "TE": "",
+ "TF": "Terres australes et antarctiques françaises",
+ "TG": "Togo",
+ "TH": "Thaïlande",
+ "TI": "",
+ "TJ": "Tadjikistan",
+ "TK": "Tokelau",
+ "TL": "Timor oriental",
+ "TM": "Turkménistan",
+ "TN": "Tunisie",
+ "TO": "Tonga",
+ "TP": "Timor oriental",
+ "TQ": "",
+ "TR": "Turquie",
+ "TS": "",
+ "TT": "Trinité-et-Tobago",
+ "TU": "",
+ "TV": "Tuvalu",
+ "TW": "Taïwan (République de Chine)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Tanzanie",
+
+ "UA": "Ukraine",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Ouganda",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "Royaume-Uni",
+ "UL": "",
+ "UM": "Îles mineures éloignées des États-Unis",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "États-Unis d'Amérique (USA)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Uruguay",
+ "UZ": "Ouzbékistan",
+
+ "VA": "Vatican",
+ "VB": "",
+ "VC": "Saint-Vincent-et-les-Grenadines",
+ "VD": "",
+ "VE": "Venezuela",
+ "VF": "",
+ "VG": "Îles Vierges britanniques",
+ "VH": "",
+ "VI": "Îles Vierges des États-Unis",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Viêt Nam",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Vanuatu",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Wallis-et-Futuna",
+ "WG": "Grenade",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "Sainte-Lucie",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Samoa",
+ "WT": "",
+ "WU": "",
+ "WV": "Saint-Vincent-et-les-Grenadines",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Kosovo",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Yémen",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Mayotte",
+ "YU": "Yougoslavie",
+ "YV": "Venezuela",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "Afrique du Sud",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Zambie",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Zaïre",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Zimbabwe",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/countries/it.json b/www/sunders/i18n/countries/it.json
new file mode 100644
index 0000000..d631e28
--- /dev/null
+++ b/www/sunders/i18n/countries/it.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "non ancora localizzato",
+ "--": "non in grado di localizzare",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Isola di Ascensione",
+ "AD": "Andorra",
+ "AE": "Emirati Arabi Uniti ",
+ "AF": "Afghanistan",
+ "AG": "Antigua e Barbuda",
+ "AH": "",
+ "AI": "Anguilla",
+ "AJ": "",
+ "AK": "",
+ "AL": "Albania",
+ "AM": "Armenia",
+ "AN": "Antille olandesi",
+ "AO": "Angola",
+ "AP": "",
+ "AQ": "Antartide",
+ "AR": "Argentina",
+ "AS": "Samoa Americane",
+ "AT": "Austria",
+ "AU": "Australia",
+ "AV": "",
+ "AW": "Aruba",
+ "AX": "Isole Åland",
+ "AY": "",
+ "AZ": "Azerbaigian",
+
+ "BA": "Bosnia ed Erzegovina",
+ "BB": "Barbados",
+ "BC": "",
+ "BD": "Bangladesh",
+ "BE": "Belgio",
+ "BF": "Burkina Faso",
+ "BG": "Bulgaria",
+ "BH": "Bahrain",
+ "BI": "Burundi",
+ "BJ": "Benin",
+ "BK": "",
+ "BL": "Saint Barthélemy",
+ "BM": "Bermuda",
+ "BN": "Brunei",
+ "BO": "Bolivia",
+ "BP": "",
+ "BQ": "Paesi Bassi caraibici",
+ "BR": "Brasile",
+ "BS": "Bahamas",
+ "BT": "Bhutan",
+ "BU": "Burma (Birmania)",
+ "BV": "Isola Bouvet",
+ "BW": "Botswana",
+ "BX": "",
+ "BY": "Bielorussia",
+ "BZ": "Belize",
+
+ "CA": "Canada",
+ "CB": "",
+ "CC": "Isole Cocos",
+ "CD": "Repubblica Democratica del Congo",
+ "CE": "",
+ "CF": "Repubblica Centrafricana",
+ "CG": "Repubblica del Congo",
+ "CH": "Svizzera",
+ "CI": "Costa d'Avorio",
+ "CJ": "",
+ "CK": "Isole Cook",
+ "CL": "Cile",
+ "CM": "Camerun",
+ "CN": "Repubblica Popolare Cinese",
+ "CO": "Colombia",
+ "CP": "Isola di Clipperton",
+ "CQ": "",
+ "CR": "Costa Rica",
+ "CS": "Cecoslovacchia,(Serbia e Montenegro)",
+ "CT": "",
+ "CU": "Cuba",
+ "CV": "Capo Verde",
+ "CW": "Curaçao",
+ "CX": "Isola di Natale",
+ "CY": "Cipro",
+ "CZ": "Repubblica Ceca",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Germania",
+ "DF": "",
+ "DG": "Diego Garcia",
+ "DH": "",
+ "DI": "",
+ "DJ": "Gibuti",
+ "DK": "Danimarca",
+ "DL": "",
+ "DM": "Dominica",
+ "DN": "",
+ "DO": "Repubblica Dominicana",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Benin",
+ "DZ": "Algeria",
+
+ "EA": "Melilla",
+ "EB": "",
+ "EC": "Ecuador",
+ "ED": "",
+ "EE": "Estonia",
+ "EF": "",
+ "EG": "Egitto",
+ "EH": "Sahara Occidentale",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Eritrea",
+ "ES": "Spagna",
+ "ET": "Etiopia",
+ "EU": "",
+ "EV": "",
+ "EW": "Estonia",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Finlandia",
+ "FJ": "Figi",
+ "FK": "Isole Falkland",
+ "FL": "Liechtenstein",
+ "FM": "Stati Federati di Micronesia",
+ "FN": "",
+ "FO": "Isole Faroe",
+ "FP": "",
+ "FQ": "",
+ "FR": "Francia",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Gabon",
+ "GB": "Regno Unito",
+ "GC": "",
+ "GD": "Grenada",
+ "GE": "Georgia",
+ "GF": "Guiana francese",
+ "GG": "Guernsey",
+ "GH": "Ghana",
+ "GI": "Gibilterra",
+ "GJ": "",
+ "GK": "",
+ "GL": "Groenlandia",
+ "GM": "Gambia",
+ "GN": "Guinea",
+ "GO": "",
+ "GP": "Guadalupa",
+ "GQ": "Guinea Equatoriale",
+ "GR": "Grecia",
+ "GS": "Georgia del Sud e Isole Sandwich Austral",
+ "GT": "Guatemala",
+ "GU": "Guam",
+ "GV": "",
+ "GW": "Guinea-Bissau",
+ "GX": "",
+ "GY": "Guiana",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Hong Kong",
+ "HL": "",
+ "HM": "Isole Heard e McDonald",
+ "HN": "Honduras",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Croazia",
+ "HS": "",
+ "HT": "Haiti",
+ "HU": "Ungheria",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Isole Canarie",
+ "ID": "Indonesia",
+ "IE": "Irlanda",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Israele",
+ "IM": "Isola di Man",
+ "IN": "India",
+ "IO": "Territorio britannico dell'Oceano Indiano",
+ "IP": "",
+ "IQ": "Iraq",
+ "IR": "Iran",
+ "IS": "Islanda",
+ "IT": "Italia",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Giamaica",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Jersey",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Giamaica",
+ "JN": "",
+ "JO": "Giordania",
+ "JP": "Giappone",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Kenya",
+ "KF": "",
+ "KG": "Kirghizistan",
+ "KH": "Cambogia",
+ "KI": "Kiribati",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Comoros",
+ "KN": "Saint Kitts e Nevis",
+ "KO": "",
+ "KP": "Corea del Nord",
+ "KQ": "",
+ "KR": "Corea del Sud",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Kuwait",
+ "KX": "",
+ "KY": "Isole Cayman",
+ "KZ": "Kazakhstan",
+
+ "LA": "Laos",
+ "LB": "Libano",
+ "LC": "Saint Lucia",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Liechtenstein",
+ "LJ": "",
+ "LK": "Sri Lanka",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Liberia",
+ "LS": "Lesotho",
+ "LT": "Lithuania",
+ "LU": "Lussemburgo",
+ "LV": "Latvia",
+ "LW": "",
+ "LX": "",
+ "LY": "Libya",
+ "LZ": "",
+
+ "MA": "Morocco",
+ "MB": "",
+ "MC": "Monaco",
+ "MD": "Moldova",
+ "ME": "Montenegro",
+ "MF": "Saint Martin",
+ "MG": "Madagascar",
+ "MH": "Isole Marshall",
+ "MI": "",
+ "MJ": "",
+ "MK": "Macedonia",
+ "ML": "Mali",
+ "MM": "Birmania",
+ "MN": "Mongolia",
+ "MO": "Macau",
+ "MP": "Isole Marianne Settentrionali",
+ "MQ": "Martinica",
+ "MR": "Mauritania",
+ "MS": "Montserrat",
+ "MT": "Malta",
+ "MU": "Mauritius",
+ "MV": "Maldive",
+ "MW": "Malawi",
+ "MX": "Messico",
+ "MY": "Malaysia",
+ "MZ": "Mozambico",
+
+ "NA": "Namibia",
+ "NB": "",
+ "NC": "Nuova Caledonia",
+ "ND": "",
+ "NE": "Niger",
+ "NF": "Isola Norfolk",
+ "NG": "Nigeria",
+ "NH": "",
+ "NI": "Nicaragua",
+ "NJ": "",
+ "NK": "",
+ "NL": "Paesi Bassi/Olanda",
+ "NM": "",
+ "NN": "",
+ "NO": "Norvegia",
+ "NP": "Nepal",
+ "NQ": "",
+ "NR": "Nauru",
+ "NS": "",
+ "NT": "",
+ "NU": "Niue",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "Nuova Zelanda",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Oman",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Panama",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Perù",
+ "PF": "Polinesia francese",
+ "PG": "Papua Nuova Guinea",
+ "PH": "Filippine",
+ "PI": "Filippine",
+ "PJ": "",
+ "PK": "Pakistan",
+ "PL": "Polonia",
+ "PM": "Saint-Pierre e Miquelon",
+ "PN": "Isole Pitcairn",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Porto Rico",
+ "PS": "Stato di Palestina",
+ "PT": "Portogallo",
+ "PU": "",
+ "PV": "",
+ "PW": "Palau",
+ "PX": "",
+ "PY": "Paraguay",
+ "PZ": "",
+
+ "QA": "Qatar",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Argentina",
+ "RB": "Bolivia; Botswana",
+ "RC": "Taiwan/Formosa (Repubblica Cinese)",
+ "RD": "",
+ "RE": "Réunion",
+ "RF": "",
+ "RG": "",
+ "RH": "Haiti",
+ "RI": "Indonesia",
+ "RJ": "",
+ "RK": "",
+ "RL": "Libano",
+ "RM": "Madagascar",
+ "RN": "Niger",
+ "RO": "Romania",
+ "RP": "Filippine",
+ "RQ": "",
+ "RR": "",
+ "RS": "Serbia",
+ "RT": "",
+ "RU": "Russia",
+ "RV": "",
+ "RW": "Ruanda",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Saudi Arabia",
+ "SB": "Solomon Islands",
+ "SC": "Seychelles",
+ "SD": "Sudan",
+ "SE": "Svezia",
+ "SF": "Finlandia",
+ "SG": "Singapore",
+ "SH": "Sant'Elena, Ascensione e Tristan da Cunha",
+ "SI": "Slovenia",
+ "SJ": "Svalbard e Jan Mayen",
+ "SK": "Slovacchia",
+ "SL": "Sierra Leone",
+ "SM": "San Marino",
+ "SN": "Senegal",
+ "SO": "Somalia",
+ "SP": "",
+ "SQ": "",
+ "SR": "Suriname",
+ "SS": "Sudandel Sud",
+ "ST": "São Tomé e Príncipe",
+ "SU": "Unione delle Repubbliche Socialiste Sovietiche (URSS)",
+ "SV": "El Salvador",
+ "SW": "",
+ "SX": "Sint Maarten",
+ "SY": "Siria",
+ "SZ": "Swaziland",
+
+ "TA": "Tristan da Cunha",
+ "TB": "",
+ "TC": "Turks e Caicos",
+ "TD": "Ciad",
+ "TE": "",
+ "TF": "Terre australi e antartiche francesi",
+ "TG": "Togo",
+ "TH": "Thailandia",
+ "TI": "",
+ "TJ": "Tagikistan",
+ "TK": "Tokelau",
+ "TL": "Timor Orientale",
+ "TM": "Turkmenistan",
+ "TN": "Tunisia",
+ "TO": "Tonga",
+ "TP": "Timor Orientale",
+ "TQ": "",
+ "TR": "Turchia",
+ "TS": "",
+ "TT": "Trinidad e Tobago",
+ "TU": "",
+ "TV": "Tuvalu",
+ "TW": "Taiwan/Formosa (Repubblica Cinese)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Tanzania",
+
+ "UA": "Ucraina",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Uganda",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "Regno Unito",
+ "UL": "",
+ "UM": "Isole Minori Esterne degli Stati Uniti d'America",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "Stati Uniti d'America (USA)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Uruguay",
+ "UZ": "Uzbekistan",
+
+ "VA": "Città del Vaticano",
+ "VB": "",
+ "VC": "Saint Vincent e Grenadine",
+ "VD": "",
+ "VE": "Venezuela",
+ "VF": "",
+ "VG": "Isole Vergini britanniche",
+ "VH": "",
+ "VI": "Isole Vergini americane",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Vietnam",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Vanuatu",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Wallis e Futuna",
+ "WG": "Grenada",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "Saint Lucia",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Samoa",
+ "WT": "",
+ "WU": "",
+ "WV": "Saint Vincent e Grenadine",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Kosovo",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Yemen",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Mayotte",
+ "YU": "Jugoslavia",
+ "YV": "Venezuela",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "Sudafrica",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Zambia",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Zaire",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Zimbabwe",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/countries/ru.json b/www/sunders/i18n/countries/ru.json
new file mode 100644
index 0000000..af0b05d
--- /dev/null
+++ b/www/sunders/i18n/countries/ru.json
@@ -0,0 +1,708 @@
+{
+ "texts": {
+ "xxx": "еще не локализованы",
+ "--": "не удалось локализовать",
+
+ "AA": "",
+ "AB": "",
+ "AC": "Остров Вознесения",
+ "AD": "Андорра",
+ "AE": "Объединённые Арабские Эмираты",
+ "AF": "Афганистан",
+ "AG": "Антигуа и Барбуда",
+ "AH": "",
+ "AI": "Ангилья",
+ "AJ": "",
+ "AK": "",
+ "AL": "Албания",
+ "AM": "Армения",
+ "AN": "Нидерландские Антильские острова",
+ "AO": "Ангола",
+ "AP": "",
+ "AQ": "Антарктида",
+ "AR": "Аргентина",
+ "AS": "Американское Самоа",
+ "AT": "Австрия",
+ "AU": "Австралия",
+ "AV": "",
+ "AW": "Аруба",
+ "AX": "Аландские острова",
+ "AY": "",
+ "AZ": "Азербайджан",
+
+ "BA": "Босния и Герцеговина",
+ "BB": "Барбадос",
+ "BC": "",
+ "BD": "Бангладеш",
+ "BE": "Бельгия",
+ "BF": "Буркина-Фасо",
+ "BG": "Болгария",
+ "BH": "Бахрейн",
+ "BI": "Бурунди",
+ "BJ": "Бенин",
+ "BK": "",
+ "BL": "Сен-Бартелеми",
+ "BM": "Бермудские Острова",
+ "BN": "Бруней",
+ "BO": "Боливия",
+ "BP": "",
+ "BQ": "Бонайре, Синт-Эстатиус и Саба",
+ "BR": "Бразилия",
+ "BS": "Багамские Острова",
+ "BT": "Бутан",
+ "BU": "Бирма (Мьянма)",
+ "BV": "Остров Буве",
+ "BW": "Ботсвана",
+ "BX": "",
+ "BY": "Белоруссия",
+ "BZ": "Белиз",
+
+ "CA": "Канада",
+ "CB": "",
+ "CC": "Кокосовые острова",
+ "CD": "Демократическая Республика Конго",
+ "CE": "",
+ "CF": "Центральноафриканская Республика",
+ "CG": "Республика Конго",
+ "CH": "Швейцария",
+ "CI": "Кот-д’Ивуар",
+ "CJ": "",
+ "CK": "Острова Кука",
+ "CL": "Чили",
+ "CM": "Камерун",
+ "CN": "Китайская Народная Республика",
+ "CO": "Колумбия",
+ "CP": "Клиппертон",
+ "CQ": "",
+ "CR": "Коста-Рика",
+ "CS": "Чехословакия (Сербия и Черногория)",
+ "CT": "",
+ "CU": "Куба",
+ "CV": "Кабо-Верде",
+ "CW": "Кюрасао",
+ "CX": "Остров Рождества",
+ "CY": "Кипр",
+ "CZ": "Чешская Республика",
+
+ "DA": "",
+ "DB": "",
+ "DC": "",
+ "DD": "",
+ "DE": "Германия",
+ "DF": "",
+ "DG": "Диего-Гарсия",
+ "DH": "",
+ "DI": "",
+ "DJ": "Джибути",
+ "DK": "Дания",
+ "DL": "",
+ "DM": "Доминика",
+ "DN": "",
+ "DO": "Доминиканская Республика",
+ "DP": "",
+ "DQ": "",
+ "DR": "",
+ "DS": "",
+ "DT": "",
+ "DU": "",
+ "DV": "",
+ "DW": "",
+ "DX": "",
+ "DY": "Бени́н",
+ "DZ": "Алжир",
+
+ "EA": "Мелилья",
+ "EB": "",
+ "EC": "Эквадор",
+ "ED": "",
+ "EE": "Эстония",
+ "EF": "",
+ "EG": "Египет",
+ "EH": "Западная Сахара",
+ "EI": "",
+ "EJ": "",
+ "EK": "",
+ "EL": "",
+ "EM": "",
+ "EN": "",
+ "EO": "",
+ "EP": "",
+ "EQ": "",
+ "ER": "Эритрея",
+ "ES": "Испания",
+ "ET": "Эфиопия",
+ "EU": "",
+ "EV": "",
+ "EW": "Эстония",
+ "EX": "",
+ "EY": "",
+ "EZ": "",
+
+ "FA": "",
+ "FB": "",
+ "FC": "",
+ "FD": "",
+ "FE": "",
+ "FF": "",
+ "FG": "",
+ "FH": "",
+ "FI": "Финляндия",
+ "FJ": "Фиджи",
+ "FK": "Фолклендские острова",
+ "FL": "Лихтенштейн",
+ "FM": "Федеративные Штаты Микронезии",
+ "FN": "",
+ "FO": "Фарерские острова",
+ "FP": "",
+ "FQ": "",
+ "FR": "Франция",
+ "FS": "",
+ "FT": "",
+ "FU": "",
+ "FV": "",
+ "FW": "",
+ "FX": "",
+ "FY": "",
+ "FZ": "",
+
+ "GA": "Габон",
+ "GB": "Великобритания",
+ "GC": "",
+ "GD": "Гренада",
+ "GE": "Грузия",
+ "GF": "Гвиана (департамент Франции)",
+ "GG": "Гернси",
+ "GH": "Гана",
+ "GI": "Гибралтар",
+ "GJ": "",
+ "GK": "",
+ "GL": "Гренландия",
+ "GM": "Гамбия",
+ "GN": "Гвинея",
+ "GO": "",
+ "GP": "Гваделупа",
+ "GQ": "Экваториальная Гвинея",
+ "GR": "Греция",
+ "GS": "Южная Георгия и Южные Сандвичевы Острова",
+ "GT": "Гватемала",
+ "GU": "Гуам",
+ "GV": "",
+ "GW": "Гвинея-Бисау",
+ "GX": "",
+ "GY": "Гайана",
+ "GZ": "",
+
+ "HA": "",
+ "HB": "",
+ "HC": "",
+ "HD": "",
+ "HE": "",
+ "HF": "",
+ "HG": "",
+ "HH": "",
+ "HI": "",
+ "HJ": "",
+ "HK": "Гонконг",
+ "HL": "",
+ "HM": "Остров Херд и острова Макдональд",
+ "HN": "Гондурас",
+ "HO": "",
+ "HP": "",
+ "HQ": "",
+ "HR": "Хорватия",
+ "HS": "",
+ "HT": "Гаити",
+ "HU": "Венгрия",
+ "HV": "",
+ "HW": "",
+ "HX": "",
+ "HY": "",
+ "HZ": "",
+
+ "IA": "",
+ "IB": "",
+ "IC": "Канарские острова",
+ "ID": "Индонезия",
+ "IE": "Ирландия",
+ "IF": "",
+ "IG": "",
+ "IH": "",
+ "II": "",
+ "IJ": "",
+ "IK": "",
+ "IL": "Израиль",
+ "IM": "Остров Мэн",
+ "IN": "Индия",
+ "IO": "Британская Территория в Индийском Океане",
+ "IP": "",
+ "IQ": "Ирак",
+ "IR": "Иран",
+ "IS": "Исландия",
+ "IT": "Италия",
+ "IU": "",
+ "IV": "",
+ "IW": "",
+ "IX": "",
+ "IY": "",
+ "IZ": "",
+
+ "JA": "Ямайка",
+ "JB": "",
+ "JC": "",
+ "JD": "",
+ "JE": "Джерси",
+ "JF": "",
+ "JG": "",
+ "JH": "",
+ "JI": "",
+ "JJ": "",
+ "JK": "",
+ "JL": "",
+ "JM": "Ямайка",
+ "JN": "",
+ "JO": "Иордания",
+ "JP": "Япония",
+ "JQ": "",
+ "JR": "",
+ "JS": "",
+ "JT": "",
+ "JU": "",
+ "JV": "",
+ "JW": "",
+ "JX": "",
+ "JY": "",
+ "JZ": "",
+
+ "KA": "",
+ "KB": "",
+ "KC": "",
+ "KD": "",
+ "KE": "Кения",
+ "KF": "",
+ "KG": "Киргизия",
+ "KH": "Камбоджа",
+ "KI": "Кирибати",
+ "KJ": "",
+ "KK": "",
+ "KL": "",
+ "KM": "Коморы",
+ "KN": "Сент-Китс и Невис",
+ "KO": "",
+ "KP": "Корейская Народно-Демократическая Республика",
+ "KQ": "",
+ "KR": "Республика Корея",
+ "KS": "",
+ "KT": "",
+ "KU": "",
+ "KV": "",
+ "KW": "Кувейт",
+ "KX": "",
+ "KY": "Острова Кайман",
+ "KZ": "Казахстан",
+
+ "LA": "Лаос",
+ "LB": "Ливан",
+ "LC": "Сент-Люсия",
+ "LD": "",
+ "LE": "",
+ "LF": "",
+ "LG": "",
+ "LH": "",
+ "LI": "Лихтенштейн",
+ "LJ": "",
+ "LK": "Шри-Ланка",
+ "LL": "",
+ "LM": "",
+ "LN": "",
+ "LO": "",
+ "LP": "",
+ "LQ": "",
+ "LR": "Либерия",
+ "LS": "Лесото",
+ "LT": "Литва",
+ "LU": "Люксембург",
+ "LV": "Латвия",
+ "LW": "",
+ "LX": "",
+ "LY": "Ливия",
+ "LZ": "",
+
+ "MA": "Марокко",
+ "MB": "",
+ "MC": "Монако",
+ "MD": "Молдавия",
+ "ME": "Черногория",
+ "MF": "Сен-Мартен",
+ "MG": "Мадагаскар",
+ "MH": "Маршалловы Острова",
+ "MI": "",
+ "MJ": "",
+ "MK": "Македония",
+ "ML": "Мали",
+ "MM": "Мьянма",
+ "MN": "Монголия",
+ "MO": "Макао",
+ "MP": "Северные Марианские Острова",
+ "MQ": "Мартиника",
+ "MR": "Мавритания",
+ "MS": "Монтсеррат",
+ "MT": "Мальта",
+ "MU": "Маврикий",
+ "MV": "Мальдивы",
+ "MW": "Малави",
+ "MX": "Мексика",
+ "MY": "Малайзия",
+ "MZ": "Мозамбик",
+
+ "NA": "Намибия",
+ "NB": "",
+ "NC": "Каледония",
+ "ND": "",
+ "NE": "Нигер",
+ "NF": "Остров Норфолк",
+ "NG": "Нигерия",
+ "NH": "",
+ "NI": "Никарагуа",
+ "NJ": "",
+ "NK": "",
+ "NL": "Нидерланды",
+ "NM": "",
+ "NN": "",
+ "NO": "Норвегия",
+ "NP": "Непал",
+ "NQ": "",
+ "NR": "Науру",
+ "NS": "",
+ "NT": "",
+ "NU": "Ниуэ",
+ "NV": "",
+ "NW": "",
+ "NX": "",
+ "NY": "",
+ "NZ": "Новая Зеландия",
+
+ "OA": "",
+ "OB": "",
+ "OC": "",
+ "OD": "",
+ "OE": "",
+ "OF": "",
+ "OG": "",
+ "OH": "",
+ "OI": "",
+ "OJ": "",
+ "OK": "",
+ "OL": "",
+ "OM": "Оман",
+ "ON": "",
+ "OO": "",
+ "OP": "",
+ "OQ": "",
+ "OR": "",
+ "OS": "",
+ "OT": "",
+ "OU": "",
+ "OV": "",
+ "OW": "",
+ "OX": "",
+ "OY": "",
+ "OZ": "",
+
+ "PA": "Панама",
+ "PB": "",
+ "PC": "",
+ "PD": "",
+ "PE": "Перу",
+ "PF": "Французская Полинезия",
+ "PG": "Папуа — Новая Гвинея",
+ "PH": "Филиппины",
+ "PI": "Филиппины",
+ "PJ": "",
+ "PK": "Пакистан",
+ "PL": "Польша",
+ "PM": "Сен-Пьер и Микелон",
+ "PN": "Острова Питкэрн",
+ "PO": "",
+ "PP": "",
+ "PQ": "",
+ "PR": "Пуэрто-Рико",
+ "PS": "Государство Палестина",
+ "PT": "Португалия",
+ "PU": "",
+ "PV": "",
+ "PW": "Палау",
+ "PX": "",
+ "PY": "Парагвай",
+ "PZ": "",
+
+ "QA": "Катар",
+ "QB": "",
+ "QC": "",
+ "QD": "",
+ "QE": "",
+ "QF": "",
+ "QG": "",
+ "QH": "",
+ "QI": "",
+ "QJ": "",
+ "QK": "",
+ "QL": "",
+ "QM": "",
+ "QN": "",
+ "QO": "",
+ "QP": "",
+ "QQ": "",
+ "QR": "",
+ "QS": "",
+ "QT": "",
+ "QU": "",
+ "QV": "",
+ "QW": "",
+ "QX": "",
+ "QY": "",
+ "QZ": "",
+
+ "RA": "Аргентина",
+ "RB": "Боливия; Ботсвана",
+ "RC": "Тайва́нь (Китайская Республика)",
+ "RD": "",
+ "RE": "Реюньон",
+ "RF": "",
+ "RG": "",
+ "RH": "Республика Гаити",
+ "RI": "Индонезия",
+ "RJ": "",
+ "RK": "",
+ "RL": "Ливан",
+ "RM": "Мадагаскар",
+ "RN": "Нигер",
+ "RO": "Румыния",
+ "RP": "Филиппины",
+ "RQ": "",
+ "RR": "",
+ "RS": "Сербия",
+ "RT": "",
+ "RU": "Россия",
+ "RV": "",
+ "RW": "Руанда",
+ "RX": "",
+ "RY": "",
+ "RZ": "",
+
+ "SA": "Саудовская Аравия",
+ "SB": "Соломоновы Острова",
+ "SC": "Сейшельские Острова",
+ "SD": "Судан",
+ "SE": "Швеция",
+ "SF": "Финляндия",
+ "SG": "Сингапур",
+ "SH": "Острова Святой Елены, Вознесения и Тристан-да-Кунья",
+ "SI": "Словения",
+ "SJ": "Шпицберген и Ян-Майен",
+ "SK": "Словакия",
+ "SL": "Сьерра-Леоне",
+ "SM": "Сан-Марино",
+ "SN": "Сенегал",
+ "SO": "Сомали",
+ "SP": "",
+ "SQ": "",
+ "SR": "Суринам",
+ "SS": "Южный Судан",
+ "ST": "Сан-Томе и Принсипи",
+ "SU": "Союз Советских Социалистических Республик (СССР)",
+ "SV": "Сальвадор",
+ "SW": "",
+ "SX": "Синт-Мартен",
+ "SY": "Сирия",
+ "SZ": "Свазиленд",
+
+ "TA": "Тристан-да-Кунья",
+ "TB": "",
+ "TC": "Теркс и Кайкос",
+ "TD": "Чад",
+ "TE": "",
+ "TF": "Французские Южные и Антарктические территории",
+ "TG": "Того",
+ "TH": "Таиланд",
+ "TI": "",
+ "TJ": "Таджикистан",
+ "TK": "Токелау",
+ "TL": "Восточный Тимор",
+ "TM": "Туркмения",
+ "TN": "Тунис",
+ "TO": "Тонга",
+ "TP": "Восточный Тимор",
+ "TQ": "",
+ "TR": "Турция",
+ "TS": "",
+ "TT": "Тринидад и Тобаго",
+ "TU": "",
+ "TV": "Тувалу",
+ "TW": "Тайва́нь (Китайская Республика)",
+ "TX": "",
+ "TY": "",
+ "TZ": "Танзания",
+
+ "UA": "Украина",
+ "UB": "",
+ "UC": "",
+ "UD": "",
+ "UE": "",
+ "UF": "",
+ "UG": "Уганда",
+ "UH": "",
+ "UI": "",
+ "UJ": "",
+ "UK": "Соединённое Королевство",
+ "UL": "",
+ "UM": "Внешние малые острова США",
+ "UN": "",
+ "UO": "",
+ "UP": "",
+ "UQ": "",
+ "UR": "",
+ "US": "Соединённые Шта́ты Аме́рики (США)",
+ "UT": "",
+ "UU": "",
+ "UV": "",
+ "UW": "",
+ "UX": "",
+ "UY": "Уругвай",
+ "UZ": "Узбекистан",
+
+ "VA": "Ватикан",
+ "VB": "",
+ "VC": "Сент-Винсент и Гренадины",
+ "VD": "",
+ "VE": "Венесуэла",
+ "VF": "",
+ "VG": "Виргинские Острова (Великобритания)",
+ "VH": "",
+ "VI": "Виргинские Острова (США)",
+ "VJ": "",
+ "VK": "",
+ "VL": "",
+ "VM": "",
+ "VN": "Вьетнам",
+ "VO": "",
+ "VP": "",
+ "VQ": "",
+ "VR": "",
+ "VS": "",
+ "VT": "",
+ "VU": "Вануату",
+ "VV": "",
+ "VW": "",
+ "VX": "",
+ "VY": "",
+ "VZ": "",
+
+ "WA": "",
+ "WB": "",
+ "WC": "",
+ "WD": "",
+ "WE": "",
+ "WF": "Уоллис и Футуна",
+ "WG": "Гренада",
+ "WH": "",
+ "WI": "",
+ "WJ": "",
+ "WK": "",
+ "WL": "Сент-Люсия",
+ "WM": "",
+ "WN": "",
+ "WO": "",
+ "WP": "",
+ "WQ": "",
+ "WR": "",
+ "WS": "Самоа",
+ "WT": "",
+ "WU": "",
+ "WV": "Сент-Винсент и Гренадины",
+ "WW": "",
+ "WX": "",
+ "WY": "",
+ "WZ": "",
+
+ "XA": "",
+ "XB": "",
+ "XC": "",
+ "XD": "",
+ "XE": "",
+ "XF": "",
+ "XG": "",
+ "XH": "",
+ "XI": "",
+ "XJ": "",
+ "XK": "Косово",
+ "XL": "",
+ "XM": "",
+ "XN": "",
+ "XO": "",
+ "XP": "",
+ "XQ": "",
+ "XR": "",
+ "XS": "",
+ "XT": "",
+ "XU": "",
+ "XV": "",
+ "XW": "",
+ "XX": "",
+ "XY": "",
+ "XZ": "",
+
+ "YA": "",
+ "YB": "",
+ "YC": "",
+ "YD": "",
+ "YE": "Йемен",
+ "YF": "",
+ "YG": "",
+ "YH": "",
+ "YI": "",
+ "YJ": "",
+ "YK": "",
+ "YL": "",
+ "YM": "",
+ "YN": "",
+ "YO": "",
+ "YP": "",
+ "YQ": "",
+ "YR": "",
+ "YS": "",
+ "YT": "Майотта",
+ "YU": "Югославия",
+ "YV": "Венесуэла",
+ "YW": "",
+ "YX": "",
+ "YY": "",
+ "YZ": "",
+
+ "ZA": "Ю́жная А́фрика",
+ "ZB": "",
+ "ZC": "",
+ "ZD": "",
+ "ZE": "",
+ "ZF": "",
+ "ZG": "",
+ "ZH": "",
+ "ZI": "",
+ "ZJ": "",
+ "ZK": "",
+ "ZL": "",
+ "ZM": "Замбия",
+ "ZN": "",
+ "ZO": "",
+ "ZP": "",
+ "ZQ": "",
+ "ZR": "Заир",
+ "ZS": "",
+ "ZT": "",
+ "ZU": "",
+ "ZV": "",
+ "ZW": "Зимбабве",
+ "ZX": "",
+ "ZY": "",
+ "ZZ": ""
+ }
+}
diff --git a/www/sunders/i18n/credits/de.json b/www/sunders/i18n/credits/de.json
new file mode 100644
index 0000000..9c77683
--- /dev/null
+++ b/www/sunders/i18n/credits/de.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "Danksagungen & Lizenzen",
+ "type-idea": "Idee und Codebasis",
+ "type-js": "Javascipt-Erweiterungen",
+ "type-map": "Karte und Daten zu Überwachungseinträgen",
+ "type-service": "Webdienste",
+ "type-icon": "Symbole",
+ "type-font": "Schriftart für Überschriften"
+ }
+}
diff --git a/www/sunders/i18n/credits/en.json b/www/sunders/i18n/credits/en.json
new file mode 100644
index 0000000..d066625
--- /dev/null
+++ b/www/sunders/i18n/credits/en.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "Credits & Licenses",
+ "type-idea": "Idea and code base",
+ "type-js": "Javascript plugins",
+ "type-map": "Map and surveillance node data",
+ "type-service": "Web services",
+ "type-icon": "Icons",
+ "type-font": "Font for titles"
+ }
+}
diff --git a/www/sunders/i18n/credits/es.json b/www/sunders/i18n/credits/es.json
new file mode 100644
index 0000000..525c33c
--- /dev/null
+++ b/www/sunders/i18n/credits/es.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "Agradecimientos & Licencias",
+ "type-idea": "Idea e código base",
+ "type-js": "Javascript complementos",
+ "type-map": "Mapa e datos de nodos de vigilancia",
+ "type-service": "Servicios web",
+ "type-icon": "Iconos",
+ "type-font": "Tipo de letra en títulos"
+ }
+}
diff --git a/www/sunders/i18n/credits/fr.json b/www/sunders/i18n/credits/fr.json
new file mode 100644
index 0000000..1f783a9
--- /dev/null
+++ b/www/sunders/i18n/credits/fr.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "Attributions & Licences",
+ "type-idea": "Idée et base du code",
+ "type-js": "Plugins Javascript",
+ "type-map": "Carte et données des noeuds de surveillance",
+ "type-service": "Services Web",
+ "type-icon": "Icônes",
+ "type-font": "Police pour les titres"
+ }
+}
diff --git a/www/sunders/i18n/credits/it.json b/www/sunders/i18n/credits/it.json
new file mode 100644
index 0000000..56c0124
--- /dev/null
+++ b/www/sunders/i18n/credits/it.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "Attribuzioni & Licenze",
+ "type-idea": "Idea e code base",
+ "type-js": "Javascript plugin",
+ "type-map": "Mappa e dati dei nodi di sorveglianza",
+ "type-service": "Servizi web",
+ "type-icon": "Icone",
+ "type-font": "Caratteri per titoli"
+ }
+}
diff --git a/www/sunders/i18n/credits/ru.json b/www/sunders/i18n/credits/ru.json
new file mode 100644
index 0000000..73b04c1
--- /dev/null
+++ b/www/sunders/i18n/credits/ru.json
@@ -0,0 +1,11 @@
+{
+ "texts": {
+ "title-credits": "",
+ "type-idea": "",
+ "type-js": "",
+ "type-map": "",
+ "type-service": "",
+ "type-icon": "",
+ "type-font": ""
+ }
+}
diff --git a/www/sunders/i18n/links/de.json b/www/sunders/i18n/links/de.json
new file mode 100644
index 0000000..912b039
--- /dev/null
+++ b/www/sunders/i18n/links/de.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "Englisch",
+ "fra": "Französisch",
+ "ger": "Deutsch",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "Sichere Verbindung",
+ "insecure-alt": "Unsichere Verbindung!"
+ }
+}
diff --git a/www/sunders/i18n/links/en.json b/www/sunders/i18n/links/en.json
new file mode 100644
index 0000000..cedf046
--- /dev/null
+++ b/www/sunders/i18n/links/en.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "English",
+ "fra": "French",
+ "ger": "German",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "Secure connection",
+ "insecure-alt": "Insecure connection!"
+ }
+}
diff --git a/www/sunders/i18n/links/es.json b/www/sunders/i18n/links/es.json
new file mode 100644
index 0000000..28e4e69
--- /dev/null
+++ b/www/sunders/i18n/links/es.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "Ingles",
+ "fra": "Francés",
+ "ger": "Alemán",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "",
+ "insecure-alt": ""
+ }
+}
diff --git a/www/sunders/i18n/links/fr.json b/www/sunders/i18n/links/fr.json
new file mode 100644
index 0000000..28ff792
--- /dev/null
+++ b/www/sunders/i18n/links/fr.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "Anglais",
+ "fra": "Français",
+ "ger": "Allemand",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "Raccordement sûr",
+ "insecure-alt": "Raccordement peu sûr!"
+ }
+}
diff --git a/www/sunders/i18n/links/it.json b/www/sunders/i18n/links/it.json
new file mode 100644
index 0000000..d86821f
--- /dev/null
+++ b/www/sunders/i18n/links/it.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "English",
+ "fra": "French",
+ "ger": "German",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "Connessione sicura",
+ "insecure-alt": "Connessione non sicura!"
+ }
+}
diff --git a/www/sunders/i18n/links/ru.json b/www/sunders/i18n/links/ru.json
new file mode 100644
index 0000000..e1265af
--- /dev/null
+++ b/www/sunders/i18n/links/ru.json
@@ -0,0 +1,17 @@
+{
+ "texts": {
+ "eng": "",
+ "fra": "",
+ "ger": "",
+ "sect-2015": "2015",
+ "sect-2016": "2016",
+ "sect-2017": "2017",
+ "sect-2018": "2018",
+ "sect-2019": "2019",
+ "sect-2020": "2020",
+ "sect-2021": "2021",
+ "sect-2022": "2022",
+ "secure-alt": "",
+ "insecure-alt": ""
+ }
+}
diff --git a/www/sunders/i18n/manual/de.json b/www/sunders/i18n/manual/de.json
new file mode 100644
index 0000000..c41f4fc
--- /dev/null
+++ b/www/sunders/i18n/manual/de.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "Notwendig, um ein Symbol auf der Karte anzuzeigen",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00 (Überwachung)",
+ "v-public": "public (öffentlich)",
+ "v-outdoor": "outdoor (außen)",
+ "v-indoor": "indoor (in einem Gebäude)",
+ "v-camera": "camera (Kamera)",
+ "v-fixed": "fixed (feststehend)",
+ "v-panning": "panning (schwenkbar)",
+ "v-dome": "dome (Kuppel)",
+ "v-guard": "guard (Wachpersonal)",
+ "v-alpr": "ALPR (AKLS)",
+ "icon-public-alt": "Überwachung öffentlicher Bereiche",
+ "icon-outdoor-alt": "Überwachung außerhalb eines Gebäudes",
+ "icon-indoor-alt": "Überwachung innerhalb eines Gebäudes",
+ "icon-cam-alt": "Kamera",
+ "icon-fixed-alt": "Feststehende Kamera",
+ "icon-panning-alt": "Schwenkbare Kamera",
+ "icon-dome-alt": "Kuppelkamera",
+ "icon-guard-alt": "Wachpersonal",
+ "icon-alpr-alt": "Automatische Kennzeichenlesesysteme",
+ "title-view-fixed": "Notwendig, zum Anzeigen des feststehenden Kamerablickfelds",
+ "title-view-dome": "Notwendig, zum Anzeigen des Kuppelkamerablickfelds",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "0 - 359 (in Grad) oder",
+ "v-direction-1": "N / NE / E / SE / S / SW / W / NW",
+ "v-direction-2": "z.B. für wandmontierte Kuppeln",
+ "v-angle-0": "0 - 90 (in Grad)",
+ "v-angle-1": "von einer horizontalen Blickrichtung bis zu einer auf den Boden gerichteten Kamera",
+ "v-angle-2": "Standard: 15°",
+ "v-height-0": "3 - 12 (in Metern)",
+ "v-height-1": "Standard: 5m",
+ "examples": "Beispiele",
+ "example-img-0-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 15°, Höhe: 5m)",
+ "example-img-1-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 15°, Höhe: 10m)",
+ "example-img-2-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 60°, Höhe: 10m)",
+ "example-img-3-alt": "Rundumblickfeld (Höhe: 3m)",
+ "example-img-4-alt": "Rundumblickfeld (Höhe: 5m)",
+ "example-img-5-alt": "Rundumblickfeld (Höhe: 5m, Richtung: 45°)",
+ "example-direction-45": "Richtung = 45°",
+ "example-direction-90": "Richtung = 90°",
+ "example-angle-15": "Winkel = 15°",
+ "example-angle-60": "Winkel = 60°",
+ "example-height-3": "Höhe = 3m",
+ "example-height-5": "Höhe = 5m",
+ "example-height-10": "Höhe = 10m",
+ "title-optional": "Optional",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank (Bank) / building (Gebäude) / parking (Parkplatz) / shop (Geschäft) / town (Stadt) / traffic (Verkehr)",
+ "v-cam-mount": "ceilling (Decke) / pole (Mast) / wall (Wand)",
+ "v-operator": "Gesellschaft oder Person die die Kamera betreibt",
+ "v-name": "Name der Kamera",
+ "v-ref": "Referenznummer der Kamera",
+ "v-image": "Link zu einem extern abgelegten Bilds, das das kartierte Objekt zeigt"
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/manual/en.json b/www/sunders/i18n/manual/en.json
new file mode 100644
index 0000000..3556368
--- /dev/null
+++ b/www/sunders/i18n/manual/en.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "Mandatory to display an icon on the map",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00",
+ "v-public": "public",
+ "v-outdoor": "outdoor",
+ "v-indoor": "indoor",
+ "v-camera": "camera",
+ "v-fixed": "fixed",
+ "v-panning": "panning",
+ "v-dome": "dome",
+ "v-guard": "guard",
+ "v-alpr": "ALPR",
+ "icon-public-alt": "Public surveillance",
+ "icon-outdoor-alt": "Outdoor surveillance",
+ "icon-indoor-alt": "Indoor surveillance",
+ "icon-cam-alt": "Camera",
+ "icon-fixed-alt": "Fixed camera",
+ "icon-panning-alt": "Panning camera",
+ "icon-dome-alt": "Dome camera",
+ "icon-guard-alt": "Guard",
+ "icon-alpr-alt": "Automatic Licence Plate Recognition",
+ "title-view-fixed": "Mandatory to draw a fixed camera's field of view",
+ "title-view-dome": "Mandatory to draw a dome camera's field of view",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "0 - 359 (in degrees) or",
+ "v-direction-1": "N / NE / E / SE / S / SW / W / NW",
+ "v-direction-2": "e.g. for wall-mounted domes",
+ "v-angle-0": "0 - 90 (in degrees)",
+ "v-angle-1": "from a horizontal view to a ground-pointed camera",
+ "v-angle-2": "default: 15°",
+ "v-height-0": "3 - 12 (in meters)",
+ "v-height-1": "default: 5m",
+ "examples": "Examples",
+ "example-img-0-alt": "Fixed field of view (direction: 90°, angle: 15°, height: 5m)",
+ "example-img-1-alt": "Fixed field of view (direction: 90°, angle: 15°, height: 10m)",
+ "example-img-2-alt": "Fixed field of view (direction: 90°, angle: 60°, height: 10m)",
+ "example-img-3-alt": "Dome field of view (height: 3m)",
+ "example-img-4-alt": "Dome field of view (height: 5m)",
+ "example-img-5-alt": "Dome field of view (height: 5m, direction: 45°)",
+ "example-direction-45": "direction = 45°",
+ "example-direction-90": "direction = 90°",
+ "example-angle-15": "angle = 15°",
+ "example-angle-60": "angle = 60°",
+ "example-height-3": "height = 3m",
+ "example-height-5": "height = 5m",
+ "example-height-10": "height = 10m",
+ "title-optional": "Optional",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank / building / parking / shop / town / traffic",
+ "v-cam-mount": "ceilling / pole / wall",
+ "v-operator": "organization or person operating the camera",
+ "v-name": "name of the camera",
+ "v-ref": "reference number of the camera",
+ "v-image": "link to an externally hosted image that depicts the tagged object"
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/manual/es.json b/www/sunders/i18n/manual/es.json
new file mode 100644
index 0000000..bfe420d
--- /dev/null
+++ b/www/sunders/i18n/manual/es.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "Obligatorio para mostrar un icono en el mapa",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00 (vigilancia)",
+ "v-public": "public (publico)",
+ "v-outdoor": "outdoor (exteriores)",
+ "v-indoor": "indoor (interiores)",
+ "v-camera": "camera (cámara)",
+ "v-fixed": "fixed (fija)",
+ "v-panning": "panning (panorámica)",
+ "v-dome": "dome (domo)",
+ "v-guard": "guard (guardia)",
+ "v-alpr": "ALPR",
+ "icon-public-alt": "",
+ "icon-outdoor-alt": "",
+ "icon-indoor-alt": "",
+ "icon-cam-alt": "",
+ "icon-fixed-alt": "",
+ "icon-panning-alt": "",
+ "icon-dome-alt": "",
+ "icon-guard-alt": "",
+ "icon-alpr-alt": "",
+ "title-view-fixed": "Obligatorio para dibujar el rango de captura de la cámara fija",
+ "title-view-dome": "Obligatorio para dibujar el rango de captura de la cámara domo",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "0 - 359 (en grados) o",
+ "v-direction-1": "N / NE / E / SE / S / SW / W / NW",
+ "v-direction-2": "ej: para domos montadas en la pared",
+ "v-angle-0": "0 - 90 (en grados)",
+ "v-angle-1": "desde una vista horizontal hasta las cámaras que apuntan hacia el piso",
+ "v-angle-2": "por defecto: 15°",
+ "v-height-0": "3 -12 (en metros)",
+ "v-height-1": "por defecto: 5m",
+ "examples": "Ejemplos",
+ "example-img-0-alt": "",
+ "example-img-1-alt": "",
+ "example-img-2-alt": "",
+ "example-img-3-alt": "",
+ "example-img-4-alt": "",
+ "example-img-5-alt": "",
+ "example-direction-45": "dirección = 45°",
+ "example-direction-90": "dirección = 90°",
+ "example-angle-15": "ángulo = 15°",
+ "example-angle-60": "ángulo = 60°",
+ "example-height-3": "altura = 3m",
+ "example-height-5": "altura = 5m",
+ "example-height-10": "altura = 10m",
+ "title-optional": "Opcional",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank (banco) / building (edificio) / parking (estacionamiento) / shop (negocio) / town (centro) / traffic (trafico)",
+ "v-cam-mount": "ceilling (techo) / pole (palo) / wall (pared)",
+ "v-operator": "organización o persona que opera la cámara",
+ "v-name": "nombre de la cámara",
+ "v-ref": "numero de referencia de la cámara",
+ "v-image": "enlace a un sitio externo con la imagen del objeto"
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/manual/fr.json b/www/sunders/i18n/manual/fr.json
new file mode 100644
index 0000000..48f46d3
--- /dev/null
+++ b/www/sunders/i18n/manual/fr.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "Nécessaires pour afficher une icône sur la carte",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00",
+ "v-public": "public",
+ "v-outdoor": "outdoor",
+ "v-indoor": "indoor",
+ "v-camera": "camera",
+ "v-fixed": "fixed",
+ "v-panning": "panning",
+ "v-dome": "dome",
+ "v-guard": "guard",
+ "v-alpr": "ALPR (LAPI)",
+ "icon-public-alt": "Surveillance publique",
+ "icon-outdoor-alt": "Surveillance extérieure",
+ "icon-indoor-alt": "Surveillance intérieure",
+ "icon-cam-alt": "Caméra",
+ "icon-fixed-alt": "Caméra fixe",
+ "icon-panning-alt": "Caméra panoramique",
+ "icon-dome-alt": "Caméra dôme",
+ "icon-guard-alt": "Garde",
+ "icon-alpr-alt": "ALPR",
+ "title-view-fixed": "Nécessaires pour l'affichage du champ de vision de la caméra fixe",
+ "title-view-dome": "Nécessaires pour l'affichage du champ de vision de la caméra dôme",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "0 - 359 (en degrés) ou les points cardinaux anglais :",
+ "v-direction-1": "N / NE / E / SE / S / SW / W / NW",
+ "v-direction-2": "c.a.d. pour les dômes muraux",
+ "v-angle-0": "0 - 90 (en degrés)",
+ "v-angle-1": "représentant un angle ômhorizontal jusqu'à une caméra pointée vers le sol",
+ "v-angle-2": "par défaut : 15°",
+ "v-height-0": "3 - 12 (en mètres)",
+ "v-height-1": "par défaut : 5m",
+ "examples": "Exemples :",
+ "example-img-0-alt": "Angle visuel fixe (direction: 90°, angle: 15°, height: 5m)",
+ "example-img-1-alt": "Angle visuel fixe (direction: 90°, angle: 15°, height: 10m)",
+ "example-img-2-alt": "Angle visuel fixe (direction: 90°, angle: 60°, height: 10m)",
+ "example-img-3-alt": "Angle visuel dôme (height: 3m)",
+ "example-img-4-alt": "Angle visuel dôme (height: 5m)",
+ "example-img-5-alt": "Angle visuel dôme (height: 5m, direction: 45°)",
+ "example-direction-45": "direction = 45°",
+ "example-direction-90": "direction = 90°",
+ "example-angle-15": "angle = 15°",
+ "example-angle-60": "angle = 60°",
+ "example-height-3": "height = 3m",
+ "example-height-5": "height = 5m",
+ "example-height-10": "height = 10m",
+ "title-optional": "Facultatifs",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank / building / parking / shop / town / traffic",
+ "v-cam-mount": "ceilling / pole / wall",
+ "v-operator": "entité ou personne exploitant la caméra",
+ "v-name": "nom de la caméra",
+ "v-ref": "numéro de référence de la caméra",
+ "v-image": "lien vers une image hébergée ailleurs de l'objet"
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/manual/it.json b/www/sunders/i18n/manual/it.json
new file mode 100644
index 0000000..21b6470
--- /dev/null
+++ b/www/sunders/i18n/manual/it.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "Obbligatorio per visualizzare un'icona sulla mappa",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00 (sorveglianza)",
+ "v-public": "public (pubblico)",
+ "v-outdoor": "outdoor (all'aperto)",
+ "v-indoor": "indoor (all'interno)",
+ "v-camera": "camera (telecamera)",
+ "v-fixed": "fixed (fissa)",
+ "v-panning": "panning (panoramica)",
+ "v-dome": "dome (cupola)",
+ "v-guard": "guard (guardia)",
+ "v-alpr": "ALPR",
+ "icon-public-alt": "Sorveglianza pubblica",
+ "icon-outdoor-alt": "Sorveglianza all'aperto",
+ "icon-indoor-alt": "Sorveglianza all'interno",
+ "icon-cam-alt": "Telecamera",
+ "icon-fixed-alt": "Telecamera fissa",
+ "icon-panning-alt": "Telecamera panoramica",
+ "icon-dome-alt": "Telecamera a cupola",
+ "icon-guard-alt": "Guardia",
+ "icon-alpr-alt": "Riconoscimento automatico delle targhe",
+ "title-view-fixed": "Obbligatorio per tracciare il campo visivo della telecamera fissa",
+ "title-view-dome": "Obbligatorio per tracciare il campo visivo della telecamera a cupola",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "0 - 359 (in gradi) o",
+ "v-direction-1": "N / NE / E / SE / S / SO / O / NO",
+ "v-direction-2": "ad esempio per cupole a muro",
+ "v-angle-0": "15 - 90 (in gradi)",
+ "v-angle-1": "da una visuale quasi orizzontale a una telecamera puntata a terra",
+ "v-angle-2": "predefinito: 15°",
+ "v-height-0": "3 - 12 (in metri)",
+ "v-height-1": "predefinito: 5m",
+ "examples": "Esempi",
+ "example-img-0-alt": "Campo visivo (direzione: 90°, angolo: 15°, altezza: 5m)",
+ "example-img-1-alt": "Campo visivo (direzione: 90°, angolo: 15°, altezza: 10m)",
+ "example-img-2-alt": "Campo visivo (direzione: 90°, angolo: 60°, altezza: 10m)",
+ "example-img-3-alt": "Cupola visivo (altezza: 3m)",
+ "example-img-4-alt": "Cupola visivo (altezza: 5m)",
+ "example-img-5-alt": "Cupola visivo (altezza: 5m, direzione: 45°)",
+ "example-direction-45": "direzione = 45°",
+ "example-direction-90": "direzione = 90°",
+ "example-angle-15": "angolo = 15°",
+ "example-angle-60": "angolo = 60°",
+ "example-height-3": "altezza = 3m",
+ "example-height-5": "altezza = 5m",
+ "example-height-10": "altezza = 10m",
+ "title-optional": "Facoltativo",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank (banca) / building (edificio) / parking (parcheggio) / shop (negozio) / town (città) / traffic (traffico)",
+ "v-cam-mount": "ceilling (soffitto) / pole (palo) / wall (muro)",
+ "v-operator": "organizzazione o persona che gestisce la telecamera",
+ "v-name": "denominazione della telecamera",
+ "v-ref": "numero di riferimento della telecamera",
+ "v-image": "link a un'immagine in hosting esterno che rappresenta l'oggetto marcato"
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/manual/ru.json b/www/sunders/i18n/manual/ru.json
new file mode 100644
index 0000000..30252fe
--- /dev/null
+++ b/www/sunders/i18n/manual/ru.json
@@ -0,0 +1,84 @@
+{
+ "texts": {
+ "title-icon": "",
+ "k-manmade": "@@LT00",
+ "k-surveillance": "@@LT00",
+ "k-surv-type": "@@LT00",
+ "k-cam-type": "@@LT00",
+ "v-surveillance": "@@LT00",
+ "v-public": "public",
+ "v-outdoor": "outdoor",
+ "v-indoor": "indoor",
+ "v-camera": "camera",
+ "v-fixed": "fixed",
+ "v-panning": "panning",
+ "v-dome": "dome",
+ "v-guard": "guard",
+ "v-alpr": "ALPR",
+ "icon-public-alt": "",
+ "icon-outdoor-alt": "",
+ "icon-indoor-alt": "",
+ "icon-cam-alt": "",
+ "icon-fixed-alt": "",
+ "icon-panning-alt": "",
+ "icon-dome-alt": "",
+ "icon-guard-alt": "",
+ "icon-alpr-alt": "",
+ "title-view-fixed": "",
+ "title-view-dome": "",
+ "k-cam-direction": "@@LT00",
+ "k-cam-angle": "@@LT00",
+ "k-height": "@@LT00",
+ "v-direction-0": "",
+ "v-direction-1": "",
+ "v-direction-2": "",
+ "v-angle-0": "",
+ "v-angle-1": "",
+ "v-angle-2": "",
+ "v-height-0": "",
+ "v-height-1": "",
+ "examples": "",
+ "example-img-0-alt": "",
+ "example-img-1-alt": "",
+ "example-img-2-alt": "",
+ "example-img-3-alt": "",
+ "example-img-4-alt": "",
+ "example-img-5-alt": "",
+ "example-direction-45": "",
+ "example-direction-90": "",
+ "example-angle-15": "",
+ "example-angle-60": "",
+ "example-height-3": "",
+ "example-height-5": "",
+ "example-height-10": "",
+ "title-optional": "",
+ "k-surv-zone": "@@LT00",
+ "k-cam-mount": "@@LT00",
+ "k-operator": "@@LT00",
+ "k-name": "@@LT00",
+ "k-ref": "@@LT00",
+ "k-image": "@@LT00",
+ "v-surv-zone": "bank / building / parking / shop / town / traffic",
+ "v-cam-mount": "ceilling / pole / wall",
+ "v-operator": "",
+ "v-name": "",
+ "v-ref": "",
+ "v-image": ""
+ },
+ "links": {
+ "k-manmade": [ "man_made" ],
+ "k-surveillance": [ "surveillance" ],
+ "k-surv-type": [ "surveillance:type" ],
+ "k-cam-type": [ "camera:type" ],
+ "k-cam-direction": [ "camera:direction" ],
+ "k-cam-angle": [ "camera:angle" ],
+ "k-height": [ "height" ],
+ "k-surv-zone": [ "surveillance:zone" ],
+ "k-cam-mount": [ "camera:mount" ],
+ "k-operator": [ "operator" ],
+ "k-name": [ "name" ],
+ "k-ref": [ "ref" ],
+ "k-image": [ "image" ],
+ "v-surveillance": [ "surveillance" ]
+ }
+}
diff --git a/www/sunders/i18n/stats/de.json b/www/sunders/i18n/stats/de.json
new file mode 100644
index 0000000..ab6bd26
--- /dev/null
+++ b/www/sunders/i18n/stats/de.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node" : "Eintrag",
+ "nodes" : "Einträge",
+ "surv-node" : "Überwachungseintrag",
+ "surv-nodes" : "Überwachungseinträge",
+
+ "filter": "Filter",
+ "single": "einzel",
+ "total": "gesamt",
+
+ "area": "Bereich",
+ "area-pl": "Bereiche",
+ "area-all": "alle Bereiche",
+ "country": "Land",
+ "country-pl": "Länder",
+ "country-all": "weltweit",
+ "type": "Art",
+ "type-pl": "Arten",
+ "type-all": "alle Arten",
+ "year": "Jahr",
+ "year-all": "alle Jahre",
+ "month": "Monat",
+ "month-all": "alle Monate",
+
+ "areaxxx-0": "noch nicht kategorisiert",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "keine Angabe",
+ "area0-1": "",
+ "area0-2": "keine Angabe",
+ "area1-0": "öffentlicher Bereich",
+ "area1-1": "für alle zugänglich",
+ "area1-2": "öffentlich",
+ "area2-0": "privater Bereich",
+ "area2-1": "nur für befugte Personen zugänglich",
+ "area2-2": "privat",
+ "area3-0": "Bereich innerhalb eines Gebäudes",
+ "area3-1": "",
+ "area3-2": "Innenraum",
+ "typexxx-0": "noch nicht kategorisiert",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "Kamera",
+ "type0-1": "keine weiteren Angaben",
+ "type0-2": "Kamera",
+ "type1-0": "feststehende Kamera",
+ "type1-1": "überwacht meist einen begrenzten Bereich",
+ "type1-2": "feststehend",
+ "type2-0": "schwenkbare Kamera",
+ "type2-1": "überwacht meist verschiedene Bereiche",
+ "type2-2": "schwenkbar",
+ "type3-0": "Kuppelkamera",
+ "type3-1": "überwacht meist einen 360°-Bereich",
+ "type3-2": "Kuppel",
+ "type4-0": "Wachpersonal",
+ "type4-1": "z.B. Beschäftigte eines Sicherheitsunternehmens",
+ "type4-2": "Wache",
+ "type5-0": "ANSE",
+ "type5-1": "Automatische Nummernschilderkennung",
+ "type5-2": "ANSE",
+
+ "all": "alle",
+ "Jan": "Jan",
+ "Jan_": "Januar",
+ "Feb": "Feb",
+ "Feb_": "Februar",
+ "Mar": "Mär",
+ "Mar_": "März",
+ "Apr": "Apr",
+ "Apr_": "April",
+ "May": "Mai",
+ "May_": "Mai",
+ "Jun": "Jun",
+ "Jun_": "Juni",
+ "Jul": "Jul",
+ "Jul_": "Juli",
+ "Aug": "Aug",
+ "Aug_": "August",
+ "Sep": "Sep",
+ "Sep_": "September",
+ "Oct": "Okt",
+ "Oct_": "Oktober",
+ "Nov": "Nov",
+ "Nov_": "November",
+ "Dec": "Dez",
+ "Dec_": "Dezember",
+ "Su": "So",
+ "Mo": "Mo",
+ "Tu": "Di",
+ "We": "Mi",
+ "Th": "Do",
+ "Fr": "Fr",
+ "Sa": "Sa"
+ }
+}
diff --git a/www/sunders/i18n/stats/en.json b/www/sunders/i18n/stats/en.json
new file mode 100644
index 0000000..bcf416d
--- /dev/null
+++ b/www/sunders/i18n/stats/en.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node": "node",
+ "nodes": "nodes",
+ "surv-node": "surveillance node",
+ "surv-nodes": "surveillance nodes",
+
+ "filter": "filter",
+ "single": "single",
+ "total": "total",
+
+ "area": "area",
+ "area-pl": "areas",
+ "area-all": "all areas",
+ "country": "country",
+ "country-pl": "countries",
+ "country-all": "worldwide",
+ "type": "type",
+ "type-pl": "types",
+ "type-all": "all types",
+ "year": "year",
+ "year-all": "all years",
+ "month": "month",
+ "month-all": "all months",
+
+ "areaxxx-0": "not categorized yet",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "not specified",
+ "area0-1": "",
+ "area0-2": "not specified",
+ "area1-0": "public outdoor area",
+ "area1-1": "accessable by everyone",
+ "area1-2": "public",
+ "area2-0": "private outdoor area",
+ "area2-1": "accessable only by authorized persons",
+ "area2-2": "private",
+ "area3-0": "indoor area",
+ "area3-1": "",
+ "area3-2": "indoor",
+ "typexxx-0": "not categorized yet",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "camera",
+ "type0-1": "no further information",
+ "type0-2": "camera",
+ "type1-0": "fixed camera",
+ "type1-1": "usually observing a limited area",
+ "type1-2": "fixed cam",
+ "type2-0": "panning camera",
+ "type2-1": "usually able to observe various areas",
+ "type2-2": "panning cam",
+ "type3-0": "dome camera",
+ "type3-1": "usually observing a 360° area",
+ "type3-2": "dome cam",
+ "type4-0": "guard",
+ "type4-1": "e.g. an employee of a security service",
+ "type4-2": "guard",
+ "type5-0": "ALPR",
+ "type5-1": "Automatic Licence Plate Recognition",
+ "type5-2": "ALPR",
+
+ "all": "all",
+ "Jan": "Jan",
+ "Jan_": "January",
+ "Feb": "Feb",
+ "Feb_": "February",
+ "Mar": "Mar",
+ "Mar_": "March",
+ "Apr": "Apr",
+ "Apr_": "April",
+ "May": "May",
+ "May_": "May",
+ "Jun": "Jun",
+ "Jun_": "Jun",
+ "Jul": "Jul",
+ "Jul_": "July",
+ "Aug": "Aug",
+ "Aug_": "August",
+ "Sep": "Sep",
+ "Sep_": "September",
+ "Oct": "Oct",
+ "Oct_": "October",
+ "Nov": "Nov",
+ "Nov_": "November",
+ "Dec": "Dec",
+ "Dec_": "December",
+ "Su": "Su",
+ "Mo": "Mo",
+ "Tu": "Tu",
+ "We": "We",
+ "Th": "Th",
+ "Fr": "Fr",
+ "Sa": "Sa"
+ }
+}
diff --git a/www/sunders/i18n/stats/es.json b/www/sunders/i18n/stats/es.json
new file mode 100644
index 0000000..776731e
--- /dev/null
+++ b/www/sunders/i18n/stats/es.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node": "nodo",
+ "nodes": "nodos",
+ "surv-node": "nodo de vigilancia",
+ "surv-nodes": "nodos de vigilancia",
+
+ "filter": "filtro",
+ "single": "solo",
+ "total": "total",
+
+ "area": "área",
+ "area-pl": "áreas",
+ "area-all": "todas las áreas",
+ "country": "país",
+ "country-pl": "países",
+ "country-all": "mundialmente",
+ "type": "tipo",
+ "type-pl": "tipos",
+ "type-all": "todos los tipos",
+ "year": "año",
+ "year-all": "todos los años",
+ "month": "mes",
+ "month-all": "todos los meses",
+
+ "areaxxx-0": "aún no categorizado",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "no especificado",
+ "area0-1": "",
+ "area0-2": "no especificado",
+ "area1-0": "área publica en exteriores",
+ "area1-1": "accesible por cualquiera",
+ "area1-2": "publica",
+ "area2-0": "área privada en exteriores",
+ "area2-1": "accesible solo por personal autorizado",
+ "area2-2": "privada",
+ "area3-0": "área de interiores",
+ "area3-1": "",
+ "area3-2": "interiores",
+ "typexxx-0": "aún no categorizado",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "cámara",
+ "type0-1": "no hay más información",
+ "type0-2": "cámara",
+ "type1-0": "cámara fija",
+ "type1-1": "usualmente abarca un área limitada",
+ "type1-2": "fija",
+ "type2-0": "cámara orientable",
+ "type2-1": "usualmente abarca varias áreas",
+ "type2-2": "orientable",
+ "type3-0": "cámara domo",
+ "type3-1": "abarca un área de 360°",
+ "type3-2": "domo",
+ "type4-0": "guardia",
+ "type4-1": "ej: empleado de un servicio de seguridad",
+ "type4-2": "guardia",
+ "type5-0": "ICAP",
+ "type5-1": "identificador automático de patentes",
+ "type5-2": "ICAP",
+
+ "all": "todo",
+ "Jan": "Ene",
+ "Jan_": "Enero",
+ "Feb": "Feb",
+ "Feb_": "Febrero",
+ "Mar": "Mar",
+ "Mar_": "Marzo",
+ "Apr": "Abr",
+ "Apr_": "Abril",
+ "May": "May",
+ "May_": "Mayo",
+ "Jun": "Jun",
+ "Jun_": "Junio",
+ "Jul": "Jul",
+ "Jul_": "Julio",
+ "Aug": "Ago",
+ "Aug_": "Agosto",
+ "Sep": "Sep",
+ "Sep_": "Septiembre",
+ "Oct": "Oct",
+ "Oct_": "Octubre",
+ "Nov": "Nov",
+ "Nov_": "Noviembre",
+ "Dec": "Dic",
+ "Dec_": "Diciembre",
+ "Su": "Do",
+ "Mo": "Lu",
+ "Tu": "Ma",
+ "We": "Mi",
+ "Th": "Ju",
+ "Fr": "Vi",
+ "Sa": "Sa"
+ }
+}
diff --git a/www/sunders/i18n/stats/fr.json b/www/sunders/i18n/stats/fr.json
new file mode 100644
index 0000000..8ecc09b
--- /dev/null
+++ b/www/sunders/i18n/stats/fr.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node": "nœud",
+ "nodes": "nœuds",
+ "surv-node": "nœud de surveillance",
+ "surv-nodes": "nœuds de surveillance",
+
+ "filter": "filtre",
+ "single": "particulière",
+ "total": "totale",
+
+ "area": "zone",
+ "area-pl": "zones",
+ "area-all": "tous les zones",
+ "country": "pays",
+ "country-pl": "pays",
+ "country-all": "dans le monde entier",
+ "type": "type",
+ "type-pl": "types",
+ "type-all": "tous les types",
+ "year": "année",
+ "year-all": "tous les ans",
+ "month": "mois",
+ "month-all": "tous les mois",
+
+ "areaxxx-0": "encore non classées",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "non spécifié",
+ "area0-1": "",
+ "area0-2": "non spécifié",
+ "area1-0": "espace extérieur public",
+ "area1-1": "accessible par tout le monde",
+ "area1-2": "public",
+ "area2-0": "espace extérieur privé",
+ "area2-1": "accessible uniquement par les personnes autorisées",
+ "area2-2": "privé",
+ "area3-0": "espace intérieure",
+ "area3-1": "",
+ "area3-2": "intérieure",
+ "typexxx-0": "encore non classées",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "caméra",
+ "type0-1": "aucune information supplémentaire",
+ "type0-2": "caméra",
+ "type1-0": "caméra fixe",
+ "type1-1": "généralement l'observation d'une zone limitée",
+ "type1-2": "cam fixe",
+ "type2-0": "caméra panoramique",
+ "type2-1": "habituellement en mesure d'observer les différents zones",
+ "type2-2": "cam panoramique",
+ "type3-0": "caméra dôme",
+ "type3-1": "généralement l'observation d'un 360° zone",
+ "type3-2": "cam dôme",
+ "type4-0": "gardien",
+ "type4-1": "p. ex. un employé d'un service de sécurité",
+ "type4-2": "gardien",
+ "type5-0": "LAPI",
+ "type5-1": "Lecture Automatisée de Plaques d’Immatriculation",
+ "type5-2": "LAPI",
+
+ "all": "tout",
+ "Jan": "Jan",
+ "Jan_": "Janvier",
+ "Feb": "Fév",
+ "Feb_": "Février",
+ "Mar": "Mar",
+ "Mar_": "Mars",
+ "Apr": "Avr",
+ "Apr_": "Avril",
+ "May": "Mai",
+ "May_": "Mai",
+ "Jun": "Jui",
+ "Jun_": "Juin",
+ "Jul": "Jui",
+ "Jul_": "Juillet",
+ "Aug": "Aoû",
+ "Aug_": "Août",
+ "Sep": "Sep",
+ "Sep_": "Septembre",
+ "Oct": "Oct",
+ "Oct_": "Octobre",
+ "Nov": "Nov",
+ "Nov_": "Novembre",
+ "Dec": "Déc",
+ "Dec_": "Décembre",
+ "Su": "Di",
+ "Mo": "Lu",
+ "Tu": "Ma",
+ "We": "Me",
+ "Th": "Je",
+ "Fr": "Ve",
+ "Sa": "Sa"
+ }
+}
diff --git a/www/sunders/i18n/stats/it.json b/www/sunders/i18n/stats/it.json
new file mode 100644
index 0000000..f4b262a
--- /dev/null
+++ b/www/sunders/i18n/stats/it.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node": "nodo",
+ "nodes": "nodi",
+ "surv-node": "nodo di sorveglianza",
+ "surv-nodes": "nodi di sorveglianza",
+
+ "filter": "filtro",
+ "single": "singolo",
+ "total": "totale",
+
+ "area": "area",
+ "area-pl": "aree",
+ "area-all": "tutte le aree",
+ "country": "paese",
+ "country-pl": "paesi",
+ "country-all": "mondiale",
+ "type": "tipo",
+ "type-pl": "tipi",
+ "type-all": "tutti i tipi",
+ "year": "anno",
+ "year-all": "tutti gli anni",
+ "month": "mese",
+ "month-all": "tutti i mesi",
+
+ "areaxxx-0": "non ancora classificato",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "non specificato",
+ "area0-1": "",
+ "area0-2": "non specificato",
+ "area1-0": "area pubblica all'aperto",
+ "area1-1": "accessibile a tutti",
+ "area1-2": "pubblica",
+ "area2-0": "spazio esterno privato",
+ "area2-1": "accessibile solo alle persone autorizzate",
+ "area2-2": "privato",
+ "area3-0": "spazio interno",
+ "area3-1": "",
+ "area3-2": "interno",
+ "typexxx-0": "non ancora classificato",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "telecamera",
+ "type0-1": "nessuna ulteriore informazione",
+ "type0-2": "telecamera",
+ "type1-0": "telecamera fissa",
+ "type1-1": "di solito osserva un'area limitata",
+ "type1-2": "telecamera fissa",
+ "type2-0": "telecamera panoramica",
+ "type2-1": "di solito in grado di osservare varie aree",
+ "type2-2": "telecamera panoramica",
+ "type3-0": "telecamera a cupola/dome",
+ "type3-1": "di solito in grado di osservare un'area a 360",
+ "type3-2": "telecamera a cupola",
+ "type4-0": "guardia",
+ "type4-1": "ad es. un dipendente di un servizio di sicurezza",
+ "type4-2": "guardia",
+ "type5-0": "ALPR",
+ "type5-1": "Riconoscimento automatico delle targhe",
+ "type5-2": "ALPR",
+
+ "all": "tutti",
+ "Jan": "Gen",
+ "Jan_": "Gennaio",
+ "Feb": "Feb",
+ "Feb_": "Febbraio",
+ "Mar": "Mar",
+ "Mar_": "Marzo",
+ "Apr": "Apr",
+ "Apr_": "Aprile",
+ "May": "Mag",
+ "May_": "Maggio",
+ "Jun": "Giu",
+ "Jun_": "Giugno",
+ "Jul": "Lul",
+ "Jul_": "Luglio",
+ "Aug": "Ago",
+ "Aug_": "Agosto",
+ "Sep": "Set",
+ "Sep_": "Settembre",
+ "Oct": "Ott",
+ "Oct_": "Ottobre",
+ "Nov": "Nov",
+ "Nov_": "Novembre",
+ "Dec": "Dic",
+ "Dec_": "Dicembre",
+ "Su": "Do",
+ "Mo": "Lu",
+ "Tu": "Ma",
+ "We": "Me",
+ "Th": "Gi",
+ "Fr": "Ve",
+ "Sa": "Sa"
+ }
+}
diff --git a/www/sunders/i18n/stats/ru.json b/www/sunders/i18n/stats/ru.json
new file mode 100644
index 0000000..cf2f560
--- /dev/null
+++ b/www/sunders/i18n/stats/ru.json
@@ -0,0 +1,96 @@
+{
+ "texts": {
+ "node": "точка",
+ "nodes": "точки",
+ "surv-node": "точка наблюдения",
+ "surv-nodes": "точки наблюдения",
+
+ "filter": "фильтр",
+ "single": "отдельно",
+ "total": "общий",
+
+ "area": "область",
+ "area-pl": "области",
+ "area-all": "во всех областях",
+ "country": "страна",
+ "country-pl": "страны",
+ "country-all": "во всем мире",
+ "type": "тип",
+ "type-pl": "типы",
+ "type-all": "все типы",
+ "year": "год",
+ "year-all": "все годы",
+ "month": "месяц",
+ "month-all": "все месяцы",
+
+ "areaxxx-0": "не относятся к категории пока еще не",
+ "areaxxx-1": "",
+ "areaxxx-2": "??",
+ "area0-0": "не указан",
+ "area0-1": "",
+ "area0-2": "не указан",
+ "area1-0": "открытая площадь",
+ "area1-1": "поднявшись на каждый",
+ "area1-2": "общественной",
+ "area2-0": "частная открытая область",
+ "area2-1": "поднявшись только уполномоченным лицам",
+ "area2-2": "частный",
+ "area3-0": "область для установки внутри помещений",
+ "area3-1": "",
+ "area3-2": "для использования внутри помещений",
+ "typexxx-0": "не относятся к категории пока еще не",
+ "typexxx-1": "",
+ "typexxx-2": "??",
+ "type0-0": "камера",
+ "type0-1": "никакой дополнительной информации",
+ "type0-2": "камера",
+ "type1-0": "фиксированная камера",
+ "type1-1": "обычно наблюдений ограниченной области",
+ "type1-2": "фиксированная камера",
+ "type2-0": "панорамирование камерой",
+ "type2-1": "обычно возможность наблюдать различные районы",
+ "type2-2": "панорамирование камерой",
+ "type3-0": "купольная камера",
+ "type3-1": "как правило, соблюдая 360° область",
+ "type3-2": "купольная камера",
+ "type4-0": "ограждение",
+ "type4-1": "например, сотрудник службы безопасности",
+ "type4-2": "ограждение",
+ "type5-0": "АРНЗ",
+ "type5-1": "Автоматическое Распознавание Номерных Знаков",
+ "type5-2": "АРНЗ",
+
+ "all": "все",
+ "Jan": "Янв",
+ "Jan_": "Январь",
+ "Feb": "Фев",
+ "Feb_": "Февраль",
+ "Mar": "Мар",
+ "Mar_": "Март",
+ "Apr": "Апр",
+ "Apr_": "Апрель",
+ "May": "Май",
+ "May_": "Май",
+ "Jun": "Июн",
+ "Jun_": "Июнь",
+ "Jul": "Июл",
+ "Jul_": "Июль",
+ "Aug": "Авг",
+ "Aug_": "Август",
+ "Sep": "Сен",
+ "Sep_": "Сентябрь",
+ "Oct": "Окт",
+ "Oct_": "Октябрь",
+ "Nov": "Ноя",
+ "Nov_": "Ноябрь",
+ "Dec": "Дек",
+ "Dec_": "Декабрь",
+ "Su": "Во",
+ "Mo": "По",
+ "Tu": "Вт",
+ "We": "Ср",
+ "Th": "Че",
+ "Fr": "Пя",
+ "Sa": "Су"
+ }
+}
diff --git a/www/sunders/i18n/symbology/de.json b/www/sunders/i18n/symbology/de.json
new file mode 100644
index 0000000..86d8ad4
--- /dev/null
+++ b/www/sunders/i18n/symbology/de.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "Symbole",
+ "icon-cam-alt": "Kameras",
+ "desc-cam": "Kamera — keine weiteren Angaben",
+ "icon-fixed-alt": "Feststehende Kameras",
+ "desc-fixed": "Feststehende Kamera — überwacht meist einen begrenzten Bereich",
+ "icon-panning-alt": "Schwenkbare Kameras",
+ "desc-panning": "Schwenkbare Kamera — überwacht meist verschiedene Bereiche",
+ "icon-dome-alt": "Kuppelkameras",
+ "desc-dome": "Kuppelkamera — überwacht meist einen 360°-Bereich",
+ "icon-guard-alt": "Wachpersonal",
+ "desc-guard": "Wachpersonal — z.B. Beschäftigte eines Sicherheitsunternehmens",
+ "icon-alpr-alt": "Automatische Kennzeichenlesesysteme",
+ "desc-alpr": "AKLS — Automatische Kennzeichenlesesysteme",
+ "title-colors": "Farben",
+ "icon-red-alt": "Überwachung öffentlicher Bereiche",
+ "desc-red": "Roter Hintergrund — Überwachung eines öffentlichen Bereichs, der für alle zugänglich ist",
+ "icon-blue-alt": "Überwachung außerhalb eines Gebäudes",
+ "desc-blue": "Blauer Hintergrund — Überwachung eines Bereichs außerhalb eines Gebäudes, der nur für befugte Personen zugänglich ist",
+ "icon-green-alt": "Überwachung innerhalb eines Gebäudes",
+ "desc-green": "Grüner Hintergrund — Überwachung eines Bereichs innerhalb eines Gebäudes",
+ "icon-yellow-fixed-alt": "Feststehend Kamera, zu kontrollieren",
+ "icon-yellow-dome-alt": "Kuppelkamera, zu kontrollieren",
+ "icon-yellow-guard-alt": "Wachpersonal, zu kontrollieren",
+ "icon-yellow-alpr-alt": "Automatische Nummernschilderkennung, zu kontrollieren",
+ "desc-yellow": "Gelbes Symbol — Mit einem Kontrollkennzeichen markiere Kamera oder Wachpersonaleintrag, die/der noch korrigiert oder vervollständigt werden muss."
+ }
+}
diff --git a/www/sunders/i18n/symbology/en.json b/www/sunders/i18n/symbology/en.json
new file mode 100644
index 0000000..679259f
--- /dev/null
+++ b/www/sunders/i18n/symbology/en.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "Icons",
+ "icon-cam-alt": "Cameras",
+ "desc-cam": "Camera — no further information",
+ "icon-fixed-alt": "Fixed cameras",
+ "desc-fixed": "Fixed camera — usually observing a limited area",
+ "icon-panning-alt": "Panning cameras",
+ "desc-panning": "Panning camera — usually able to observe various areas",
+ "icon-dome-alt": "Dome cameras",
+ "desc-dome": "Dome camera — usually observing a 360° area",
+ "icon-guard-alt": "Guards",
+ "desc-guard": "Guard — e.g. an employee of a security service",
+ "icon-alpr-alt": "Automatic Licence Plate Recognition",
+ "desc-alpr": "ALPR — Automatic Licence Plate Recognition",
+ "title-colors": "Colors",
+ "icon-red-alt": "Public surveillance",
+ "desc-red": "Red background — observing a public outdoor area, accessable by everyone",
+ "icon-blue-alt": "Outdoor surveillance",
+ "desc-blue": "Blue background — observing a private outdoor area, accessable only by authorized persons",
+ "icon-green-alt": "Indoor surveillance",
+ "desc-green": "Green background — observing an indoor area",
+ "icon-yellow-fixed-alt": "Fixed cameras, fixme",
+ "icon-yellow-dome-alt": "Dome cameras, fixme",
+ "icon-yellow-guard-alt": "Guards, fixme",
+ "icon-yellow-alpr-alt": "Automatic Licence Plate Recognition, fixme",
+ "desc-yellow": "Yellow icon — camera or guard marked with a fixme key because it needs further attention"
+ }
+}
diff --git a/www/sunders/i18n/symbology/es.json b/www/sunders/i18n/symbology/es.json
new file mode 100644
index 0000000..baea1f9
--- /dev/null
+++ b/www/sunders/i18n/symbology/es.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "Iconos",
+ "icon-cam-alt": "Cámaras",
+ "desc-cam": "Cámara — no hay más información",
+ "icon-fixed-alt": "Cámaras Fija",
+ "desc-fixed": "Cámara Fija — usualmente abarca un área limitada",
+ "icon-panning-alt": "Cámaras Panorámica",
+ "desc-panning": "Cámara Panorámica — usualmente abarca varias áreas",
+ "icon-dome-alt": "Cámaras Domo",
+ "desc-dome": "Cámara Domo — usualmente abarca un área de 360°",
+ "icon-guard-alt": "Guardia",
+ "desc-guard": "Guardia — ej: empleado de un servicio de seguridad",
+ "icon-alpr-alt": "Reconocimiento automático de matrículas",
+ "desc-alpr": "Reconocimiento automático de matrículas (ANPR en inglés)",
+ "title-colors": "Colores",
+ "icon-red-alt": "",
+ "desc-red": "Fondo rojo — observa un área publica en exteriores, accesible por cualquiera",
+ "icon-blue-alt": "",
+ "desc-blue": "Fondo azul — observa un área privada en exteriores, accesible solo por personal autorizado",
+ "icon-green-alt": "",
+ "desc-green": "Fondo verde — observa un área de interiores",
+ "icon-yellow-fixed-alt": "",
+ "icon-yellow-dome-alt": "",
+ "icon-yellow-guard-alt": "",
+ "icon-yellow-alpr-alt": "",
+ "desc-yellow": "Icono amarillo — cámara o guardia marcada como arréglame, ya que necesita ser revisado."
+ }
+}
diff --git a/www/sunders/i18n/symbology/fr.json b/www/sunders/i18n/symbology/fr.json
new file mode 100644
index 0000000..e929818
--- /dev/null
+++ b/www/sunders/i18n/symbology/fr.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "Icônes",
+ "icon-cam-alt": "Caméras",
+ "desc-cam": "Caméra — pas d'autre information",
+ "icon-fixed-alt": "Caméras fixe",
+ "desc-fixed": "Caméra fixe — en général, surveille une zone réduite",
+ "icon-panning-alt": "Caméras panoramique",
+ "desc-panning": "Caméra panoramique — en général, peut surveiller plusieurs zones",
+ "icon-dome-alt": "Caméras dôme",
+ "desc-dome": "Caméra dôme — en général, peut surveiller une zone à 360°",
+ "icon-guard-alt": "Gardes",
+ "desc-guard": "Garde ou sentinelle — c.a.d. un.e employé.e d'une société de sécurité",
+ "icon-alpr-alt": "Lecture automatique des plaques d’immatriculation",
+ "desc-alpr": "LAPI — Lecture automatique des plaques d’immatriculation",
+ "title-colors": "Couleurs",
+ "icon-red-alt": "Surveillance publique",
+ "desc-red": "Fond rouge — surveille une zone extérieure publique, accessible par tous",
+ "icon-blue-alt": "Surveillance extérieure",
+ "desc-blue": "Fond bleu — surveille une zone extérieure privée, seulement accessible par les personnes autorisées",
+ "icon-green-alt": "Surveillance intérieure",
+ "desc-green": "Fond vert — surveille une zone intérieure",
+ "icon-yellow-fixed-alt": "Caméras fixe, à corriger",
+ "icon-yellow-dome-alt": "Caméras dôme, à corriger",
+ "icon-yellow-guard-alt": "Gardes, à corriger",
+ "icon-yellow-alpr-alt": "ALPR, à corriger",
+ "desc-yellow": "Icône à fond jaune — Caméra ou garde marqué avec une étiquette “fixme” (à corriger), indiquant un besoin de précision ultérieure"
+ }
+}
diff --git a/www/sunders/i18n/symbology/it.json b/www/sunders/i18n/symbology/it.json
new file mode 100644
index 0000000..cfc6d25
--- /dev/null
+++ b/www/sunders/i18n/symbology/it.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "Icone",
+ "icon-cam-alt": "Telecamere",
+ "desc-cam": "Telecamera — nessuna ulteriore informazione",
+ "icon-fixed-alt": "Telecamere fissa",
+ "desc-fixed": "Telecamera fissa - di solito osserva un'area limitata",
+ "icon-panning-alt": "Telecamere a scansione",
+ "desc-panning": "Telecamera a scansione - di solito in grado di osservare varie aree",
+ "icon-dome-alt": "Telecamere a cupola",
+ "desc-dome": "Telecamera a cupola — di solito osservano un'area a 360°",
+ "icon-guard-alt": "Guardie",
+ "desc-guard": "Guardia — ad es. un dipendente di un sevizio di vigilanza",
+ "icon-alpr-alt": "Riconoscimento automatico delle targhe",
+ "desc-alpr": "Riconoscimento automatico delle targhe (ALPR in inglese)",
+ "title-colors": "Colori",
+ "icon-red-alt": "Sorveglianza pubblica",
+ "desc-red": "Sfondo rosso - osserva un'area pubblica all'aperto, accessibile a tutti",
+ "icon-blue-alt": "Sorveglianza esterna",
+ "desc-blue": "Sfondo blu - osserva un'area esterna privata, accessibile solo alle persone autorizzate",
+ "icon-green-alt": "Sorveglianza interna",
+ "desc-green": "Sfondo verde - osserva un'area interna",
+ "icon-yellow-fixed-alt": "Telecamere fisse, fixme",
+ "icon-yellow-dome-alt": "Telecamere a cupola, fixme",
+ "icon-yellow-guard-alt": "Guardie, fixme",
+ "icon-yellow-alpr-alt": "Riconoscimento automatico delle targhe, fixme",
+ "desc-yellow": "Icona gialla - telecamera o guardia segnata con un tasto fixme perché ha bisogno di ulteriore attenzione"
+ }
+}
diff --git a/www/sunders/i18n/symbology/ru.json b/www/sunders/i18n/symbology/ru.json
new file mode 100644
index 0000000..34d078e
--- /dev/null
+++ b/www/sunders/i18n/symbology/ru.json
@@ -0,0 +1,29 @@
+{
+ "texts": {
+ "title-icons": "",
+ "icon-cam-alt": "",
+ "desc-cam": "",
+ "icon-fixed-alt": "",
+ "desc-fixed": "",
+ "icon-panning-alt": "",
+ "desc-panning": "",
+ "icon-dome-alt": "",
+ "desc-dome": "",
+ "icon-guard-alt": "",
+ "desc-guard": "",
+ "icon-alpr-alt": "",
+ "desc-alpr": "",
+ "title-colors": "",
+ "icon-red-alt": "",
+ "desc-red": "",
+ "icon-blue-alt": "",
+ "desc-blue": "",
+ "icon-green-alt": "",
+ "desc-green": "",
+ "icon-yellow-fixed-alt": "",
+ "icon-yellow-dome-alt": "",
+ "icon-yellow-guard-alt": "",
+ "icon-yellow-alpr-alt": "",
+ "desc-yellow": ""
+ }
+}
diff --git a/www/sunders/images/button_language.png b/www/sunders/images/button_language.png
new file mode 100644
index 0000000..746b2d1
Binary files /dev/null and b/www/sunders/images/button_language.png differ
diff --git a/www/sunders/images/button_less_blue.png b/www/sunders/images/button_less_blue.png
new file mode 100644
index 0000000..a75fb0d
Binary files /dev/null and b/www/sunders/images/button_less_blue.png differ
diff --git a/www/sunders/images/button_less_gray.png b/www/sunders/images/button_less_gray.png
new file mode 100644
index 0000000..309c9f7
Binary files /dev/null and b/www/sunders/images/button_less_gray.png differ
diff --git a/www/sunders/images/button_more_blue.png b/www/sunders/images/button_more_blue.png
new file mode 100644
index 0000000..0ac9678
Binary files /dev/null and b/www/sunders/images/button_more_blue.png differ
diff --git a/www/sunders/images/button_more_gray.png b/www/sunders/images/button_more_gray.png
new file mode 100644
index 0000000..06168f7
Binary files /dev/null and b/www/sunders/images/button_more_gray.png differ
diff --git a/www/sunders/images/button_next.png b/www/sunders/images/button_next.png
new file mode 100644
index 0000000..3b937a2
Binary files /dev/null and b/www/sunders/images/button_next.png differ
diff --git a/www/sunders/images/button_permalink.png b/www/sunders/images/button_permalink.png
new file mode 100644
index 0000000..2faf85e
Binary files /dev/null and b/www/sunders/images/button_permalink.png differ
diff --git a/www/sunders/images/button_previous.png b/www/sunders/images/button_previous.png
new file mode 100644
index 0000000..26d5352
Binary files /dev/null and b/www/sunders/images/button_previous.png differ
diff --git a/www/sunders/images/button_search.png b/www/sunders/images/button_search.png
new file mode 100644
index 0000000..4258d24
Binary files /dev/null and b/www/sunders/images/button_search.png differ
diff --git a/www/sunders/images/button_stats.png b/www/sunders/images/button_stats.png
new file mode 100644
index 0000000..22210f5
Binary files /dev/null and b/www/sunders/images/button_stats.png differ
diff --git a/www/sunders/images/cam.png b/www/sunders/images/cam.png
new file mode 100644
index 0000000..d2b458a
Binary files /dev/null and b/www/sunders/images/cam.png differ
diff --git a/www/sunders/images/camAll.png b/www/sunders/images/camAll.png
new file mode 100644
index 0000000..551147a
Binary files /dev/null and b/www/sunders/images/camAll.png differ
diff --git a/www/sunders/images/camBlue.png b/www/sunders/images/camBlue.png
new file mode 100644
index 0000000..b399c0a
Binary files /dev/null and b/www/sunders/images/camBlue.png differ
diff --git a/www/sunders/images/camGreen.png b/www/sunders/images/camGreen.png
new file mode 100644
index 0000000..6635468
Binary files /dev/null and b/www/sunders/images/camGreen.png differ
diff --git a/www/sunders/images/camRed.png b/www/sunders/images/camRed.png
new file mode 100644
index 0000000..8b0e7cc
Binary files /dev/null and b/www/sunders/images/camRed.png differ
diff --git a/www/sunders/images/close.png b/www/sunders/images/close.png
new file mode 100644
index 0000000..4f95711
Binary files /dev/null and b/www/sunders/images/close.png differ
diff --git a/www/sunders/images/colorBlue.png b/www/sunders/images/colorBlue.png
new file mode 100644
index 0000000..291756b
Binary files /dev/null and b/www/sunders/images/colorBlue.png differ
diff --git a/www/sunders/images/colorBlueAll.png b/www/sunders/images/colorBlueAll.png
new file mode 100644
index 0000000..0a22f1d
Binary files /dev/null and b/www/sunders/images/colorBlueAll.png differ
diff --git a/www/sunders/images/colorGreen.png b/www/sunders/images/colorGreen.png
new file mode 100644
index 0000000..ca92724
Binary files /dev/null and b/www/sunders/images/colorGreen.png differ
diff --git a/www/sunders/images/colorGreenAll.png b/www/sunders/images/colorGreenAll.png
new file mode 100644
index 0000000..daf47d8
Binary files /dev/null and b/www/sunders/images/colorGreenAll.png differ
diff --git a/www/sunders/images/colorRed.png b/www/sunders/images/colorRed.png
new file mode 100644
index 0000000..87e6024
Binary files /dev/null and b/www/sunders/images/colorRed.png differ
diff --git a/www/sunders/images/colorRedAll.png b/www/sunders/images/colorRedAll.png
new file mode 100644
index 0000000..b9adb9a
Binary files /dev/null and b/www/sunders/images/colorRedAll.png differ
diff --git a/www/sunders/images/dome.png b/www/sunders/images/dome.png
new file mode 100644
index 0000000..f017fd0
Binary files /dev/null and b/www/sunders/images/dome.png differ
diff --git a/www/sunders/images/domeAll.png b/www/sunders/images/domeAll.png
new file mode 100644
index 0000000..309eb4c
Binary files /dev/null and b/www/sunders/images/domeAll.png differ
diff --git a/www/sunders/images/domeBlue.png b/www/sunders/images/domeBlue.png
new file mode 100644
index 0000000..e9b726c
Binary files /dev/null and b/www/sunders/images/domeBlue.png differ
diff --git a/www/sunders/images/domeGreen.png b/www/sunders/images/domeGreen.png
new file mode 100644
index 0000000..9f853b3
Binary files /dev/null and b/www/sunders/images/domeGreen.png differ
diff --git a/www/sunders/images/domeRed.png b/www/sunders/images/domeRed.png
new file mode 100644
index 0000000..d5b7e20
Binary files /dev/null and b/www/sunders/images/domeRed.png differ
diff --git a/www/sunders/images/dome_z-17_h-3.png b/www/sunders/images/dome_z-17_h-3.png
new file mode 100644
index 0000000..2af0791
Binary files /dev/null and b/www/sunders/images/dome_z-17_h-3.png differ
diff --git a/www/sunders/images/dome_z-17_h-5.png b/www/sunders/images/dome_z-17_h-5.png
new file mode 100644
index 0000000..aea28bf
Binary files /dev/null and b/www/sunders/images/dome_z-17_h-5.png differ
diff --git a/www/sunders/images/dome_z-17_h-5_d-45.png b/www/sunders/images/dome_z-17_h-5_d-45.png
new file mode 100644
index 0000000..3e46629
Binary files /dev/null and b/www/sunders/images/dome_z-17_h-5_d-45.png differ
diff --git a/www/sunders/images/fixed.png b/www/sunders/images/fixed.png
new file mode 100644
index 0000000..2c6e664
Binary files /dev/null and b/www/sunders/images/fixed.png differ
diff --git a/www/sunders/images/fixedAll.png b/www/sunders/images/fixedAll.png
new file mode 100644
index 0000000..3cb7e06
Binary files /dev/null and b/www/sunders/images/fixedAll.png differ
diff --git a/www/sunders/images/fixedBlue.png b/www/sunders/images/fixedBlue.png
new file mode 100644
index 0000000..4871b2e
Binary files /dev/null and b/www/sunders/images/fixedBlue.png differ
diff --git a/www/sunders/images/fixedGreen.png b/www/sunders/images/fixedGreen.png
new file mode 100644
index 0000000..25e0e80
Binary files /dev/null and b/www/sunders/images/fixedGreen.png differ
diff --git a/www/sunders/images/fixedRed.png b/www/sunders/images/fixedRed.png
new file mode 100644
index 0000000..b406e89
Binary files /dev/null and b/www/sunders/images/fixedRed.png differ
diff --git a/www/sunders/images/fixed_z-17_d-90_a-15_h-10.png b/www/sunders/images/fixed_z-17_d-90_a-15_h-10.png
new file mode 100644
index 0000000..46fdbda
Binary files /dev/null and b/www/sunders/images/fixed_z-17_d-90_a-15_h-10.png differ
diff --git a/www/sunders/images/fixed_z-17_d-90_a-15_h-5.png b/www/sunders/images/fixed_z-17_d-90_a-15_h-5.png
new file mode 100644
index 0000000..5d3bf09
Binary files /dev/null and b/www/sunders/images/fixed_z-17_d-90_a-15_h-5.png differ
diff --git a/www/sunders/images/fixed_z-17_d-90_a-60_h-10.png b/www/sunders/images/fixed_z-17_d-90_a-60_h-10.png
new file mode 100644
index 0000000..1de1eda
Binary files /dev/null and b/www/sunders/images/fixed_z-17_d-90_a-60_h-10.png differ
diff --git a/www/sunders/images/guard.png b/www/sunders/images/guard.png
new file mode 100644
index 0000000..3243fa2
Binary files /dev/null and b/www/sunders/images/guard.png differ
diff --git a/www/sunders/images/guardAll.png b/www/sunders/images/guardAll.png
new file mode 100644
index 0000000..6cf08e5
Binary files /dev/null and b/www/sunders/images/guardAll.png differ
diff --git a/www/sunders/images/guardBlue.png b/www/sunders/images/guardBlue.png
new file mode 100644
index 0000000..8a74bb2
Binary files /dev/null and b/www/sunders/images/guardBlue.png differ
diff --git a/www/sunders/images/guardGreen.png b/www/sunders/images/guardGreen.png
new file mode 100644
index 0000000..910284f
Binary files /dev/null and b/www/sunders/images/guardGreen.png differ
diff --git a/www/sunders/images/guardRed.png b/www/sunders/images/guardRed.png
new file mode 100644
index 0000000..4f61068
Binary files /dev/null and b/www/sunders/images/guardRed.png differ
diff --git a/www/sunders/images/icon.png b/www/sunders/images/icon.png
new file mode 100644
index 0000000..c407f58
Binary files /dev/null and b/www/sunders/images/icon.png differ
diff --git a/www/sunders/images/link-how-de.png b/www/sunders/images/link-how-de.png
new file mode 100644
index 0000000..8c661fe
Binary files /dev/null and b/www/sunders/images/link-how-de.png differ
diff --git a/www/sunders/images/link-how-en.png b/www/sunders/images/link-how-en.png
new file mode 100644
index 0000000..5927ced
Binary files /dev/null and b/www/sunders/images/link-how-en.png differ
diff --git a/www/sunders/images/link-how-es.png b/www/sunders/images/link-how-es.png
new file mode 100644
index 0000000..3c6f770
Binary files /dev/null and b/www/sunders/images/link-how-es.png differ
diff --git a/www/sunders/images/link-how-fr.png b/www/sunders/images/link-how-fr.png
new file mode 100644
index 0000000..f35f8aa
Binary files /dev/null and b/www/sunders/images/link-how-fr.png differ
diff --git a/www/sunders/images/link-how-it.png b/www/sunders/images/link-how-it.png
new file mode 100644
index 0000000..d14bfa0
Binary files /dev/null and b/www/sunders/images/link-how-it.png differ
diff --git a/www/sunders/images/link-how-ru.png b/www/sunders/images/link-how-ru.png
new file mode 100644
index 0000000..5927ced
Binary files /dev/null and b/www/sunders/images/link-how-ru.png differ
diff --git a/www/sunders/images/link-what-de.png b/www/sunders/images/link-what-de.png
new file mode 100644
index 0000000..e2a2ae4
Binary files /dev/null and b/www/sunders/images/link-what-de.png differ
diff --git a/www/sunders/images/link-what-en.png b/www/sunders/images/link-what-en.png
new file mode 100644
index 0000000..01b34e4
Binary files /dev/null and b/www/sunders/images/link-what-en.png differ
diff --git a/www/sunders/images/link-what-es.png b/www/sunders/images/link-what-es.png
new file mode 100644
index 0000000..07041a4
Binary files /dev/null and b/www/sunders/images/link-what-es.png differ
diff --git a/www/sunders/images/link-what-fr.png b/www/sunders/images/link-what-fr.png
new file mode 100644
index 0000000..24ffb15
Binary files /dev/null and b/www/sunders/images/link-what-fr.png differ
diff --git a/www/sunders/images/link-what-it.png b/www/sunders/images/link-what-it.png
new file mode 100644
index 0000000..3474e7f
Binary files /dev/null and b/www/sunders/images/link-what-it.png differ
diff --git a/www/sunders/images/link-what-ru.png b/www/sunders/images/link-what-ru.png
new file mode 100644
index 0000000..01b34e4
Binary files /dev/null and b/www/sunders/images/link-what-ru.png differ
diff --git a/www/sunders/images/link-where-de.png b/www/sunders/images/link-where-de.png
new file mode 100644
index 0000000..15cd85a
Binary files /dev/null and b/www/sunders/images/link-where-de.png differ
diff --git a/www/sunders/images/link-where-en.png b/www/sunders/images/link-where-en.png
new file mode 100644
index 0000000..71b183d
Binary files /dev/null and b/www/sunders/images/link-where-en.png differ
diff --git a/www/sunders/images/link-where-es.png b/www/sunders/images/link-where-es.png
new file mode 100644
index 0000000..ad3d8d2
Binary files /dev/null and b/www/sunders/images/link-where-es.png differ
diff --git a/www/sunders/images/link-where-fr.png b/www/sunders/images/link-where-fr.png
new file mode 100644
index 0000000..c761895
Binary files /dev/null and b/www/sunders/images/link-where-fr.png differ
diff --git a/www/sunders/images/link-where-it.png b/www/sunders/images/link-where-it.png
new file mode 100644
index 0000000..3bf5c11
Binary files /dev/null and b/www/sunders/images/link-where-it.png differ
diff --git a/www/sunders/images/link-where-ru.png b/www/sunders/images/link-where-ru.png
new file mode 100644
index 0000000..71b183d
Binary files /dev/null and b/www/sunders/images/link-where-ru.png differ
diff --git a/www/sunders/images/lock-insecure.png b/www/sunders/images/lock-insecure.png
new file mode 100644
index 0000000..b21b5ec
Binary files /dev/null and b/www/sunders/images/lock-insecure.png differ
diff --git a/www/sunders/images/lock-secure.png b/www/sunders/images/lock-secure.png
new file mode 100644
index 0000000..eb3d851
Binary files /dev/null and b/www/sunders/images/lock-secure.png differ
diff --git a/www/sunders/images/logo.png b/www/sunders/images/logo.png
new file mode 100644
index 0000000..8707280
Binary files /dev/null and b/www/sunders/images/logo.png differ
diff --git a/www/sunders/images/panning.png b/www/sunders/images/panning.png
new file mode 100644
index 0000000..52a0a59
Binary files /dev/null and b/www/sunders/images/panning.png differ
diff --git a/www/sunders/images/panningAll.png b/www/sunders/images/panningAll.png
new file mode 100644
index 0000000..329cb62
Binary files /dev/null and b/www/sunders/images/panningAll.png differ
diff --git a/www/sunders/images/panningBlue.png b/www/sunders/images/panningBlue.png
new file mode 100644
index 0000000..3fc7e4b
Binary files /dev/null and b/www/sunders/images/panningBlue.png differ
diff --git a/www/sunders/images/panningGreen.png b/www/sunders/images/panningGreen.png
new file mode 100644
index 0000000..59bdcd6
Binary files /dev/null and b/www/sunders/images/panningGreen.png differ
diff --git a/www/sunders/images/panningRed.png b/www/sunders/images/panningRed.png
new file mode 100644
index 0000000..f07e4eb
Binary files /dev/null and b/www/sunders/images/panningRed.png differ
diff --git a/www/sunders/images/slider-toggle.png b/www/sunders/images/slider-toggle.png
new file mode 100644
index 0000000..b196c50
Binary files /dev/null and b/www/sunders/images/slider-toggle.png differ
diff --git a/www/sunders/images/title-how-de.png b/www/sunders/images/title-how-de.png
new file mode 100644
index 0000000..fdf6011
Binary files /dev/null and b/www/sunders/images/title-how-de.png differ
diff --git a/www/sunders/images/title-how-en.png b/www/sunders/images/title-how-en.png
new file mode 100644
index 0000000..35a71f5
Binary files /dev/null and b/www/sunders/images/title-how-en.png differ
diff --git a/www/sunders/images/title-how-es.png b/www/sunders/images/title-how-es.png
new file mode 100644
index 0000000..a7585db
Binary files /dev/null and b/www/sunders/images/title-how-es.png differ
diff --git a/www/sunders/images/title-how-fr.png b/www/sunders/images/title-how-fr.png
new file mode 100644
index 0000000..c5f0b93
Binary files /dev/null and b/www/sunders/images/title-how-fr.png differ
diff --git a/www/sunders/images/title-how-it.png b/www/sunders/images/title-how-it.png
new file mode 100644
index 0000000..5aeaf64
Binary files /dev/null and b/www/sunders/images/title-how-it.png differ
diff --git a/www/sunders/images/title-how-ru.png b/www/sunders/images/title-how-ru.png
new file mode 100644
index 0000000..35a71f5
Binary files /dev/null and b/www/sunders/images/title-how-ru.png differ
diff --git a/www/sunders/images/title-mea.png b/www/sunders/images/title-mea.png
new file mode 100644
index 0000000..0a2f35a
Binary files /dev/null and b/www/sunders/images/title-mea.png differ
diff --git a/www/sunders/images/title-sunders.png b/www/sunders/images/title-sunders.png
new file mode 100644
index 0000000..b0f8e8c
Binary files /dev/null and b/www/sunders/images/title-sunders.png differ
diff --git a/www/sunders/images/title-what-de.png b/www/sunders/images/title-what-de.png
new file mode 100644
index 0000000..38ad345
Binary files /dev/null and b/www/sunders/images/title-what-de.png differ
diff --git a/www/sunders/images/title-what-en.png b/www/sunders/images/title-what-en.png
new file mode 100644
index 0000000..64b3a7b
Binary files /dev/null and b/www/sunders/images/title-what-en.png differ
diff --git a/www/sunders/images/title-what-es.png b/www/sunders/images/title-what-es.png
new file mode 100644
index 0000000..03d435b
Binary files /dev/null and b/www/sunders/images/title-what-es.png differ
diff --git a/www/sunders/images/title-what-fr.png b/www/sunders/images/title-what-fr.png
new file mode 100644
index 0000000..222cb27
Binary files /dev/null and b/www/sunders/images/title-what-fr.png differ
diff --git a/www/sunders/images/title-what-it.png b/www/sunders/images/title-what-it.png
new file mode 100644
index 0000000..f073ae2
Binary files /dev/null and b/www/sunders/images/title-what-it.png differ
diff --git a/www/sunders/images/title-what-ru.png b/www/sunders/images/title-what-ru.png
new file mode 100644
index 0000000..64b3a7b
Binary files /dev/null and b/www/sunders/images/title-what-ru.png differ
diff --git a/www/sunders/images/title-where-de.png b/www/sunders/images/title-where-de.png
new file mode 100644
index 0000000..47bfae8
Binary files /dev/null and b/www/sunders/images/title-where-de.png differ
diff --git a/www/sunders/images/title-where-en.png b/www/sunders/images/title-where-en.png
new file mode 100644
index 0000000..59444bd
Binary files /dev/null and b/www/sunders/images/title-where-en.png differ
diff --git a/www/sunders/images/title-where-es.png b/www/sunders/images/title-where-es.png
new file mode 100644
index 0000000..edae71b
Binary files /dev/null and b/www/sunders/images/title-where-es.png differ
diff --git a/www/sunders/images/title-where-fr.png b/www/sunders/images/title-where-fr.png
new file mode 100644
index 0000000..4920c3e
Binary files /dev/null and b/www/sunders/images/title-where-fr.png differ
diff --git a/www/sunders/images/title-where-it.png b/www/sunders/images/title-where-it.png
new file mode 100644
index 0000000..770e7d9
Binary files /dev/null and b/www/sunders/images/title-where-it.png differ
diff --git a/www/sunders/images/title-where-ru.png b/www/sunders/images/title-where-ru.png
new file mode 100644
index 0000000..59444bd
Binary files /dev/null and b/www/sunders/images/title-where-ru.png differ
diff --git a/www/sunders/images/todo_cam.png b/www/sunders/images/todo_cam.png
new file mode 100644
index 0000000..4ab5fb5
Binary files /dev/null and b/www/sunders/images/todo_cam.png differ
diff --git a/www/sunders/images/todo_camAll.png b/www/sunders/images/todo_camAll.png
new file mode 100644
index 0000000..0fb77a4
Binary files /dev/null and b/www/sunders/images/todo_camAll.png differ
diff --git a/www/sunders/images/todo_camBlue.png b/www/sunders/images/todo_camBlue.png
new file mode 100644
index 0000000..e044c8c
Binary files /dev/null and b/www/sunders/images/todo_camBlue.png differ
diff --git a/www/sunders/images/todo_camGreen.png b/www/sunders/images/todo_camGreen.png
new file mode 100644
index 0000000..d3bcbcc
Binary files /dev/null and b/www/sunders/images/todo_camGreen.png differ
diff --git a/www/sunders/images/todo_camRed.png b/www/sunders/images/todo_camRed.png
new file mode 100644
index 0000000..d84f19e
Binary files /dev/null and b/www/sunders/images/todo_camRed.png differ
diff --git a/www/sunders/images/todo_dome.png b/www/sunders/images/todo_dome.png
new file mode 100644
index 0000000..faf9ac0
Binary files /dev/null and b/www/sunders/images/todo_dome.png differ
diff --git a/www/sunders/images/todo_domeAll.png b/www/sunders/images/todo_domeAll.png
new file mode 100644
index 0000000..4d0ef2d
Binary files /dev/null and b/www/sunders/images/todo_domeAll.png differ
diff --git a/www/sunders/images/todo_domeBlue.png b/www/sunders/images/todo_domeBlue.png
new file mode 100644
index 0000000..7897384
Binary files /dev/null and b/www/sunders/images/todo_domeBlue.png differ
diff --git a/www/sunders/images/todo_domeGreen.png b/www/sunders/images/todo_domeGreen.png
new file mode 100644
index 0000000..b1015f8
Binary files /dev/null and b/www/sunders/images/todo_domeGreen.png differ
diff --git a/www/sunders/images/todo_domeRed.png b/www/sunders/images/todo_domeRed.png
new file mode 100644
index 0000000..f91ac40
Binary files /dev/null and b/www/sunders/images/todo_domeRed.png differ
diff --git a/www/sunders/images/todo_fixed.png b/www/sunders/images/todo_fixed.png
new file mode 100644
index 0000000..eaf86f3
Binary files /dev/null and b/www/sunders/images/todo_fixed.png differ
diff --git a/www/sunders/images/todo_fixedAll.png b/www/sunders/images/todo_fixedAll.png
new file mode 100644
index 0000000..0575218
Binary files /dev/null and b/www/sunders/images/todo_fixedAll.png differ
diff --git a/www/sunders/images/todo_fixedBlue.png b/www/sunders/images/todo_fixedBlue.png
new file mode 100644
index 0000000..35f5133
Binary files /dev/null and b/www/sunders/images/todo_fixedBlue.png differ
diff --git a/www/sunders/images/todo_fixedGreen.png b/www/sunders/images/todo_fixedGreen.png
new file mode 100644
index 0000000..f28c82d
Binary files /dev/null and b/www/sunders/images/todo_fixedGreen.png differ
diff --git a/www/sunders/images/todo_fixedRed.png b/www/sunders/images/todo_fixedRed.png
new file mode 100644
index 0000000..42a43ed
Binary files /dev/null and b/www/sunders/images/todo_fixedRed.png differ
diff --git a/www/sunders/images/todo_guard.png b/www/sunders/images/todo_guard.png
new file mode 100644
index 0000000..ba85599
Binary files /dev/null and b/www/sunders/images/todo_guard.png differ
diff --git a/www/sunders/images/todo_guardAll.png b/www/sunders/images/todo_guardAll.png
new file mode 100644
index 0000000..8b1f56f
Binary files /dev/null and b/www/sunders/images/todo_guardAll.png differ
diff --git a/www/sunders/images/todo_guardBlue.png b/www/sunders/images/todo_guardBlue.png
new file mode 100644
index 0000000..e42b0fc
Binary files /dev/null and b/www/sunders/images/todo_guardBlue.png differ
diff --git a/www/sunders/images/todo_guardGreen.png b/www/sunders/images/todo_guardGreen.png
new file mode 100644
index 0000000..e678c31
Binary files /dev/null and b/www/sunders/images/todo_guardGreen.png differ
diff --git a/www/sunders/images/todo_guardRed.png b/www/sunders/images/todo_guardRed.png
new file mode 100644
index 0000000..33d80e1
Binary files /dev/null and b/www/sunders/images/todo_guardRed.png differ
diff --git a/www/sunders/images/todo_panning.png b/www/sunders/images/todo_panning.png
new file mode 100644
index 0000000..fc0b320
Binary files /dev/null and b/www/sunders/images/todo_panning.png differ
diff --git a/www/sunders/images/todo_panningAll.png b/www/sunders/images/todo_panningAll.png
new file mode 100644
index 0000000..8e2b7bd
Binary files /dev/null and b/www/sunders/images/todo_panningAll.png differ
diff --git a/www/sunders/images/todo_panningBlue.png b/www/sunders/images/todo_panningBlue.png
new file mode 100644
index 0000000..9fa6b07
Binary files /dev/null and b/www/sunders/images/todo_panningBlue.png differ
diff --git a/www/sunders/images/todo_panningGreen.png b/www/sunders/images/todo_panningGreen.png
new file mode 100644
index 0000000..f9f5eba
Binary files /dev/null and b/www/sunders/images/todo_panningGreen.png differ
diff --git a/www/sunders/images/todo_panningRed.png b/www/sunders/images/todo_panningRed.png
new file mode 100644
index 0000000..6bde24b
Binary files /dev/null and b/www/sunders/images/todo_panningRed.png differ
diff --git a/www/sunders/images/todo_traffic.png b/www/sunders/images/todo_traffic.png
new file mode 100644
index 0000000..400ca90
Binary files /dev/null and b/www/sunders/images/todo_traffic.png differ
diff --git a/www/sunders/images/traffic.png b/www/sunders/images/traffic.png
new file mode 100644
index 0000000..ae6f67e
Binary files /dev/null and b/www/sunders/images/traffic.png differ
diff --git a/www/sunders/images/yarrow-up.png b/www/sunders/images/yarrow-up.png
new file mode 100644
index 0000000..f29a942
Binary files /dev/null and b/www/sunders/images/yarrow-up.png differ
diff --git a/www/sunders/index.php b/www/sunders/index.php
new file mode 100644
index 0000000..d8fe490
--- /dev/null
+++ b/www/sunders/index.php
@@ -0,0 +1,301 @@
+ 19) {
+ $initialZoom = DEFAULT_ZOOM;
+ }
+ }
+
+ /* Check if the URL contains a numeric lat value and a numeric lon value.
+ If not use DEFAULT_LAT and DEFAULT_LON from config.php. */
+ if (array_key_exists('lat', $_GET) && array_key_exists('lon', $_GET)) {
+ $initialLat = $_GET['lat'];
+ $initialLon = $_GET['lon'];
+ if (!is_numeric($initialLat) || !is_numeric($initialLon)) {
+ $initialLat = DEFAULT_LAT;
+ $initialLon = DEFAULT_LON;
+ }
+ }
+
+ $sliderToggleChecked = 'checked="checked"';
+ $embQueryFirst = '';
+ $embedPerma = 'null';
+ $embedMode = '';
+ if (array_key_exists('emb', $_GET)) {
+ $embedMode = $_GET['emb'];
+ if ($embedMode == 'wosb') {
+ $sliderToggleChecked = '';
+ }
+ }
+
+ $useStatistics = USE_STATISTICS;
+?>
+
+
+
+
+
+
+
+
+
Surveillance under Surveillance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (window.self !== window.top) {
+ window.top.location.href="./sunders.html";
+ }
+ ';
+ } else {
+ $embQuery = 'emb='.$embedMode;
+ $embQueryFirst = '?'.$embQuery;
+ $embedPerma = '\''.$embedMode.'\'';
+ }
+ ?>
+
+
>
+
+
+
+
+ show map
+
+
+ Surveillance under Surveillance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '.$subtitle.'
';
+ }
+
+ if (! empty($translation)) {
+ echo '
'.$translation.'
';
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/sunders/it/camera.php b/www/sunders/it/camera.php
new file mode 100644
index 0000000..d85146c
--- /dev/null
+++ b/www/sunders/it/camera.php
@@ -0,0 +1,3 @@
+
diff --git a/www/sunders/it/index.php b/www/sunders/it/index.php
new file mode 100644
index 0000000..b285747
--- /dev/null
+++ b/www/sunders/it/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/it/stats/index.php b/www/sunders/it/stats/index.php
new file mode 100644
index 0000000..662cc1f
--- /dev/null
+++ b/www/sunders/it/stats/index.php
@@ -0,0 +1,6 @@
+
diff --git a/www/sunders/js/leafletembed_functions.js b/www/sunders/js/leafletembed_functions.js
new file mode 100644
index 0000000..cb199a0
--- /dev/null
+++ b/www/sunders/js/leafletembed_functions.js
@@ -0,0 +1,457 @@
+var ajaxRequest;
+var map;
+var osmTiles;
+var plotList;
+var plotLayers = [];
+var footprintPolygon;
+
+// Returns the value of URL parameter #name.
+function getUrlParameter(name) {
+ name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
+ var regex = new RegExp('[\\?&]' + name + '=([^]*)');
+ var results = regex.exec(window.location.search);
+ return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
+}
+
+// Draw the map for the first time.
+function initMap() {
+ // Set up the AJAX request.
+ ajaxRequest=getXmlHttpRequest();
+ if (ajaxRequest == null) {
+ alert('This browser does not support HTTP requests.');
+ return;
+ }
+
+ // --- URLSearchParams is not supported by all browsers ---
+ // var urlParams = new URLSearchParams(window.location.search);
+ // var embedMode = urlParams.get('emb');
+ var embedMode = getUrlParameter('emb');
+ if (embedMode !== '') {
+ embedMode = '\'' + embedMode + '\'';
+ }
+
+ // Set up the OSM tile layer with correct attribution
+ var osmUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
+ // var osmUrl = '';
+ var dataAttrib = '©