]> git.openstreetmap.org Git - rails.git/commitdiff
Merge pull request #4148 from tomhughes/avatar-image
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 16 Aug 2023 10:35:33 +0000 (11:35 +0100)
committerGitHub <noreply@github.com>
Wed, 16 Aug 2023 10:35:33 +0000 (11:35 +0100)
Use correct extension and type for avatar images attached to mails

63 files changed:
.rubocop_todo.yml
Gemfile.lock
app/assets/images/banners/donate_2023_1.jpg [new file with mode: 0644]
app/assets/images/banners/donate_2023_1@2x.jpg [new file with mode: 0644]
app/assets/images/banners/sotm_2022.png [deleted file]
app/assets/javascripts/messages.js
app/assets/javascripts/user.js
app/assets/stylesheets/common.scss
app/controllers/api/capabilities_controller.rb
app/controllers/api/changesets_controller.rb
app/controllers/diary_entries_controller.rb
app/controllers/issue_comments_controller.rb
app/controllers/issues_controller.rb
app/controllers/user_roles_controller.rb
app/controllers/users_controller.rb
app/helpers/application_helper.rb
app/helpers/user_helper.rb
app/helpers/user_roles_helper.rb
app/models/user.rb
app/views/api/capabilities/show.json.jbuilder [new file with mode: 0644]
app/views/api/users/_user.json.jbuilder
app/views/api/users/_user.xml.builder
app/views/dashboards/_contact.html.erb
app/views/dashboards/show.html.erb
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/_form.html.erb
app/views/diary_entries/show.html.erb
app/views/layouts/_banner.html.erb
app/views/layouts/map.html.erb
app/views/messages/_message_summary.html.erb
app/views/messages/_sent_message_summary.html.erb
app/views/messages/inbox.html.erb
app/views/messages/outbox.html.erb
app/views/messages/show.html.erb
app/views/profiles/edit.html.erb
app/views/users/show.html.erb
config/banners.yml
config/locales/af.yml
config/locales/bg.yml
config/locales/cy.yml
config/locales/en.yml
config/locales/es.yml
config/locales/fr.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/lb.yml
config/locales/mk.yml
config/locales/nb.yml
config/locales/nl.yml
config/locales/ro.yml
config/locales/skr-arab.yml
config/locales/sl.yml
config/locales/zh-TW.yml
test/controllers/api/capabilities_controller_test.rb
test/controllers/api/changesets_controller_test.rb
test/controllers/api/relations_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/helpers/user_helper_test.rb
test/models/user_test.rb
yarn.lock

index 527c793545f61d6307aedff2f35df3f69cf307cc..db94a610b8fe20aecc9ebc4851cba172c0afc05f 100644 (file)
@@ -92,16 +92,6 @@ Minitest/EmptyLineBeforeAssertionMethods:
 Minitest/MultipleAssertions:
   Max: 54
 
-# Offense count: 1
-# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
-# NamePrefix: is_, has_, have_
-# ForbiddenPrefixes: is_, has_, have_
-# AllowedMethods: is_a?
-# MethodDefinitionMacros: define_method, define_singleton_method
-Naming/PredicateName:
-  Exclude:
-    - 'app/models/user.rb'
-
 # Offense count: 1
 # This cop supports unsafe autocorrection (--autocorrect-all).
 Rails/ActionControllerFlashBeforeRender:
index dc2bb6080cff7c4ab155e0626e70d90ec913e5f7..b75e9360678aa89124b6ee8d7f5ce5558c77a796 100644 (file)
@@ -3,73 +3,73 @@ GEM
   specs:
     aasm (5.5.0)
       concurrent-ruby (~> 1.0)
-    actioncable (7.0.6)
-      actionpack (= 7.0.6)
-      activesupport (= 7.0.6)
+    actioncable (7.0.7)
+      actionpack (= 7.0.7)
+      activesupport (= 7.0.7)
       nio4r (~> 2.0)
       websocket-driver (>= 0.6.1)
-    actionmailbox (7.0.6)
-      actionpack (= 7.0.6)
-      activejob (= 7.0.6)
-      activerecord (= 7.0.6)
-      activestorage (= 7.0.6)
-      activesupport (= 7.0.6)
+    actionmailbox (7.0.7)
+      actionpack (= 7.0.7)
+      activejob (= 7.0.7)
+      activerecord (= 7.0.7)
+      activestorage (= 7.0.7)
+      activesupport (= 7.0.7)
       mail (>= 2.7.1)
       net-imap
       net-pop
       net-smtp
-    actionmailer (7.0.6)
-      actionpack (= 7.0.6)
-      actionview (= 7.0.6)
-      activejob (= 7.0.6)
-      activesupport (= 7.0.6)
+    actionmailer (7.0.7)
+      actionpack (= 7.0.7)
+      actionview (= 7.0.7)
+      activejob (= 7.0.7)
+      activesupport (= 7.0.7)
       mail (~> 2.5, >= 2.5.4)
       net-imap
       net-pop
       net-smtp
       rails-dom-testing (~> 2.0)
-    actionpack (7.0.6)
-      actionview (= 7.0.6)
-      activesupport (= 7.0.6)
+    actionpack (7.0.7)
+      actionview (= 7.0.7)
+      activesupport (= 7.0.7)
       rack (~> 2.0, >= 2.2.4)
       rack-test (>= 0.6.3)
       rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.2.0)
     actionpack-page_caching (1.2.4)
       actionpack (>= 4.0.0)
-    actiontext (7.0.6)
-      actionpack (= 7.0.6)
-      activerecord (= 7.0.6)
-      activestorage (= 7.0.6)
-      activesupport (= 7.0.6)
+    actiontext (7.0.7)
+      actionpack (= 7.0.7)
+      activerecord (= 7.0.7)
+      activestorage (= 7.0.7)
+      activesupport (= 7.0.7)
       globalid (>= 0.6.0)
       nokogiri (>= 1.8.5)
-    actionview (7.0.6)
-      activesupport (= 7.0.6)
+    actionview (7.0.7)
+      activesupport (= 7.0.7)
       builder (~> 3.1)
       erubi (~> 1.4)
       rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.1, >= 1.2.0)
     active_record_union (1.3.0)
       activerecord (>= 4.0)
-    activejob (7.0.6)
-      activesupport (= 7.0.6)
+    activejob (7.0.7)
+      activesupport (= 7.0.7)
       globalid (>= 0.3.6)
-    activemodel (7.0.6)
-      activesupport (= 7.0.6)
-    activerecord (7.0.6)
-      activemodel (= 7.0.6)
-      activesupport (= 7.0.6)
+    activemodel (7.0.7)
+      activesupport (= 7.0.7)
+    activerecord (7.0.7)
+      activemodel (= 7.0.7)
+      activesupport (= 7.0.7)
     activerecord-import (1.4.1)
       activerecord (>= 4.2)
-    activestorage (7.0.6)
-      actionpack (= 7.0.6)
-      activejob (= 7.0.6)
-      activerecord (= 7.0.6)
-      activesupport (= 7.0.6)
+    activestorage (7.0.7)
+      actionpack (= 7.0.7)
+      activejob (= 7.0.7)
+      activerecord (= 7.0.7)
+      activesupport (= 7.0.7)
       marcel (~> 1.0)
       mini_mime (>= 1.1.0)
-    activesupport (7.0.6)
+    activesupport (7.0.7)
       concurrent-ruby (~> 1.0, >= 1.0.2)
       i18n (>= 1.6, < 2)
       minitest (>= 5.1)
@@ -86,8 +86,8 @@ GEM
     autoprefixer-rails (10.4.13.0)
       execjs (~> 2)
     aws-eventstream (1.2.0)
-    aws-partitions (1.799.0)
-    aws-sdk-core (3.180.2)
+    aws-partitions (1.804.0)
+    aws-sdk-core (3.180.3)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.5)
@@ -95,12 +95,13 @@ GEM
     aws-sdk-kms (1.71.0)
       aws-sdk-core (~> 3, >= 3.177.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.132.0)
+    aws-sdk-s3 (1.132.1)
       aws-sdk-core (~> 3, >= 3.179.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.6)
     aws-sigv4 (1.6.0)
       aws-eventstream (~> 1, >= 1.0.2)
+    base64 (0.1.1)
     better_errors (2.10.1)
       erubi (>= 1.0.0)
       rack (>= 0.9.0)
@@ -314,7 +315,7 @@ GEM
     net-smtp (0.3.3)
       net-protocol
     nio4r (2.5.9)
-    nokogiri (1.15.3)
+    nokogiri (1.15.4)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     oauth (0.4.7)
@@ -368,7 +369,7 @@ GEM
       ast (~> 2.4.1)
       racc
     pg (1.5.3)
-    popper_js (2.11.7)
+    popper_js (2.11.8)
     progress (3.6.0)
     public_suffix (5.0.3)
     puma (5.6.6)
@@ -387,20 +388,20 @@ GEM
     rack-test (2.1.0)
       rack (>= 1.3)
     rack-uri_sanitizer (0.0.2)
-    rails (7.0.6)
-      actioncable (= 7.0.6)
-      actionmailbox (= 7.0.6)
-      actionmailer (= 7.0.6)
-      actionpack (= 7.0.6)
-      actiontext (= 7.0.6)
-      actionview (= 7.0.6)
-      activejob (= 7.0.6)
-      activemodel (= 7.0.6)
-      activerecord (= 7.0.6)
-      activestorage (= 7.0.6)
-      activesupport (= 7.0.6)
+    rails (7.0.7)
+      actioncable (= 7.0.7)
+      actionmailbox (= 7.0.7)
+      actionmailer (= 7.0.7)
+      actionpack (= 7.0.7)
+      actiontext (= 7.0.7)
+      actionview (= 7.0.7)
+      activejob (= 7.0.7)
+      activemodel (= 7.0.7)
+      activerecord (= 7.0.7)
+      activestorage (= 7.0.7)
+      activesupport (= 7.0.7)
       bundler (>= 1.15.0)
-      railties (= 7.0.6)
+      railties (= 7.0.7)
     rails-controller-testing (1.0.5)
       actionpack (>= 5.0.1.rc1)
       actionview (>= 5.0.1.rc1)
@@ -412,12 +413,12 @@ GEM
     rails-html-sanitizer (1.6.0)
       loofah (~> 2.21)
       nokogiri (~> 1.14)
-    rails-i18n (7.0.6)
+    rails-i18n (7.0.8)
       i18n (>= 0.7, < 2)
       railties (>= 6.0.0, < 8)
-    railties (7.0.6)
-      actionpack (= 7.0.6)
-      activesupport (= 7.0.6)
+    railties (7.0.7)
+      actionpack (= 7.0.7)
+      activesupport (= 7.0.7)
       method_source
       rake (>= 12.2)
       thor (~> 1.0)
@@ -434,7 +435,8 @@ GEM
     rinku (2.0.6)
     rotp (6.2.2)
     rouge (4.1.3)
-    rubocop (1.55.1)
+    rubocop (1.56.0)
+      base64 (~> 0.1.1)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
@@ -453,7 +455,7 @@ GEM
       rubocop (~> 1.33)
     rubocop-minitest (0.31.0)
       rubocop (>= 1.39, < 2.0)
-    rubocop-performance (1.18.0)
+    rubocop-performance (1.19.0)
       rubocop (>= 1.7.0, < 2.0)
       rubocop-ast (>= 0.4.0)
     rubocop-rails (2.20.2)
@@ -505,7 +507,7 @@ GEM
       actionpack (>= 5.2)
       activesupport (>= 5.2)
       sprockets (>= 3.0.0)
-    strong_migrations (1.6.0)
+    strong_migrations (1.6.1)
       activerecord (>= 5.2)
     terminal-table (3.0.2)
       unicode-display_width (>= 1.1.1, < 3)
diff --git a/app/assets/images/banners/donate_2023_1.jpg b/app/assets/images/banners/donate_2023_1.jpg
new file mode 100644 (file)
index 0000000..0a445b5
Binary files /dev/null and b/app/assets/images/banners/donate_2023_1.jpg differ
diff --git a/app/assets/images/banners/donate_2023_1@2x.jpg b/app/assets/images/banners/donate_2023_1@2x.jpg
new file mode 100644 (file)
index 0000000..8f519b6
Binary files /dev/null and b/app/assets/images/banners/donate_2023_1@2x.jpg differ
diff --git a/app/assets/images/banners/sotm_2022.png b/app/assets/images/banners/sotm_2022.png
deleted file mode 100644 (file)
index e6cc0cd..0000000
Binary files a/app/assets/images/banners/sotm_2022.png and /dev/null differ
index 0cae79a58cd2924255f0daead205e9bf7effb033..5accc1a6036fb94ec958eaf8f5c803832ecf3c09 100644 (file)
@@ -1,30 +1,34 @@
 $(document).ready(function () {
   $(".inbox-mark-unread").on("ajax:success", function (event, data) {
-    $("#inboxanchor").remove();
-    $(".user-button").before(data.inboxanchor);
-
-    $("#inbox-count").replaceWith(data.inbox_count);
-
-    $(this).parents(".inbox-row").removeClass("inbox-row").addClass("inbox-row-unread");
+    updateHtml(data);
+    updateReadState(this, false);
   });
 
   $(".inbox-mark-read").on("ajax:success", function (event, data) {
-    $("#inboxanchor").remove();
-    $(".user-button").before(data.inboxanchor);
+    updateHtml(data);
+    updateReadState(this, true);
+  });
 
-    $("#inbox-count").replaceWith(data.inbox_count);
+  $(".inbox-destroy").on("ajax:success", function (event, data) {
+    updateHtml(data);
 
-    $(this).parents(".inbox-row-unread").removeClass("inbox-row-unread").addClass("inbox-row");
+    $(this).closest("tr").fadeOut(800, "linear", function () {
+      $(this).remove();
+    });
   });
 
-  $(".inbox-destroy").on("ajax:success", function (event, data) {
+  function updateHtml(data) {
     $("#inboxanchor").remove();
     $(".user-button").before(data.inboxanchor);
 
     $("#inbox-count").replaceWith(data.inbox_count);
-
-    $(this).parents(".inbox-row, .inbox-row-unread").fadeOut(800, "linear", function () {
-      $(this).remove();
-    });
-  });
+  }
+
+  function updateReadState(target, isRead) {
+    $(target).closest("tr")
+      .toggleClass("inbox-row", isRead)
+      .toggleClass("inbox-row-unread", !isRead)
+      .find(".inbox-mark-unread").prop("hidden", !isRead).end()
+      .find(".inbox-mark-read").prop("hidden", isRead);
+  }
 });
index 964f187f9795d7861ffc7ceb6b0c8f3514234e5b..146d876f789643d20abfed4043cbf44989c8af59 100644 (file)
@@ -1,8 +1,11 @@
 //= require leaflet.locatecontrol/src/L.Control.Locate
 
 $(document).ready(function () {
+  var defaultHomeZoom = 12;
+  var map, marker, deleted_lat, deleted_lon;
+
   if ($("#map").length) {
-    var map = L.map("map", {
+    map = L.map("map", {
       attributionControl: false,
       zoomControl: false
     }).addLayer(new L.OSM.Mapnik());
@@ -35,13 +38,17 @@ $(document).ready(function () {
       .addClass("control-button");
 
     if (OSM.home) {
-      map.setView([OSM.home.lat, OSM.home.lon], 12);
+      map.setView([OSM.home.lat, OSM.home.lon], defaultHomeZoom);
     } else {
       map.setView([0, 0], 0);
     }
 
     if ($("#map").hasClass("set_location")) {
-      var marker = L.marker([0, 0], { icon: OSM.getUserIcon() });
+      marker = L.marker([0, 0], {
+        icon: OSM.getUserIcon(),
+        keyboard: false,
+        interactive: false
+      });
 
       if (OSM.home) {
         marker.setLatLng([OSM.home.lat, OSM.home.lon]);
@@ -49,18 +56,65 @@ $(document).ready(function () {
       }
 
       map.on("click", function (e) {
-        if ($("#updatehome").is(":checked")) {
-          var zoom = map.getZoom(),
-              precision = OSM.zoomPrecision(zoom),
-              location = e.latlng.wrap();
+        if (!$("#updatehome").is(":checked")) return;
+
+        var zoom = map.getZoom(),
+            precision = OSM.zoomPrecision(zoom),
+            location = e.latlng.wrap();
+
+        $("#home_lat").val(location.lat.toFixed(precision));
+        $("#home_lon").val(location.lng.toFixed(precision));
+
+        deleted_lat = null;
+        deleted_lon = null;
+        respondToHomeUpdate();
+      }).on("moveend", function () {
+        var lat = $("#home_lat").val().trim(),
+            lon = $("#home_lon").val().trim(),
+            location;
+
+        try {
+          if (lat && lon) {
+            location = L.latLng(lat, lon);
+          }
+        } catch (error) {
+          // keep location undefined
+        }
 
-          $("#home_message").hide();
-          $("#home_lat").val(location.lat.toFixed(precision));
-          $("#home_lon").val(location.lng.toFixed(precision));
+        $("#home_show").prop("disabled", !location || isCloseEnoughToMapCenter(location));
+      });
 
-          marker.setLatLng(e.latlng);
-          marker.addTo(map);
-        }
+      $("#home_lat, #home_lon").on("input", function () {
+        deleted_lat = null;
+        deleted_lon = null;
+        respondToHomeUpdate();
+      });
+
+      $("#home_show").click(function () {
+        var lat = $("#home_lat").val(),
+            lon = $("#home_lon").val();
+
+        map.setView([lat, lon], defaultHomeZoom);
+      });
+
+      $("#home_delete").click(function () {
+        var lat = $("#home_lat").val(),
+            lon = $("#home_lon").val();
+
+        $("#home_lat, #home_lon").val("");
+        deleted_lat = lat;
+        deleted_lon = lon;
+        respondToHomeUpdate();
+        $("#home_undelete").trigger("focus");
+      });
+
+      $("#home_undelete").click(function () {
+        $("#home_lat").val(deleted_lat);
+        $("#home_lon").val(deleted_lon);
+        deleted_lat = null;
+        deleted_lon = null;
+        respondToHomeUpdate();
+        $("#home_delete").trigger("focus");
       });
     } else {
       $("[data-user]").each(function () {
@@ -73,6 +127,41 @@ $(document).ready(function () {
     }
   }
 
+  function respondToHomeUpdate() {
+    var lat = $("#home_lat").val().trim(),
+        lon = $("#home_lon").val().trim(),
+        location;
+
+    try {
+      if (lat && lon) {
+        location = L.latLng(lat, lon);
+      }
+      $("#home_lat, #home_lon").removeClass("is-invalid");
+    } catch (error) {
+      if (lat && isNaN(lat)) $("#home_lat").addClass("is-invalid");
+      if (lon && isNaN(lon)) $("#home_lon").addClass("is-invalid");
+    }
+
+    $("#home_message").toggleClass("invisible", Boolean(location));
+    $("#home_show").prop("hidden", !location);
+    $("#home_delete").prop("hidden", !location);
+    $("#home_undelete").prop("hidden", !(!location && deleted_lat && deleted_lon));
+    if (location) {
+      marker.setLatLng([lat, lon]);
+      marker.addTo(map);
+      map.panTo([lat, lon]);
+    } else {
+      marker.removeFrom(map);
+    }
+  }
+
+  function isCloseEnoughToMapCenter(location) {
+    var inputPt = map.latLngToContainerPoint(location),
+        centerPt = map.latLngToContainerPoint(map.getCenter());
+
+    return centerPt.distanceTo(inputPt) < 10;
+  }
+
   function updateAuthUID() {
     var provider = $("select#user_auth_provider").val();
 
index efd0ac265049fdbe4f77ebe5793ba020e112f781..5f89453c62634dac4ea172294abd75013c886e8e 100644 (file)
@@ -304,7 +304,7 @@ body.small-nav {
   }
 
   nav.secondary {
-    .user-menu {
+    .user-menu, .login-menu {
       width: 100%;
     }
   }
@@ -460,6 +460,11 @@ body.small-nav {
       display: block;
       width: $sidebarWidth;
     }
+
+    button.btn-close {
+      background-color: rgba(255, 255, 255, 0.5);
+      opacity: 1.0;
+    }
   }
 
   #map {
@@ -1047,49 +1052,24 @@ tr.turn:hover {
   width: 100%;
 }
 
-/* Rules for the diary list page */
-
-.diary_post {
-  position: relative;
-  padding-top: $lineheight;
-  padding-bottom: $lineheight/2;
-  border-top: 1px solid $grey;
-
-  &.deleted {
-    background-color: #fee;
-  }
-}
-
 /* Rules for the diary entry page */
 
 .diary_entries {
   #map {
     height: 400px;
     display: none;
-    margin-bottom: $lineheight;
   }
   .comments {
     max-width: 740px;
   }
   .diary-comment {
     border-top: 1px dashed $grey;
-    padding-top: $lineheight/2;
-    padding-bottom: $lineheight/2;
     &:first-child {
-      margin-top: $lineheight/2;
-      padding-top: $lineheight;
       border-top: 1px solid $grey;
     }
-    &.deleted {
-      background-color: #fee;
-    }
     p {
       margin-bottom: $lineheight/2;
     }
-    .comment-heading {
-      margin-bottom: 0;
-      margin-top: 0;
-    }
   }
 }
 
@@ -1132,11 +1112,6 @@ tr.turn:hover {
 /* Rules for messages pages */
 
 .messages {
-  button[type="submit"] {
-    margin: auto;
-    white-space: nowrap;
-  }
-
   .inbox-row {
     background: $offwhite;
   }
@@ -1144,42 +1119,6 @@ tr.turn:hover {
   .inbox-row-unread {
     background: #CBEEA7;
   }
-
-  .right {
-    float: right;
-  }
-}
-
-.inbox-row .inbox-mark-read {
-  display: none;
-}
-
-.info-line {
-  margin-bottom: $lineheight;
-  padding: $lineheight/4 0px 4px 0px;
-  border-bottom: 1px solid $grey;
-
-  form, form div {
-    display: inline;
-  }
-}
-
-.info-line .user_thumbnail_tiny {
-  vertical-align: middle;
-}
-
-.inbox-sent {
-  white-space: nowrap;
-}
-
-.inbox-mark-unread,
-.inbox-mark-read,
-.inbox-delete {
-  width: 1%;
-}
-
-.inbox-row-unread .inbox-mark-unread {
-  display: none;
 }
 
 .search_form {
@@ -1216,15 +1155,8 @@ img.user_thumbnail_tiny {
   max-height: 25px;
 }
 
-/* Rules for geo microformats */
-
-abbr.geo {
-  border-bottom: none;
-}
-
 /* General styles for action lists / subnavs */
 
-
 nav.secondary-actions {
   margin-left: -11px;
   overflow: hidden;
@@ -1251,24 +1183,6 @@ div.secondary-actions {
   text-align: center;
 }
 
-/* Create a single-line dl */
-
-dl.dl-inline {
-  dt, dd {
-    display: inline-block;
-  }
-  dd {
-    margin-right: 1em;
-  }
-}
-
-/* Rules for OpenID logo */
-
-.openid_logo {
-  vertical-align: text-bottom;
-  border: 0;
-}
-
 /* Rules for rich text */
 
 .richtext,
index 7f91557f85849b74bf749daf590dbe77aa3f582d..80222c40bd93fb622753a5d672841cbe1fa2d12d 100644 (file)
@@ -2,6 +2,7 @@ module Api
   class CapabilitiesController < ApiController
     authorize_resource :class => false
 
+    before_action :set_request_formats
     around_action :api_call_handle_error, :api_call_timeout
 
     # External apps that use the api are able to query the api to find out some
index 0dffd4de224a37e21cffb1780038a259492a89b3..0a49a95f4e01e98a99c07566f6da92282448e09b 100644 (file)
@@ -170,8 +170,15 @@ module Api
       changesets = conditions_closed(changesets, params["closed"])
       changesets = conditions_ids(changesets, params["changesets"])
 
-      # sort and limit the changesets
-      changesets = changesets.order("created_at DESC").limit(result_limit)
+      # sort the changesets
+      changesets = if params[:order] == "oldest"
+                     changesets.order(:closed_at => :asc)
+                   else
+                     changesets.order(:closed_at => :desc)
+                   end
+
+      # limit the result
+      changesets = changesets.limit(result_limit)
 
       # preload users, tags and comments, and render result
       @changesets = changesets.preload(:user, :changeset_tags, :comments)
index ea9aacb21d97f5e72b18e95fc3e28635cf89d903..6981ed797f92112956e2097bf7a11a1e54d9465b 100644 (file)
@@ -280,7 +280,7 @@ class DiaryEntriesController < ApplicationController
       @lon = @diary_entry.longitude
       @lat = @diary_entry.latitude
       @zoom = 12
-    elsif current_user.home_lat.nil? || current_user.home_lon.nil?
+    elsif !current_user.home_location?
       @lon = params[:lon] || -0.1
       @lat = params[:lat] || 51.5
       @zoom = params[:zoom] || 4
index 7edef184e782cf560a5c31d5a68b9c1550f1b88c..5bf4d023784a587613645f03891f5e2f22ae2cae 100644 (file)
@@ -19,7 +19,7 @@ class IssueCommentsController < ApplicationController
       reassign_issue(@issue)
       flash[:notice] = t ".issue_reassigned"
 
-      if current_user.has_role? @issue.assigned_role
+      if current_user.role? @issue.assigned_role
         redirect_to @issue
       else
         redirect_to issues_path(:status => "open")
index 44c19e322708a8b07c6ca75854988dbaba0782ca..c381119f0d44472b6633fe9e050923b604effd2f 100644 (file)
@@ -42,6 +42,7 @@ class IssuesController < ApplicationController
   end
 
   def show
+    @title = t ".title", :status => @issue.status.humanize, :issue_id => @issue.id
     @read_reports = @issue.read_reports
     @unread_reports = @issue.unread_reports
     @comments = @issue.comments
index fe4c855e3d827e9696e4233b2f86c57ccd4c7b16..cf5b4de9e35e2c8771673e4bd09ac7d011aeeb73 100644 (file)
@@ -41,7 +41,7 @@ class UserRolesController < ApplicationController
   ##
   # checks that the user doesn't already have this role
   def not_in_role
-    if @user.has_role? @role
+    if @user.role? @role
       flash[:error] = t("user_role.filter.already_has_role", :role => @role)
       redirect_to user_path(@user)
     end
@@ -50,7 +50,7 @@ class UserRolesController < ApplicationController
   ##
   # checks that the user already has this role
   def in_role
-    unless @user.has_role? @role
+    unless @user.role? @role
       flash[:error] = t("user_role.filter.doesnt_have_role", :role => @role)
       redirect_to user_path(@user)
     end
index abd998030eda898c28d439f82d6156c219c701c9..fc9a6afc09a17926d49db044df1333008277b3c4 100644 (file)
@@ -357,7 +357,7 @@ class UsersController < ApplicationController
   # get list of MX servers for a domains
   def domain_mx_servers(domain)
     Resolv::DNS.open do |dns|
-      dns.getresources(domain, Resolv::DNS::Resource::IN::MX).collect(&:exchange).collect(&:to_s)
+      dns.getresources(domain, Resolv::DNS::Resource::IN::MX).collect { |mx| mx.exchange.to_s }
     end
   end
 end
index bb09f3a49953bd66ec26fcb8734befb800c767e1..28c97e485f372242369c444f12057aa405c64926 100644 (file)
@@ -54,7 +54,7 @@ module ApplicationHelper
     if current_user
       data[:user] = current_user.id.to_json
 
-      data[:user_home] = { :lat => current_user.home_lat, :lon => current_user.home_lon } unless current_user.home_lon.nil? || current_user.home_lat.nil?
+      data[:user_home] = { :lat => current_user.home_lat, :lon => current_user.home_lon } if current_user.home_location?
     end
 
     data[:location] = session[:location] if session[:location]
index 1064e95c7dd7b4bed74a6075b002be28223451aa..c8a80588ca6a830ddb9b1b9c48c6cfc4b02461f0 100644 (file)
@@ -53,7 +53,7 @@ module UserHelper
   # External authentication support
 
   def openid_logo
-    image_tag "openid_small.png", :alt => t("sessions.new.openid_logo_alt"), :class => "openid_logo"
+    image_tag "openid_small.png", :alt => t("sessions.new.openid_logo_alt"), :class => "align-text-bottom"
   end
 
   def auth_button(name, provider, options = {})
index a8bc06b6e699c286eed1ae5a29ddd6953e296403..c9f8e2e6549e06429b23b024fd45717c927cac10 100644 (file)
@@ -5,7 +5,7 @@ module UserRolesHelper
 
   def role_icon(user, role)
     if current_user&.administrator?
-      if user.has_role?(role)
+      if user.role?(role)
         image = "roles/#{role}"
         alt = t("users.show.role.revoke.#{role}")
         title = t("users.show.role.revoke.#{role}")
@@ -18,7 +18,7 @@ module UserRolesHelper
         url = grant_role_path(:display_name => user.display_name, :role => role)
         confirm = t("user_role.grant.are_you_sure", :name => user.display_name, :role => role)
       end
-    elsif user.has_role?(role)
+    elsif user.role?(role)
       image = "roles/#{role}"
       alt = t("users.show.role.#{role}")
       title = t("users.show.role.#{role}")
index c809b619294732038c97558423b349fe2050212c..5c21736b0f6a9cbe031056cf4ef3ebaeae297cc1 100644 (file)
@@ -238,8 +238,12 @@ class User < ApplicationRecord
     @preferred_languages ||= Locale.list(languages)
   end
 
+  def home_location?
+    home_lat && home_lon
+  end
+
   def nearby(radius = Settings.nearby_radius, num = Settings.nearby_users)
-    if home_lon && home_lat
+    if home_location?
       gc = OSM::GreatCircle.new(home_lat, home_lon)
       sql_for_area = QuadTile.sql_for_area(gc.bounds(radius), "home_")
       sql_for_distance = gc.sql_for_distance("home_lat", "home_lon")
@@ -278,18 +282,18 @@ class User < ApplicationRecord
   ##
   # returns true if the user has the moderator role, false otherwise
   def moderator?
-    has_role? "moderator"
+    role? "moderator"
   end
 
   ##
   # returns true if the user has the administrator role, false otherwise
   def administrator?
-    has_role? "administrator"
+    role? "administrator"
   end
 
   ##
   # returns true if the user has the requested role
-  def has_role?(role)
+  def role?(role)
     roles.any? { |r| r.role == role }
   end
 
@@ -401,6 +405,6 @@ class User < ApplicationRecord
   end
 
   def update_tile
-    self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_lat && home_lon
+    self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_location?
   end
 end
diff --git a/app/views/api/capabilities/show.json.jbuilder b/app/views/api/capabilities/show.json.jbuilder
new file mode 100644 (file)
index 0000000..ceffa8b
--- /dev/null
@@ -0,0 +1,44 @@
+json.partial! "api/root_attributes"
+
+json.api do
+  json.version do
+    json.minimum Settings.api_version
+    json.maximum Settings.api_version
+  end
+  json.area do
+    json.maximum Settings.max_request_area
+  end
+  json.note_area do
+    json.maximum Settings.max_note_request_area
+  end
+  json.tracepoints do
+    json.per_page Settings.tracepoints_per_page
+  end
+  json.waynodes do
+    json.maximum Settings.max_number_of_way_nodes
+  end
+  json.relationmembers do
+    json.maximum Settings.max_number_of_relation_members
+  end
+  json.changesets do
+    json.maximum_elements Changeset::MAX_ELEMENTS
+    json.default_query_limit Settings.default_changeset_query_limit
+    json.maximum_query_limit Settings.max_changeset_query_limit
+  end
+  json.timeout do
+    json.seconds Settings.api_timeout
+  end
+  json.status do
+    json.database @database_status
+    json.api @api_status
+    json.gpx @gpx_status
+  end
+end
+
+json.policy do
+  json.imagery do
+    json.blacklist(Settings.imagery_blacklist) do |url_regex|
+      json.regex url_regex.to_s
+    end
+  end
+end
index 15f0685ac9e24b9131b75ab2389a73c04157e008..1a339f62805137307cdadc8a1db45a8bba0a6e80 100644 (file)
@@ -46,7 +46,7 @@ json.user do
   end
 
   if current_user && current_user == user && can?(:details, User)
-    if user.home_lat && user.home_lon
+    if user.home_location?
       json.home do
         json.lat user.home_lat
         json.lon user.home_lon
index 1791c60ef96fb0cf78d876106ed07c2b836b7135..9fb74826a017b87170ca3f0f0ac771bb433e0d97 100644 (file)
@@ -25,7 +25,7 @@ xml.tag! "user", :id => user.id,
     end
   end
   if current_user && current_user == user && can?(:details, User)
-    if user.home_lat && user.home_lon
+    if user.home_location?
       xml.tag! "home", :lat => user.home_lat,
                        :lon => user.home_lon,
                        :zoom => user.home_zoom
index 7785c05523fb287cc3a239b430b65392b3c15953..0c012cec90040c9921abb64cb9805ea990c12dae 100644 (file)
@@ -11,7 +11,7 @@
   <div class="col">
     <p class='text-muted mb-0'>
       <%= link_to contact.display_name, user_path(contact) %>
-      <% if @user.home_lon and @user.home_lat and contact.home_lon and contact.home_lat %>
+      <% if @user.home_location? and contact.home_location? %>
         <% distance = @user.distance(contact) %>
         <% if distance < 1 %>
           (<%= t ".m away", :count => (distance * 1000).round %>)
index d0344ce79bd61a7c773994328dcc915bf3cc8656..744661dfdbeb7bbd53a5ff812bfcf2a81b209030 100644 (file)
@@ -5,7 +5,7 @@
 <div class="row">
   <% if current_user and @user.id == current_user.id %>
     <div class="col-md order-md-last">
-      <% if @user.home_lat.nil? or @user.home_lon.nil? %>
+      <% if !@user.home_location? %>
         <div id="map" class="content_map border border-grey">
           <p class="m-3"><%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %></p>
         </div>
index 403d30742d982a45d1b08ba237621f2a1fa30581..238f4d43c8549a02e4e7a8f2fcbbe4d08f66e733 100644 (file)
@@ -1,9 +1,9 @@
-<div class="row diary-comment<%= " text-muted deleted" unless diary_comment.visible? %>">
+<div class="row diary-comment py-3<%= " text-muted bg-danger bg-opacity-10" unless diary_comment.visible? %>">
   <div class="col-auto">
     <%= user_thumbnail diary_comment.user %>
   </div>
   <div class="col">
-    <p class="text-muted comment-heading" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
+    <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
       <% if current_user and diary_comment.user.id != current_user.id %>
         | <%= report_link(t(".report"), diary_comment) %>
       <% end %>
index 37420cdf1dfa41bc58abbb37fdca786057d1c1a8..f69c7e552c3bf80f0adff79febae210093eb2a47 100644 (file)
@@ -1,4 +1,4 @@
-<div class='diary_post<%= " text-muted px-3 deleted" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
+<article class='diary_post border-top border-grey py-3<%= " text-muted px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
   <div class='mb-3'>
     <% if @user %>
       <h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
@@ -65,4 +65,4 @@
       <% end %>
     </ul>
   </nav>
-</div>
+</article>
index e07971089f620101ea75fc40e7d4d7f5c1d7f849..bfb1c1823dfa2c8a2cc567dfb975db7a413e2731 100644 (file)
@@ -5,13 +5,13 @@
 <fieldset>
   <legend><%= t ".location" -%></legend>
 
-  <%= tag.div "", :id => "map", :class => "border border-grey rounded", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
+  <%= tag.div "", :id => "map", :class => "border border-grey rounded mb-3", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
 
   <div class="row mb-3">
     <%= f.text_field :latitude, :wrapper_class => "col-sm-4", :id => "latitude" %>
     <%= f.text_field :longitude, :wrapper_class => "col-sm-4", :id => "longitude" %>
-    <div class="col-sm-4">
-      <label><a href="#" id="usemap"><%= t ".use_map_link" -%></a></label>
+    <div class="col-sm-4 align-self-end pt-2">
+      <button type="button" id="usemap" class="btn btn-outline-primary"><%= t ".use_map_link" -%></button>
     </div>
   </div>
 </fieldset>
index 8792074951ce6efd1d9ca64bec76ede8137162fe..5bfdfa17b3205dfd49648ace8b04d78ab388b81b 100644 (file)
@@ -12,8 +12,7 @@
 
 <%= render @entry %>
 
-<a id="comments"></a>
-<div class='comments'>
+<div id="comments" class="comments">
 <%= render :partial => "diary_comment", :collection => @comments %>
 </div>
 
index f806201eb8ff929eedc11585370ff904c42c3ecf..4f24f538d6889eb0ad6729713234c3175e743479 100644 (file)
@@ -1,4 +1,4 @@
 <% unless (banner = next_banner()).nil? %>
-<%= link_to (image_tag banner[:img], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
-<button type="button" class="btn-close position-absolute top-0 end-0 p-4" id="<%= banner_cookie(banner[:id]) %>" aria-label="<%= t("javascripts.close") %>"></button>
+<%= link_to (image_tag banner[:img], :srcset => banner[:srcset], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
+<button type="button" class="btn-close <%= "btn-close-white" if banner[:dark] %> position-absolute top-0 end-0 m-4" id="<%= banner_cookie(banner[:id]) %>" aria-label="<%= t("javascripts.close") %>"></button>
 <% end %>
index 6d983d30ea153454ed225068d3baa97f79cd5c66..377f961499cb7154f07a712701330ad867268cf3 100644 (file)
@@ -4,7 +4,7 @@
 
 <% content_for(:body_class) { "map-layout" } %>
 
-<% if current_user and !current_user.home_lon.nil? and !current_user.home_lat.nil? %>
+<% if current_user&.home_location? %>
   <% content_for :greeting do %>
     <%= link_to t("layouts.home"),
                 "#",
index 1a4445eae9edad0b4d6aedb110f3c7e9b84ee663..b2a1bc26868e82de84ee3cac44a0357c313a36b2 100644 (file)
@@ -1,8 +1,10 @@
 <tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" unless message_summary.message_read? %>">
-  <td class="inbox-sender"><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
-  <td class="inbox-subject"><%= link_to message_summary.title, message_path(message_summary) %></td>
-  <td class="inbox-sent"><%= l message_summary.sent_on, :format => :friendly %></td>
-  <td class="inbox-mark-unread"><%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary" %></td>
-  <td class="inbox-mark-read"><%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary" %></td>
-  <td class="inbox-destroy"><%= button_to t(".destroy_button"), message_path(message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger" %></td>
+  <td><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
+  <td><%= link_to message_summary.title, message_path(message_summary) %></td>
+  <td class="text-nowrap"><%= l message_summary.sent_on, :format => :friendly %></td>
+  <td class="text-nowrap d-flex justify-content-end gap-1">
+    <%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-unread", :hidden => !message_summary.message_read? } %>
+    <%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-read", :hidden => message_summary.message_read? } %>
+    <%= button_to t(".destroy_button"), message_path(message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+  </td>
 </tr>
index 4d1b361b1822dd8f2cf3d8ad0171a1ddca522c21..24caba5ab0a495d1b74d6255b5983602cb9ed3e8 100644 (file)
@@ -1,6 +1,8 @@
 <tr class="inbox-row">
-  <td class="inbox-sender"><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
-  <td class="inbox-subject"><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
-  <td class="inbox-sent"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
-  <td class="inbox-destroy"><%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger" %></td>
+  <td><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
+  <td><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
+  <td class="text-nowrap"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
+  <td class="text-nowrap d-flex justify-content-end gap-1">
+    <%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+  </td>
 </tr>
index 4f2925b149e386f86fa4e07c372c8ec5152797fd..54089c34a65ba6cea80c625b0ed7b362b0e7cdcd 100644 (file)
   <h4><%= render :partial => "message_count" %></h4>
 
 <% if current_user.messages.size > 0 %>
-  <table class="table table-sm">
+  <table class="table table-sm align-middle">
     <thead>
       <tr>
         <th><%= t ".from" %></th>
         <th><%= t ".subject" %></th>
         <th><%= t ".date" %></th>
-        <th></th>
-        <th></th>
       </tr>
     </thead>
     <tbody>
index 0099b573d816a0d289ca4e65cf17ee52bc400ad5..e246f9292ebb8afaf0161e306b55fb812176f379 100644 (file)
 <h4><%= t ".messages", :count => current_user.sent_messages.size %></h4>
 
 <% if current_user.sent_messages.size > 0 %>
-  <table class="table table-sm">
+  <table class="table table-sm align-middle">
     <thead>
       <tr>
         <th><%= t ".to" %></th>
         <th><%= t ".subject" %></th>
         <th><%= t ".date" %></th>
-        <th></th>
       </tr>
     </thead>
     <tbody>
index 9ade68121aab29d9e7bac8f9bdcde705c87ac81c..4761aac60d95d4cd5de4dfa4f1481f85248e5a7f 100644 (file)
@@ -2,36 +2,29 @@
   <h1><%= @message.title %></h1>
 <% end %>
 
-<% if current_user == @message.recipient %>
-  <div class='info-line clearfix'>
+<div class='mb-3 border-bottom border-grey py-1 d-flex gap-1 flex-wrap'>
+  <% if current_user == @message.recipient %>
     <%= user_thumbnail_tiny @message.sender %>
-    <%= link_to @message.sender.display_name, user_path(@message.sender) %></td>
-    <div class='right'>
-      <%= l @message.sent_on, :format => :friendly %>
-    </div>
-  </div>
+    <%= link_to @message.sender.display_name, user_path(@message.sender) %>
+  <% else %>
+    <%= user_thumbnail_tiny @message.recipient %>
+    <%= link_to @message.recipient.display_name, user_path(@message.recipient) %>
+  <% end %>
+  <span class="ms-auto">
+    <%= l @message.sent_on, :format => :friendly %>
+  </span>
+</div>
 
-  <div class="richtext text-break"><%= @message.body.to_html %></div>
+<div class="richtext text-break"><%= @message.body.to_html %></div>
 
-  <div>
+<div>
+  <% if current_user == @message.recipient %>
     <%= link_to t(".reply_button"), message_reply_path(@message), :class => "btn btn-primary" %>
     <%= link_to t(".unread_button"), message_mark_path(@message, :mark => "unread"), :method => "post", :class => "btn btn-primary" %>
     <%= link_to t(".destroy_button"), message_path(@message), :method => "delete", :class => "btn btn-danger" %>
     <%= link_to t(".back"), inbox_messages_path, :class => "btn btn-link" %>
-  </div>
-<% else %>
-  <div class='info-line clearfix'>
-    <%= user_thumbnail_tiny @message.recipient %>
-    <%= link_to @message.recipient.display_name, user_path(@message.recipient) %></td>
-    <div class='right'>
-      <%= l @message.sent_on, :format => :friendly %>
-    </div>
-  </div>
-
-  <div class="richtext text-break"><%= @message.body.to_html %></div>
-
-  <div>
+  <% else %>
     <%= link_to t(".destroy_button"), message_path(@message), :method => "delete", :class => "btn btn-danger" %>
     <%= link_to t(".back"), outbox_messages_path, :class => "btn btn-link" %>
-  </div>
-<% end %>
+  <% end %>
+</div>
index 5bf7426f2946c74a1ecc3a770b5a4363954eb13f..bf53832c8802b6709bd15348ce0ec30d3b0685f7 100644 (file)
 
   <fieldset>
     <legend><%= t ".home location" -%></legend>
-    <p id="home_message" class="text-muted"<% if current_user.home_lat and current_user.home_lon %> hidden<% end %>><%= t ".no home location" %></p>
+    <p id="home_message" class="text-muted m-0<% if current_user.home_location? %> invisible<% end %>"><%= t ".no home location" %></p>
     <div class="row">
       <%= f.text_field :home_lat, :wrapper_class => "col-sm-4", :id => "home_lat" %>
       <%= f.text_field :home_lon, :wrapper_class => "col-sm-4", :id => "home_lon" %>
+      <div class="col-sm-4 pt-2 align-self-end">
+        <button type="button" id="home_show" class="btn btn-outline-primary"<% unless current_user.home_location? %> hidden<% end %> disabled><%= t ".show" %></button>
+        <button type="button" id="home_delete" class="btn btn-outline-primary"<% unless current_user.home_location? %> hidden<% end %>><%= t ".delete" %></button>
+        <button type="button" id="home_undelete" class="btn btn-outline-primary" hidden><%= t ".undelete" %></button>
+      </div>
     </div>
     <div class="form-check">
-      <input class="form-check-input" type="checkbox" name="updatehome" value="1" <% unless current_user.home_lat and current_user.home_lon %> checked="checked" <% end %> id="updatehome" />
+      <input class="form-check-input" type="checkbox" name="updatehome" value="1" <% unless current_user.home_location? %> checked <% end %> id="updatehome" />
       <label class="form-check-label" for="updatehome"><%= t ".update home location on click" %></label>
     </div>
     <%= tag.div "", :id => "map", :class => "content_map set_location border border-grey rounded" %>
index 4dcc9ab0546188c5a3bbed7b0128dcca7d347bf1..81e33dddb87877070c5192f3b3f4b8bb97ca1ca0 100644 (file)
 
       <div class='text-muted'>
         <small>
-          <dl class="dl-inline">
-            <dt><%= t ".mapper since" %></dt>
-            <dd><%= l @user.created_at.to_date, :format => :long %></dd>
+          <dl class="list-inline">
+            <dt class="list-inline-item m-0"><%= t ".mapper since" %></dt>
+            <dd class="list-inline-item"><%= l @user.created_at.to_date, :format => :long %></dd>
             <% unless @user.terms_agreed %>
-              <dt><%= t ".ct status" %></dt>
-              <dd>
+              <dt class="list-inline-item m-0"><%= t ".ct status" %></dt>
+              <dd class="list-inline-item">
                 <% if @user.terms_seen? -%>
                   <%= t ".ct declined" %>
                 <% else -%>
       <% if current_user and current_user.administrator? -%>
         <div class='text-muted'>
           <small>
-            <dl class='dl-inline'>
-              <dt><%= t ".email address" %></dt>
-              <dd><%= @user.email %></dd>
+            <dl class="list-inline">
+              <dt class="list-inline-item m-0"><%= t ".email address" %></dt>
+              <dd class="list-inline-item"><%= @user.email %></dd>
               <% unless @user.creation_ip.nil? -%>
-                <dt><%= t ".created from" %></dt>
-                <dd><%= @user.creation_ip %></dd>
+                <dt class="list-inline-item m-0"><%= t ".created from" %></dt>
+                <dd class="list-inline-item"><%= @user.creation_ip %></dd>
               <% end -%>
-              <dt><%= t ".status" %></dt>
-              <dd><%= @user.status.capitalize %></dd>
-              <dt><%= t ".spam score" %></dt>
-              <dd><%= @user.spam_score %></dd>
+              <dt class="list-inline-item m-0"><%= t ".status" %></dt>
+              <dd class="list-inline-item"><%= @user.status.capitalize %></dd>
+              <dt class="list-inline-item m-0"><%= t ".spam score" %></dt>
+              <dd class="list-inline-item"><%= @user.spam_score %></dd>
             </dl>
           </small>
         </div>
index affe6b144a124f0d64c030ec9e7ed0dff8f55bc0..c2a4df07b2ae4440186053193d6acb59c20a6cef 100644 (file)
@@ -1,6 +1,10 @@
-sotm_2022:
-  id: sotm_2022
-  alt: State of the Map 2022
-  link: https://2022.stateofthemap.org/
-  img: banners/sotm_2022.png
-  enddate: 2022-aug-21
+donate_2023:
+  id: donate_2023
+  alt: OpenStreetMap Funding Drive 2023
+  link: https://supporting.openstreetmap.org/
+  img: banners/donate_2023_1.jpg
+  srcset:
+    - [banners/donate_2023_1.jpg, 1x]
+    - [banners/donate_2023_1@2x.jpg, 2x]
+  dark: true
+  enddate: 2023-dec-31
index 73eebb406c381245534a70db74fe3bced43ec0cf..1db4fa18da2bf218191616412ab5eeefa983c8b4 100644 (file)
@@ -6,20 +6,23 @@
 # Author: Danieldegroot2
 # Author: Firefishy
 # Author: Fwolff
+# Author: Hentie
 # Author: Joris Darlington Quarshie
 # Author: Naudefj
 # Author: Nroets
 ---
 af:
+  html:
+    dir: ltr
   time:
     formats:
       friendly: '%e %B %Y om %H:%M'
   helpers:
     file:
-      prompt: Lêer kies
+      prompt: Kies leer
     submit:
       diary_comment:
-        create: Stoor
+        create: Voeg opmerking by
       diary_entry:
         create: Publiseer
         update: Opdateer
@@ -105,6 +108,7 @@ af:
         language_code: Taal
       doorkeeper/application:
         name: Naam
+        confidential: Vertroulike aansoek
         scopes: Regte
       friend:
         user: Gebruiker
@@ -148,6 +152,11 @@ af:
         pass_crypt: Wagwoord
         pass_crypt_confirmation: Bevestig wagwoord
     help:
+      doorkeeper/application:
+        confidential: Die toepassing sal gebruik word as die klient se geheime vertroulik
+          gehou kan word (inheemse mobiele toepassings en enkelbladsy-toepassings
+          is nie vertroilik nie.
+        redirect_uri: Gebruik een reel per URI
       trace:
         tagstring: komma afgebaken
       user_block:
@@ -236,11 +245,25 @@ af:
       entry:
         comment: Kommentaar
         full: Volle nota
+  account:
+    deletions:
+      show:
+        title: Skrap my rekening
+        delete_account: Skrap my rekening
+        delete_introduction: 'U kan jou OpenStreetMap-rekening skrap deur die knoppie
+          hieronder te druk. Let sseblief op na die volgende besonderhede:'
+        delete_profile: Jou profielinligting sowel as jou avatar en tuisligging sal
+          geskrap word.
+        retain_caveats: Sommige inligting oor jou sal egter behou word op OpenStreetMap
+          behou word, selfs nadat jou rekening geskrap is.
+        retain_diary_entries: Jou dagboekinskrywings en dagboekopmerkings, indien
+          enige, sl behou word, maar versteek word,
   accounts:
     edit:
       title: Redigeer rekening
       my settings: My instellings
       current email address: Huidige e-posadres
+      external auth: Ekserne veriviering.
       public editing:
         heading: Openbare redigerings
         enabled: Geaktiveer. Nie anoniem nie en kan data redigeer.
index b16e1e0cef989cbd7ba3d83997e813fff10e4cc7..25fdb18d6c182be6b4af34327d26ba63157a824d 100644 (file)
@@ -202,9 +202,9 @@ bg:
     default: По подразбиране (в момента %{name})
     id:
       name: iD
-      description: iD (редактиране в браузър)
+      description: iD (редактиране в браузъра)
     remote:
-      name: Ð\94истанционно управление
+      name: Ð´истанционно управление
       description: Дистанционно управление (JOSM, Potlatch или Merkaartor)
   auth:
     providers:
@@ -560,7 +560,7 @@ bg:
           boat_rental: Наем на лодки
           brothel: Бордел
           bureau_de_change: Обменно бюро
-          bus_station: Ð\90вÑ\82обÑ\83Ñ\81на Ñ\81пиÑ\80ка
+          bus_station: Ð\90вÑ\82огаÑ\80а
           cafe: Кафене
           car_rental: Коли под наем
           car_sharing: Съвместно пътуване
@@ -1573,25 +1573,41 @@ bg:
         title: Други съображения
     help:
       title: Получаване на помощ
+      introduction: OpenStreetMap разполага с няколко ресурса за запознаване с проекта,
+        задаване и отговаряне на въпроси, както и за съвместно обсъждане и документиране
+        на теми, свързани с картографирането.
       welcome:
         url: /welcome
         title: Добре дошли в OpenStreetMap
+        description: Започнете с това кратко ръководство, обхващащо основите на OpenStreetMap.
       beginners_guide:
         title: Наръчник за начинаещи
+        description: Ръководство за начинаещи, поддържано от общността.
       help:
         title: Форум за поддръжка
+        description: Задайте въпрос или потърсете отговори в сайта за въпроси и отговори
+          на OpenStreetMap.
       mailing_lists:
         title: Пощенски списъци
+        description: Задайте въпрос или дискутирайте интересни теми в широк спектър
+          от тематични и регионални пощенски списъци.
+      community:
+        title: Форум на общността
+        description: Споделено място за разговори за OpenStreetMap.
       irc:
         title: IRC
+        description: Интерактивен чат на много различни езици и по много теми.
       switch2osm:
         title: switch2osm
+        description: Помощ за компании и организации, които преминават към карти и
+          други услуги, базирани на OpenStreetMap.
       welcomemat:
         title: За организации
         description: Вие сте от организация, която иска да работи с OpenStreetMap?
           Ще получите необходимата информация на началната страница.
       wiki:
         title: Уики на OpenStreetMap
+        description: Разгледайте уикито за подробна документация за OpenStreetMap.
     any_questions:
       title: Въпроси?
     sidebar:
@@ -1718,6 +1734,27 @@ bg:
         title: Нямате време да правите промени? Добавете бележка!
         para_1: Ако искате само да поправите нещо малко и нямате време да се регистрирате
           и да се научите да редактирате, можете да добавите бележка.
+    communities:
+      title: Общности
+      lede_text: Хора от цял свят допринасят за OpenStreetMap или я използват. Много
+        от тях участват индивидуално, а други са създали общности. Тези групи са с
+        различна големина и представляват географски райони от малки градове до големи
+        региони с много държави. Те също така могат да бъдат официални или неофициални.
+      local_chapters:
+        title: Местни клонове
+        about_text: Местните клонове са групи на национално или регионално ниво, които
+          са предприели формалните стъпки за създаване на юридически лица с нестопанска
+          цел. Те представляват картата и картографите на района в отношенията с местните
+          власти, бизнеса и медиите. Те също така са създали връзка с фондацията OpenStreetMap
+          (OSMF), което им дава възможност да се свържат с юридическия орган, управляващ
+          авторските права.
+        list_text: 'Следните общности са официално създадени като местни клонове:'
+      other_groups:
+        title: Други групи
+        other_groups_html: Не е необходимо да се създава официална група в същата
+          степен като местните клонове. Всъщност много групи съществуват много успешно
+          като неформално събиране на хора или като общностна група. Всеки може да
+          ги създаде или да се присъедини към тях. Прочетете повече на %{communities_wiki_link}.
   traces:
     new:
       upload_trace: Качване на следи от GPS
@@ -1997,6 +2034,12 @@ bg:
       comment: Коментиране
     new:
       title: Нова бележка
+      intro: Забелязали сте грешка или нещо липсващо? Уведомете другите картографи,
+        за да можем да го поправим. Преместете маркера на правилната позиция и напишете
+        бележка, за да обясните проблема.
+      advice: Бележката ви е публична и може да бъде използвана за актуализиране на
+        картата, така че не въвеждайте лична информация или информация от карти или
+        списъци с указатели, защитени с авторски права.
       add: Добавяне на бележка
   javascripts:
     close: Затваряне
@@ -2026,7 +2069,7 @@ bg:
       tooltip_disabled: Легендата не е достъпна за този слой
     map:
       zoom:
-        in: Ð£Ð²ÐµÐ»Ð¸Ñ\87аване
+        in: Ð\9fÑ\80иближаване
         out: Отдалечаване
       locate:
         title: Моето местоположение
@@ -2049,7 +2092,7 @@ bg:
       createnote_disabled_tooltip: Увеличете за добавяне на бележка
       map_notes_zoom_in_tooltip: Увеличете за преглед на бележките
       map_data_zoom_in_tooltip: Увеличете за подробности
-      queryfeature_tooltip: Търсене на особености
+      queryfeature_tooltip: Търсене на обекти
       queryfeature_disabled_tooltip: Увеличете за търсене на обекти
     changesets:
       show:
index 1974366eab46b0083d352da430ddfd351e9377d4..19dc32de18450c4cb136d592e83f921161c44504 100644 (file)
@@ -43,6 +43,7 @@ cy:
     errors:
       messages:
         invalid_email_address: nid yw'n ymddangos ei fod yn gyfeiriad ebost dilys
+        email_address_not_routable: nid yw'n cyrchadwy
     models:
       acl: Rhestr Rheoli Mynediad
       changeset: Grŵp newid
@@ -122,6 +123,7 @@ cy:
         category: Dewiswch reswm dros eich adroddiad
       user:
         email: E-bost
+        email_confirmation: Cadarnhau E-bost
         new_email: Cyfeiriad e-bost newydd
         active: Gweithredol
         display_name: Enw defnyddiwr
@@ -452,6 +454,7 @@ cy:
       nearby mapper: Mapiwr gerllaw
       friend: Ffrind
     show:
+      title: Fy Nashfwrdd
       edit_your_profile: Golygu eich proffil
       my friends: Fy ffrindiau
       no friends: Nid ydych wedi ychwanegu unrhyw ffrindiau eto.
@@ -510,9 +513,11 @@ cy:
       edit_link: Golygu'r cofnod hwn
       hide_link: Cuddio'r cofnod hwn
       confirm: Cadarnhau
+      report: Adrodd y cofnod hwn
     diary_comment:
       comment_from_html: Sylwadau gan %{link_user} ar %{comment_created_at}
       hide_link: Cuddio'r sylw hwn
+      unhide_link: Datguddio'r sylw hwn
       confirm: Cadarnhau
       report: Riportio'r sylw hwn
     location:
@@ -543,6 +548,8 @@ cy:
       title: Gwaharddedig
     internal_server_error:
       title: Gwall ap
+    not_found:
+      title: Heb ganfod ffeil
   friendships:
     make_friend:
       heading: Ychwanegu %{user} fel ffrind?
@@ -710,6 +717,7 @@ cy:
           hospital: Adeilad Ysbyty
           hotel: Adeilad Gwesty
           house: Tŷ
+          houseboat: Cwch preswyl
           hut: Cwt
           industrial: Adeilad Diwydiannol
           kindergarten: Adeilad Meithrinfa
@@ -720,11 +728,13 @@ cy:
           roof: To
           school: Adeilad Ysgol
           shed: Sied
+          stable: Stabl
           static_caravan: Carafan
           temple: Adeilad Teml
           terrace: Adeilad Teras
           train_station: Adeilad Gorsaf Drenau
           university: Adeilad Prifysgol
+          warehouse: Warws
           "yes": Adeilad
         club:
           sport: Clwb Chwaraeon
@@ -734,22 +744,30 @@ cy:
           blacksmith: Gof
           brewery: Bragdy
           carpenter: Saer
+          caterer: Arlwywr
+          confectionery: Melysion
+          dressmaker: Gwneuthurwr Ffrog
           electrician: Trydanydd
+          electronics_repair: Atgyweirio Electroneg
           gardener: Garddwr
           glaziery: Glysiwr
           handicraft: Gwaith Llaw
           hvac: Crefft HVAC
+          metal_construction: Adeiladwr Metel
           painter: Peintiwr
           photographer: Ffotograffydd
           plumber: Plymar
           roofer: Towr
           shoemaker: Crydd
           tailor: Teiliwr
+          winery: Gwindy
           "yes": Siop Grefft
         emergency:
+          access_point: Pwynt Mynediad
           ambulance_station: Gorsaf Ambiwlans
           assembly_point: Man Ymgynull
           defibrillator: Diffibriliwr
+          fire_extinguisher: Diffoddwr Tân
           landing_site: Man Glanio Argyfwng
           phone: Ffôn Argyfwng
           water_tank: Tanc Dŵr Argyfwng
@@ -794,18 +812,24 @@ cy:
           tertiary: Ffordd Trydyddol
           tertiary_link: Ffordd Trydyddol
           track: Trac
+          traffic_mirror: Drych Traffig
           traffic_signals: Goleuadau Traffig
+          trailhead: Pen Llwybr
           trunk: Cefnffordd
           trunk_link: Cefnffordd
+          turning_circle: Cylch Troi
           turning_loop: Lle Troi
           unclassified: Ffordd Diddosbarth
           "yes": Ffordd
         historic:
+          aircraft: Awyrennau Hanesyddol
           archaeological_site: Safle Archaeolegol
+          bomb_crater: Crater Bom Hanesyddol
           battlefield: Maes Brwydr
           boundary_stone: Maen Terfyn
           building: Adeilad Hanesyddol
           bunker: Byncar
+          cannon: Cannon Hanesyddol
           castle: Castell
           church: Eglwys
           city_gate: Gat y Ddinas
@@ -988,6 +1012,7 @@ cy:
           educational_institution: Sefydliad Addysgol
           employment_agency: Asiantaeth Cyflogi
           estate_agent: Gwerthwr Tai
+          financial: Swyddfa Gyllid
           government: Swyddfa Llywodraeth
           insurance: Swyddfa Yswiriant
           it: Swyddfa TG
@@ -1016,6 +1041,7 @@ cy:
           locality: Ardal
           municipality: Bwrdeistref
           neighbourhood: Cymdogaeth
+          plot: Plot
           postcode: Cod Post
           quarter: Maestref
           region: Rhanbarth
@@ -1232,6 +1258,9 @@ cy:
       resolve: Datrys
       ignore: Anwybyddu
       reopen: Ailagor
+    helper:
+      reportable_title:
+        note: 'Nodyn #%{note_id}'
   reports:
     new:
       title_html: Adrodd %{link}
@@ -1268,6 +1297,8 @@ cy:
     intro_text: Mae OpenStreetMap yn fap o'r byd, wedi'i greu gan bobl fel chi ac
       sydd ar gael i'w ddefnyddio am ddim a dan drwydded rydd.
     intro_2_create_account: Creu cyfrif defnyddiwr
+    partners_ucl: UCL
+    partners_fastly: Fastly
     partners_bytemark: Bytemark Hosting
     partners_partners: partneriaid
     tou: Telerau Gwasanaeth
@@ -1368,6 +1399,7 @@ cy:
       to: I
       subject: Pwnc
       date: Dyddiad
+      people_mapping_nearby: pobl yn mapio gerllaw
     show:
       title: Darllen neges
       reply_button: Ateb
@@ -1396,6 +1428,8 @@ cy:
   preferences:
     show:
       title: Dewisiadau
+      preferred_editor: Hoff Olygydd
+      preferred_languages: Ieithoedd
       edit_preferences: Dewisiadau Golygu
     edit:
       title: Dewisiadau Golygu
@@ -1505,7 +1539,9 @@ cy:
       legal_babble:
         title_html: Hawlfraint a Thrwydded
         introduction_1_open_data: data agored
+        introduction_2_legal_code: cod cyfreithiol
         credit_title_html: Sut i gydnabod OpenStreetMap
+        credit_4_1_this_copyright_page: y dudalen hawlfraint hon
         attribution_example:
           title: Enghraifft o gydnabyddiaeth
         more_title_html: Darganfod rhagor
@@ -1580,6 +1616,7 @@ cy:
           title: Ymunwch â'r gymuned
       other_concerns:
         title: Gofidion eraill
+        copyright: tudalen hawlfraint
     help:
       title: Cael Cymorth
       welcome:
@@ -1701,6 +1738,7 @@ cy:
       start_mapping: Dechrau Mapio
       add_a_note:
         title: Dim amser i olygu? Ychwanegwch nodyn!
+        the_map: map
     communities:
       title: Cymunedau
       other_groups:
@@ -1798,6 +1836,10 @@ cy:
       delete: Dileu
       client_id: ID Cleient
       client_secret: Cyfrinach Cleient
+  oauth2_authorizations:
+    new:
+      authorize: Awdurdodi
+      deny: Gwrthod
   users:
     new:
       title: Cofrestru
@@ -1898,6 +1940,7 @@ cy:
   notes:
     index:
       id: Id
+      description: Disgrifiad
       created_at: Crëwyd am
       last_changed: Newidiwyd ddiwethaf
     show:
@@ -1969,15 +2012,34 @@ cy:
         unhide_comment: datguddio
     directions:
       engines:
+        fossgis_osrm_bike: Beic (OSRM)
+        fossgis_osrm_car: Car (OSRM)
+        fossgis_osrm_foot: Troed (OSRM)
+        graphhopper_bicycle: Beic (GraphHopper)
+        graphhopper_car: Car (GraphHopper)
+        graphhopper_foot: Troed (GraphHopper)
         fossgis_valhalla_bicycle: Beic (Valhalla)
         fossgis_valhalla_car: Car (Valhalla)
+        fossgis_valhalla_foot: Troed (Valhalla)
+      distance_m: '%{distance}m'
+      distance_km: '%{distance}km'
       instructions:
         exit_counts:
           first: 1af
           second: 2il
           third: 3ydd
+          fourth: 4ydd
+          fifth: 5ed
+          sixth: 6fed
+          seventh: 7fed
+          eighth: 8fed
+          ninth: 9fed
+          tenth: 10fed
+      time: Amser
     query:
+      node: Nod
       way: Llwybr
+      relation: Perthynas
       nothing_found: Ni ddarganfuwyd nodweddion
       error: 'Gwall cysyltlu gyda %{server}: %{error}'
   redactions:
index c05b92d44e23df1de3861f522f9c64a7b6e98ffd..e14c5806ccfb3df5955041d517a2ec10244d5fe9 100644 (file)
@@ -1754,6 +1754,9 @@ en:
       home location: "Home Location"
       no home location: "You have not entered your home location."
       update home location on click: "Update home location when I click on the map?"
+      show: "Show"
+      delete: "Delete"
+      undelete: "Undo delete"
     update:
       success: Profile updated.
       failure: Couldn't update profile.
index 82403522c72a6c50dad35fe8d83ed5b61ed9fcf9..48167044fa94d1f7dfeef00344f29b1abe434936 100644 (file)
@@ -118,7 +118,7 @@ es:
         update: Actualizar
       redaction:
         create: Crear censura
-        update: Guardar redacción
+        update: Guardar censura
       trace:
         create: Subir
         update: Guardar cambios
@@ -161,7 +161,7 @@ es:
       tracetag: Etiqueta de la traza
       user: Usuario
       user_preference: Preferencia de usuario
-      user_token: Ficha de usuario
+      user_token: Token de usuario
       way: Vía
       way_node: Nodo de la vía
       way_tag: Etiqueta de la vía
@@ -171,11 +171,11 @@ es:
         url: URL de la aplicación principal (obligatorio)
         callback_url: URL de devolución de llamada
         support_url: URL de asistencia
-        allow_read_prefs: leer sus preferencias de usuario
-        allow_write_prefs: modificar sus preferencias de usuario
+        allow_read_prefs: leer tus preferencias de usuario
+        allow_write_prefs: modificar tus preferencias de usuario
         allow_write_diary: crear entradas de diario, comentarios y hacer amigos
         allow_write_api: modificar el mapa
-        allow_read_gpx: leer sus trazas de GPS privadas
+        allow_read_gpx: leer tus trazas de GPS privadas
         allow_write_gpx: cargar trazas de GPS
         allow_write_notes: modificar notas
       diary_comment:
@@ -189,7 +189,7 @@ es:
         language_code: Idioma
       doorkeeper/application:
         name: Nombre
-        redirect_uri: Redirigir URI
+        redirect_uri: Redirigir URIs
         confidential: ¿Solicitud confidencial?
         scopes: Permisos
       friend:
@@ -216,14 +216,14 @@ es:
         title: Título
         description: Descripción
       report:
-        category: Seleccione el motivo de su informe
-        details: Es necesario proporcionar más detalles sobre el problema.
+        category: Seleccione el motivo de tu denuncia
+        details: Es necesario proporcionar más detalles sobre el problema (requerido).
       user:
         auth_provider: Proveedor de autentificación
         auth_uid: UID de autentificación
         email: Correo electrónico
         email_confirmation: Confirmación de correo electrónico
-        new_email: Nuevo correo electrónico
+        new_email: Nueva dirección de correo electrónico
         active: Activo
         display_name: Nombre para mostrar
         description: Descripción del perfil
@@ -242,11 +242,11 @@ es:
       trace:
         tagstring: delimitado por comas
       user_block:
-        reason: El motivo por el que el usuario está siendo bloqueado. Manténgase
-          lo más tranquilo y razonable posible, dando tantos detalles como pueda sobre
-          la situación, recordando que el mensaje será visible públicamente. Tenga
-          en cuenta que no todos los usuarios comprenden la jerga de la comunidad,
-          así que intente utilizar términos simples.
+        reason: El motivo por el que el usuario está siendo bloqueado. Manténte lo
+          más tranquilo y razonable posible, dando tantos detalles como puedas sobre
+          la situación, recordando que el mensaje será visible públicamente. Ten en
+          cuenta que no todos los usuarios comprenden la jerga de la comunidad, así
+          que intenta utilizar términos simples.
         needs_view: ¿Tiene que iniciar sesión el usuario antes de que este bloqueo
           sea eliminado?
       user:
@@ -296,7 +296,7 @@ es:
       name: iD
       description: iD (editor en el navegador)
     remote:
-      name: Control Remoto
+      name: Control remoto
       description: Control remoto (JOSM, Potlatch o Merkaartor)
   auth:
     providers:
@@ -304,6 +304,7 @@ es:
       openid: OpenID
       google: Google
       facebook: Facebook
+      windowslive: Microsoft
       github: GitHub
       wikipedia: Wikipedia
   api:
@@ -320,8 +321,8 @@ es:
       rss:
         title: Notas de OpenStreetMap
         description_area: Una lista de notas, informadas, comentadas o cerradas en
-          su área [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
-        description_item: Un suministro RSS para la nota %{id}
+          tu área [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
+        description_item: Un suministro RSS para notas %{id}
         opened: nueva nota (cerca de %{place})
         commented: nuevo comentario (cerca de %{place})
         closed: nota cerrada (cerca de %{place})
@@ -336,49 +337,51 @@ es:
         warning: ¡Advertencia! El proceso de eliminación de la cuenta es definitivo
           y no puede ser revertido.
         delete_account: Eliminar cuenta
-        delete_introduction: 'Puede eliminar su cuenta de OpenStreetMap utilizando
-          el botón que aparece a continuación. Tenga en cuenta los siguientes detalles:'
-        delete_profile: Se eliminará la información de su perfil, incluido su avatar,
+        delete_introduction: 'Puedes eliminar tu cuenta de OpenStreetMap utilizando
+          el botón que aparece a continuación. Ten en cuenta los siguientes detalles:'
+        delete_profile: Se eliminará la información de tu perfil, incluido tu avatar,
           descripción y ubicación de inicio.
-        delete_display_name: Su nombre para mostrar será eliminado, y puede ser reutilizado
+        delete_display_name: Tu nombre para mostrar será eliminado, y podrá ser reutilizado
           por otras cuentas.
-        retain_caveats: 'Sin embargo, algunos datos sobre usted se conservarán en
-          OpenStreetMap, incluso después de que se elimine su cuenta:'
-        retain_edits: Sus ediciones en la base de datos de mapas, si las hay, se conservarán.
-        retain_traces: Sus trazas subidas, si las hay, se conservarán.
+        retain_caveats: 'Sin embargo, algunos datos sobre ti se conservarán en OpenStreetMap,
+          incluso después de que se elimine tu cuenta:'
+        retain_edits: Tus ediciones en la base de datos de mapas, si las hay, se conservarán.
+        retain_traces: Tus trazas subidas, si las hay, se conservarán.
         retain_diary_entries: Las entradas y los comentarios de tu diario, si los
           hay, se conservarán pero estarán ocultos.
         retain_notes: Las notas del mapa y los comentarios de las notas, si los hay,
           se conservarán pero estarán ocultos.
-        retain_changeset_discussions: Sus discusiones sobre el conjunto de cambios,
+        retain_changeset_discussions: Tus discusiones sobre conjuntos de cambios,
           si las hay, se conservarán.
-        retain_email: Su dirección de correo electrónico se conservará.
+        retain_email: Tu dirección de correo electrónico se conservará.
         confirm_delete: ¿Lo confirma?
         cancel: Cancelar
   accounts:
     edit:
       title: Editar cuenta
-      my settings: Mi configuración
-      current email address: Correo electrónico actual
-      external auth: Autenticación externa
+      my settings: Mis configuraciones
+      current email address: Dirección de correo electrónico actual
+      external auth: Autentificación externa
       openid:
+        link: https://wiki.openstreetmap.org/wiki/ES:OpenID
         link text: ¿Qué es esto?
       public editing:
         heading: Edición pública
-        enabled: Activadas. No es anónimo y puede editar datos.
+        enabled: Activadas. No es anónimo y puedes editar datos.
         enabled link: https://wiki.openstreetmap.org/wiki/ES:Ediciones_an%C3%B3nimas
         enabled link text: ¿Qué es esto?
-        disabled: Desactivadas y no puede editar datos; todas las ediciones anteriores
+        disabled: Desactivadas y no puedes editar datos; todas las ediciones anteriores
           son anónimas.
         disabled link text: ¿Por qué no puedo editar?
       contributor terms:
-        heading: Términos de colaborador
-        agreed: Ha aceptado los nuevos Términos de colaborador.
-        not yet agreed: Aún no ha aceptado los nuevos Términos de Colaborador.
-        review link text: Siga este enlace cuando le resulte conveniente para revisar
-          y aceptar los nuevos Términos de colaborador.
-        agreed_with_pd: También ha declarado que considera que sus ediciones son de
-          Dominio Público.
+        heading: Términos de Colaborador
+        agreed: Has aceptado los nuevos Términos de Colaborador.
+        not yet agreed: Aún no has aceptado los nuevos Términos de Colaborador.
+        review link text: Sigue este enlace cuando te resulte conveniente para revisar
+          y aceptar los nuevos Términos de Colaborador.
+        agreed_with_pd: También has declarado que consideras que tus ediciones son
+          de Dominio Público.
+        link: https://wiki.openstreetmap.org/wiki/ES:Licencia_Abierta_de_Base_de_Datos/T%C3%A9rminos_del_colaborador
         link text: ¿Qué es esto?
       save changes button: Guardar cambios
       delete_account: Eliminar cuenta...
@@ -391,6 +394,7 @@ es:
       only_public_can_edit: Desde el cambio de API 0.6, solo los usuarios públicos
         pueden editar los datos de los mapas.
       find_out_why: averiguar por qué
+      find_out_why_url: https://wiki.openstreetmap.org/wiki/ES:Ediciones_an%C3%B3nimas
       email_not_revealed: Tu dirección de correo electrónico no será revelada al hacerse
         pública.
       not_reversible: Esta acción no se puede revertir y todos los nuevos usuarios
@@ -398,7 +402,7 @@ es:
       make_edits_public_button: Hacer todas mis ediciones públicas
     update:
       success_confirm_needed: La información del usuario se ha actualizado correctamente.
-        Compruebe su correo electrónico para ver una nota sobre cómo confirmar su
+        Comprueba tu correo electrónico para ver un mensaje sobre cómo confirmar tu
         nueva dirección de correo electrónico.
       success: La información del usuario se ha actualizado correctamente.
     destroy:
@@ -437,12 +441,14 @@ es:
       relation: Relaciones (%{count})
       relation_paginated: Relaciones (%{x}-%{y} de %{count})
       comment: Comentarios (%{count})
+      hidden_comment_by_html: Comentario ocultado por %{user} %{time_ago}
+      comment_by_html: Comentario de %{user} %{time_ago}
       changesetxml: XML del conjunto de cambios
       osmchangexml: XML en formato osmChange
       feed:
         title: Conjunto de cambios %{id}
         title_comment: Conjunto de cambios %{id} - %{comment}
-      join_discussion: Inicie sesión para unirse a la discusión
+      join_discussion: Inicia sesión para unirte a la discusión
       discussion: Discusión
       still_open: El conjunto de cambios sigue abierto; la discusión se abrirá cuando
         se cierre el conjunto de cambios.
@@ -454,7 +460,7 @@ es:
       history_title_html: 'Historial de vía: %{name}'
       nodes: Nodos
       nodes_count:
-        one: 1 nodo
+        one: '%{count} nodo'
         other: '%{count} nodos'
       also_part_of_html:
         one: parte de la vía %{related_ways}
@@ -464,7 +470,7 @@ es:
       history_title_html: 'Historial de relación: %{name}'
       members: Miembros
       members_count:
-        one: 1 miembro
+        one: '%{count} miembro'
         other: '%{count} miembros'
     relation_member:
       entry_role_html: '%{type} %{name} como %{role}'
@@ -504,7 +510,7 @@ es:
         relation: relación
     start_rjs:
       feature_warning: Cargando %{num_features} elementos, lo que puede hacer que
-        su navegador se ralentice o que no responda. ¿Está seguro de que desea mostrar
+        tu navegador se ralentice o no responda. ¿Estás seguro de que deseas mostrar
         estos datos?
       load_data: Cargar datos
       loading: Cargando…
@@ -521,7 +527,7 @@ es:
       email_link: Correo electrónico %{email}
     query:
       title: Consultar elementos
-      introduction: Pulse en el mapa para encontrar elementos cercanos.
+      introduction: Haz clic en el mapa para encontrar elementos cercanos.
       nearby: Elementos cercanos
       enclosing: Elementos delimitantes
   changesets:
@@ -554,7 +560,7 @@ es:
       load_more: Cargar más
     timeout:
       sorry: Lo sentimos, la lista de conjuntos de cambios que solicitó tardó demasiado
-        en recuperarse.
+        en obtenerse.
   changeset_comments:
     comment:
       comment: 'Comentario nuevo sobre el conjunto de cambios #%{changeset_id} de
@@ -568,13 +574,13 @@ es:
       title_particular: 'Discusión del conjunto de cambios #%{changeset_id} de OpenStreetMap'
     timeout:
       sorry: Lo sentimos, la lista de comentarios del conjunto de cambios que solicitó
-        tardó demasiado en recuperarse.
+        tardó demasiado en obtenerse.
   dashboards:
     contact:
-      km away: '%{count} km de distancia'
-      m away: '%{count} m de distancia'
+      km away: '%{count} km. de distancia'
+      m away: '%{count} m. de distancia'
     popup:
-      your location: Su ubicación
+      your location: Tu ubicación
       nearby mapper: Mapeadores cercanos
       friend: Amigo
     show:
@@ -583,9 +589,9 @@ es:
         para ver los usuarios cercanos.'
       edit_your_profile: Edita tu perfil
       my friends: Mis amigos
-      no friends: No has añadido ningún amigo aún.
+      no friends: No has añadido amigos aún.
       nearby users: Otros usuarios cercanos
-      no nearby users: Todavía no hay usuarios que se hayan ubicado en su proximidad.
+      no nearby users: Todavía no hay usuarios que admitan mapear cerca.
       friends_changesets: conjuntos de cambios realizados por amigos
       friends_diaries: entradas de diarios de amigos
       nearby_changesets: conjuntos de cambios de los usuarios cercanos
@@ -611,7 +617,7 @@ es:
       newer_entries: Entradas más recientes
     edit:
       title: Editar entrada del diario
-      marker_text: Lugar de la entrada del diario
+      marker_text: Ubicación de la entrada del diario
     show:
       title: Diario de %{user} | %{title}
       user_title: Diario de %{user}
@@ -619,19 +625,19 @@ es:
       login_to_leave_a_comment_html: '%{login_link} para dejar un comentario'
       login: Iniciar sesión
     no_such_entry:
-      title: No existe esa entrada de diario
+      title: No existe esta entrada de diario
       heading: No hay ninguna entrada con el identificador %{id}
-      body: No hay ninguna entrada de diario o comentario con el identificador %{id}.
-        Revise su ortografía, o tal vez el enlace en el que hizo clic es incorrecto.
+      body: No hay alguna entrada de diario o comentario con el identificador %{id}.
+        Revisa la ortografía, o tal vez el enlace en el que hiciste clic es incorrecto.
     diary_entry:
       posted_by_html: Publicado por %{link_user} el %{created} en %{language_link}.
       updated_at_html: Última actualización en %{updated}.
       comment_link: Comentar esta entrada
       reply_link: Enviar un mensaje al autor
       comment_count:
-        zero: No hay comentarios
         one: '%{count} comentario'
         other: '%{count} comentarios'
+      no_comments: Sin comentarios
       edit_link: Editar esta entrada
       hide_link: Ocultar esta entrada
       unhide_link: Mostrar esta entrada
@@ -672,15 +678,15 @@ es:
     flash:
       applications:
         create:
-          notice: Solicitud registrada.
+          notice: Aplicación registrada.
   errors:
     contact:
       contact_url: https://wiki.openstreetmap.org/wiki/ES:Canales_de_contacto
       contact_url_title: Varios canales de contacto explicados
       contact: contacto
       contact_the_community_html: Siéntete libre de %{contact_link} a la comunidad
-        de OpenStreetMap si ha encontrado un enlace roto o un error. Toma nota de
-        la URL exacta de su solicitud.
+        de OpenStreetMap si has encontrado un enlace roto o un error. Toma nota de
+        la URL exacta de tu solicitud.
     forbidden:
       title: Prohibido
       description: La operación que se solicitó al servidor de OpenStreetMap solo
@@ -697,21 +703,21 @@ es:
     make_friend:
       heading: ¿Añadir a %{user} como un amigo?
       button: Añadir como amigo
-      success: ¡%{name} ahora es su amigo!
+      success: ¡%{name} ahora es tu amigo!
       failed: Lo sentimos, no se ha podido añadir a %{name} como un amigo.
       already_a_friend: Ya eres amigo de %{name}.
-      limit_exceeded: Ha agregado a muchos amigos recientemente. Por favor espere
+      limit_exceeded: Has agregado a muchos amigos recientemente. Por favor espera
         un poco antes de intentar agregar más amigos.
     remove_friend:
-      heading: ¿Quitar a %{user} de los amigos?
-      button: Quitar amistad
-      success: Ha quitado a %{name} de sus amigos.
-      not_a_friend: '%{name} no es uno de sus amigos.'
+      heading: ¿Quitar a %{user} de tus amigos?
+      button: Quitar como amigo
+      success: Has quitado a %{name} de tus amigos.
+      not_a_friend: '%{name} no es uno de tus amigos.'
   geocoder:
     search:
       title:
         results_from_html: Resultados de %{results_link}
-        latlon: Fuentes internas
+        latlon: Interno
         osm_nominatim: Nominatim de OpenStreetMap
         osm_nominatim_reverse: Nominatim de OpenStreetMap
     search_osm_nominatim:
@@ -722,15 +728,15 @@ es:
           drag_lift: Telearrastre
           gondola: Telecabina
           magic_carpet: Ascensor de alfombra mágica
-          platter: Telesquí
-          pylon: Pilón
+          platter: Cable de remolque con platillo
+          pylon: Torre de tendido
           station: Estación de remonte
-          t-bar: Telesquí
+          t-bar: Ascensor de barra en T
           "yes": Vía aérea
         aeroway:
           aerodrome: Aeródromo
-          airstrip: Aeródromo
-          apron: Pista
+          airstrip: Pista de aterrizaje
+          apron: Plataforma
           gate: Puerta de aeropuerto
           hangar: Hangar
           helipad: Helipuerto
@@ -750,11 +756,11 @@ es:
           bank: Banco
           bar: Bar
           bbq: Parrilla
-          bench: Banco
+          bench: Banca
           bicycle_parking: Aparcamiento de bibicletas
           bicycle_rental: Alquiler de bicicletas
           bicycle_repair_station: Estación de reparación de bicicletas
-          biergarten: Terraza
+          biergarten: Patio cervecero
           blood_bank: Banco de sangre
           boat_rental: Alquiler de botes
           brothel: Burdel
@@ -766,7 +772,7 @@ es:
           car_wash: Autolavado
           casino: Casino
           charging_station: Estación de carga
-          childcare: Guardería
+          childcare: Puricultura
           cinema: Cine
           clinic: Clínica
           clock: Reloj
@@ -778,12 +784,12 @@ es:
           dentist: Dentista
           doctors: Consultorio médico
           drinking_water: Agua potable
-          driving_school: Autoescuela
+          driving_school: Escuela de automovilismo
           embassy: Embajada
           events_venue: Lugar de eventos
           fast_food: Comida rápida
-          ferry_terminal: Terminal de ferrys
-          fire_station: Parque de bomberos
+          ferry_terminal: Terminal de transbordador
+          fire_station: Estación de bomberos
           food_court: Zona de restaurantes
           fountain: Fuente
           fuel: Estación de servicio
@@ -794,7 +800,7 @@ es:
           hunting_stand: Apostadero de caza
           ice_cream: Heladería
           internet_cafe: Cibercafé
-          kindergarten: Escuela infantil/guardería
+          kindergarten: Guardería
           language_school: Escuela de idiomas
           library: Biblioteca
           loading_dock: Muelle de carga
@@ -807,17 +813,17 @@ es:
           music_school: Escuela de música
           nightclub: Club nocturno
           nursing_home: Residencia para la tercera edad
-          parking: Aparcamiento
+          parking: Estacionamiento
           parking_entrance: Entrada de estacionamiento
-          parking_space: Estacionamiento
+          parking_space: Plaza de estacionamiento
           payment_terminal: Terminal de pago
           pharmacy: Farmacia
-          place_of_worship: Templo
+          place_of_worship: Lugar de culto
           police: Policía
           post_box: Buzón
           post_office: Oficina de correos
           prison: Prisión
-          pub: Pub
+          pub: Taberna
           public_bath: Baño público
           public_bookcase: Biblioteca libre
           public_building: Edificio público
@@ -854,7 +860,7 @@ es:
           aboriginal_lands: Tierras aborígenes
           administrative: Frontera administrativa
           census: Límite de censo
-          national_park: Parque Nacional
+          national_park: Parque nacional
           political: Límite electoral
           protected_area: Área protegida
           "yes": Límite
@@ -872,10 +878,10 @@ es:
           bungalow: Bungaló
           cabin: Cabaña
           chapel: Capilla
-          church: Edificio de la iglesia
+          church: Edificio de iglesia
           civic: Edificio cívico
-          college: Edificio educativo superior no universitario
-          commercial: Edificio de oficinas
+          college: Edificio de institución educativa
+          commercial: Edificio de comercios
           construction: Edificio en construcción
           detached: Casa independiente
           dormitory: Residencia de estudiantes
@@ -887,12 +893,12 @@ es:
           greenhouse: Invernadero
           hangar: Hangar
           hospital: Edificio hospitalario
-          hotel: Edificio del hotel
+          hotel: Edificio de hotel
           house: Casa
           houseboat: Casa flotante
           hut: Choza
           industrial: Edificio industrial
-          kindergarten: Edificio de jardín de infantes
+          kindergarten: Edificio de guardería
           manufacture: Edificio de manufactura
           office: Edificio de oficinas
           public: Edificio público
@@ -904,13 +910,13 @@ es:
           semidetached_house: Casa adosada
           service: Edificio de servicios
           shed: Cobertizo
-          stable: Establo para caballos
+          stable: Establo
           static_caravan: Caravana
-          temple: Edificio del templo
+          temple: Edificio de templo
           terrace: Edificio terraza
-          train_station: Edificio de la estación de tren
-          university: Edificio universitario
-          warehouse: Almacén
+          train_station: Edificio de estación de tren
+          university: Edificio de universidad
+          warehouse: Depósito
           "yes": Edificio
         club:
           scout: Base del grupo de exploradores
@@ -934,7 +940,7 @@ es:
           painter: Pintor
           photographer: Fotógrafo
           plumber: Plomero/fontanero
-          roofer: Techador/Techista
+          roofer: Techador
           sawmill: Aserradero
           shoemaker: Zapatero
           stonemason: Albañil
@@ -956,21 +962,21 @@ es:
           suction_point: Punto de succión de emergencia
           water_tank: Tanque de agua de emergencia
         highway:
-          abandoned: Calle o carretera abandonada
-          bridleway: Camino prioritario para peatones y caballos
+          abandoned: Carretera abandonada
+          bridleway: Vía ecuestre
           bus_guideway: Canal guiado de autobuses
           bus_stop: Parada de autobuses
-          construction: Calle o carretera en construcción
+          construction: Carretera en construcción
           corridor: Corredor
           crossing: Cruce
-          cycleway: Bicisenda
+          cycleway: Ciclovía
           elevator: Ascensor
           emergency_access_point: Acceso de emergencia
-          emergency_bay: Apartadero de emergencia
+          emergency_bay: Bahía de emergencia
           footway: Sendero
           ford: Vado
           give_way: Señal de ceda el paso
-          living_street: Calle residencial
+          living_street: Calle viva
           milestone: Hito
           motorway: Autovía
           motorway_junction: Cruce de autovías
@@ -978,34 +984,34 @@ es:
           passing_place: Lugar de paso
           path: Camino
           pedestrian: Vía peatonal
-          platform: Plataforma
-          primary: Carretera primaria
-          primary_link: Carretera primaria
+          platform: Apeadero
+          primary: a primaria
+          primary_link: Enlace a vía primaria
           proposed: Vía en proyecto
           raceway: Circuito de carreras
-          residential: Calle
+          residential: Calle residencial
           rest_area: Área de descanso
-          road: Carretera
-          secondary: Carretera secundaria
-          secondary_link: Carretera secundaria
+          road: Vía (genérico)
+          secondary: a secundaria
+          secondary_link: Enlace a vía secundaria
           service: Vía de servicio
           services: Servicios carreteros
-          speed_camera: Radar
+          speed_camera: Cámara de tráfico
           steps: Escaleras
           stop: Señal de alto
           street_lamp: Farola
-          tertiary: Carretera terciaria
-          tertiary_link: Carretera terciaria
+          tertiary: a terciaria
+          tertiary_link: Enlace a vía terciaria
           track: Pista
           traffic_mirror: Espejo de tráfico
           traffic_signals: Señales de tráfico
           trailhead: Inicio del sendero
           trunk: Vía troncal
-          trunk_link: Enlace de vía rápida
-          turning_circle: Radio de giro
+          trunk_link: Enlace a vía troncal
+          turning_circle: Rotonda
           turning_loop: Bucle de giro
-          unclassified: Carretera sin clasificar
-          "yes": Camino
+          unclassified: Vía de menor nivel
+          "yes": Vía (genérico)
         historic:
           aircraft: Avión histórico
           archaeological_site: Yacimiento arqueológico
@@ -1031,27 +1037,27 @@ es:
           mine_shaft: Pozo minero
           monument: Monumento
           railway: Ferrocarril histórico
-          roman_road: Calzada romana
+          roman_road: Calle romana
           ruins: Ruinas
           rune_stone: Piedra rúnica
           stone: Piedra
           tomb: Tumba
           tower: Torre
           wayside_chapel: Capilla al borde del camino
-          wayside_cross: Crucero
-          wayside_shrine: Sepulcro
+          wayside_cross: Cruz al borde del camino
+          wayside_shrine: Santuario al borde de camino
           wreck: Pecio
           "yes": Sitio histórico
         junction:
           "yes": Intersección
         landuse:
-          allotments: Huertos
+          allotments: Parcelas
           aquaculture: Acuicultura
           basin: Cuenca
-          brownfield: Solar vacante
+          brownfield: Terreno baldío
           cemetery: Cementerio
           commercial: Área comercial
-          conservation: Espacio natural protegido
+          conservation: Área de conservación
           construction: Área de construcción
           farmland: Tierra de labranza
           farmyard: Corral
@@ -1065,7 +1071,7 @@ es:
           military: Zona militar
           mine: Mina
           orchard: Huerto
-          plant_nursery: Vivero de plantas
+          plant_nursery: Vivero
           quarry: Cantera
           railway: Ferrocarril
           recreation_ground: Área recreacional
@@ -1081,7 +1087,7 @@ es:
           adult_gaming_centre: Centro de juegos para adultos
           amusement_arcade: Sala recreativa de videojuegos
           bandstand: Quiosco de música
-          beach_resort: Complejo en la playa
+          beach_resort: Complejo turístico en playa
           bird_hide: Observatorio de aves
           bleachers: Gradas
           bowling_alley: Pista de bolos
@@ -1091,7 +1097,7 @@ es:
           firepit: Foso de fuego
           fishing: Área de pesca
           fitness_centre: Gimnasio (fitness)
-          fitness_station: Gimnasio
+          fitness_station: Estación de fitness
           garden: Jardín
           golf_course: Campo de golf
           horse_riding: Centro ecuestre
@@ -1102,10 +1108,10 @@ es:
           outdoor_seating: Asientos al aire libre
           park: Parque
           picnic_table: Mesa de picnic
-          pitch: Cancha deportiva
+          pitch: Cancha de deportes
           playground: Área de juegos
-          recreation_ground: Área recreativa
-          resort: Centro turístico
+          recreation_ground: Terreno recreativo
+          resort: Complejo turístico
           sauna: Sauna
           slipway: Grada
           sports_centre: Centro deportivo
@@ -1115,7 +1121,7 @@ es:
           water_park: Parque acuático
           "yes": Ocio
         man_made:
-          adit: Entrada a galería
+          adit: Entrada a mina
           advertising: Publicidad
           antenna: Antena
           avalanche_protection: Protección contra avalanchas
@@ -1134,7 +1140,7 @@ es:
           dolphin: Poste de amarre
           dyke: Dique
           embankment: Terraplén
-          flagpole: Asta de bandera
+          flagpole: Asta
           gasometer: Depósito de gas
           groyne: Espigón
           kiln: Horno
@@ -1143,12 +1149,12 @@ es:
           mast: Mástil
           mine: Mina
           mineshaft: Pozo minero
-          monitoring_station: Estación de monitorización
+          monitoring_station: Estación de monitoreo
           petroleum_well: Pozo petrolífero
           pier: Muelle
           pipeline: Tubería
           pumping_station: Estación de bombeo
-          reservoir_covered: Depósito cubierto
+          reservoir_covered: Embalse cubierto
           silo: Silo
           snow_cannon: Cañón de nieve
           snow_fence: Barrera anti avalanchas de nieve
@@ -1187,7 +1193,7 @@ es:
           coastline: Costa
           crater: Cráter
           dune: Duna
-          fell: Monte
+          fell: Braña
           fjord: Fiordo
           forest: Bosque
           geyser: Géiser
@@ -1200,7 +1206,7 @@ es:
           isthmus: Istmo
           land: Tierra
           marsh: Marisma
-          moor: Páramo
+          moor: Landa
           mud: Lodo
           peak: Pico
           peninsula: Península
@@ -1288,7 +1294,7 @@ es:
           disused: Ferrocarril en desuso
           funicular: Vía de funicular
           halt: Apeadero
-          junction: Encrucijada de vías ferroviarias
+          junction: Cruce de vías ferroviarias
           level_crossing: Paso a nivel
           light_rail: Metro ligero
           miniature: Ferrocarril en miniatura
@@ -1302,7 +1308,7 @@ es:
           station: Estación de trenes
           stop: Parada de tren
           subway: Metro
-          subway_entrance: Boca de metro
+          subway_entrance: Entrada de metro
           switch: Aguja de ferrocarril
           tram: Ruta de tranvía
           tram_stop: Parada de tranvía
@@ -1328,7 +1334,7 @@ es:
           butcher: Carnicería
           car: Concesionario
           car_parts: Repuestos de automóvil
-          car_repair: Taller mecánico
+          car_repair: Taller automotriz
           carpet: Tienda de alfombras
           charity: Tienda benéfica
           cheese: Tienda de quesos
@@ -1339,13 +1345,13 @@ es:
           computer: Tienda de informática
           confectionery: Confitería
           convenience: Pequeño supermercado
-          copyshop: Copistería
+          copyshop: Centro de copiado
           cosmetics: Tienda de cosméticos
           craft: Tienda de suministros de artesanía
           curtain: Tienda de cortinas
           dairy: Tienda de lácteos
           deli: Delicatessen
-          department_store: Grandes almacenes
+          department_store: Tienda por departamentos
           discount: Tienda de descuento
           doityourself: Tienda de bricolaje
           dry_cleaning: Tintorería
@@ -1410,13 +1416,13 @@ es:
           shoes: Zapatería
           sports: Tienda de deportes
           stationery: Papelería
-          storage_rental: Trasteros de alquiler
+          storage_rental: Alquiler de almacenamiento
           supermarket: Supermercado
           tailor: Sastre
           tattoo: Estudio de tatuajes
           tea: Tienda de té
           ticket: Tienda de Tickets
-          tobacco: Tabaquería. Estanco
+          tobacco: Tabaquería
           toys: Juguetería
           travel_agency: Agencia de viajes
           tyres: Tienda de neumáticos
@@ -1435,8 +1441,8 @@ es:
           bed_and_breakfast: Alojamiento y desayuno (B&B)
           cabin: Cabaña Turística
           camp_pitch: Lugar para acampar
-          camp_site: Campamento/camping
-          caravan_site: Camping para caravanas
+          camp_site: Área de acampada, camping
+          caravan_site: Sitio para caravanas
           chalet: Chalet
           gallery: Galería
           guest_house: Pensión
@@ -1452,7 +1458,7 @@ es:
           zoo: Zoológico
         tunnel:
           building_passage: Pasaje de edificio
-          culvert: Alcantarilla
+          culvert: Drenaje
           "yes": Túnel
         waterway:
           artificial: Vía fluvial artificial
@@ -1460,7 +1466,7 @@ es:
           canal: Canal
           dam: Presa
           derelict_canal: Canal abandonado
-          ditch: Acequia
+          ditch: Zanja
           dock: Muelle
           drain: Desagüe
           lock: Esclusa
@@ -1478,7 +1484,7 @@ es:
         level3: Límite regional
         level4: Límite de estado o provincia
         level5: Límite de región
-        level6: Límite de provincia
+        level6: Límite de condado
         level7: Límite municipal
         level8: Límite de ciudad
         level9: Límite de pueblo
@@ -1486,7 +1492,7 @@ es:
         level11: Límite vecinal
       types:
         cities: Ciudades
-        towns: Municipios
+        towns: Pueblos
         places: Lugares
     results:
       no_results: No se han encontrado resultados
@@ -1504,76 +1510,77 @@ es:
       user_not_found: El usuario no existe
       issues_not_found: No se encontraron incidencias de este tipo
       status: Estado
-      reports: Reportes
+      reports: Denuncias
       last_updated: Última actualización
-      link_to_reports: Ver informes
+      last_updated_time_ago_user_html: '%{time_ago} por %{user}'
+      link_to_reports: Ver denuncias
       reports_count:
-        one: 1 informe
-        other: '%{count} informes'
+        one: '%{count} reporte'
+        other: '%{count} reportes'
       reported_item: Elemento denunciado
       states:
         ignored: Ignorado
         open: Abierto
         resolved: Resuelto
     show:
-      title: '%{status} Informe n.º %{issue_id}'
+      title: '%{status} Incidencia n.º %{issue_id}'
       reports:
-        zero: Sin informes
-        one: 1 informe
-        other: '%{count} informes'
-      report_created_at: Reportado por primera vez el %{datetime}
+        one: '%{count} reporte'
+        other: '%{count} reportes'
+      no_reports: Sin reportes
+      report_created_at: Denunciado por primera vez el %{datetime}
       last_resolved_at: Resuelto por última vez el %{datetime}
       last_updated_at: Actualizado por última vez el %{datetime} por %{displayname}
       resolve: Resolver
       ignore: Ignorar
       reopen: Reabrir
-      reports_of_this_issue: Informes de este problema
-      read_reports: Leer informes
-      new_reports: Informes nuevos
+      reports_of_this_issue: Denuncias de esta incidencia
+      read_reports: Leer denuncias
+      new_reports: Denuncias nuevas
       other_issues_against_this_user: Otras incidencias en contra de este usuario
       no_other_issues: No hay otras incidencias en contra de este usuario.
-      comments_on_this_issue: Comentarios sobre este informe
+      comments_on_this_issue: Comentarios sobre esta incidencia
     resolve:
-      resolved: El estado de la incidencia se ha establecido en 'Resuelto'
+      resolved: El estado de la incidencia se ha establecido a 'Resuelto'
     ignore:
-      ignored: El estado de la incidencia se ha establecido en 'Ignorado'
+      ignored: El estado de la incidencia se ha establecido a 'Ignorado'
     reopen:
-      reopened: El estado de la incidencia se ha establecido en 'Abierto'.
+      reopened: El estado de la incidencia se ha establecido a 'Abierto'.
     comments:
       comment_from_html: Comentario de %{user_link} en %{comment_created_at}
-      reassign_param: ¿Quiere reasignar el informe?
+      reassign_param: ¿Quiere reasignar la incidencia?
     reports:
-      reported_by_html: Reportado como %{category} por %{user} en %{updated_at}
+      reported_by_html: Denunciado como %{category} por %{user} en %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, comentario #%{comment_id}'
         note: Nota n.º %{note_id}
   issue_comments:
     create:
-      comment_created: Su comentario ha sido creado con éxito
-      issue_reassigned: Su comentario fue creado y el tema fue reasignado
+      comment_created: Tu comentario ha sido creado con éxito
+      issue_reassigned: Tu comentario fue creado y la incidencia fue reasignada
   reports:
     new:
-      title_html: Reportar %{link}
-      missing_params: No se puede crear un informe nuevo
+      title_html: Denunciar %{link}
+      missing_params: No se puede crear una denuncia nueva
       disclaimer:
-        intro: 'Antes de enviar su denuncia a los moderadores del sitio, asegúrese
+        intro: 'Antes de enviar tu denuncia a los moderadores del sitio, asegúrate
           de que:'
         not_just_mistake: Está seguro de que el problema no es sólo un error
-        unable_to_fix: No puede solucionar el problema usted mismo o con la ayuda
-          de otros miembros de la comunidad.
-        resolve_with_user: Ya ha intentado resolver el problema con el usuario en
+        unable_to_fix: No puedes corregir el problema tu mismo o con la ayuda de otros
+          miembros de la comunidad.
+        resolve_with_user: Ya has intentado resolver el problema con el usuario en
           cuestión.
       categories:
         diary_entry:
-          spam_label: Esta entrada del diario es/contiene spam
-          offensive_label: Esta entrada del diario es obscena/ofensiva
-          threat_label: Esta entrada del diario contiene una amenaza
+          spam_label: Esta entrada de diario es/contiene spam
+          offensive_label: Esta entrada de diario es obscena/ofensiva
+          threat_label: Esta entrada de diario contiene una amenaza
           other_label: Otro
         diary_comment:
-          spam_label: Este comentario del diario es/contiene spam
-          offensive_label: Este comentario del diario es obsceno/ofensivo
-          threat_label: Este comentario del diario contiene una amenaza
+          spam_label: Este comentario de diario es/contiene spam
+          offensive_label: Este comentario de diario es obsceno/ofensivo
+          threat_label: Este comentario de diario contiene una amenaza
           other_label: Otro
         user:
           spam_label: Este perfil de usuario es/contiene spam
@@ -1587,16 +1594,19 @@ es:
           abusive_label: Esta nota es abusiva
           other_label: Otro
     create:
-      successful_report: Su denuncia ha sido registrada con éxito
+      successful_report: Tu denuncia ha sido registrada con éxito
       provide_details: Proporcione los detalles requeridos
   layouts:
+    project_name:
+      title: OpenStreetMap
+      h1: OpenStreetMap
     logo:
       alt_text: Logo de OpenStreetMap
     home: Inicio
     logout: Cerrar sesión
     log_in: Iniciar sesión
     sign_up: Registrarse
-    start_mapping: Comenzar a cartografiar
+    start_mapping: Comenzar a mapear
     edit: Editar
     history: Historial
     export: Exportar
@@ -1619,7 +1629,7 @@ es:
     partners_fastly: Fastly
     partners_bytemark: Bytemark Hosting
     partners_partners: socios
-    tou: Términos de uso
+    tou: Términos de Uso
     osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
       debido a trabajos de mantenimiento.
     osm_read_only: La base de datos de OpenStreetMap se encuentra en modo de sólo
@@ -1633,7 +1643,7 @@ es:
     community_blogs: Blogs de la comunidad
     community_blogs_title: Blogs de miembros de la comunidad de OpenStreetMap
     make_a_donation:
-      title: Apoye a OpenStreetMap con una donación monetaria
+      title: Apoya a OpenStreetMap con una donación monetaria
       text: Hacer una donación
     learn_more: Más información
     more: Más
@@ -1641,36 +1651,35 @@ es:
     diary_comment_notification:
       subject: '[OpenStreetMap] %{user} ha comentado en una entrada de diario'
       hi: 'Hola, %{to_user}:'
-      header: '%{from_user} ha comentado sobre en la entrada de diario con el asunto
-        %{subject}:'
-      header_html: '%{from_user} ha comentado la entrada de diario con el asunto %{subject}:'
-      footer: También puede leer el comentario en %{readurl} y puede comentar en %{commenturl}
-        o responder en %{replyurl}
-      footer_html: También puede leer el comentario en %{readurl} y puede comentar
+      header: '%{from_user} ha comentado en la entrada de diario con asunto %{subject}:'
+      header_html: '%{from_user} ha comentado la entrada de diario con asunto %{subject}:'
+      footer: También puedes leer el comentario en %{readurl} y puedes comentar en
+        %{commenturl} o responder en %{replyurl}
+      footer_html: También puedes leer el comentario en %{readurl} y puedes comentar
         en %{commenturl} o responder en %{replyurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Hola %{to_user},
-      header: '%{from_user} le ha enviado un mensaje a través de OpenStreetMap con
+      header: '%{from_user} te ha enviado un mensaje a través de OpenStreetMap con
         el asunto %{subject}:'
       header_html: '%{from_user} te ha enviado un mensaje a través de OpenStreetMap
-        con el asunto %{subject}:'
-      footer: También puede leer el mensaje en %{readurl} y enviar un mensaje al autor
+        con asunto %{subject}:'
+      footer: También puedes leer el mensaje en %{readurl} y enviar un mensaje al
+        autor en %{replyurl}
+      footer_html: También puedes leer el mensaje en %{readurl} y puede responder
         en %{replyurl}
-      footer_html: También puede leer el mensaje en %{readurl} y puede responder en
-        %{replyurl}
     friendship_notification:
       hi: Hola %{to_user},
-      subject: '[OpenStreetMap] %{user} le ha añadido como amigo'
-      had_added_you: '%{user} le ha añadido como amigo en OpenStreetMap'
-      see_their_profile: Puede ver su perfil en %{userurl}.
-      see_their_profile_html: Puede ver su perfil en %{userurl}.
-      befriend_them: También puede añadirle como amigo en %{befriendurl}.
-      befriend_them_html: También puede añadirle como amigo en %{befriendurl}.
+      subject: '[OpenStreetMap] %{user} te ha añadido como amigo'
+      had_added_you: '%{user} te ha añadido como amigo en OpenStreetMap'
+      see_their_profile: Puedes ver tu perfil en %{userurl}.
+      see_their_profile_html: Puedes ver su perfil en %{userurl}.
+      befriend_them: También puedes añadirlo como amigo en %{befriendurl}.
+      befriend_them_html: También puedes añadirlo como amigo en %{befriendurl}.
     gpx_description:
-      description_with_tags_html: 'Parece que el archivo GPX %{trace_name} con la
+      description_with_tags_html: 'Parece que tu archivo GPX %{trace_name} con la
         descripción %{trace_description} y las etiquetas siguientes: %{tags}'
-      description_with_no_tags_html: Parece que el archivo GPX %{trace_name} con la
+      description_with_no_tags_html: Parece que tu archivo GPX %{trace_name} con la
         descripción %{trace_description} sin etiquetas
     gpx_failure:
       hi: Hola %{to_user},
@@ -1685,102 +1694,102 @@ es:
         other: se cargaron correctamente, con %{trace_points} de %{count} puntos posibles.
       subject: '[OpenStreetMap] Éxito al importar GPX'
     signup_confirm:
-      subject: '[OpenStreetMap] OpenStreetMap le da la bienvenida'
+      subject: '[OpenStreetMap] OpenStreetMap te da la bienvenida'
       greeting: ¡Hola!
       created: Alguien (probablemente tú) acaba de crear una cuenta en %{site_url}.
       confirm: 'Antes de hacer cualquier otra cosa, debemos confirmar que esta solicitud
-        proviene de usted, por lo que si así fue, haga clic en el enlace a continuación
-        para confirmar su cuenta:'
-      welcome: Después de confirmar su cuenta, nosotros le proporcionaremos alguna
-        información adicional para ayudarle a empezar.
+        proviene de ti, por lo que si así fue, haz clic en el enlace a continuación
+        para confirmar tu cuenta:'
+      welcome: Después de confirmar tu cuenta, nosotros te proporcionaremos alguna
+        información adicional para ayudarte a empezar.
     email_confirm:
-      subject: '[OpenStreetMap] Confirme su dirección de correo electrónico'
+      subject: '[OpenStreetMap] Confirma tu dirección de correo electrónico'
       greeting: Hola,
-      hopefully_you: Alguien (esperemos que usted) desea cambiar su dirección de correo
-        electrónico a través de %{server_url} a %{new_address}.
-      click_the_link: Si es usted, haga clic en el enlace de abajo para confirmar
-        el cambio.
+      hopefully_you: Alguien (esperemos que seas tu) desea cambiar tu dirección de
+        correo electrónico a través de %{server_url} a %{new_address}.
+      click_the_link: Si eres tú, haz clic en el enlace de abajo para confirmar el
+        cambio.
     lost_password:
       subject: '[OpenStreetMap] Petición para restablecer la contraseña'
       greeting: Hola,
-      hopefully_you: Alguien (posiblemente usted) ha solicitado que se restablezca
-        la contraseña en la cuenta de openstreetmap.org de esta dirección de correo
-        electrónico.
-      click_the_link: Si es usted, haga clic en el enlace a continuación para restablecer
-        su contraseña.
+      hopefully_you: Alguien (posiblemente tu) ha solicitado que se restablezca la
+        contraseña de la cuenta en openstreetmap.org de esta dirección de correo electrónico.
+      click_the_link: Si eres tú, haga clic en el enlace a continuación para restablecer
+        tu contraseña.
     note_comment_notification:
       anonymous: Un usuario anónimo
       greeting: Hola,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} ha comentado en una de sus notas'
+        subject_own: '[OpenStreetMap] %{commenter} ha comentado en una de tus notas'
         subject_other: '[OpenStreetMap] %{commenter} ha comentado en una nota que
-          le interesa'
-        your_note: '%{commenter} ha dejado un comentario en una de sus notas del mapa
+          te interesa'
+        your_note: '%{commenter} ha dejado un comentario en una de tus notas del mapa
           cerca de %{place}.'
-        your_note_html: '%{commenter} ha dejado un comentario en una de sus notas
+        your_note_html: '%{commenter} ha dejado un comentario en una de tus notas
           de mapa cerca de %{place}'
         commented_note: '%{commenter} ha dejado un comentario en una nota del mapa
-          que ha comentado. La nota está cerca de %{place}.'
+          que has comentado. La nota está cerca de %{place}.'
         commented_note_html: '%{commenter} ha dejado un comentario en una nota del
-          mapa que usted ha comentado. La nota está cerca de %{place}.'
+          mapa que has comentado. La nota está cerca de %{place}.'
       closed:
-        subject_own: '[OpenStreetMap] %{commenter} ha resuelto una de sus notas'
-        subject_other: '[OpenStreetMap] %{commenter} ha resuelto una nota que le interesa'
-        your_note: '%{commenter} ha resuelto una de sus notas del mapa cerca de %{place}.'
-        your_note_html: '%{commenter} ha resuelto una de sus notas del mapa cerca
+        subject_own: '[OpenStreetMap] %{commenter} ha resuelto una de tus notas'
+        subject_other: '[OpenStreetMap] %{commenter} ha resuelto una nota que te interesa'
+        your_note: '%{commenter} ha resuelto una de tus notas del mapa cerca de %{place}.'
+        your_note_html: '%{commenter} ha resuelto una de tus notas del mapa cerca
           de %{place}.'
-        commented_note: '%{commenter} ha resuelto una nota de mapa que ha comentado.
+        commented_note: '%{commenter} ha resuelto una nota de mapa que has comentado.
           La nota está cerca de %{place}.'
         commented_note_html: '%{commenter} ha resuelto una nota del mapa en la que
-          usted ha comentado. La nota está cerca de %{place}.'
+          tu ha comentado. La nota está cerca de %{place}.'
       reopened:
-        subject_own: '[OpenStreetMap] %{commenter} ha reactivado una de sus notas'
+        subject_own: '[OpenStreetMap] %{commenter} ha reactivado una de tus notas'
         subject_other: '[OpenStreetMap] %{commenter} ha reactivado una nota que te
           interesa'
-        your_note: '%{commenter} ha reactivado una de sus notas del mapa cerca de
+        your_note: '%{commenter} ha reactivado una de tus notas del mapa cerca de
           %{place}.'
-        your_note_html: '%{commenter} ha reactivado una de sus notas del mapa cerca
+        your_note_html: '%{commenter} ha reactivado una de tus notas del mapa cerca
           de %{place}.'
-        commented_note: '%{commenter} ha reactivado una nota de mapa que ha comentado.
+        commented_note: '%{commenter} ha reactivado una nota de mapa que has comentado.
           La nota está cerca de %{place}.'
         commented_note_html: '%{commenter} ha reactivado un nota del mapa en la que
-          usted ha comentado. La nota está cerca de %{place}.'
+          has comentado. La nota está cerca de %{place}.'
       details: Más detalles acerca de la nota pueden encontrarse en %{url}.
-      details_html: Puede encontrar más detalles acerca de la nota en %{url}.
+      details_html: Puedes encontrar más detalles acerca de la nota en %{url}.
     changeset_comment_notification:
       hi: Hola %{to_user},
       greeting: Hola,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} ha comentado uno de sus conjuntos
+        subject_own: '[OpenStreetMap] %{commenter} ha comentado uno de tus conjuntos
           de cambios'
         subject_other: '[OpenStreetMap] %{commenter} ha comentado un conjunto de cambios
-          que le interesa'
-        your_changeset: '%{commenter} dejó un comentario el %{time} en uno de sus
+          que te interesa'
+        your_changeset: '%{commenter} dejó un comentario el %{time} en uno de tus
           conjuntos de cambios'
         your_changeset_html: '%{commenter} dejó un comentario el %{time} en uno de
-          sus conjuntos de cambios'
+          tus conjuntos de cambios'
         commented_changeset: '%{commenter} dejó un comentario el %{time} en un conjunto
-          de cambios que está siguiendo, creado por %{changeset_author}'
+          de cambios que estás siguiendo, creado por %{changeset_author}'
         commented_changeset_html: '%{commenter} dejó un comentario el %{time} en un
-          conjunto de cambios que está siguiendo, creado por %{changeset_author}'
+          conjunto de cambios que estás siguiendo, creado por %{changeset_author}'
         partial_changeset_with_comment: con el comentario '%{changeset_comment}'
         partial_changeset_with_comment_html: con el comentario '%{changeset_comment}'
         partial_changeset_without_comment: sin comentarios
-      details: Puede encontrar más detalles sobre el conjunto de cambios en %{url}.
-      details_html: Puede encontrar más detalles sobre el conjunto de cambios en %{url}.
+      details: Puedes encontrar más detalles sobre el conjunto de cambios en %{url}.
+      details_html: Puedes encontrar más detalles sobre el conjunto de cambios en
+        %{url}.
       unsubscribe: Para cancelar la suscripción a las actualizaciones de este conjunto
-        de cambios, visite %{url} y haga clic en "Cancelar suscripción".
+        de cambios, visita %{url} y haz clic en "Cancelar suscripción".
       unsubscribe_html: Para darte de baja de las actualizaciones de este conjunto
-        de cambios, visita %{url} y haz clic en "darse de baja".
+        de cambios, visita %{url} y haz clic en "Cancelas subscripción".
   confirmations:
     confirm:
-      heading: Revise su correo electrónico!
-      introduction_1: Le hemos enviado un correo electrónico de confirmación.
-      introduction_2: Confirme su cuenta haciendo clic en el enlace del correo electrónico
-        y podrá comenzar a mapear.
-      press confirm button: Pulse botón de confirmación de abajo para activar su cuenta.
+      heading: ¡Revisa tu correo electrónico!
+      introduction_1: Te hemos enviado un correo electrónico de confirmación.
+      introduction_2: Confirma tu cuenta haciendo clic en el enlace del correo electrónico
+        y podrás comenzar a mapear.
+      press confirm button: Pulsa botón de confirmación de abajo para activar tu cuenta.
       button: Confirmar
-      success: ¡Cuenta confirmada, gracias por registrarse!
+      success: Cuenta confirmada, !gracias por registrarte!
       already active: Esta cuenta ya ha sido confirmada.
       unknown token: Ese código de confirmación ha caducado o no existe.
       resend_html: Si necesita que le reenviemos el mensaje de confirmación, %{reconfirm_link}.
@@ -1789,25 +1798,24 @@ es:
       failure: No se ha encontrado el usuario %{name}
     confirm_email:
       heading: Confirmar el cambio de dirección de correo electrónico
-      press confirm button: Pulse el botón de confirmación de debajo para confirmar
-        su nueva dirección de correo electrónico.
+      press confirm button: Pulsa el botón de confirmación de debajo para confirmar
+        tu nueva dirección de correo electrónico.
       button: Confirmar
-      success: Se confirmó el cambio de dirección de correo electrónico.
-      failure: Ya se ha confirmado una dirección de correo electrónico con esta credencial
-        de autenticación.
+      success: ¡Se confirmó el cambio de dirección de correo electrónico!
+      failure: Ya se ha confirmado una dirección de correo electrónico con este token.
       unknown_token: Ese código de confirmación ha caducado o no existe.
     resend_success_flash:
-      confirmation_sent: Hemos enviado una nueva nota a %{email} y tan pronto como
-        confirmes tu cuenta podrás obtener mapeo.
+      confirmation_sent: Hemos enviado un nuevo mensaje a %{email} y tan pronto como
+        confirmes tu cuenta podrás comenzar a mapear.
       whitelist: Si usas un sistema antispam que envía solicitudes de confirmación
         entonces por favor asegúrate de incluir en la lista blanca %{sender}, ya que
-        no podemos responder ninguna solicitud de confirmación.
+        no podemos responder solicitud de confirmación alguna.
   messages:
     inbox:
       title: Buzón de entrada
       my_inbox: Mi buzón
       my_outbox: Mi buzón de salida
-      messages: Tiene %{new_messages} y %{old_messages}
+      messages: Tienes %{new_messages} y %{old_messages}
       new_messages:
         one: '%{count} nuevo mensaje'
         other: '%{count} nuevos mensajes'
@@ -1817,8 +1825,8 @@ es:
       from: De
       subject: Asunto
       date: Fecha
-      no_messages_yet_html: Aún no tiene mensajes. ¿Por qué no ponerse en contacto
-        con algunos de los %{people_mapping_nearby_link}?
+      no_messages_yet_html: Aún no tienes mensajes. ¿Por qué no ponerte en contacto
+        con algunas de las %{people_mapping_nearby_link}?
       people_mapping_nearby: gente mapeando cerca
     message_summary:
       unread_button: Marcar como no leído
@@ -1831,12 +1839,12 @@ es:
       back_to_inbox: Regresar a la bandeja de entrada
     create:
       message_sent: Mensaje enviado
-      limit_exceeded: Ha enviado muchos mensajes recientemente. Espere un poco antes
+      limit_exceeded: Has enviado muchos mensajes recientemente. Espera un poco antes
         de intentar enviar más.
     no_such_message:
       title: Este mensaje no existe.
       heading: Este mensaje no existe.
-      body: Lo sentimos, no hay ningún mensaje con este identificador.
+      body: Lo sentimos, no hay mensaje alguno con este identificador.
     outbox:
       title: Bandeja de salida
       my_inbox: Mi Bandeja de entrada
@@ -1844,53 +1852,51 @@ es:
       messages:
         one: Tiene %{count} mensaje enviado
         other: Tiene %{count} mensajes enviados
-      to: A
+      to: Para
       subject: Asunto
       date: Fecha
-      no_sent_messages_html: Aún no tiene mensajes enviados. ¿Por qué no ponerse en
-        contacto con algunos de los %{people_mapping_nearby_link}?
-      people_mapping_nearby: gente mapeando cerca
+      no_sent_messages_html: Aún no tienes mensajes enviados. ¿Por qué no ponerte
+        en contacto con algunas de las %{people_mapping_nearby_link}?
+      people_mapping_nearby: personas mapeando cerca
     reply:
-      wrong_user: |-
-        Está conectado como `%{user}' pero el mensaje que quiere responder no se ha enviado a dicho usuario. Por favor, ingrese con el usuario correcto para responder.
-
-        Ha iniciado sesión como `%{user}' pero el mensaje que quiere responder no se envió a ese usuario. Inicie sesión con el usuario correcto para responder.
+      wrong_user: Estás conectado como `%{user}' pero el mensaje que quieres responder
+        no se ha enviado a dicho usuario. Por favor, inicia sesión con el usuario
+        correcto para responder.
     show:
       title: Leer mensaje
       reply_button: Responder
       unread_button: Marcar como no leído
       destroy_button: Eliminar
       back: Volver
-      wrong_user: |-
-        Está conectado como `%{user}' pero el mensaje que quiere leer no se ha enviado por o a dicho usuario. Por favor, ingrese con el usuario correcto para ver el mensaje.
-
-        Ha iniciado sesión como `%{user}' pero el mensaje que quiere leer no fue enviado por o a ese usuario. Inicie sesión con el usuario correcto para poder leerlo.
+      wrong_user: Estás conectado como `%{user}' pero el mensaje que quieres leer
+        no se ha enviado por o a dicho usuario. Por favor, inicia sesión con el usuario
+        correcto para leer el mensaje.
     sent_message_summary:
       destroy_button: Eliminar
     mark:
       as_read: Mensaje marcado como leído
       as_unread: Mensaje marcado como no leído
     destroy:
-      destroyed: Mensaje borrado
+      destroyed: Mensaje eliminado
   passwords:
     lost_password:
       title: Contraseña perdida
       heading: ¿Contraseña olvidada?
       email address: 'Dirección de correo electrónico:'
       new password button: Restablecer contraseña
-      help_text: Escriba el correo electrónico con el que se registró. Le enviaremos
-        un vínculo a esa dirección, que podrá utilizar para restablecer su contraseña.
-      notice email on way: Sentimos que la haya perdido :-( pero ya va de camino un
-        correo electrónico que le servirá para restablecer su contraseña enseguida.
+      help_text: Escribe el correo electrónico con el que se registró. Te enviaremos
+        un enlace a esa dirección, que podrás utilizar para restablecer su contraseña.
+      notice email on way: Sentimos que la hayas perdido :-( pero ya va de camino
+        un correo electrónico que te servirá para restablecer su contraseña enseguida.
       notice email cannot find: Lo sentimos, no se pudo encontrar esa dirección de
         correo electrónico.
     reset_password:
       title: Restablecer contraseña
       heading: Restablecer contraseña para %{user}
       reset: Restablecer contraseña
-      flash changed: Su contraseña ha sido cambiada.
-      flash token bad: No se ha encontrado este elemento, ¿Quizá debería comprobar
-        la URL?
+      flash changed: Tu contraseña ha sido cambiada.
+      flash token bad: No se ha encontrado este token, ¿Quizá deberías comprobar la
+        URL?
   preferences:
     show:
       title: Mis preferencias
@@ -1913,17 +1919,18 @@ es:
       image: Imagen
       gravatar:
         gravatar: Usa Gravatar
+        link: https://wiki.openstreetmap.org/wiki/ES:Gravatar
         what_is_gravatar: ¿Qué es Gravatar?
         disabled: Gravatar se ha deshabilitado.
-        enabled: Se ha habilitado la visualización de su Gravatar.
+        enabled: Se ha habilitado la visualización de tu Gravatar.
       new image: Añadir una imagen
       keep image: Mantener la imagen actual
       delete image: Eliminar la imagen actual
       replace image: Reemplazar la imagen actual
       image size hint: (las imágenes cuadradas de al menos 100x100 funcionan mejor)
-      home location: Lugar de origen
-      no home location: No ha introducido su lugar de origen.
-      update home location on click: ¿Actualizar su lugar de origen cuando pulses
+      home location: Ubicación de casa
+      no home location: No has introducido tu ubicación de casa.
+      update home location on click: ¿Actualizar tu lugar de origen cuando hagas clic
         sobre el mapa?
     update:
       success: Perfil actualizado.
@@ -1936,12 +1943,12 @@ es:
       password: 'Contraseña:'
       openid_html: '%{logo} OpenID:'
       remember: Recordarme
-      lost password link: ¿Ha perdido su contraseña?
+      lost password link: ¿Has perdido su contraseña?
       login_button: Iniciar sesión
-      register now: Regístrese ahora
-      with external: 'O bien, utilice un servicio de terceros para acceder:'
-      no account: ¿No está registrado?
-      auth failure: Lo sentimos. No pude iniciar sesión con esos datos.
+      register now: Registrarse ahora
+      with external: 'O bien, utiliza un servicio de terceros para acceder:'
+      no account: ¿No estás registrado?
+      auth failure: Lo sentimos. No puede iniciar sesión con esos datos.
       openid_logo_alt: Inicia sesión con una OpenID
       auth_providers:
         openid:
@@ -1951,11 +1958,11 @@ es:
           title: Iniciar sesión con Google
           alt: Iniciar sesión con una OpenID de Google
         facebook:
-          title: Inicia sesión con Facebook
-          alt: Inicia sesión con una cuenta de Facebook
+          title: Iniciar sesión con Facebook
+          alt: Iniciar sesión con una cuenta de Facebook
         windowslive:
-          title: Inicia sesión con Windows Live
-          alt: Iniciar sesión con una cuenta de Windows Live
+          title: Iniciar sesión con Microsoft
+          alt: Iniciar sesión con una cuenta Microsoft
         github:
           title: Iniciar sesión con GitHub
           alt: Iniciar sesión con una cuenta de GitHub
@@ -1973,13 +1980,14 @@ es:
       heading: Cerrar sesión de OpenStreetMap
       logout_button: Cerrar sesión
     suspended_flash:
-      suspended: Lo sentimos, su cuenta ha sido suspendida debido a actividad sospechosa.
-      contact_support_html: Póngase en contacto con %{support_link} si desea discutir
+      suspended: Lo sentimos, tu cuenta ha sido suspendida debido a actividad sospechosa.
+      contact_support_html: Ponte en contacto con %{support_link} si deseas discutir
         sobre esto.
       support: el servicio técnico
   shared:
     markdown_help:
       heading_html: Procesado con %{kramdown_link}
+      kramdown: kramdown
       headings: Títulos
       heading: Título
       subheading: Subtítulo
@@ -1998,32 +2006,51 @@ es:
   site:
     about:
       next: Siguiente
+      heading_html: Contribuidores %{copyright}OpenStreetMap %{br}
       used_by_html: '%{name} proporciona datos de mapas para miles de sitios web,
         aplicaciones móviles y dispositivos de hardware'
-      lede_text: OpenStreetMap lo crea una gran comunidad de colaboradores que aportan
+      lede_text: OpenStreetMap lo crea una gran comunidad de mapeadores que aportan
         y mantienen datos sobre caminos, senderos, cafeterías, estaciones de ferrocarril
         y muchas cosas más a lo largo de todo el mundo.
       local_knowledge_title: Conocimiento local
       local_knowledge_html: OpenStreetMap valora mucho el conocimiento local. Los
-        colaboradores utilizan imágenes aéreas, dispositivos GPS, mapas y otras fuentes
-        de datos libres para verificar que los datos de OSM sean precisos y estén
-        actualizados.
+        colaboradores utilizan imágenes aéreas, dispositivos GPS y otras fuentes de
+        datos libres para verificar que los datos de OSM sean precisos y estén actualizados.
       community_driven_title: Impulsado por la comunidad
+      community_driven_1_html: "La comunidad de OpenStreetMap es diversa, apasionada
+        y crece cada día. \nNuestros colaboradores incluyen mapeadores entusiastas,
+        profesionales de los SIG, ingenieros asegurando \nel funcionamiento de los
+        servidores de OSM, personal humanitario que mapean las zonas afectadas por
+        desastres, \ny muchos más. \nPara obtener más información sobre la comunidad,
+        mira el %{osm_blog_link}, \n%{user_diaries_link}, %{community_blogs_link}
+        y el sitio web de %{osm_foundation_link}."
       community_driven_osm_blog: Blog de OpenStreetMap
+      community_driven_user_diaries: diarios de usuario
       community_driven_community_blogs: blogs comunitarios
       community_driven_osm_foundation: OSM Foundation
       open_data_title: Datos abiertos
-      open_data_1_html: 'OpenStreetMap es %{open_data}: puede usarlo libremente para
-        cualquier propósito siempre que dé crédito a OpenStreetMap y a sus colaboradores.
-        Si lo altera o se basa en sus datos de alguna manera, solo puede distribuir
-        el resultado con la misma licencia. Consulte la %{copyright_license_link}
+      open_data_1_html: 'OpenStreetMap es %{open_data}: puedes usarlo libremente para
+        cualquier propósito siempre que des crédito a OpenStreetMap y a sus colaboradores.
+        Si lo alteras o te basa en sus datos de alguna manera, solo puedes distribuir
+        el resultado con la misma licencia. Consulta la %{copyright_license_link}
         para obtener más detalles.'
       open_data_open_data: datos abiertos
       open_data_copyright_license: Página de derechos de autor y licencia
       legal_title: Legal
+      legal_1_1_html: "Este sitio y muchos otros servicios relacionados son operados
+        formalmente por la \n%{openstreetmap_foundation_link} (OSMF)  \nen nombre
+        de la comunidad. El uso de todos los servicios operados por el OSMF está sujeto
+        a nuestors %{terms_of_use_link}, %{aup_link} y nuestra %{privacy_policy_link}."
       legal_1_1_openstreetmap_foundation: Fundación OpenStreetMap
+      legal_1_1_terms_of_use: Términos de Uso
       legal_1_1_aup: Normativas de uso aceptable
       legal_1_1_privacy_policy: Normativa de privacidad
+      legal_2_1_html: Sí tienes alguna pregunta sobre licencias, derechos de autor
+        u otras cuestiones legales, por favor %{contact_the_osmf_link}.
+      legal_2_1_contact_the_osmf: contacta la OSMF
+      legal_2_2_html: OpenStreetMap, el logotipo de la lupa y el estado del mapa son
+        %{registered_trademarks_link}.
+      legal_2_2_registered_trademarks: marcas registradas de la OSMF
       partners_title: Socios
     copyright:
       foreign:
@@ -2033,100 +2060,196 @@ es:
         english_link: el original en Inglés
       native:
         title: Acerca de esta página
-        html: Está viendo la versión en inglés de la página de derechos de autor.
-          Puede ir a la %{native_link} de esta página o puede dejar de leer acerca
+        html: Estás viendo la versión en inglés de la página de derechos de autor.
+          Puedes ir a la %{native_link} de esta página o puedes dejar de leer acerca
           de derechos de autor y %{mapping_link}.
         native_link: versión en español
-        mapping_link: comenzar a cartografiar
+        mapping_link: comenzar a mapear
       legal_babble:
         title_html: Derechos de autor y licencia
+        introduction_1_html: "OpenStreetMap%{registered_trademark_link} es %{open_data},
+          licenciada bajo los términos de \n%{odc_odbl_link} (ODbL) por la %{osm_foundation_link}"
         introduction_1_open_data: datos abiertos
         introduction_1_odc_odbl: Licencia de bases de datos abiertas de Open Data
           Commons
+        introduction_1_osm_foundation: Fundación OpenStreetMap
+        introduction_2_html: Eres libre de copiar, distribuir, transmitir y adaptar
+          nuestros datos libremente siempre y cuando des reconocimiento a OpenStreetMap
+          y sus colaboradores. Si modificas o te basas en nuestros datos, sólo podrás
+          distribuir el resultado bajo la misma licencia. El %{legal_code_link} completo
+          explica tus derechos y responsabilidades.
         introduction_2_legal_code: código legal
-        introduction_3_html: Nuestra documentación tiene la licencia %{creative_commons_link}
-          (CC BY-SA 2.0).
-        introduction_3_creative_commons: Creative Commons - Atribución - Compartir
-          Igual 2.0
+        introduction_3_html: Nuestra documentación está licenciada bajo los términos
+          de %{creative_commons_link} (CC BY-SA 2.0).
+        introduction_3_creative_commons: Creative Commons Atribución-CompartirIgual
+          2.0
+        introduction_3_creative_commons_url: https://creativecommons.org/licenses/by-sa/2.0/deed.es
         credit_title_html: Cómo dar reconocimiento a OpenStreetMap
-        credit_1_html: 'Cuando utilice datos de OpenStreetMap, deberá hacer las dos
+        credit_1_html: 'Cuando utilice datos de OpenStreetMap, deberás hacer las dos
           cosas siguientes:'
-        credit_2_1: Proporcione crédito a OpenStreetMap mostrando nuestro aviso de
+        credit_2_1: Proporciona crédito a OpenStreetMap mostrando nuestro aviso de
           derechos de autor.
-        credit_2_2: Especifique que los datos están disponibles bajo la Licencia de
+        credit_2_2: Especifica que los datos están disponibles bajo la Licencia de
           base de datos abierta.
+        credit_3_html: Para el aviso de derechos de autor, tenemos diferentes requisitos
+          sobre cómo se debe mostrar en función del uso que se haga de nuestros datos.
+          Por ejemplo, se aplican diferentes normas sobre cómo mostrar el aviso de
+          derechos de autor (copyright) dependiendo de si ha creado un mapa navegable,
+          un mapa impreso o una imagen estática. Encontrarás todos los detalles sobre
+          los requisitos en la %{attribution_guidelines_link}.
         credit_3_attribution_guidelines: Directrices de atribución
+        credit_4_1_html: |-
+          Para dejar claro que los datos están disponibles bajo la licencia Open
+          Database License, puedes enlazar hacia %{this_copyright_page_link}.
+          Alternativamente, y como requisito si estás distribuyendo OSM en forma de datos, puedes nombrar y enlazar directamente a la(s) licencia(s). En los medios donde los enlaces no son posibles (por ejemplo, obras impresas), te sugerimos que dirijas a tus lectores a openstreetmap.org (quizás ampliando 'OpenStreetMap' a esta dirección completa) y a opendatacommons.org.
+          En este ejemplo, el crédito aparece en la esquina del mapa.
+        credit_4_1_this_copyright_page: esta página de derechos de autor
         attribution_example:
-          alt: Ejemplo de como dar reconocimiento a OpenStreetMap en una página web
+          alt: Ejemplo de cómo dar reconocimiento a OpenStreetMap en una página web
           title: Ejemplo de atribución
-        more_title_html: Para saber más...
+        more_title_html: Para saber más
+        more_1_1_html: Lee más sobre el uso de nuestros datos y cómo acreditarnos
+          en el %{osmf_licence_page_link}.
+        more_1_1_osmf_licence_page: página de licencia de la OSMF
+        more_2_1_html: "Aunque OpenStreetMap es un sistema de datos abiertos, no podemos
+          proporcionar una \nAPI de mapas gratuita para terceros. \nMira nuestra %{api_usage_policy_link},
+          %{tile_usage_policy_link} y %{nominatim_usage_policy_link}."
         more_2_1_api_usage_policy: Normativa de uso de la API
+        more_2_1_tile_usage_policy: Política de uso de teselas
         more_2_1_nominatim_usage_policy: Normativa de uso de Nominatim
         contributors_title_html: Nuestros colaboradores
         contributors_intro_html: 'Nuestros colaboradores son miles de personas. Incluimos
           también datos con licencia abierta de organismos cartográficos nacionales
           y otras fuentes, entre ellas:'
+        contributors_at_credit_html: "%{austria}: Contiene datos de %{stadt_wien_link}
+          (en el apartado %{cc_by_link}), %{land_vorarlberg_link} \ny Land Tirol (en
+          el %{cc_by_at_with_amendments_link})."
         contributors_at_austria: Austria
+        contributors_at_stadt_wien: Ciudad de Viena
+        contributors_at_cc_by: CC BY
+        contributors_at_land_vorarlberg: El territorio de Vorarlberg
+        contributors_at_cc_by_at_with_amendments: CC BY-AT con modificaciones
+        contributors_au_credit_html: "%{australia}: Incorpora o desarrolla usando
+          Fronteras Administrativas &copy; %{geoscape_australia_link} \nlicenciadas
+          por la Mancomunidad de Australia bajo el %{cc_licence_link}."
         contributors_au_australia: Australia
+        contributors_au_geoscape_australia: Geoscape Australia
+        contributors_au_cc_licence: Licencia internacional Creative Commons Attribution
+          4.0 (CC BY 4.0)
+        contributors_au_cc_licence_url: https://creativecommons.org/licenses/by/4.0/deed.es
+        contributors_ca_credit_html: '%{canada}: Contiene datos de GeoBase&reg;, GeoGratis
+          (&copy; Departmento de recursos naturales de Canadá), CanVec (&copy; Departmento
+          de recursos naturales de Canadá) y StatCan (División Geográfica, Estadísticas
+          de Canadá).'
         contributors_ca_canada: Canadá
+        contributors_fi_credit_html: "%{finland}: Contiene datos de la \nBase de datos
+          topográficos del Estudio Nacional de Tierras de Finlandia \ny otros conjuntos
+          de datos, bajo el enlace %{nlsfi_license_link}."
         contributors_fi_finland: Finlandia
         contributors_fi_nlsfi_license: Licencia NLSFI
+        contributors_fr_credit_html: |-
+          %{france}: Contiene datos de la
+          Dirección General de Impuestos.
         contributors_fr_france: Francia
+        contributors_nl_credit_html: '%{netherlands}: Contiene &copy; y datos, 2007
+          (%{and_link})'
         contributors_nl_netherlands: Países Bajos
+        contributors_nz_credit_html: "%{new_zealand}: Contiene datos del %{linz_data_service_link}
+          \ny licenciados para su reutilización bajo %{cc_by_link}."
         contributors_nz_new_zealand: Nueva Zelanda
         contributors_nz_linz_data_service: Servicio de datos de LINZ
+        contributors_nz_cc_by: CC BY 4.0
+        contributors_nz_cc_by_url: https://creativecommons.org/licenses/by/4.0/deed.es
+        contributors_rs_credit_html: "%{serbia}: Contiene datos del %{rgz_link} y
+          %{open_data_portal} \n (información pública de Serbia), 2018."
+        contributors_rs_serbia: Serbia
+        contributors_rs_rgz: Autoridad geodética serbia
+        contributors_rs_open_data_portal: Portal Nacional de Datos Abiertos
+        contributors_si_credit_html: |-
+          %{slovenia}: Contiene datos de %{gu_link} y %{mkgp_link}
+          (información pública de Eslovenia).
         contributors_si_slovenia: Eslovenia
+        contributors_si_gu: Autoridad de Topografía y Cartografía
         contributors_si_mkgp: Ministerio de Agricultura, Silvicultura y Alimentación
+        contributors_es_credit_html: |-
+          %{spain}: Contiene datos del
+          Instituto Geográfico Nacional de España (%{ign_link}) y
+          Sistema Cartográfico Nacional (%{scne_link})
+          con licencia para su reutilización bajo %{cc_by_link}.
         contributors_es_spain: España
         contributors_es_ign: IGN
+        contributors_es_scne: SCNE
+        contributors_es_cc_by: CC BY 4.0
+        contributors_es_cc_by_url: https://creativecommons.org/licenses/by/4.0/deed.es
+        contributors_za_credit_html: '%{south_africa}: Contiene datos de %{ngi_link},
+          derechos de autor reservados por del Estado.'
         contributors_za_south_africa: Sudáfrica
+        contributors_za_ngi: 'Dirección General: Información Geoespacial Nacional'
+        contributors_gb_credit_html: |-
+          %{united_kingdom}: contiene datos de Ordnance Survey &copy; Crown copyright and database right
+          2010-2023.
         contributors_gb_united_kingdom: Reino Unido
+        contributors_2_html: Para obtener más detalles de estas y otras fuentes que
+          se han utilizado para ayudar a mejorar OpenStreetMap, consultq el %{contributors_page_link}
+          en el Wiki de OpenStreemMap.
+        contributors_2_contributors_page: Página de colaboradores
+        contributors_2_contributors_page_url: https://wiki.openstreetmap.org/wiki/ES:Colaboradores
         contributors_footer_2_html: La inclusión de datos en OpenStreetMap no implica
           que el proveedor de la información original apoya a OpenStreetMap, proporciona
           alguna garantía, o acepta cualquier responsabilidad.
         infringement_title_html: Violación de derechos de autor
-        infringement_1_html: Se le recuerda a los colaboradores de OSM que no deben
-          añadir información procedente de ninguna fuente con derechos de autor reservados
+        infringement_1_html: Se le recuerda a los colaboradores de OSM que no deben
+          añadir información procedente de alguna fuente con derechos de autor reservados
           (p. ej. Google Maps o mapas impresos) sin el consentimiento explícito de
           los poseedores de los derechos de autor.
+        infringement_2_1_html: |-
+          Si crees que material protegido por derechos de autor se ha agregado de manera inapropiada a la base de datos de OpenStreetMap o a este sitio, consulta nuestro %{takedown_procedure_link} o presenta tu queja directamente en nuestro
+          %{online_filing_page_link}.
+        infringement_2_1_takedown_procedure: procedimiento de eliminación
+        infringement_2_1_online_filing_page: página de presentación en línea
         trademarks_title: Marcas
+        trademarks_1_1_html: |-
+          OpenStreetMap, el logotipo de la lupa y State of the Map son marcas registradas de la Fundación
+          OpenStreetMap. Si tienes preguntas sobre el uso de las marcas, consulta nuestra
+          %{trademark_policy_link}.
         trademarks_1_1_trademark_policy: Normativa de marcas
     index:
-      js_1: Está usando un navegador que no soporta o tiene desactivado JavaScript
-      js_2: OpenStreetMap utiliza JavaScript para mostrar su mapa
+      js_1: Estás usando un navegador que no soporta o tiene desactivado JavaScript
+      js_2: OpenStreetMap utiliza JavaScript para mostrar su mapa deslizable.
       permalink: Enlace permanente
-      shortlink: Atajo
+      shortlink: Enlace corto
       createnote: Añadir una nota
       license:
-        copyright: Copyright OpenStreetMap y colaboradores, bajo una licencia abierta
-      remote_failed: 'Error de edición: Asegúrese de que JOSM o Merkaartor están cargados
-        y con la opción de control remoto activada'
+        copyright: Derechos de autor de OpenStreetMap y colaboradores, bajo una licencia
+          abierta
+      remote_failed: Error de edición - Asegúrate de que JOSM o Merkaartor están cargados
+        y con la opción de control remoto activada
     edit:
-      not_public: No ha configurado sus ediciones para que sean públicas.
-      not_public_description_html: No puede seguir editando el mapa a menos que lo
-        haga. Puede marcar sus ediciones como públicas desde su %{user_page}.
+      not_public: No has configurado tus ediciones para que sean públicas.
+      not_public_description_html: No puedes seguir editando el mapa a menos que lo
+        hagas. Puedes marcar tus ediciones como públicas desde tu %{user_page}.
       user_page_link: página de usuario
-      anon_edits_link_text: Descubra a que se debe
+      anon_edits_link_text: Descubre a qué se debe.
       id_not_configured: iD no ha sido configurado
-      no_iframe_support: Su navegador no soporta iframes HTML, que son necesarios
+      no_iframe_support: Tu navegador no soporta iframes HTML, que son necesarios
         para esta funcionalidad.
     export:
       title: Exportar
       area_to_export: Área a exportar
       manually_select: Seleccionar manualmente un área diferente
       format_to_export: Formato de exportación
-      osm_xml_data: Datos OpenStreetMap en formato XML
+      osm_xml_data: Datos de OpenStreetMap en formato XML
       map_image: Imagen de mapa (muestra la capa estándar)
       embeddable_html: HTML integrable
       licence: Licencia
-      licence_details_html: Los datos de OpenStreetMap está registrada por %{odbl_link}
+      licence_details_html: Los datos de OpenStreetMap están registrados bajo %{odbl_link}
         (ODbL).
-      odbl: Licencia de base de datos abierta de Open Data Commons
+      odbl: Licencia de Base de datos Abierta de Open Data Commons
       too_large:
-        advice: 'Si la exportación anterior falla, considere utilizar una de las fuentes
+        advice: 'Si la exportación anterior falla, considera utilizar una de las fuentes
           que se enumeran a continuación:'
         body: Esta área es demasiado grande para exportarla como datos XML de OpenStreetMap.
-          Acerque o seleccione un área más pequeña, o use una de las fuentes que se
+          Acerca o selecciona un área más pequeña, o usa una de las fuentes que se
           enumeran a continuación para descargas de datos masivas.
         planet:
           title: Planeta OSM
@@ -2146,9 +2269,9 @@ es:
       options: Opciones
       format: Formato
       scale: Escala
-      max: máx.
+      max: máximo
       image_size: Tamaño de la imagen
-      zoom: Zum
+      zoom: Acercar
       add_marker: Añadir un marcador al mapa
       latitude: 'Lat:'
       longitude: 'Lon:'
@@ -2160,34 +2283,42 @@ es:
       how_to_help:
         title: Cómo ayudar
         join_the_community:
-          title: Unirse a la comunidad
-          explanation_html: Si ha notado un problema con nuestros datos del mapa,
+          title: Unete a la comunidad
+          explanation_html: Si has notado un problema con nuestros datos del mapa,
             por ejemplo, falta un camino o su dirección, la mejor manera de proceder
             es unirse a la comunidad OpenStreetMap y agregar o corregir los datos
-            usted mismo.
+            tu mismo.
+        add_a_note:
+          instructions_1_html: |-
+            Simplemente haz clic en %{note_icon} o en el mismo icono en la visualización del mapa.
+            Esto agregará un marcador al mapa que puedes mover arrastrándolo. Agrega tu mensaje, luego haz clic en guardar, y otros mapeadores lo investigarán.
       other_concerns:
         title: Otras preocupaciones
-        copyright: página de derechos de copia
+        concerns_html: |-
+          Si tienes inquietudes sobre cómo se utilizan nuestros datos o sobre el contenido, consulta nuestro
+          %{copyright_link} para obtener más información legal, o comunícate con el %{working_group_link} correspondiente.
+        copyright: página de derechos de autor
+        working_group: grupo de trabajo OSMF
     help:
       title: Cómo obtener ayuda
       introduction: OpenStreetMap tiene varios recursos para aprender sobre el proyecto,
         preguntando y contestando preguntas, y colaborativamente discutir y documentar
-        temas de cartografía.
+        temas de mapeo.
       welcome:
         url: /welcome
-        title: Bienvenida a OpenStreetMap
-        description: Comience con esta guía rápida que cubre lo básico de OpenStreetMap.
+        title: Bienvenido a OpenStreetMap
+        description: Comienza con esta guía rápida que cubre lo básico de OpenStreetMap.
       beginners_guide:
-        url: https://wiki.openstreetmap.org/wiki/ES:Beginners%27_guide
+        url: https://wiki.openstreetmap.org/wiki/ES:Gu%C3%ADa_de_principiantes
         title: Guía para principiantes
         description: Guía para principiantes, mantenida por la comunidad.
       help:
         title: Foro de ayuda
-        description: Haga una pregunta o busque respuestas en el sitio de preguntas
+        description: Haz una pregunta o busca respuestas en el sitio de preguntas
           y respuestas de OpenStreetMap.
       mailing_lists:
         title: Listas de correo
-        description: Haga una pregunta o discuta asuntos interesantes en una amplia
+        description: Haz una pregunta o discute asuntos interesantes en una amplia
           gama de listas de correo regionales o temáticas.
       community:
         title: Foro de la Comunidad
@@ -2205,13 +2336,18 @@ es:
         description: ¿Con una organización que hace planes para OpenStreetMap? Encuentra
           lo que debes saber en nuestra Estera de Bienvenida.
       wiki:
-        url: https://wiki.openstreetmap.org/wiki/ES:Main_Page
+        url: https://wiki.openstreetmap.org/wiki/ES:Página_principal
         title: Wiki de OpenStreetMap
         description: Explora la wiki para obtener documentación detallada de OpenStreetMap.
     potlatch:
-      removed: El editor de OpenStreetMap predeterminado se establece como Potlatch.
+      removed: El editor de OpenStreetMap predeterminado está establecido como Potlatch.
         Dado que Adobe Flash Player se ha retirado, Potlatch ya no está disponible
         para su uso en un navegador web.
+      desktop_application_html: Todavía puedes usar Potlatch en %{download_link}.
+      download: descargando la aplicación de escritorio para Mac y Windows
+      id_editor_html: Alternativamente, puedes establecer tu editor predeterminado
+        a iD, el cual se ejecuta en tu navegador como hacía Potlatch anteriormente.
+        %{change_preferences_link}.
       change_preferences: Cambia tus preferencias aquí
     any_questions:
       title: ¿Alguna pregunta?
@@ -2220,7 +2356,7 @@ es:
         preguntas sobre él, así como debatir y documentar de forma conjunta sobre temas de mapeo.
         %{help_link}. ¿Con una organización que hace planes para OpenStreetMap? %{welcome_mat_link}.
       get_help_here: Obtén ayuda aquí
-      welcome_mat: Echa un vistazo a Welcome Mat
+      welcome_mat: Echa un vistazo a la estera de bienvenida
     sidebar:
       search_results: Resultados de la búsqueda
       close: Cerrar
@@ -2238,14 +2374,14 @@ es:
       table:
         entry:
           motorway: Autopista
-          main_road: Carretera principal
-          trunk: Carretera troncal
-          primary: Carretera primaria
-          secondary: Carretera secundaria
-          unclassified: Carretera sin clasificar
+          main_road: a principal
+          trunk: a troncal
+          primary: a primaria
+          secondary: a secundaria
+          unclassified: Vía de menos nivel
           track: Pista
           bridleway: Vía ecuestre
-          cycleway: Bicisenda
+          cycleway: Ciclovía
           cycleway_national: Ciclovía nacional
           cycleway_regional: Ciclovía regional
           cycleway_local: Ciclovía local
@@ -2254,7 +2390,7 @@ es:
           subway: Metro
           tram:
           - Metro ligero
-          - Tranvía
+          - tranvía
           cable:
           - Telecabina
           - Telesilla
@@ -2264,27 +2400,27 @@ es:
           apron:
           - Rampa aeroportuaria
           - terminal
-          admin: Límites administrativos
+          admin: Límite administrativos
           forest: Bosque
-          wood: Madera
+          wood: Bosque
           golf: Campo de golf
           park: Parque
           resident: Zona residencial
           common:
           - Común
           - pradera
-          - Jardín
+          - jardín
           retail: Zona de comercios
           industrial: Zona industrial
-          commercial: Zona de oficinas
-          heathland: Landa, brezal
+          commercial: Zona comercial
+          heathland: Brezal
           lake:
           - Lago
           - embalse
-          farm: Campiña
-          brownfield: Baldío
+          farm: Granja
+          brownfield: Sitio baldío
           cemetery: Cementerio
-          allotments: Huertos de ocio
+          allotments: Parcelas
           pitch: Campo de juego
           centre: Centro deportivo
           reserve: Reserva natural
@@ -2307,16 +2443,20 @@ es:
           toilets: Baños
     welcome:
       title: ¡Bienvenido!
-      introduction: Le damos la bienvenida a OpenStreetMap, el mapa libre y editable
-        del mundo. Ahora que se ha registrado, ha hecho lo necesario para empezar
-        a cartografiar. He aquí una guía rápida con las cosas más importantes que
-        necesita saber.
+      introduction: Te damos la bienvenida a OpenStreetMap, el mapa libre y editable
+        del mundo. Ahora que te has registrado, has hecho lo necesario para empezar
+        a mapear. He aquí una guía rápida con las cosas más importantes que necesita
+        saber.
       whats_on_the_map:
         title: Qué hay en el mapa
         on_the_map_html: |-
-          OpenStreetMap es un sitio para cartografiar objetos %{real_and_current}:
-          esto incluye millones de edificios, carreteras y otros datos de destinos. Es posible cartografiar cualquier rasgo del mundo real que le interese.
+          OpenStreetMap es un sitio para mapear objetos %{real_and_current}:
+          esto incluye millones de edificios, carreteras y otros datos de destinos. Es posible mapear cualquier rasgo del mundo real que le interese.
         real_and_current: reales y actuales
+        off_the_map_html: Lo que %{doesnt} incluye son datos de opinión como calificaciones,
+          elementos históricos o hipotéticas, ni datos provenientes de fuentes protegidas
+          por derechos de autor. A menos que tengas un permiso especial, no copies
+          mapas en línea o en papel.
         doesnt: "no"
       basic_terms:
         title: Términos básicos para mapear
@@ -2334,17 +2474,19 @@ es:
         way: vía
         tag: etiqueta
       rules:
-        title: Reglas
+        title: ¡Reglas!
         para_1_html: OpenStreetMap tiene pocas reglas, pero esperamos que todos los
           participantes colaboren y se comuniquen entre ellos. Si estás pensando en
           realizar otras actividades diferentes a la edición a mano, por favor, lee
           y sigue las instrucciones en %{imports_link} y %{automated_edits_link}.
         imports: Importaciones
+        imports_url: https://wiki.openstreetmap.org/wiki/ES:Importaci%C3%B3n/Directrices
         automated_edits: Ediciones automatizadas
-      start_mapping: Comenzar a cartografiar
+        automated_edits_url: https://wiki.openstreetmap.org/wiki/ES:C%C3%B3digo_de_conducta_de_ediciones_automatizadas
+      start_mapping: Comenzar a mapear
       add_a_note:
-        title: ¿No tiene tiempo para editar? ¡Añada una nota!
-        para_1: Si sólo desea corregir algo pequeño y no tiene tiempo para registrarse
+        title: ¿No tienes tiempo para editar? ¡Añade una nota!
+        para_1: Si sólo deseas corregir algo pequeño y no tienes tiempo para registrarse
           y aprender a editar, es fácil añadir una nota.
         para_2_html: |-
           Basta con ir a %{map_link} y pulsar en el icono de nota: %{note_icon}.
@@ -2359,17 +2501,23 @@ es:
         Estos grupos son de distintos tamaños y representan geografías que van desde pequeñas ciudades a grandes regiones multinacionales.
         También pueden ser formales o informales.
       local_chapters:
-        title: Delegaciones locales
+        title: Capítulos locales
         about_text: Las delegaciones locales son grupos nacionales o regionales que
           han dado el paso formal de constituirse como entidades jurídicas sin ánimo
           de lucro. Representan al mapa y a los cartógrafos de la zona ante la administración
           local, las empresas y los medios de comunicación. También se han afiliado
           a la OpenStreetMap Foundation (OSMF), lo que les proporciona un vínculo
           con el órgano de gobierno legal y de derechos de autor.
-        list_text: 'Estas comunidades se han constituido formalmente como delegaciones
-          locales:'
+        list_text: 'Estas comunidades se han constituido formalmente como Capítulos
+          Locales:'
       other_groups:
         title: Otros grupos
+        other_groups_html: |-
+          No hay necesidad de establecer formalmente un grupo en la misma medida que los Capítulos Locales.
+          De hecho, muchos grupos existen con mucho éxito como una reunión informal de personas o como un grupo
+          comunitario. Cualquiera puede crearlos o unirse a estos. Obten más información en %{communities_wiki_link}.
+        communities_wiki: Página wiki de comunidades
+        communities_wiki_url: https://wiki.openstreetmap.org/wiki/ES:Grupo_de_usuarios
   traces:
     visibility:
       private: Privado (solo compartido como anónimo, puntos no ordenados)
@@ -2386,21 +2534,22 @@ es:
       help_url: https://wiki.openstreetmap.org/wiki/ES:Subir
     create:
       upload_trace: Subir traza GPS
-      trace_uploaded: Su archivo GPX se ha cargado y está esperando su inserción en
-        la base de datos. Por lo general, esto sucederá en media hora y se le enviará
+      trace_uploaded: Tu archivo GPX se ha cargado y está esperando su inserción en
+        la base de datos. Por lo general, esto sucederá en media hora y se te enviará
         un correo electrónico al finalizar.
       upload_failed: Lo sentimos, no se ha podido subir el GPX. Un administrador ha
-        sido alertado del error. Inténtelo de nuevo.
+        sido alertado del error. Inténtalo de nuevo.
       traces_waiting:
-        one: Tiene %{count} traza esperando por subir. Considere esperar a que termine
+        one: Tienes %{count} traza esperando por subir. Considera esperar a que termine
           antes de cargar más, para no bloquear la cola para otros usuarios.
-        other: Tiene %{count} trazas esperando por subir. Considere esperar a que
+        other: Tienes %{count} trazas esperando por subir. Considera esperar a que
           terminen antes de cargar más, para no bloquear la cola para otros usuarios.
     edit:
       cancel: Cancelar
       title: Editando traza %{name}
       heading: Editando traza %{name}
       visibility_help: ¿Qué significa esto?
+      visibility_help_url: https://wiki.openstreetmap.org/wiki/ES:Visibilidad_de_trazas_GPS
     update:
       updated: Traza actualizada
     trace_optionals:
@@ -2425,7 +2574,7 @@ es:
       delete_trace: Eliminar esta traza
       trace_not_found: ¡No se ha encontrado la traza!
       visibility: 'Visibilidad:'
-      confirm_delete: ¿Quiere eliminar esta traza?
+      confirm_delete: ¿Quieres eliminar esta traza?
     trace_paging_nav:
       older: Trazas más antiguas
       newer: Trazas más recientes
@@ -2451,10 +2600,11 @@ es:
       description: Explorar las trazas GPS recién subidas
       tagged_with: etiquetado con %{tags}
       empty_title: Todavía no hay nada
-      empty_upload_html: '%{upload_link} o conozca más sobre el trazado GPS en la
-        %{wiki_link} correspondiente.'
-      upload_new: Cargue una traza nueva
+      empty_upload_html: '%{upload_link} o conoce más sobre el trazado GPS en la %{wiki_link}
+        correspondiente.'
+      upload_new: Carga una traza nueva
       wiki_page: página del wiki
+      wiki_page_url: https://wiki.openstreetmap.org/wiki/ES:Gu%C3%ADa_del_principiante_1.2
       upload_trace: Subir una traza
       all_traces: Todas las trazas
       my_traces: Mis trazas
@@ -2479,20 +2629,20 @@ es:
         other: Archivo GPX con %{count} puntos de %{user}
       description_without_count: Archivo GPX de %{user}
   application:
-    permission_denied: No tiene permisos para realizar esa acción
+    permission_denied: No tienes permisos para realizar esa acción
     require_cookies:
-      cookies_needed: Parece que tiene las cookies deshabilitadas. Habilite las cookies
-        en su navegador antes de continuar.
+      cookies_needed: Parece que tienes las cookies deshabilitadas. Habilita las cookies
+        en tu navegador antes de continuar.
     require_admin:
       not_an_admin: Necesitas ser un administrador para realizar esa acción.
     setup_user_auth:
-      blocked_zero_hour: Tiene un mensaje urgente en el sitio web de OpenStreetMap.
-        Debe leer el mensaje para poder guardar sus ediciones.
-      blocked: Su acceso a la API ha sido bloqueado. Inicie sesión en la interfaz
+      blocked_zero_hour: Tienes un mensaje urgente en el sitio web de OpenStreetMap.
+        Debes leer el mensaje para poder guardar tus ediciones.
+      blocked: Tu acceso a la API ha sido bloqueado. Inicia sesión en la interfaz
         web para obtener más información.
-      need_to_see_terms: Su acceso a la API está temporalmente suspendido. Inicie
-        sesión en la web para ver los Términos de colaborador. No es necesario aceptarlos,
-        pero debe conocerlos.
+      need_to_see_terms: Tu acceso a la API está temporalmente suspendido. Inicia
+        sesión en la web para ver los Términos de Colaborador. No es necesario aceptarlos,
+        pero debes conocerlos.
     settings_menu:
       account_settings: Configuración de la cuenta
       oauth1_settings: Otras configuraciones
@@ -2500,37 +2650,37 @@ es:
       oauth2_authorizations: Autorizaciones de OAuth 2
   oauth:
     authorize:
-      title: Autorizar el acceso a su cuenta
-      request_access_html: La aplicación %{app_name} solicita acceso a su cuenta,
-        %{user}. Compruebe si desea que la aplicación tenga las siguientes capacidades.
-        Puede elegir tantas o tan pocas como quiera.
+      title: Autorizar el acceso a tu cuenta
+      request_access_html: La aplicación %{app_name} solicita acceso a tu cuenta,
+        %{user}. Comprueba si deseas que la aplicación tenga las siguientes capacidades.
+        Puedes elegir tantas o tan pocas como quieras.
       allow_to: 'Permitir a la aplicación cliente:'
-      allow_read_prefs: leer sus preferencias de usuario.
-      allow_write_prefs: modificar sus preferencias de usuario.
+      allow_read_prefs: leer tus preferencias de usuario.
+      allow_write_prefs: modificar tus preferencias de usuario.
       allow_write_diary: crear entradas en el diario, comentarios y hacer amigos.
       allow_write_api: modificar el mapa.
-      allow_read_gpx: leer sus trazas GPS privadas.
+      allow_read_gpx: leer tus trazas GPS privadas.
       allow_write_gpx: subir trazas GPS.
       allow_write_notes: cambiar notas.
       grant_access: Otorgar acceso
     authorize_success:
       title: Solicitud de autorización permitida
-      allowed_html: Ha concedido acceso a su cuenta a la aplicación %{app_name}.
+      allowed_html: Has concedido acceso a tu cuenta a la aplicación %{app_name}.
       verification: El código de verificación es %{code}.
     authorize_failure:
       title: Falló la solicitud de autorización
-      denied: Ha denegado a la aplicación %{app_name} el acceso a su cuenta.
+      denied: Has denegado a la aplicación %{app_name} el acceso a tu cuenta.
       invalid: El token de autorización no es válido.
     revoke:
-      flash: Revocó el token para %{application}
+      flash: Revocaste el token para %{application}
     permissions:
-      missing: No ha permitido que la aplicación acceda a esta instalación.
+      missing: No has permitido que la aplicación acceda a esta instalación.
     scopes:
       read_prefs: Leer preferiencias de usuario
-      write_prefs: modificar sus preferencias de usuario.
+      write_prefs: modificar tus preferencias de usuario.
       write_diary: Crea entradas diarias, comentarios y haz amigos
       write_api: modificar el mapa.
-      read_gpx: Leer sus trazas de GPS privadas
+      read_gpx: Leer tus trazas de GPS privadas
       write_gpx: Subir trazas de GPS
       write_notes: Modifica notas
       read_email: Leer dirección de correo electrónico del usuario
@@ -2539,56 +2689,57 @@ es:
     new:
       title: Registrar una nueva aplicación
     edit:
-      title: Editar su aplicación
+      title: Editar tu aplicación
     show:
       title: Detalles de OAuth de %{app_name}
       key: 'Clave de Consumidor:'
-      secret: 'Secreto de Consumidor:'
-      url: 'URL de Token de Solicitud:'
-      access_url: 'URL de Token de Acceso:'
+      secret: 'Secreto de consumidor:'
+      url: 'URL de token de solicitud:'
+      access_url: 'URL de token de acceso:'
       authorize_url: 'URL de autorización:'
       support_notice: Soportamos HMAC-SHA1 (recomendado) y firmas RSA-SHA1.
       edit: Editar detalles
       delete: Eliminar cliente
-      confirm: ¿Está seguro?
+      confirm: ¿Estás seguro?
       requests: 'Solicitando los siguientes permisos del usuario:'
     index:
       title: Mis datos OAuth
       my_tokens: Mis aplicaciones autorizadas
-      list_tokens: 'Se han emitido los siguientes tokens para aplicaciones en su nombre:'
+      list_tokens: 'Se han emitido los siguientes tokens para aplicaciones en tu nombre:'
       application: Nombre de la aplicación
       issued_at: Emitido el
       revoke: ¡Revocar!
       my_apps: Mis aplicaciones cliente
-      no_apps_html: ¿Tiene una aplicación que le gustaría registrar para usar con
-        nosotros utilizando el estándar %{oauth}? Debe registrar su aplicación web
-        antes de que pueda hacer solicitudes OAuth a este servicio.
+      no_apps_html: ¿Tienes una aplicación que te gustaría registrar para usar con
+        nosotros utilizando el estándar %{oauth}? Debes registrar tu aplicación web
+        antes de que puedas hacer solicitudes OAuth a este servicio.
       oauth: OAuth
-      registered_apps: 'Tiene las siguientes aplicaciones cliente registradas:'
-      register_new: Registre su aplicación
+      registered_apps: 'Tienes las siguientes aplicaciones cliente registradas:'
+      register_new: Registra tu aplicación
     form:
       requests: 'Solicita los siguientes permisos del usuario:'
     not_found:
       sorry: Lo sentimos, ese %{type} no puede ser encontrado.
     create:
-      flash: Registrada la información exitosamente
+      flash: Información registrada exitosamente
     update:
       flash: Actualizada la información del cliente exitosamente
     destroy:
       flash: Destruido el registro de aplicación del cliente
   oauth2_applications:
     index:
-      title: Mis Aplicaciones de Cliente
-      no_applications_html: ¿Tiene una aplicación que le gustaría registrar para usar
-        con nosotros utilizando el estándar %{oauth2}? Debe registrar su aplicación
+      title: Mis aplicaciones de cliente
+      no_applications_html: ¿Tienes una aplicación que te gustaría registrar para
+        usar con nosotros utilizando el estándar %{oauth2}? Debes registrar tu aplicación
         antes de que pueda hacer solicitudes OAuth a este servicio.
-      new: Registre su aplicación
+      oauth_2: OAuth 2
+      new: Registra tu aplicación
       name: Nombre
       permissions: Permisos
     application:
       edit: Ediciones
       delete: Eliminar
-      confirm_delete: Ver esta aplicación
+      confirm_delete: ¿Eliminar esta aplicación?
     new:
       title: Registrar una nueva aplicación
     edit:
@@ -2599,7 +2750,7 @@ es:
       confirm_delete: ¿Eliminar esta aplicación?
       client_id: Identificador de cliente
       client_secret: Secreto del cliente
-      client_secret_warning: Asegúrese de guardar este secreto - no será accesible
+      client_secret_warning: Asegúrese de guardar este secreto - no estará disponible
         de nuevo
       permissions: 'Permisos:'
       redirect_uris: Redirigir URI
@@ -2608,68 +2759,76 @@ es:
   oauth2_authorizations:
     new:
       title: Se necesita autorización
-      introduction: ¿Autorizar a %{application} a acceder a su cuenta con los siguientes
+      introduction: ¿Autorizar a %{application} a acceder a tu cuenta con los siguientes
         permisos?
-      authorize: Autorizar →
+      authorize: Autorizar
       deny: Denegar
     error:
-      title: Se produjo un error.
+      title: Se produjo un error
     show:
       title: Sin código de autorización
   oauth2_authorized_applications:
     index:
       title: Mis aplicaciones autorizadas
       application: Solicitudes
-      permissions: 'Permisos:'
-      no_applications_html: Aún no ha autorizado ninguna aplicación %{oauth2}.
+      permissions: Permisos
+      no_applications_html: Aún no has autorizado aplicaciones a %{oauth2}.
     application:
       revoke: Revocar el acceso
       confirm_revoke: ¿Revocar el acceso a esta aplicación?
   users:
     new:
       title: Registrarse
-      no_auto_account_create: Lamentablemente, ahora no podemos crear su cuenta automáticamente.
-      please_contact_support_html: 'Póngase en contacto con %{support_link} para organizar
+      no_auto_account_create: Lamentablemente, ahora no podemos crear tu cuenta automáticamente.
+      please_contact_support_html: 'Pónte en contacto con %{support_link} para organizar
         la creación de una cuenta: intentaremos atender la solicitud lo antes posible.'
       support: asistencia
       about:
         header: Libre y editable
         paragraph_1: A diferencia de otros mapas, OpenStreetMap está completamente
-          creado por personas como tú, y cualquiera puede repararlo, actualizarlo,
+          creado por personas como tú, y cualquiera puede corregirlo, actualizarlo,
           descargarlo y usarlo de forma gratuita.
         paragraph_2: Regístrate para comenzar a contribuir. Te enviaremos un email
           para confirmar tu cuenta.
-      display name description: Su nombre de usuario público. Puede cambiarlo más
+      display name description: Tu nombre de usuario público. Puedes cambiarlo más
         tarde en las preferencias.
-      external auth: 'Autenticación de terceros:'
-      use external auth: O bien, utilice un servicio de terceros para acceder
+      external auth: 'Autentificación de terceros:'
+      use external auth: O bien, utiliza un servicio de terceros para acceder
       auth no password: Con la autenticación de terceros no se necesita una contraseña,
-        aunque hay algunas herramientas y servidores que aún la solicitan.
+        aunque habrá algunas herramientas y servidores que aún la soliciten.
       continue: Registrarse
-      terms accepted: ¡Gracias por aceptar los nuevos términos de colaborador!
+      terms accepted: ¡Gracias por aceptar los nuevos Términos de Colaborador!
+      email_confirmation_help_html: Tu dirección no se muestra públicamente, consulta
+        nuestra %{privacy_policy_link} para obtener más información.
       privacy_policy: normativa de privacidad
+      privacy_policy_title: Política de privacidad de la OSMF, incluida la sección
+        sobre direcciones de correo electrónico
     terms:
       title: Términos
       heading: Términos
-      heading_ct: Términos de colaborador
-      read and accept with tou: Lea el acuerdo de colaborador y los términos de uso,
+      heading_ct: Términos de Colaborador
+      read and accept with tou: Lea el acuerdo de colaborador y los Términos de Uso,
         marque ambas casillas de verificación cuando haya terminado y luego presione
         el botón Continuar.
-      contributor_terms_explain: Este acuerdo gobierna los términos de sus contribuciones
+      contributor_terms_explain: Este acuerdo gobierna los términos de tus contribuciones
         actuales y futuras.
-      read_ct: He leído y estoy de acuerdo con los términos de colaborador arriba
+      read_ct: He leído y estoy de acuerdo con los Términos de Colaborador arriba
         descritos
       tou_explain_html: Estos %{tou_link} rigen el uso del sitio web y de la infraestructura
-        provista por OSMF. Haga clic en el enlace, lea y acepte el texto.
+        provista por OSMF. Haz clic en el enlace, lee y acepta el texto.
       read_tou: He leído y estoy de acuerdo con los Términos de Uso
       consider_pd: Además del acuerdo anterior, considero que mis contribuciones se
         encuentran en Dominio Público.
       consider_pd_why: ¿Qué es esto?
+      guidance_info_html: 'Información para ayudar a comprender estos términos: un
+        %{readable_summary_link} y algunas %{informal_translations_link}'
+      readable_summary: resumen legible por humanos
+      informal_translations: traducciones informales
       continue: Continuar
-      declined: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
+      declined: https://wiki.openstreetmap.org/wiki/ES:Términos_de_contribuidor_rechazados
       decline: Declinar
-      you need to accept or decline: Lea y luego acepte o rechace los nuevos Términos
-        de colaborador para continuar.
+      you need to accept or decline: Lee y luego acepta o rechaza los nuevos Términos
+        de Colaborador para continuar.
       legale_select: 'País de residencia:'
       legale_names:
         france: Francia
@@ -2677,14 +2836,14 @@ es:
         rest_of_world: Resto del mundo
     terms_declined_flash:
       terms_declined_html: Lamentamos que haya decidido no aceptar los nuevos Términos
-        de colaborador. Para obtener más información, consulte %{terms_declined_link}.
+        de Colaborador. Para obtener más información, consulte %{terms_declined_link}.
       terms_declined_link: esta página wiki
-      terms_declined_url: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
+      terms_declined_url: https://wiki.openstreetmap.org/wiki/ES:Términos_de_contribuidor_rechazados
     no_such_user:
       title: Este usuario no existe
       heading: El usuario %{user} no existe
-      body: Lo sentimos, no existe ningún usuario con el nombre %{user}. Revise  las
-        letras, o tal vez el enlace en el que hizo clic sea incorrecto.
+      body: Lo sentimos, no existe algún usuario con el nombre %{user}. Revisa las
+        letras, o tal vez el enlace en el que hiciste clic sea incorrecto.
       deleted: eliminado
     show:
       my diary: Mi diario
@@ -2693,7 +2852,7 @@ es:
       my notes: Mis notas
       my messages: Mis mensajes
       my profile: Mi perfil
-      my settings: Mi configuración
+      my settings: Mis configuraciones
       my comments: Mis comentarios
       my_preferences: Mis preferencias
       my_dashboard: Mi tablero
@@ -2708,7 +2867,7 @@ es:
       remove as friend: Eliminar como amigo
       add as friend: Añadir como amigo
       mapper since: 'Mapeando desde:'
-      ct status: 'Términos de colaborador:'
+      ct status: 'Términos de Colaborador:'
       ct undecided: Indeciso
       ct declined: Rechazado
       latest edit: 'Última edición (%{ago}):'
@@ -2739,8 +2898,8 @@ es:
       confirm: Confirmar
       report: Denunciar a este usuario
     go_public:
-      flash success: Todas sus ediciones ahora son públicas y ya está autorizado para
-        editar.
+      flash success: Todas tus ediciones ahora son públicas y ya estás autorizado
+        para editar.
     index:
       title: Usuarios
       heading: Usuarios
@@ -2755,26 +2914,27 @@ es:
     suspended:
       title: Cuenta suspendida
       heading: Cuenta suspendida
-      support: A favor
-      automatically_suspended: Lo sentimos, su cuenta ha sido suspendida automáticamente
+      support: a favor
+      automatically_suspended: Lo sentimos, tu cuenta ha sido suspendida automáticamente
         debido a actividad sospechosa.
       contact_support_html: Esta decisión será revisada por un administrador en breve,
-        o puede ponerse en contacto con %{support_link} si desea discutir sobre esto.
+        o puedes ponerte en contacto con %{support_link} si deseas discutir sobre
+        esto.
     auth_failure:
-      connection_failed: Falló la conexión con el proveedor de autenticación
-      invalid_credentials: Datos de autenticación no válidos
+      connection_failed: Falló la conexión con el proveedor de autentificación
+      invalid_credentials: Datos de autentificación no válidos
       no_authorization_code: Sin código de autorización
       unknown_signature_algorithm: Algoritmo de firma desconocido
       invalid_scope: Ámbito no válido
       unknown_error: Autentificación fallida
     auth_association:
-      heading: Su identificador aún no está asociado con una cuenta de OpenStreetMap.
-      option_1: Si eres nuevo en OpenStreetMap, crea  cuenta nueva usando el formulario
+      heading: Tu identificador aún no está asociado con una cuenta de OpenStreetMap.
+      option_1: Si eres nuevo en OpenStreetMap, crea una cuenta nueva usando el formulario
         a continuación.
       option_2: |-
-        Si ya tiene una cuenta, puede iniciar sesión en su cuenta
-        usando su nombre de usuario y contraseña y luego asociar la cuenta
-        con su identificador en sus preferencias de usuario.
+        Si ya tienes una cuenta, puedes iniciar sesión a tu cuenta
+        usando tu nombre de usuario y contraseña y luego asociar la cuenta
+        con tu identificador en tus configuraciones de usuario.
   user_role:
     filter:
       not_a_role: La cadena `%{role}' no es un rol válido.
@@ -2785,7 +2945,7 @@ es:
     grant:
       title: Confirmar adjudicación de rol
       heading: Confirmar adjudicación de rol
-      are_you_sure: ¿Está seguro de que desea otorgar el rol `%{role}' al usuario
+      are_you_sure: ¿Estás seguro de que deseas otorgar el rol `%{role}' al usuario
         `%{name}'?
       confirm: Confirmar
       fail: No pudo otorgarse el rol `%{role}' al usuario `%{name}'. Comprueba que
@@ -2793,7 +2953,7 @@ es:
     revoke:
       title: Confirmar revocación de rol
       heading: Confirmar revocación de rol
-      are_you_sure: ¿Está seguro de que desea revocar el rol `%{role}' del usuario
+      are_you_sure: ¿Está seguro de que deseas revocar el rol `%{role}' del usuario
         `%{name}'?
       confirm: Confirmar
       fail: No se pudo revocar el rol `%{role}' del usuario `%{name}'. Comprueba que
@@ -2809,14 +2969,14 @@ es:
     new:
       title: Creando un bloqueo para %{name}
       heading_html: Creando un bloqueo para %{name}
-      period: ¿Por cuánto tiempo, empezando ahora, el usuario tendrá bloqueado el
-        uso de la API?
+      period: ¿Por cuánto tiempo, empezando desde ahora, el usuario tendrá bloqueado
+        el uso de la API?
       back: Ver todos los bloqueos
     edit:
       title: Editando el bloqueo sobre %{name}
       heading_html: Editando el bloqueo sobre %{name}
-      period: ¿Por cuánto tiempo, empezando ahora, el usuario tendrá bloqueado el
-        uso de la API?
+      period: ¿Por cuánto tiempo, empezando desde ahora, el usuario tendrá bloqueado
+        el uso de la API?
       show: Ver este bloqueo
       back: Ver todos los bloqueos
     filter:
@@ -2824,21 +2984,21 @@ es:
       block_period: El periodo de bloqueo debe de ser uno de los valores seleccionables
         de la lista desplegable.
     create:
-      flash: Ha creado un bloqueo en el usuario %{name}.
+      flash: Has creado un bloqueo en el usuario %{name}.
     update:
       only_creator_can_edit: Sólo el moderador que ha creado este bloqueo puede editarlo.
       success: Bloqueo actualizado.
     index:
       title: Bloqueos de usuario
       heading: Listado de bloqueos de usuario
-      empty: Todavía no se ha hecho ningún bloqueo.
+      empty: Todavía no se ha hecho algún bloqueo.
     revoke:
       title: Revocando el bloqueo sobre %{block_on}
       heading_html: Revocando el bloqueo sobre %{block_on} por %{block_by}
       time_future: Este bloqueo finalizará en %{time}.
       past: Este bloqueo terminó %{time} y no puede ser revocado ahora.
-      confirm: ¿Está seguro de que desea revocar este bloqueo?
-      revoke: Revocar
+      confirm: ¿Estás seguro de que desea revocar este bloqueo?
+      revoke: ¡Revocar!
       flash: Este bloqueo ha sido revocado.
     helper:
       time_future_html: Termina en %{time}.
@@ -2869,7 +3029,7 @@ es:
     blocks_by:
       title: Bloqueos por %{name}
       heading_html: Listado de bloqueos por %{name}
-      empty: '%{name} todavía no ha creado ningún bloqueo.'
+      empty: '%{name} todavía no ha creado algún bloqueo.'
     show:
       title: '%{block_on} bloqueado por %{block_by}'
       heading_html: '%{block_on} bloqueado por %{block_by}'
@@ -2878,8 +3038,8 @@ es:
       status: 'Estado:'
       show: Mostrar
       edit: Editar
-      revoke: Revocar
-      confirm: ¿Está seguro?
+      revoke: ¡Revocar!
+      confirm: ¿Estás seguro?
       reason: 'Razón del bloqueo:'
       back: Ver todos los bloqueos
       revoker: 'Revocador:'
@@ -2889,7 +3049,7 @@ es:
       not_revoked: (no revocado)
       show: Mostrar
       edit: Editar
-      revoke: Revocar
+      revoke: ¡Revocar!
     blocks:
       display_name: Usuario bloqueado
       creator_name: Creador
@@ -2916,6 +3076,15 @@ es:
       open_title: 'Nota sin resolver #%{note_name}'
       closed_title: 'Nota resuelta #%{note_name}'
       hidden_title: 'Nota oculta #%{note_name}'
+      event_opened_by_html: Creado por %{user} %{time_ago}
+      event_opened_by_anonymous_html: Creado por anónimo %{time_ago}
+      event_commented_by_html: Comentario de %{user} %{time_ago}
+      event_commented_by_anonymous_html: Comentario de un anónimo %{time_ago}
+      event_closed_by_html: Resuelta por %{user} %{time_ago}
+      event_closed_by_anonymous_html: Resuelto por anónimo %{time_ago}
+      event_reopened_by_html: Reactivada por %{user} %{time_ago}
+      event_reopened_by_anonymous_html: Reactivado por anónimo %{time_ago}
+      event_hidden_by_html: Ocultado por %{user} %{time_ago}
       report: denunciar esta nota
       anonymous_warning: Esta nota incluye comentarios de usuarios anónimos que deben
         ser verificados de forma independiente.
@@ -2924,18 +3093,18 @@ es:
       reactivate: Reactivar
       comment_and_resolve: Comentar y resolver
       comment: Comentar
-      report_link_html: Si esta nota contiene información delicada que debe eliminarse,
-        puede %{link}.
-      other_problems_resolve: Para todos los demás problemas con la nota, resuélvalo
+      report_link_html: Si esta nota contiene información sensible que debe eliminarse,
+        puedes %{link}.
+      other_problems_resolve: Para todos los demás problemas con la nota, resuélvelo
         con un comentario.
       other_problems_resolved: Para todos los demás problemas, la resolución es suficiente.
       disappear_date_html: Esta nota resuelta desaparecerá del mapa en %{disappear_in}.
     new:
       title: Nota nueva
-      intro: ¿Detectó un error o falta algo? Informe a otros mapeadores para que podamos
-        solucionarlo. Mueva el marcador a la posición correcta y escriba una nota
-        para explicar el problema.
-      advice: La nota será pública y podría utilizarse para actualizar el mapa, así
+      intro: ¿Detectaste un error o falta algo? Informa a otros mapeadores para que
+        podamos corregirlo. Mueve el marcador a la posición correcta y escribe una
+        nota para explicar el problema.
+      advice: Tu nota será pública y podría utilizarse para actualizar el mapa, así
         que no des información personal ni datos provenientes de mapas o catálogos
         protegidos por derechos de autor.
       add: Añadir nota
@@ -2959,10 +3128,10 @@ es:
       include_marker: Incluir marcador
       center_marker: Centrar mapa en el marcador
       paste_html: Pegar código HTML para incrustar en el sitio web
-      view_larger_map: Ver mapa más grande
+      view_larger_map: Ver el mapa más grande
       only_standard_layer: Sólo la capa estándar se puede exportar como una imagen
     embed:
-      report_problem: Reportar problemas
+      report_problem: Reportar un problema
     key:
       title: Leyenda del mapa
       tooltip: Leyenda del mapa
@@ -2974,11 +3143,11 @@ es:
       locate:
         title: Mostrar mi ubicación
         metersPopup:
-          one: Estás a un metro de este punto
+          one: Estás a %{count} metro de este punto
           other: Estás a %{count} metros de este punto
         feetPopup:
-          one: Estás dentro de una distancia de un pie desde este punto
-          other: Estás dentro de una distancia de %{count} pies desde este punto
+          one: Estás a %{count} pie desde este punto
+          other: Estás a %{count} pies desde este punto
       base:
         standard: Estándar
         cyclosm: CyclOSM
@@ -2993,10 +3162,17 @@ es:
         gps: Trazas GPS públicas
         overlays: Activar superposiciones para solucionar problemas en el mapa
         title: Capas
-      make_a_donation: Hacer un donativo
+      openstreetmap_contributors: Colaboradores de OpenStreetMap
+      make_a_donation: Hacer una donación
       website_and_api_terms: Términos del sitio web y de la API
+      cyclosm_credit: Estilo de teselas por %{cyclosm_link} alojados por %{osm_france_link}
+      cyclosm_name: CyclOSM
       osm_france: OpenStreetMap Francia
+      thunderforest_credit: Teselas cortesía de %{thunderforest_link}
       andy_allan: Andy Allan
+      opnvkarte_credit: Teselas cortesía de %{memomaps_link}
+      memomaps: MeMoMaps
+      hotosm_credit: Estilo de teselas por %{hotosm_link} alojados por %{osm_france_link}
       hotosm_name: Equipo humanitario de OpenStreetMap
     site:
       edit_tooltip: Editar el mapa
@@ -3014,8 +3190,8 @@ es:
         unsubscribe: Cancelar suscripción
         hide_comment: ocultar
         unhide_comment: mostrar
-    edit_help: Mueva el mapa el mapa y acerca a una ubicación que desees editar, luego
-      haga clic aquí.
+    edit_help: Mueve el mapa el mapa y acerca a una ubicación que desees editar, luego
+      haz clic aquí.
     directions:
       ascend: Ascender
       engines:
@@ -3038,81 +3214,81 @@ es:
         no_place: No se pudo localizar «%{place}».
       instructions:
         continue_without_exit: Continuar en %{name}
-        slight_right_without_exit: Gire un poco a la derecha hacia %{name}
-        offramp_right: Tome la rampa de la derecha
-        offramp_right_with_exit: Tome la salida %{exit} a la derecha
-        offramp_right_with_exit_name: Tome la salida %{exit} a la derecha hacia %{name}
-        offramp_right_with_exit_directions: Tome la salida %{exit} a la derecha hacia
+        slight_right_without_exit: Gira un poco a la derecha hacia %{name}
+        offramp_right: Toma la rampa de la derecha
+        offramp_right_with_exit: Toma la salida %{exit} a la derecha
+        offramp_right_with_exit_name: Toma la salida %{exit} a la derecha hacia %{name}
+        offramp_right_with_exit_directions: Toma la salida %{exit} a la derecha hacia
           %{directions}
-        offramp_right_with_exit_name_directions: Tome la salida %{exit} a la derecha
+        offramp_right_with_exit_name_directions: Toma la salida %{exit} a la derecha
           hacia %{name}, en dirección %{directions}
-        offramp_right_with_name: Tome la rampa a la derecha hacia %{name}
-        offramp_right_with_directions: Tome la salida a la derecha hacia %{directions}
-        offramp_right_with_name_directions: Tome la rampa a la derecha hacia %{name},
+        offramp_right_with_name: Toma la rampa a la derecha hacia %{name}
+        offramp_right_with_directions: Toma la salida a la derecha hacia %{directions}
+        offramp_right_with_name_directions: Toma la rampa a la derecha hacia %{name},
           en dirección %{directions}
-        onramp_right_without_exit: Gire a la derecha en la rampa hacia %{name}
-        onramp_right_with_directions: Gire a la derecha en la rampa hacia %{directions}
-        onramp_right_with_name_directions: Gire a la derecha en la rampa hacia %{name},
+        onramp_right_without_exit: Gira a la derecha en la rampa hacia %{name}
+        onramp_right_with_directions: Gira a la derecha en la rampa hacia %{directions}
+        onramp_right_with_name_directions: Gira a la derecha en la rampa hacia %{name},
           en dirección %{directions}
-        onramp_right_without_directions: Gire a la derecha en la rampa
-        onramp_right: Gire a la derecha en la rampa
-        endofroad_right_without_exit: Al final de la calle gire a la derecha hacia
+        onramp_right_without_directions: Gira a la derecha en la rampa
+        onramp_right: Gira a la derecha en la rampa
+        endofroad_right_without_exit: Al final de la calle gira a la derecha hacia
           %{name}
-        merge_right_without_exit: Incorpórese a la derecha hacia %{name}
-        fork_right_without_exit: En la bifurcación, gire a la derecha hacia %{name}
-        turn_right_without_exit: Gire a la derecha hacia %{name}
-        sharp_right_without_exit: Gire cerrado a la derecha hacia %{name}
-        uturn_without_exit: Gire en U a lo largo de %{name}
-        sharp_left_without_exit: Gire cerrado a la izquierda hacia %{name}
-        turn_left_without_exit: Gire a la izquierda hacia %{name}
-        offramp_left: Tome la rampa de la izquierda
-        offramp_left_with_exit: Tome la salida %{exit} de la izquierda
-        offramp_left_with_exit_name: Tome la salida %{exit} a la izquierda hacia %{name}
-        offramp_left_with_exit_directions: Tome la salida %{exit} a la izquierda hacia
+        merge_right_without_exit: Incorpórate a la derecha hacia %{name}
+        fork_right_without_exit: En la bifurcación, gira a la derecha hacia %{name}
+        turn_right_without_exit: Gira a la derecha hacia %{name}
+        sharp_right_without_exit: Gira cerrado a la derecha hacia %{name}
+        uturn_without_exit: Gira en U a lo largo de %{name}
+        sharp_left_without_exit: Gira cerrado a la izquierda hacia %{name}
+        turn_left_without_exit: Gira a la izquierda hacia %{name}
+        offramp_left: Toma la rampa de la izquierda
+        offramp_left_with_exit: Toma la salida %{exit} de la izquierda
+        offramp_left_with_exit_name: Toma la salida %{exit} a la izquierda hacia %{name}
+        offramp_left_with_exit_directions: Toma la salida %{exit} a la izquierda hacia
           %{directions}
-        offramp_left_with_exit_name_directions: Tome la salida %{exit} a la izquierda
+        offramp_left_with_exit_name_directions: Toma la salida %{exit} a la izquierda
           hacia %{name}, en dirección %{directions}
-        offramp_left_with_name: Tome la salida a la izquierda hacia %{name}
-        offramp_left_with_directions: Tome la rampa a la izquierda hacia %{directions}
-        offramp_left_with_name_directions: Tome la rampa a la izquierda hacia %{name},
+        offramp_left_with_name: Toma la salida a la izquierda hacia %{name}
+        offramp_left_with_directions: Toma la rampa a la izquierda hacia %{directions}
+        offramp_left_with_name_directions: Toma la rampa a la izquierda hacia %{name},
           en dirección %{directions}
-        onramp_left_without_exit: Gire a la izquierda en la rampa hacia %{name}
-        onramp_left_with_directions: Gire a la izquierda en la rampa hacia %{directions}
-        onramp_left_with_name_directions: Gire a la izquierda en la rampa hacia %{name},
+        onramp_left_without_exit: Gira a la izquierda en la rampa hacia %{name}
+        onramp_left_with_directions: Gira a la izquierda en la rampa hacia %{directions}
+        onramp_left_with_name_directions: Gira a la izquierda en la rampa hacia %{name},
           en dirección %{directions}
-        onramp_left_without_directions: Gire a la izquierda en la rampa
-        onramp_left: Gire a la izquierda en la rampa
-        endofroad_left_without_exit: Al final de la calle gire a la izquierda hacia
+        onramp_left_without_directions: Gira a la izquierda en la rampa
+        onramp_left: Gira a la izquierda en la rampa
+        endofroad_left_without_exit: Al final de la calle gira a la izquierda hacia
           %{name}
-        merge_left_without_exit: Incorpórese a la izquierda hacia %{name}
-        fork_left_without_exit: En la bifurcación, gire a la izquierda hacia %{name}
-        slight_left_without_exit: Gire un poco a la izquierda hacia %{name}
+        merge_left_without_exit: Incorpórate a la izquierda hacia %{name}
+        fork_left_without_exit: En la bifurcación, gira a la izquierda hacia %{name}
+        slight_left_without_exit: Gira un poco a la izquierda hacia %{name}
         via_point_without_exit: (punto intermedio)
-        follow_without_exit: Siga a %{name}
-        roundabout_without_exit: En la rotonda, tome la salida hacia %{name}
-        leave_roundabout_without_exit: Salga de la rotonda - %{name}
-        stay_roundabout_without_exit: Permanezca en la rotonda - %{name}
+        follow_without_exit: Sigue a %{name}
+        roundabout_without_exit: En la rotonda, toma la salida hacia %{name}
+        leave_roundabout_without_exit: Sal de la rotonda - %{name}
+        stay_roundabout_without_exit: Permanece en la rotonda - %{name}
         start_without_exit: Comenzar en %{name}
-        destination_without_exit: Llegue a su destino
+        destination_without_exit: Llegaste a tu destino
         against_oneway_without_exit: Ir en contra del sentido único en %{name}
         end_oneway_without_exit: Final de sentido único en %{name}
-        roundabout_with_exit: En la rotonda, tome la salida %{exit} hacia %{name}
-        roundabout_with_exit_ordinal: En la rotonda, tome la salida %{exit} hacia
+        roundabout_with_exit: En la rotonda, toma la salida %{exit} hacia %{name}
+        roundabout_with_exit_ordinal: En la rotonda, toma la salida %{exit} hacia
           %{name}
-        exit_roundabout: Salga de la rotonda hacia %{name}
-        unnamed: sin nombre
+        exit_roundabout: Sal de la rotonda hacia %{name}
+        unnamed: vía genérica sin nombre
         courtesy: Indicaciones cortesía de %{link}
         exit_counts:
-          first: 1
-          second: 2
-          third: 3
-          fourth: 4
-          fifth: 5
-          sixth: 6
-          seventh: 7
-          eighth: 8
-          ninth: 9
-          tenth: 10
+          first: 1ª.
+          second: 2ª.
+          third: 3ª.
+          fourth: 4ª.
+          fifth: 5ª.
+          sixth: 6ª.
+          seventh: 7ª.
+          eighth: 8ª.
+          ninth: 9ª.
+          tenth: 10ª.
       time: Hora
     query:
       node: Nodo
@@ -3131,29 +3307,29 @@ es:
   redactions:
     edit:
       heading: Editar censura
-      title: Editar redacción
+      title: Editar censura
     index:
-      empty: No hay ninguna censura que mostrar.
-      heading: Lista de redacciones
+      empty: No hay ninguna censura para mostrar.
+      heading: Lista de censuras
       title: Lista de censuras
     new:
-      heading: Introduzca la información de la censura nueva
-      title: Creando nueva redacción
+      heading: Introduzca la información de la nueva censura
+      title: Creando nueva censura
     show:
       description: 'Descripción:'
-      heading: Mostrando redacción "%{title}"
-      title: Mostrando redacción
+      heading: Mostrando censura "%{title}"
+      title: Mostrando censura
       user: 'Creador:'
       edit: Editar esta censura
-      destroy: Eliminar esta redacción
+      destroy: Eliminar esta censura
       confirm: ¿Está seguro?
     create:
       flash: Se creó la censura.
     update:
       flash: Cambios guardados.
     destroy:
-      not_empty: La redacción no está vacía. Elimine todas las versiones previas pertenecientes
-        a esta redacción antes de destruirla.
+      not_empty: La censura no está vacía. Elimina todas las versiones previas pertenecientes
+        a esta censura antes de destruirla.
       flash: Redacción destruida.
       error: Se produjo un error al destruir esta censura.
   validations:
index 4022ba8773bfe44913bee43c151f37c39c0d857d..0aa7d67d63e6d9e6b2bbf9bee0e6262e3696c27f 100644 (file)
@@ -1954,6 +1954,9 @@ fr:
       no home location: Vous n’avez pas indiqué votre lieu de domicile.
       update home location on click: Mettre à jour mon lieu de domicile quand je clique
         sur la carte ?
+      show: Afficher
+      delete: Supprimer
+      undelete: Annuler la suppression
     update:
       success: Profil mis à jour.
       failure: Impossible de mettre à jour le profil.
index e931f9877fa2109b9d20eabd2f3d7648ed04d10e..5df67b97683e2fbf412bdb853abac493f8194f31 100644 (file)
@@ -1852,6 +1852,8 @@ hu:
       no home location: Nem adtad meg az otthonod helyét.
       update home location on click: Frissüljön-e az otthonom helye, amikor a térképre
         kattintok?
+      delete: Törlés
+      undelete: Törlés visszavonása
     update:
       success: Profil frissítve.
       failure: Nem sikerült frissíteni a profilt.
@@ -1962,6 +1964,8 @@ hu:
       legal_2_1_html: Kérjük, %{contact_the_osmf_link}, ha licencekkel kapcsolatos,
         szerzői jogi vagy egyéb jogi kérdései vannak.
       legal_2_1_contact_the_osmf: lépj kapcsolatba az OSM Alapítvánnyal
+      legal_2_2_html: Az OpenStreetMap, a nagyító logó és a State of the Map %{registered_trademarks_link}.
+      legal_2_2_registered_trademarks: az OSMF bejegyzett védjegye
       partners_title: Partnerek
     copyright:
       foreign:
index 3ac1f4a335a6cf4f78d5c59f83ed93f6b89f84f0..7a4063e4b5105769974c4b7493e1cb951ebef58c 100644 (file)
@@ -1839,6 +1839,9 @@ ia:
       no home location: Tu non ha entrate tu position de origine.
       update home location on click: Actualisar le position de origine quando io clicca
         sur le carta?
+      show: Monstrar
+      delete: Deler
+      undelete: Disfacer deletion
     update:
       success: Profilo actualisate.
       failure: Non poteva actualisar le profilo.
index f19773d34bdfaca1fc0852781d79a74afd670895..e000c57818703ff1e3764576fb9d6637fa0c9324 100644 (file)
@@ -1896,6 +1896,8 @@ it:
       home location: Posizione
       no home location: Non si è inserita la propria posizione.
       update home location on click: Aggiorna la posizione quando clicco sulla mappa?
+      show: Mostra
+      delete: Cancella
     update:
       success: Il profilo è stato aggiornato.
       failure: Impossibile aggiornare il profilo.
index 9c945b80611f8dd1cafc0a8a7a62119ab910cb47..9869ab108cd800af603d1e21a1598e756c999c3f 100644 (file)
@@ -1766,6 +1766,7 @@ ja:
       home location: ホーム地点
       no home location: あなたはまだホーム地点を登録していません。
       update home location on click: ホーム地点を、地図上のクリックした地点に変更
+      delete: 削除
     update:
       success: プロフィール更新済み。
       failure: プロファイルを更新できませんでした。
index 18f7b6bc3697098c6b9c1f37d0fa878408fa7cdc..7d92e3a5ac69ca722c0e2c0615dbabfb3f2ceeeb 100644 (file)
@@ -1809,6 +1809,9 @@ lb:
       home location: Heemecht
       no home location: Du hues nach keng Heemecht aginn.
       update home location on click: Heemecht beim Klick op d'Kaart aktualiséieren
+      show: Weisen
+      delete: Läschen
+      undelete: Läsche réckgängeg maachen
     update:
       success: Profil aktualiséiert.
       failure: De Profil konnt net aktualiséiert ginn.
index 84c971af52a35f32a75e91ee4c05b67279da7640..720b34c6bcea61ebbaa033481395aeb25a4494a4 100644 (file)
@@ -1828,6 +1828,9 @@ mk:
       no home location: Немате внесено матична местоположба.
       update home location on click: Подновувај ја матичната местоположба кога ќе
         стиснам на картата
+      show: Прикажи
+      delete: Избриши
+      undelete: Откажи бришење
     update:
       success: Профилот е подновен.
       failure: Не можев да го подновам профилот.
index 9a5fb3a94aab6f9c1476ed37b634b9a04618afb0..34e08cea6eef47f80e9c17397b291ac64ef11337 100644 (file)
@@ -1588,6 +1588,9 @@ nb:
       home location: Hjemmeposisjon
       no home location: Du har ikke angitt din hjemmeposisjon.
       update home location on click: Oppdater hjemmeposisjon når jeg klikker på kartet?
+      show: Vis
+      delete: Slett
+      undelete: Angre sletting
   sessions:
     new:
       title: Logg inn
index 058ada96cc9ec8aa15eb0d45d07ba845eb9eb1a0..95794336a795d482c951f3622cc58f09fbc78195 100644 (file)
@@ -1900,6 +1900,9 @@ nl:
       home location: Thuislocatie
       no home location: Er is geen thuislocatie ingevoerd.
       update home location on click: Thuislocatie aanpassen bij klikken op de kaart
+      show: Weergeven
+      delete: Verwijderen
+      undelete: Verwijderen ongedaan maken
     update:
       success: Profiel bijgewerkt.
       failure: Kon het profiel niet bijwerken.
index f60c4cffb08c81256624a6a6dee717646ef64cfb..eae6cf76c949d09d5340dd9ac1dab5cec67f40b8 100644 (file)
@@ -181,8 +181,9 @@ ro:
   datetime:
     distance_in_words_ago:
       about_x_hours:
-        one: aproximativ 1 oră în urmă
-        other: aproximativ %{count} ore în urmă
+        one: aproximativ 1 oră în urmă}}
+        few: aproximativ %{count} ore în urmă}}
+        other: …}}
       about_x_months:
         one: aproximativ 1 lună în urmă
         other: aproximativ %{count} luni în urmă
@@ -272,6 +273,9 @@ ro:
           de alte conturi.
         retain_caveats: 'Cu toate acestea, unele informații despre dvs. vor fi păstrate
           pe OpenStreetMap, chiar și după ștergerea contului:'
+        retain_email: Adresa dvs. de e-mail va fi păstrată.
+        confirm_delete: Sunteți sigur(ă)?
+        cancel: Anulează
   accounts:
     edit:
       title: Modificare cont
@@ -297,16 +301,35 @@ ro:
           sunt în Domeniul Public.
         link text: Ce este aceasta?
       save changes button: Salvează modificările
+      delete_account: Șterge Cont...
     go_public:
       heading: Editare publică
+      currently_not_public: Momentan, editările dvs. sunt anonime și oamenii nu vă
+        pot trimite mesaje sau vă pot vedea locația. Pentru a afișa ceea ce ați editat
+        și pentru a le permite oamenilor să vă contacteze prin intermediul site-ului
+        web, faceți clic pe butonul de mai jos.
+      only_public_can_edit: De la trecerea la 0.6 API, numai utilizatorii publici
+        pot edita datele hărții.
+      find_out_why: află de ce
+      email_not_revealed: Adresa ta de e-mail nu va fi dezvăluită devenind public.
+      not_reversible: Această acțiune nu poate fi anulată și toți utilizatorii noi
+        sunt acum publici în mod implicit.
       make_edits_public_button: Faceți toate editările mele publice
     update:
       success_confirm_needed: Informațiile despre utilizator s-au actualizat cu succes.
         Verificați e-mailul pentru o notă pentru a confirma noua adresă de e-mail.
       success: Informațiile despre utilizator s-au actualizat cu succes.
+    destroy:
+      success: Contul Este Șters.
   browse:
     created: Creat
     closed: Închis
+    created_ago_html: Creat %{time_ago}
+    closed_ago_html: Închis %{time_ago}
+    created_ago_by_html: Creat %{time_ago} de %{user}
+    closed_ago_by_html: Închis %{time_ago} de către %{user}
+    deleted_ago_by_html: Șters %{time_ago} de %{user}
+    edited_ago_by_html: Editat %{time_ago} de %{user}
     version: Versiune
     in_changeset: Set de modificări
     anonymous: anonim
@@ -317,9 +340,9 @@ ro:
       few: '%{count} relații'
       other: ""
     part_of_ways:
-      one: 1 relație
-      few: '%{count} relații'
-      other: ""
+      one: '%{count} cale}}'
+      few: '%{count} căi}}'
+      other: '}}'
     download_xml: Descarcă XML
     view_history: Vezi istoric
     view_details: Vezi detalii
@@ -417,6 +440,7 @@ ro:
       wikimedia_commons_link: Item-ul %{page} pe Wikimedia Commons
       telephone_link: Sună %{phone_number}
       colour_preview: Previzualizează %{colour_value} culoare
+      email_link: Email %{email}
     query:
       title: Interogări ale funcțiilor
       introduction: Dați clic pe hartă pentru a găsi obiectivele din apropiere.
@@ -440,6 +464,7 @@ ro:
     index:
       title: Set de modificări
       title_user: Seturi de modificări făcute de %{user}
+      title_user_link_html: Seturi de modificări făcute de %{user_link}
       title_friend: Seturi de modificări făcute de prietenii mei
       title_nearby: Modificări făcute de utilizatori din apropiere
       empty: Niciun set de modificări găsit.
@@ -566,6 +591,17 @@ ro:
       applications:
         create:
           notice: Aplicație înregistrată.
+  errors:
+    forbidden:
+      title: Interzis
+    internal_server_error:
+      title: Eroare aplicație
+      description: Serverul OpenStreetMap a întâlnit o condiție neașteptată care l-a
+        împiedicat să îndeplinească cererea (HTTP 500)
+    not_found:
+      title: Fișierul nu a fost găsit
+      description: Nu s-a putut găsi o operație de file/directory/API operation cu
+        acest nume pe serverul OpenStreetMap (HTTP 404)
   friendships:
     make_friend:
       heading: Adăugați %{user} ca prieten?
@@ -581,6 +617,10 @@ ro:
       success: '%{name} a fost scos de la lista de prieteni.'
       not_a_friend: '%{name} nu este unul din prietenii tăi.'
   geocoder:
+    search:
+      title:
+        results_from_html: Rezultate de la %{results_link}
+        latlon: Intern
     search_osm_nominatim:
       prefix:
         aerialway:
@@ -597,12 +637,12 @@ ro:
         aeroway:
           aerodrome: Aerodrom
           airstrip: Pistă de aterizare
-          apron: Peron de aeroport
-          gate: Poartă de aeroport
+          apron: Peron Aeroport
+          gate: Poartă Aeroport
           hangar: Hangar
           helipad: Helipad
           holding_position: Păstrează poziția
-          navigationaid: Ajutor de navigație aeriană
+          navigationaid: Ajutor Navigație Aviație
           parking_position: Poziția de parcare
           runway: Pistă
           taxilane: Banda de taxi
@@ -662,7 +702,7 @@ ro:
           ice_cream: Înghețată
           internet_cafe: Internet Cafe
           kindergarten: Grădiniță
-          language_school: Școală de limbi
+          language_school: Școală Lingvistică
           library: Bibliotecă
           loading_dock: Doc de încărcare
           love_hotel: Hotel de dragoste
@@ -900,6 +940,7 @@ ro:
           railway: Cale ferată istorică
           roman_road: Drumul roman
           ruins: Ruine
+          rune_stone: Piatra Rune
           stone: Piatră
           tomb: Mormânt
           tower: Turn
@@ -917,8 +958,8 @@ ro:
           brownfield: Teren brun
           cemetery: Cimitir
           commercial: Zonă comercială
-          conservation: Conservare
-          construction: Construcție
+          conservation: Zonă Conservare
+          construction: Șantier în lucru
           farmland: Teren agricol
           farmyard: Curte țărănească
           forest: Pădure
@@ -939,7 +980,7 @@ ro:
           reservoir: Rezervor
           reservoir_watershed: Cumpăna apelor
           residential: Zonă rezidențială
-          retail: Amănuntul
+          retail: Vânzare cu amănuntul
           village_green: Village Green
           vineyard: Podgorie
           "yes": Utilizarea terenului
@@ -960,7 +1001,7 @@ ro:
           fitness_station: Stație de fitness
           garden: Grădină
           golf_course: Teren de golf
-          horse_riding: Călărie de cai
+          horse_riding: Centru de echitație
           ice_rink: Patinoar
           marina: Marina
           miniature_golf: Minigolf
@@ -991,7 +1032,9 @@ ro:
           breakwater: Dig
           bridge: Pod
           bunker_silo: Buncăr
+          cairn: Movilă
           chimney: Șemineu
+          clearcut: Cioturi de copac
           communications_tower: Turn de Comunicații
           crane: Macara
           cross: Cruce
@@ -1014,12 +1057,14 @@ ro:
           pumping_station: Stație de Pompare
           reservoir_covered: Rezervor Acoperit
           silo: Siloz
+          snow_cannon: Tun de Zăpadă
           snow_fence: Gard zăpadă
           storage_tank: Rezervor de depozitare
           street_cabinet: Cabinet stradal
           surveillance: Supraveghere
           telescope: Telescop
           tower: Turn
+          utility_pole: Stâlp Utilitar
           wastewater_plant: Stație de epurare a apei
           watermill: Fântână de apă
           water_tap: Robinet de apă
@@ -1040,6 +1085,7 @@ ro:
           "yes": Trecătoare prin munți
         natural:
           atoll: Atol
+          bare_rock: Stânci
           bay: Golf
           beach: Plajă
           cape: Cap
@@ -1073,6 +1119,7 @@ ro:
           sand: Nisip
           scree: Grohotiș
           scrub: Tufăriș
+          shingle: Plajă cu scoici și pietre
           spring: Izvor
           stone: Piatră
           strait: Strâmtoare
@@ -1143,6 +1190,7 @@ ro:
           "yes": Loc
         railway:
           abandoned: Cale ferată abandonată
+          buffer_stop: Tampon tren
           construction: Cale ferată în construcție
           disused: Cale ferată dezafectată
           funicular: Cale Ferată Funicular
@@ -1156,6 +1204,7 @@ ro:
           platform: Platformă feroviară
           preserved: Cale ferată rezervată
           proposed: Cale ferată propusă
+          rail: Șină
           spur: Cale ferată privată
           station: Gară
           stop: Stop la calea ferată
@@ -1164,6 +1213,7 @@ ro:
           switch: Macazul de cale ferată
           tram: Tramvai
           tram_stop: Stație de tramvai
+          turntable: Placă turnantă
           yard: Depou
         shop:
           agrarian: Magazin agricol
@@ -1204,7 +1254,7 @@ ro:
           deli: Deli
           department_store: Magazin specializat
           discount: Magazin cu itemuri la discount
-          doityourself: Bricolaj
+          doityourself: Magazin de bricolaj
           dry_cleaning: Curățătorie chimică
           e-cigarette: Magazin de țigări electronice
           electronics: Magazin de electronice
@@ -1230,7 +1280,7 @@ ro:
           health_food: Magazin de produse naturiste
           hearing_aids: Aparate Auditive
           herbalist: Herbalist
-          hifi: Hi-Fi
+          hifi: Magazin Hi-Fi
           houseware: Magazinul de electrocasnice
           ice_cream: Magazin de înghețate
           interior_decoration: Decoeațiuni interioare
@@ -1290,7 +1340,7 @@ ro:
           artwork: Operă de artă
           attraction: Atracție
           bed_and_breakfast: Cazare și mic dejun
-          cabin: Cabină
+          cabin: Cabană Turistică
           camp_pitch: Teren pentru camping
           camp_site: Loc de campare
           caravan_site: Parc de rulote
@@ -1363,10 +1413,12 @@ ro:
       status: Stare
       reports: Rapoarte
       last_updated: Ultima actualizare
+      last_updated_time_ago_user_html: '%{time_ago} de %{user}'
       link_to_reports: Vizualizați rapoartele
       reports_count:
-        one: 1 Report
-        other: '%{count} Rapoarte'
+        one: '%{count} Raport'
+        few: '%{count} Raporturi'
+        other: ""
       reported_item: Articol raportat
       states:
         ignored: Ignorat
@@ -1375,9 +1427,9 @@ ro:
     show:
       title: '%{status} Problema #%{issue_id}'
       reports:
-        zero: Nu există rapoarte
-        one: 1 report
-        other: '%{count} rapoarte'
+        one: '%{count} raport'
+        few: '%{count} raporturi'
+        other: ""
       no_reports: Fara rapoarte
       report_created_at: Prima dată raportată la %{datetime}
       last_resolved_at: Ultima rezolvată la %{datetime}
@@ -1409,6 +1461,7 @@ ro:
   issue_comments:
     create:
       comment_created: Comentariul dvs. a fost creat cu succes
+      issue_reassigned: Comentariul dvs. a fost creat și problema a fost reatribuită
   reports:
     new:
       title_html: '%{link} raport'
@@ -1484,6 +1537,7 @@ ro:
     help: Ajutor
     about: Despre
     copyright: Drepturi de autor
+    communities: Comunități
     community: Comunitate
     community_blogs: Bloguri ale comunității
     community_blogs_title: Bloguri ale membrilor comunității OpenStreetMap
@@ -1521,12 +1575,23 @@ ro:
       see_their_profile_html: Puteți vedea profilul respectiv la %{userurl}.
       befriend_them: De asemenea, îi puteți adăuga ca prieten la %{befriendurl}
       befriend_them_html: Le puteți adăuga și ca prieten la %{befriendurl}.
+    gpx_description:
+      description_with_tags_html: 'Se pare că fișierul dvs. GPX %{trace_name} cu descrierea
+        %{trace_description} și următoarele etichete: %{tags}'
+      description_with_no_tags_html: Se pare că fișierul dvs. GPX %{trace_name} cu
+        descrierea %{trace_description} și fără etichete
     gpx_failure:
       hi: Salut %{to_user},
       failed_to_import: 'nu a reușit să importe. Iată eroarea:'
+      more_info_html: Mai multe informații despre eșecurile de import GPX și despre
+        cum să le evitați pot fi găsite la %{url}.
       subject: '[OpenStreetMap] eșec import fișier GPX'
     gpx_success:
       hi: Salut %{to_user},
+      loaded:
+        one: încărcat cu succes cu %{trace_points} dintr-un posibil %{count} punct.
+        few: încărcat cu succes cu %{trace_points} dintr-un posibil %{count} puncte.
+        other: ""
       subject: '[OpenStreetMap] succes import fișier GPX'
     signup_confirm:
       subject: '[OpenStreetMap] Bun venit la OpenStreetMap'
@@ -1559,22 +1624,35 @@ ro:
         subject_other: '[OpenStreetMap] %{commenter} a comentat o notă care vă interesează'
         your_note: '%{commenter} a lăsat un comentariu pe o notă de pe hartă lângă
           %{place}.'
+        your_note_html: '%{commenter} a lăsat un comentariu la una dintre notele dvs.
+          de hartă lângă %{place}.'
         commented_note: '%{commenter} a lăsat un comentariu pe o notă de hartă pe
           care ați comentat-o. Nota este aproape de %{place}.'
+        commented_note_html: '%{commenter} a lăsat un comentariu pe o notă de hartă
+          pe care ați comentat-o. Nota este aproape de %{place}.'
       closed:
         subject_own: '[OpenStreetMap] %{commenter}a rezolvat una dintre notele tale'
         subject_other: '[OpenStreetMap] %{commenter} a rezolvat o notă care vă interesează'
         your_note: '%{commenter} a rezolvat una dintre notele dvs. de hartă lângă
           %{place}.'
+        your_note_html: '%{commenter} a rezolvat una dintre notele dvs. de hartă lângă
+          %{place}.'
         commented_note: '%{commenter} a rezolvat o notă de hartă pe care ați comentat-o.
           Nota este aproape de %{place}.'
+        commented_note_html: '%{commenter} a rezolvat o notă de hartă pe care ați
+          comentat-o. Nota este aproape de %{place}.'
       reopened:
         subject_own: '[OpenStreetMap] %{commenter} a reactivat una dintre notele tale'
         subject_other: '[OpenStreetMap] %{commenter} a reactivat o notă care vă interesează'
         your_note: '%{commenter} a reactivat una din notele dvs. de hartă lângă %{place}.'
+        your_note_html: '%{commenter} a reactivat una dintre notele dvs. de hartă
+          lângă %{place}.'
         commented_note: '%{commenter} a reactivat o notă de hartă pe care ați comentat-o.
           Nota este aproape de %{place}.'
+        commented_note_html: '%{commenter} a reactivat o notă de hartă pe care ați
+          comentat-o. Nota este aproape de %{place}.'
       details: Mai multe detalii despre notă pot fi găsite la adresa %{url}.
+      details_html: Mai multe detalii despre notă pot fi găsite la %{url}.
     changeset_comment_notification:
       hi: Salut %{to_user},
       greeting: Salut,
@@ -1585,8 +1663,12 @@ ro:
           care vă interesează'
         your_changeset: '%{commenter} a lăsat un comentariu la %{time} asupra unui
           set de modificări ale dvs.'
+        your_changeset_html: '%{commenter} a lăsat un comentariu la %{time} la unul
+          dintre seturile dvs. de modificări'
         commented_changeset: '%{commenter} a lăsat un comentariu %{time} cu privire
           la un set de modificări pe care îl urmăriți creat de %{changeset_author}'
+        commented_changeset_html: '%{commenter} a lăsat un comentariu la %{time} la
+          un set de modificări pe care îl vizionați, creat de %{changeset_author}'
         partial_changeset_with_comment: cu comentariul '%{changeset_comment}'
         partial_changeset_with_comment_html: cu comentariul '%{changeset_comment}'
         partial_changeset_without_comment: fără comentarii
@@ -1610,6 +1692,8 @@ ro:
       success: Confirmat contul dvs., vă mulțumim pentru înscrierea!
       already active: Acest cont a fost deja confirmat.
       unknown token: Codul de confirmare a expirat sau nu există.
+      resend_html: Dacă aveți nevoie să retrimitem e-mailul de confirmare, %{reconfirm_link}.
+      click_here: click aici
     confirm_resend:
       failure: Utilizatorul %{name} nu a fost găsit.
     confirm_email:
@@ -1620,6 +1704,12 @@ ro:
       success: Ați confirmat schimbarea adresei de e-mail!
       failure: O adresă de e-mail a fost deja confirmată cu acest token.
       unknown_token: Codul de confirmare a expirat sau nu există.
+    resend_success_flash:
+      confirmation_sent: Am trimis o nouă notă de confirmare către %{email} și, de
+        îndată ce vă confirmați contul, veți putea obține cartografierea.
+      whitelist: Dacă utilizați un sistem antispam care trimite cereri de confirmare,
+        vă rugăm să vă asigurați că ați plasat pe lista albă %{sender}, deoarece nu
+        putem răspunde la nicio solicitare de confirmare.
   messages:
     inbox:
       title: Mesaje primite
@@ -1713,6 +1803,7 @@ ro:
       edit_preferences: Editare preferințe
     edit:
       title: Editare preferințe
+      save: Actualizare Preferințe
       cancel: Revocare
     update:
       failure: Nu se pot salva preferințele.
@@ -1720,6 +1811,8 @@ ro:
       message: Preferințele au fost salvate.
   profiles:
     edit:
+      title: Editare Profil
+      save: Actualizează Profil
       cancel: Revocare
       image: Imagine
       gravatar:
@@ -1736,6 +1829,9 @@ ro:
       no home location: Nu ați introdus locația dvs. de domiciliu.
       update home location on click: Actualizați locația locuinței dvs. când faceți
         click pe hartă?
+    update:
+      success: Profil actualizat.
+      failure: Nu s-a putut actualiza profilul.
   sessions:
     new:
       title: Autentificare
@@ -1762,8 +1858,8 @@ ro:
           title: Autentificare cu Facebook
           alt: Conectați-vă cu un cont Facebook
         windowslive:
-          title: Conectați-vă cu Windows Live
-          alt: Conectați-vă cu un cont Windows Live
+          title: Conectare cu Microsoft
+          alt: Conectare cu un Cont Microsoft
         github:
           title: Conectați-vă cu GitHub
           alt: Conectați-vă cu un cont GitHub
@@ -1780,8 +1876,14 @@ ro:
       title: Ieșire
       heading: Deconectare din OpenStreetMap
       logout_button: Ieșire
+    suspended_flash:
+      suspended: Ne pare rău, contul dvs. a fost suspendat din cauza activității suspecte.
+      contact_support_html: Vă rugăm să contactați %{support_link} dacă doriți să
+        discutați acest lucru.
+      support: suport
   shared:
     markdown_help:
+      heading_html: Parsează cu %{kramdown_link}
       headings: Titluri
       heading: Titlu
       subheading: Subtitlu
@@ -1800,8 +1902,9 @@ ro:
   site:
     about:
       next: Înainte
-      used_by_html: '%{name} oferă datele hărților pe mii de site-uri web, aplicații
-        mobile și dispozitive hardware'
+      heading_html: '%{copyright}OpenStreetMap %{br} contributori'
+      used_by_html: '%{name} furnizează date de hărți pentru mii de site-uri web,
+        aplicații mobile și dispozitive hardware'
       lede_text: |-
         OpenStreetMap este construit de o comunitate de cartografi care contribuie și întrețin datele
         despre drumuri, trasee, cafenele, stații de cale ferată și multe altele din întreaga lume.
@@ -1810,8 +1913,43 @@ ro:
         OpenStreetMap îndrăgește cunoștințele locale. Colaboratorii folosesc imaginile aeriene, dispozitivele GPS și hărțile câmpurilor de joasă tehnologie pentru a verifica faptul că OSM
         este exactă și actualizată.
       community_driven_title: Condusă de comunitate
+      community_driven_1_html: |-
+        Comunitatea OpenStreetMap este diversă, pasionată și în creștere în fiecare zi.
+        Contribuitorii noștri includ cartografii entuziaști, profesioniști GIS, ingineri
+        rulează serverele OSM, umanitarii cartografiază zonele afectate de dezastre,
+        si multe altele.
+        Pentru a afla mai multe despre comunitate, consultați %{osm_blog_link},
+        %{user_diaries_link}, %{community_blogs_link} și
+        site-ul web %{osm_foundation_link}.
+      community_driven_osm_blog: OpenStreetMap Blog
+      community_driven_user_diaries: jurnale utilizatori
+      community_driven_community_blogs: blogurile comunității
+      community_driven_osm_foundation: Fundația OSM
       open_data_title: Deschideți datele
+      open_data_1_html: |-
+        OpenStreetMap este %{open_data}: sunteți liber să îl utilizați în orice scop
+        atâta timp cât creditați OpenStreetMap și colaboratorii săi. Dacă modificați sau
+        construiți pe date în anumite moduri, puteți distribui numai rezultatul
+        sub aceeași licență. Consultați %{copyright_license_link} pentru detalii.
+      open_data_open_data: date deschise
+      open_data_copyright_license: Pagina Drepturi de autor și licență
       legal_title: Legal
+      legal_1_1_html: |-
+        Acest site și multe alte servicii conexe sunt operate oficial de către
+        %{openstreetmap_foundation_link} (OSMF)
+        în numele comunității. Utilizarea tuturor serviciilor operate de OSMF este supusă
+        la %{terms_of_use_link}, %{aup_link} și %{privacy_policy_link}.
+        ​Căutați detalii
+      legal_1_1_openstreetmap_foundation: Fundația OpenStreetMap
+      legal_1_1_terms_of_use: Termeni de Utilizare
+      legal_1_1_aup: Politica de Utilizare Acceptabilă
+      legal_1_1_privacy_policy: Politica de Confidențialitate
+      legal_2_1_html: |-
+        Vă rugăm %{contact_the_osmf_link}
+        dacă aveți întrebări legate de licență, drepturi de autor sau alte întrebări legale.
+      legal_2_1_contact_the_osmf: contactați OSMF
+      legal_2_2_html: OpenStreetMap, logo-ul lupei și starea hărții sunt %{registered_trademarks_link}.
+      legal_2_2_registered_trademarks: mărci înregistrate ale OSMF
       partners_title: Parteneri
     copyright:
       foreign:
@@ -1828,18 +1966,132 @@ ro:
         mapping_link: Începeți să cartografiați
       legal_babble:
         title_html: Drepturi de autor și licență
+        introduction_1_html: |-
+          OpenStreetMap%{registered_trademark_link} este %{open_data}, licențiat în conformitate cu
+          %{odc_odbl_link} (ODbL) de către %{osm_foundation_link} (OSMF).
+        introduction_1_open_data: date deschise
+        introduction_1_odc_odbl: Open Data Commons Licență pentru baze de date deschise
+        introduction_1_osm_foundation: Fundația OpenStreetMap
+        introduction_2_html: |-
+          Sunteți liber să copiați, să distribuiți, să transmiteți și să adaptați datele noastre,
+          atâta timp cât creditați OpenStreetMap și a acestuia
+          contribuabili. Dacă modificați sau construiți pe baza datelor noastre, dvs
+          poate distribui rezultatul numai sub aceeași licență. The
+          %{legal_code_link} complet explică drepturile și responsabilitățile dvs.
+        introduction_2_legal_code: cod juridic
+        introduction_3_html: Documentația noastră este licențiată sub licența %{creative_commons_link}
+          (CC BY-SA 2.0).
+        introduction_3_creative_commons: Creative Commons Attribution-ShareAlike 2.0
         credit_title_html: Cum se creditează OpenStreetMap
-        credit_1_html: Noi cerem să utilizați creditul&copy; contribuitori OpenStreetMap&
-          rdquo;.
+        credit_1_html: 'Acolo unde utilizați datele OpenStreetMap, vi se cere să faceți
+          următoarele două lucruri:'
+        credit_2_1: Oferiți credit OpenStreetMap afișând notificarea noastră privind
+          drepturile de autor.
+        credit_2_2: Asigurați-vă că datele sunt disponibile în baza licenței pentru
+          baze de date deschise.
+        credit_3_html: |-
+          Pentru notificarea privind drepturile de autor, avem cerințe diferite despre cum ar trebui să fie
+          afișate, în funcție de modul în care utilizați datele noastre. De exemplu, diferit
+          se aplică reguli cu privire la modul de afișare a notificării privind drepturile de autor, în funcție de faptul că aveți
+          a creat o hartă navigabilă, o hartă tipărită sau o imagine statică. Detalii complete pe
+          cerințele pot fi găsite în %{attribution_guidelines_link}.
+        credit_3_attribution_guidelines: Orientări Privind Atribuirea
+        credit_4_1_html: |-
+          Pentru a clarifica faptul că datele sunt disponibile în cadrul Open
+          Licență pentru baze de date, puteți face link la %{this_copyright_page_link}.
+          Alternativ, și ca o cerință dacă distribuiți OSM într-un
+          formular de date, puteți numi și conecta direct la licență(e). În media
+          unde link-urile nu sunt posibile (de exemplu, lucrări tipărite), vă sugerăm
+          direcționați-vă cititorii către openstreetmap.org (poate prin extinderea
+          „OpenStreetMap” la această adresă completă) și la opendatacommons.org.
+          În acest exemplu, creditul apare în colțul hărții.
+        credit_4_1_this_copyright_page: această pagină de drepturi de autor
         attribution_example:
           alt: Exemplu de atribuire a OpenStreetMap pe o pagină Web
           title: Exemplul de atribuire
         more_title_html: Aflați mai multe.
+        more_1_1_html: Citiți mai multe despre utilizarea datelor noastre și despre
+          cum să ne creditați, la %{osmf_licence_page_link}.
+        more_1_1_osmf_licence_page: Pagina de licență OSMF
+        more_2_1_html: |-
+          Deși OpenStreetMap este date deschise, nu putem oferi o
+          API gratuit pentru hărți pentru terți.
+          Consultați %{api_usage_policy_link}, %{tile_usage_policy_link} și %{nominatim_usage_policy_link}.
+        more_2_1_api_usage_policy: Politica de utilizare API
+        more_2_1_tile_usage_policy: Politica de Utilizare a Plăcilor
+        more_2_1_nominatim_usage_policy: Politica Utilizare Nominatim
         contributors_title_html: Contribuitorii noștri
         contributors_intro_html: |-
           Contribuitorii noștri sunt mii de indivizi. De asemenea, includem
           date cu licență de la agențiile naționale de cartografiere
           și alte surse, printre care:
+        contributors_at_credit_html: |-
+          %{austria}: conține date de la %{stadt_wien_link} (sub %{cc_by_link}), %{land_vorarlberg_link}
+          și Land Tirol (sub %{cc_by_at_with_amendments_link}).
+        contributors_at_austria: Austria
+        contributors_at_stadt_wien: Stadt Wien
+        contributors_at_cc_by: CC BY
+        contributors_at_land_vorarlberg: Land Vorarlberg
+        contributors_at_cc_by_at_with_amendments: CC BY AT cu amendamente
+        contributors_au_credit_html: |-
+          %{australia}: Încorporează sau dezvoltat folosind limite administrative &copy; %{geoscape_australia_link}
+          licențiat de Commonwealth of Australia sub %{cc_licence_link}.
+        contributors_au_australia: Australia
+        contributors_au_geoscape_australia: Geoscape Australia
+        contributors_au_cc_licence: Creative Commons Attribution 4.0 International
+          licence (CC BY 4.0)
+        contributors_ca_credit_html: |-
+          %{canada}: Conține date de la
+          GeoBase&reg;, GeoGratis (&copy; Departamentul de Natură
+          Resources Canada), CanVec (&copy; Department of Natural
+          Resources Canada) și StatCan (Divizia de Geografie,
+          Statistics Canada).
+        contributors_ca_canada: Canada
+        contributors_fi_credit_html: |-
+          %{finland}: Conține date din
+          National Land Survey of Finland's Topographic Database
+          și alte seturi de date, sub %{nlsfi_license_link}.
+        contributors_fi_finland: Finlanda
+        contributors_fi_nlsfi_license: Licența NLSFI
+        contributors_fr_credit_html: |-
+          %{france}: Conține date provenite din
+          Direction Générale des Impôts.
+        contributors_fr_france: Franța
+        contributors_nz_new_zealand: Noua Zeelandă
+        contributors_nz_linz_data_service: Serviciul de date LINZ
+        contributors_nz_cc_by: CC BY 4.0
+        contributors_rs_credit_html: |-
+          %{serbia}: conține date din %{rgz_link} și %{open_data_portal}
+          (informații publice din Serbia), 2018.
+        contributors_rs_serbia: Serbia
+        contributors_rs_rgz: Autoritatea Geodetică a Serbiei
+        contributors_rs_open_data_portal: Portalul Național de Date Deschise
+        contributors_si_credit_html: |-
+          %{slovenia}: conține date din %{gu_link} și %{mkgp_link}
+          (informații publice din Slovenia).
+        contributors_si_slovenia: Slovenia
+        contributors_si_gu: Autoritatea de Topografie și Cartografiere
+        contributors_si_mkgp: Ministerul Agriculturii, Pădurilor și Alimentației
+        contributors_es_credit_html: |-
+          %{spain}: Conține date provenite din
+          Institutul Geografic Național Spaniol (%{ign_link}) și
+          Sistemul Cartografic Național (%{scne_link})
+          licențiat pentru reutilizare sub %{cc_by_link}.
+        contributors_es_spain: Spania
+        contributors_es_cc_by: CC BY 4.0
+        contributors_za_credit_html: '%{south_africa}: Conține date provenite de la
+          %{ngi_link}, drepturi de autor de stat rezervate.'
+        contributors_za_south_africa: Africa de Sud
+        contributors_za_ngi: 'Directoratul Șef: Informații Geo-Spațiale Naționale'
+        contributors_gb_credit_html: |-
+          %{united_kingdom}: Contains Ordnance
+          Datele sondajului &copy; Dreptul de autor al coroanei și dreptul de bază de date
+          2010-2023.
+        contributors_gb_united_kingdom: Regatul Unit
+        contributors_2_html: |-
+          Pentru mai multe detalii despre acestea și despre alte surse care au fost folosite
+          pentru a ajuta la îmbunătățirea OpenStreetMap, vă rugăm să consultați %{contributors_page_link} de pe Wiki OpenStreetMap.
+        contributors_2_contributors_page: Pagina contribuitorilor
         contributors_footer_2_html: |-
           Includerea datelor în OpenStreetMap nu implică faptul că originalul
           furnizor de date acceptă OpenStreetMap, oferă orice garanție sau
@@ -1849,6 +2101,19 @@ ro:
           date de la nici una dintre sursele protejate de drepturi de autor (de ex.,
           Hărți Google sau hărți tipărite) fără permisiunea explicită din partea deținătorilor
           drepturilor de autor.
+        infringement_2_1_html: |-
+          Dacă credeți că materialul protejat prin drepturi de autor a fost inadecvat
+          adăugat la baza de date OpenStreetMap sau la acest site, vă rugăm să consultați
+          la %{takedown_procedure_link} sau un fișier direct la nostru
+          %{online_filing_page_link}.
+        infringement_2_1_takedown_procedure: procedura de eliminare
+        infringement_2_1_online_filing_page: pagina de depunere online
+        trademarks_title: Mărci înregistrate
+        trademarks_1_1_html: |-
+          OpenStreetMap, logo-ul lupei și State of the Map sunt mărci comerciale înregistrate ale
+          Fundația OpenStreetMap. Dacă aveți întrebări despre utilizarea mărcilor, vă rugăm să consultați
+          %{trademark_policy_link}.
+        trademarks_1_1_trademark_policy: Politica Mărcilor Înregistrate
     index:
       js_1: Utilizați fie un browser care nu acceptă JavaScript, fie aveți JavaScript
         dezactivat.
@@ -1878,6 +2143,9 @@ ro:
       map_image: Imagine hartă (arată stratul standard)
       embeddable_html: HTML încorporabil
       licence: Licență
+      licence_details_html: Datele OpenStreetMap sunt licențiate sub %{odbl_link}
+        (ODbL).
+      odbl: Open Data Commons Open Database License
       too_large:
         advice: 'Dacă exportul de mai sus nu reușește, vă recomandăm să utilizați
           una dintre sursele de mai jos:'
@@ -1920,8 +2188,18 @@ ro:
             de exemplu un drum care lipsește sau adresa dvs., cel mai bun mod de a
             rezolva această problemă este să vă alăturați comunității OpenStreetMap
             și să adăugați sau să reparați singuri datele.
+        add_a_note:
+          instructions_1_html: |-
+            Doar faceți clic pe %{note_icon} sau pe aceeași pictogramă de pe afișajul hărții.
+            Aceasta va adăuga un marcator pe hartă, pe care îl puteți muta
+            prin tragere. Adăugați mesajul dvs., apoi faceți clic pe Salvați, iar alți cartografi vor investiga.
       other_concerns:
         title: Alte preocupări
+        concerns_html: |-
+          Dacă aveți nelămuriri cu privire la modul în care sunt utilizate datele noastre sau cu privire la conținut, vă rugăm să consultați
+          %{copyright_link} pentru mai multe informații legale sau contactați %{working_group_link} corespunzător.
+        copyright: Pagina de drepturi de autor
+        working_group: Grup de lucru al OSMF
     help:
       title: Obținerea de ajutor
       introduction: OpenStreetMap are mai multe resurse pentru a învăța despre proiect,
@@ -1944,6 +2222,9 @@ ro:
         title: Lista de e-mail-uri
         description: Adresați o întrebare sau discutați despre probleme interesante
           pe o gamă largă de liste de discuții de actualitate sau regionale.
+      community:
+        title: Forumul Comunității
+        description: Un loc comun pentru discuții despre OpenStreetMap.
       irc:
         title: IRC
         description: Chat interactiv în multe limbi diferite și pe mai multe subiecte.
@@ -1958,6 +2239,10 @@ ro:
       wiki:
         title: OpenStreetMap Wiki
         description: Caută pe wiki pentru o documentație OpenStreetMap detaliată.
+    potlatch:
+      removed: Editorul dvs. implicit OpenStreetMap este setat ca Potlatch. Deoarece
+        Adobe Flash Player a fost retras, Potlatch nu mai este disponibil pentru utilizare
+        într-un browser web.
     any_questions:
       title: Întrebări?
     sidebar:
@@ -2171,8 +2456,8 @@ ro:
     require_admin:
       not_an_admin: Trebuie să fii administrator pentru a efectua acea acțiune.
     setup_user_auth:
-      blocked_zero_hour: Aveți un mesaj urgent pe site-ul web OpenStreetMap. Trebuie
-        să citiți mesajul înainte de a vă putea salva modificările.
+      blocked_zero_hour: Aveți un mesaj urgent pe site-ul OpenStreetMap. Trebuie să
+        citiți mesajul înainte de a putea salva editările.
       blocked: Accesul la API a fost blocat. Conectați-vă la interfața web pentru
         a afla mai multe.
       need_to_see_terms: Accesul dvs. la API este suspendat temporar. Conectați-vă
@@ -2607,6 +2892,14 @@ ro:
         gps: Urmele GPS publice
         overlays: Activați suprapuneri pentru depanarea hărții
         title: Straturi
+      openstreetmap_contributors: OpenStreetMap contribuitori
+      make_a_donation: Faceți o Donație
+      website_and_api_terms: Termenii site-ului web și API
+      cyclosm_credit: Stil de plăci de %{cyclosm_link} găzduit de %{osm_france_link}
+      osm_france: OpenStreetMap Franța
+      thunderforest_credit: Plăci prin amabilitatea lui %{thunderforest_link}
+      andy_allan: Andy Allan
+      hotosm_name: Echipa Umanitară OpenStreetMap
     site:
       edit_tooltip: Modifică harta
       edit_disabled_tooltip: Măriți pentru a edita harta
@@ -2634,9 +2927,14 @@ ro:
         graphhopper_bicycle: Bicicletă (GraphHopper)
         graphhopper_car: Mașină (GraphHopper)
         graphhopper_foot: Mers (GraphHopper)
+        fossgis_valhalla_bicycle: Bicicletă (Valhalla)
+        fossgis_valhalla_car: Maşina (Valhalla)
+        fossgis_valhalla_foot: Mers (Valhalla)
       descend: Coborâre
       directions: Direcții
       distance: Distanță
+      distance_m: '%{distance}m'
+      distance_km: '%{distance}km'
       errors:
         no_route: Nu s-a putut găsi un traseu între cele două locuri.
         no_place: Scuze - nu am găsit '%{place}'.
index 72474027fdea5203c8f5df6c5c0d69c06aa8274e..b33dcc7b700a8542d58bcddb177ae2acba219c25 100644 (file)
@@ -1089,6 +1089,9 @@ skr-arab:
       save: پروفائل اپ ڈیٹ کرو
       cancel: منسوخ
       image: تصویر
+      show: ݙِکھاؤ
+      delete: مٹاؤ
+      undelete: بحال
   sessions:
     new:
       title: لاگ ان
index bc4c08c21beacb5f67ca02b51a53dd51c023a265..3bbe874dd46e962cb39778282813bd82cf592ab4 100644 (file)
@@ -59,7 +59,7 @@ sl:
         email_address_not_routable: ni preusmerljiv
     models:
       acl: Seznam nadzora dostopa
-      changeset: Sklop sprememb
+      changeset: Nabor sprememb
       changeset_tag: Oznaka množice sprememb
       country: Država
       diary_comment: Dnevniški komentar
@@ -301,7 +301,7 @@ sl:
           obstajajo, vendar si jih ne bo mogoče ogledati.
         retain_notes: Ohranjeni bodo morebitne opombe na zemljevidu in komentarji
           k opombam, vendar si jih ne bo mogoče ogledati.
-        retain_changeset_discussions: Ohranjeni bodo vaši pogovori o sklopih sprememb,
+        retain_changeset_discussions: Ohranjeni bodo vaši pogovori o naborih sprememb,
           če obstajajo.
         retain_email: Ohranjen bo vaš e-poštni naslov.
         confirm_delete: Ali ste prepričani?
@@ -361,7 +361,7 @@ sl:
     deleted_ago_by_html: Izbrisal %{user} %{time_ago}
     edited_ago_by_html: Uredil_a %{user} %{time_ago}
     version: Različica
-    in_changeset: Sklop sprememb
+    in_changeset: Nabor sprememb
     anonymous: anonimni
     no_comment: (brez komentarja)
     part_of: Del
@@ -380,7 +380,7 @@ sl:
     view_details: Prikaz podrobnosti
     location: 'Lokacija:'
     changeset:
-      title: 'Sklop sprememb: %{id}'
+      title: 'Nabor sprememb: %{id}'
       belongs_to: Avtor
       node: Vozlišč (%{count})
       node_paginated: Vozlišča (%{x}-%{y} od %{count})
@@ -391,15 +391,15 @@ sl:
       comment: Komentarji (%{count})
       hidden_comment_by_html: Skrit komentar %{user} %{time_ago}
       comment_by_html: Komentar %{user} %{time_ago}
-      changesetxml: Sklop sprememb XML
+      changesetxml: Nabor sprememb XML
       osmchangexml: osmChange XML
       feed:
-        title: Sklop sprememb %{id}
-        title_comment: Sklop sprememb %{id} – %{comment}
+        title: Nabor sprememb %{id}
+        title_comment: Nabor sprememb %{id} – %{comment}
       join_discussion: Prijavite se za pridružitev pogovoru
       discussion: Pogovor
-      still_open: Sklop sprememb je še vedno odprt – pogovor se bo začel, ko bo sklop
-        sprememb zaključen.
+      still_open: Nabor sprememb je še vedno odprt – pogovor se bo začel, ko bo nabor
+        sprememb zaprt.
     node:
       title_html: 'Vozlišče: %{name}'
       history_title_html: 'Zgodovina vozlišča: %{name}'
@@ -440,7 +440,7 @@ sl:
         node: vozlišče
         way: pot
         relation: relacija
-        changeset: sklop sprememb
+        changeset: nabor sprememb
         note: opomba
     timeout:
       title: Napaka časovne omejitve
@@ -449,7 +449,7 @@ sl:
         node: vozlišče
         way: pot
         relation: relacija
-        changeset: sklop sprememb
+        changeset: nabor sprememb
         note: opomba
     redacted:
       redaction: Redakcija %{id}
@@ -488,7 +488,7 @@ sl:
     changeset:
       anonymous: Anonimen
       no_edits: (brez urejanj)
-      view_changeset_details: Ogled podrobnosti sklopa sprememb
+      view_changeset_details: Ogled podrobnosti nabora sprememb
     changesets:
       id: ID
       saved_at: Shranjeno ob
@@ -502,26 +502,26 @@ sl:
       title_friend: Množice sprememb mojih prijateljev
       title_nearby: Sklopi sprememb bližnjih uporabnikov
       empty: Ni najdenih množic sprememb.
-      empty_area: Na tem območju ni sklopov sprememb.
+      empty_area: Na tem območju ni naborov sprememb.
       empty_user: Ni množic sprememb tega uporabnika.
-      no_more: Ni drugih najdenih sklopov sprememb.
+      no_more: Ni drugih najdenih naborov sprememb.
       no_more_area: Na tem območju ni drugih množic sprememb.
-      no_more_user: Ni drugih sklopov sprememb tega uporabnika.
+      no_more_user: Ni drugih naborov sprememb tega uporabnika.
       load_more: Naloži več
     timeout:
-      sorry: Žal je trajalo pridobivanje zahtevanega sklopa sprememb predolgo.
+      sorry: Žal je trajalo pridobivanje zahtevanega nabora sprememb predolgo.
   changeset_comments:
     comment:
-      comment: 'Nov komentar o sklopu sprememb #%{changeset_id} uporabnika %{author}'
+      comment: 'Nov komentar o naboru sprememb #%{changeset_id} uporabnika %{author}'
       commented_at_by_html: Posodobil_a %{user} %{when}
     comments:
-      comment: 'Nov komentar o sklopu sprememb #%{changeset_id} uporabnika %{author}'
+      comment: 'Nov komentar o naboru sprememb #%{changeset_id} uporabnika %{author}'
     index:
-      title_all: Razprava o sklopu sprememb OpenStreetMap
-      title_particular: 'Razprava o sklopu sprememb OpenStreetMap #%{changeset_id}'
+      title_all: Razprava o naboru sprememb OpenStreetMap
+      title_particular: 'Razprava o naboru sprememb OpenStreetMap #%{changeset_id}'
     timeout:
-      sorry: Žal je trajalo pridobivanje seznama zahtevanih komentarjev sklopov sprememb
-        predolgo.
+      sorry: Žal je trajalo pridobivanje seznama komentarjev nabora sprememb, ki ste
+        ga zahtevali, predolgo.
   dashboards:
     contact:
       km away: oddaljen %{count} km
@@ -1720,26 +1720,26 @@ sl:
       hi: Pozdravljeni, %{to_user},
       greeting: Pozdravljeni,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} je komentiral enega od vaših sklopov
+        subject_own: '[OpenStreetMap] %{commenter} je komentiral enega od vaših naborov
           sprememb'
         subject_other: '[OpenStreetMap] %{commenter} je komentiral množico sprememb,
           ki vas zanima'
-        your_changeset: '%{commenter} je %{time} komentiral enega od vaših sklopov
+        your_changeset: '%{commenter} je %{time} komentiral enega od vaših naborov
           sprememb'
         your_changeset_html: '%{commenter} je %{time} podal komentar na enega od vaših
-          sklopov sprememb'
-        commented_changeset: '%{commenter} je %{time} komentiral sklop sprememb, ki
+          naborov sprememb'
+        commented_changeset: '%{commenter} je %{time} komentiral nabor sprememb, ki
           ga spremljate in ga je ustvaril %{changeset_author}'
-        commented_changeset_html: '%{commenter} je podal komentar na sklop sprememb,
+        commented_changeset_html: '%{commenter} je podal komentar na nabor sprememb,
           ki ga opazujete in ki ga je %{time} ustvaril %{changeset_author}'
         partial_changeset_with_comment: s komentarjem »%{changeset_comment}«
         partial_changeset_with_comment_html: s komentarjem »%{changeset_comment}«
         partial_changeset_without_comment: brez komentarja
-      details: Več podrobnosti o tem sklopu sprememb lahko najdete na %{url}.
-      details_html: Več podrobnosti o tem sklopu sprememb lahko najdete na %{url}.
-      unsubscribe: Če se želite odnaročiti od obveščanja o tem sklopu sprememb, obiščite
+      details: Več podrobnosti o tem naboru sprememb lahko najdete na %{url}.
+      details_html: Več podrobnosti o tem naboru sprememb lahko najdete na %{url}.
+      unsubscribe: Če se želite odnaročiti od obveščanja o tem naboru sprememb, obiščite
         %{url} in kliknite »Odnaroči«.
-      unsubscribe_html: Če se želite odnaročiti od obveščanja o tem sklopu sprememb,
+      unsubscribe_html: Če se želite odnaročiti od obveščanja o tem naboru sprememb,
         obiščite %{url} in kliknite »Odnaroči«.
   confirmations:
     confirm:
@@ -1895,6 +1895,9 @@ sl:
       home location: Domača lokacija
       no home location: Niste nastavili vaše domače lokacije.
       update home location on click: Posodobim domačo lokacijo ob kliku zemljevida?
+      show: Prikaži
+      delete: Izbriši
+      undelete: Razvljavi izbris
     update:
       success: Profil posodobljen.
       failure: Profila ni bilo mogoče posodobiti.
index 4d74ecd4176952ce5c98de18938e0ada872d2f5e..085c06003f11b4f25125c722e40d19132c6e17ca 100644 (file)
@@ -1778,6 +1778,9 @@ zh-TW:
       home location: 家的位置
       no home location: 您尚未輸入家的位置。
       update home location on click: 當我點選地圖時更新家的位置?
+      show: 顯示
+      delete: 刪除
+      undelete: 還原刪除
     update:
       success: 已更新基本資料。
       failure: 無法更新個人資料。
index 9d6de4a6fafbc7ec6eb35a1adbd0700ecabf2b34..aa8e21938b149ffe13ca0f0a7e03fb107c3786d1 100644 (file)
@@ -9,10 +9,18 @@ module Api
         { :path => "/api/capabilities", :method => :get },
         { :controller => "api/capabilities", :action => "show" }
       )
+      assert_routing(
+        { :path => "/api/capabilities.json", :method => :get },
+        { :controller => "api/capabilities", :action => "show", :format => "json" }
+      )
       assert_recognizes(
         { :controller => "api/capabilities", :action => "show" },
         { :path => "/api/0.6/capabilities", :method => :get }
       )
+      assert_recognizes(
+        { :controller => "api/capabilities", :action => "show", :format => "json" },
+        { :path => "/api/0.6/capabilities.json", :method => :get }
+      )
     end
 
     def test_capabilities
@@ -32,5 +40,28 @@ module Api
         end
       end
     end
+
+    def test_capabilities_json
+      get api_capabilities_path, :params => { :format => "json" }
+      assert_response :success
+      js = ActiveSupport::JSON.decode(@response.body)
+      assert_not_nil js
+
+      assert_equal Settings.api_version, js["version"]
+      assert_equal Settings.generator, js["generator"]
+      assert_equal Settings.api_version, js["api"]["version"]["minimum"]
+      assert_equal Settings.api_version, js["api"]["version"]["maximum"]
+      assert_equal Settings.max_request_area, js["api"]["area"]["maximum"]
+      assert_equal Settings.max_note_request_area, js["api"]["note_area"]["maximum"]
+      assert_equal Settings.tracepoints_per_page, js["api"]["tracepoints"]["per_page"]
+      assert_equal Changeset::MAX_ELEMENTS, js["api"]["changesets"]["maximum_elements"]
+      assert_equal Settings.default_changeset_query_limit, js["api"]["changesets"]["default_query_limit"]
+      assert_equal Settings.max_changeset_query_limit, js["api"]["changesets"]["maximum_query_limit"]
+      assert_equal Settings.max_number_of_relation_members, js["api"]["relationmembers"]["maximum"]
+      assert_equal "online", js["api"]["status"]["database"]
+      assert_equal "online", js["api"]["status"]["api"]
+      assert_equal "online", js["api"]["status"]["gpx"]
+      assert_equal Settings.imagery_blacklist.length, js["policy"]["imagery"]["blacklist"].length
+    end
   end
 end
index 7f2cd0abb35c908d957835d12833c7648a470d57..4f96e3ecb0d713b78f70988adb8f2f301d9c35e9 100644 (file)
@@ -151,7 +151,7 @@ module Api
       get changeset_show_path(changeset)
       assert_response :success, "cannot get first changeset"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "osm>changeset[id='#{changeset.id}']", 1
       assert_select "osm>changeset>@open", "true"
       assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
@@ -161,7 +161,7 @@ module Api
       get changeset_show_path(changeset), :params => { :include_discussion => true }
       assert_response :success, "cannot get first changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "osm>changeset[id='#{changeset.id}']", 1
       assert_select "osm>changeset>@open", "true"
       assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
@@ -175,7 +175,7 @@ module Api
       get changeset_show_path(changeset), :params => { :include_discussion => true }
       assert_response :success, "cannot get closed changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "osm>changeset[id='#{changeset.id}']", 1
       assert_select "osm>changeset>@open", "false"
       assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
@@ -194,7 +194,7 @@ module Api
       assert_not_nil js
 
       assert_equal Settings.api_version, js["version"]
-      assert_equal "OpenStreetMap server", js["generator"]
+      assert_equal Settings.generator, js["generator"]
       assert_equal changeset.id, js["changeset"]["id"]
       assert js["changeset"]["open"]
       assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
@@ -210,7 +210,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal Settings.api_version, js["version"]
-      assert_equal "OpenStreetMap server", js["generator"]
+      assert_equal Settings.generator, js["generator"]
       assert_equal changeset.id, js["changeset"]["id"]
       assert js["changeset"]["open"]
       assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
@@ -247,7 +247,7 @@ module Api
 
       assert_not_nil js
       assert_equal Settings.api_version, js["version"]
-      assert_equal "OpenStreetMap server", js["generator"]
+      assert_equal Settings.generator, js["generator"]
       assert_equal changeset.id, js["changeset"]["id"]
       assert_not js["changeset"]["open"]
       assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
@@ -521,7 +521,7 @@ module Api
                       "can't upload a simple valid creation to changeset: #{@response.body}"
 
       # check the returned payload
-      assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "diffResult>node", 1
       assert_select "diffResult>way", 1
       assert_select "diffResult>relation", 1
@@ -759,7 +759,7 @@ module Api
                       "can't do a conditional delete of in use objects: #{@response.body}"
 
       # check the returned payload
-      assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "diffResult>node", 1
       assert_select "diffResult>way", 1
       assert_select "diffResult>relation", 1
@@ -1430,7 +1430,7 @@ module Api
                       "failed to return error in XML format"
 
       # check the returned payload
-      assert_select "osmError[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "osmError[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
       assert_select "osmError>status", 1
       assert_select "osmError>message", 1
     end
@@ -1890,7 +1890,7 @@ module Api
       assert_not_nil js
 
       assert_equal Settings.api_version, js["version"]
-      assert_equal "OpenStreetMap server", js["generator"]
+      assert_equal Settings.generator, js["generator"]
       assert_equal 2, js["changesets"].count
 
       # check that the correct error is given when we provide both UID and name
@@ -1950,23 +1950,58 @@ module Api
 
       get changesets_path
       assert_response :success
-      assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
 
       get changesets_path(:limit => "3")
       assert_response :success
-      assert_changesets [changeset5, changeset4, changeset3]
+      assert_changesets_in_order [changeset5, changeset4, changeset3]
 
       get changesets_path(:limit => "0")
       assert_response :bad_request
 
       get changesets_path(:limit => Settings.max_changeset_query_limit)
       assert_response :success
-      assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
 
       get changesets_path(:limit => Settings.max_changeset_query_limit + 1)
       assert_response :bad_request
     end
 
+    ##
+    # test the query functionality of changesets with the order parameter
+    def test_query_order
+      user = create(:user)
+      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
+      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
+      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
+      changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
+
+      get changesets_path(:order => "oldest")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+
+      get changesets_path(:order => "oldest", :time => "2008-01-01T00:00Z,2018-01-01T00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+
+      get changesets_path(:order => "oldest", :time => "2008-01-02T00:00Z,2018-01-01T00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+
+      get changesets_path(:order => "oldest", :time => "2008-01-02T00:01Z,2018-01-01T00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset2, changeset3, changeset4, changeset5]
+
+      get changesets_path(:order => "oldest", :time => "2008-04-01T00:00Z,2018-01-01T00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset4, changeset5]
+
+      get changesets_path(:order => "oldest", :time => "2008-06-01T00:00Z,2018-01-01T00:00Z")
+      assert_response :success
+      assert_changesets_in_order []
+    end
+
     ##
     # check that errors are returned if garbage is inserted
     # into query strings
@@ -2247,8 +2282,7 @@ module Api
     private
 
     ##
-    # boilerplate for checking that certain changesets exist in the
-    # output.
+    # check that certain changesets exist in the output
     def assert_changesets(changesets)
       assert_select "osm>changeset", changesets.size
       changesets.each do |changeset|
@@ -2256,6 +2290,15 @@ module Api
       end
     end
 
+    ##
+    # check that certain changesets exist in the output in the specified order
+    def assert_changesets_in_order(changesets)
+      assert_select "osm>changeset", changesets.size
+      changesets.each_with_index do |changeset, index|
+        assert_select "osm>changeset:nth-child(#{index + 1})[id='#{changeset.id}']", 1
+      end
+    end
+
     ##
     # update the changeset_id of a way element
     def update_changeset(xml, changeset_id)
index eb8f8e02256eb5c3d8e97341a2f2758316199ba6..7f2c196654476c6499f058728952e0e2a17348aa 100644 (file)
@@ -915,7 +915,7 @@ module Api
       assert_response :success
 
       # count one osm element
-      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
 
       # we should have only the expected number of relations
       assert_select "osm>relation", expected_relations.size
index c9464ffeddd0bc36eec82d4480b696aac71ddef2..6365d46e5de0aba5210c181131194d15dde78ca7 100644 (file)
@@ -563,35 +563,35 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     # Try and get the index
     get diary_entries_path
     assert_response :success
-    assert_select "div.diary_post", :count => 20
+    assert_select "article.diary_post", :count => 20
     assert_select "li.page-item a.page-link", :text => "Older Entries", :count => 1
     assert_select "li.page-item.disabled span.page-link", :text => "Newer Entries", :count => 1
 
     # Try and get the second page
     get css_select("li.page-item a.page-link").first["href"]
     assert_response :success
-    assert_select "div.diary_post", :count => 20
+    assert_select "article.diary_post", :count => 20
     assert_select "li.page-item a.page-link", :text => "Older Entries", :count => 1
     assert_select "li.page-item a.page-link", :text => "Newer Entries", :count => 1
 
     # Try and get the third page
     get css_select("li.page-item a.page-link").first["href"]
     assert_response :success
-    assert_select "div.diary_post", :count => 10
+    assert_select "article.diary_post", :count => 10
     assert_select "li.page-item.disabled span.page-link", :text => "Older Entries", :count => 1
     assert_select "li.page-item a.page-link", :text => "Newer Entries", :count => 1
 
     # Go back to the second page
     get css_select("li.page-item a.page-link").last["href"]
     assert_response :success
-    assert_select "div.diary_post", :count => 20
+    assert_select "article.diary_post", :count => 20
     assert_select "li.page-item a.page-link", :text => "Older Entries", :count => 1
     assert_select "li.page-item a.page-link", :text => "Newer Entries", :count => 1
 
     # Go back to the first page
     get css_select("li.page-item a.page-link").last["href"]
     assert_response :success
-    assert_select "div.diary_post", :count => 20
+    assert_select "article.diary_post", :count => 20
     assert_select "li.page-item a.page-link", :text => "Older Entries", :count => 1
     assert_select "li.page-item.disabled span.page-link", :text => "Newer Entries", :count => 1
   end
@@ -997,7 +997,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "index"
     assert_no_missing_translations
-    assert_select "div.diary_post", entries.count
+    assert_select "article.diary_post", entries.count
 
     entries.each do |entry|
       assert_select "a[href=?]", "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}"
index cb7125cca157cc3ed96e9f7e0dfaeab78690c60a..044f71681f2ec9ef2432bcc98c25dd00ecb3acfc 100644 (file)
@@ -111,7 +111,7 @@ class UserHelperTest < ActionView::TestCase
 
   def test_openid_logo
     logo = openid_logo
-    assert_match %r{^<img .* class="openid_logo" src="/images/openid_small.png" />$}, logo
+    assert_match %r{^<img .* src="/images/openid_small.png" />$}, logo
   end
 
   def test_auth_button
index 8329b19627942a57e2e251c3ba13c584062ae957..a4ed07e09eac0079a610f8e03762b0b89aeda105 100644 (file)
@@ -239,11 +239,11 @@ class UserTest < ActiveSupport::TestCase
     assert_predicate create(:administrator_user), :administrator?
   end
 
-  def test_has_role?
-    assert_not create(:user).has_role?("administrator")
-    assert_not create(:user).has_role?("moderator")
-    assert create(:administrator_user).has_role?("administrator")
-    assert create(:moderator_user).has_role?("moderator")
+  def test_role?
+    assert_not create(:user).role?("administrator")
+    assert_not create(:user).role?("moderator")
+    assert create(:administrator_user).role?("administrator")
+    assert create(:moderator_user).role?("moderator")
   end
 
   def test_soft_destroy
index 2be69e654412d3d4eaef79bf29672638e387fa71..5ff60cd309f263db36b99d2d5011f7e4814e684a 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
   resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
   integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
 
-"@eslint/eslintrc@^2.1.1":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93"
-  integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==
+"@eslint/eslintrc@^2.1.2":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
+  integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
   dependencies:
     ajv "^6.12.4"
     debug "^4.3.2"
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@^8.46.0":
-  version "8.46.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6"
-  integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==
+"@eslint/js@^8.47.0":
+  version "8.47.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d"
+  integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==
 
 "@humanwhocodes/config-array@^0.11.10":
   version "0.11.10"
@@ -218,20 +218,20 @@ eslint-scope@^7.2.2:
     esrecurse "^4.3.0"
     estraverse "^5.2.0"
 
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2:
-  version "3.4.2"
-  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f"
-  integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+  version "3.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+  integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
 eslint@^8.0.0:
-  version "8.46.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552"
-  integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==
+  version "8.47.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806"
+  integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.6.1"
-    "@eslint/eslintrc" "^2.1.1"
-    "@eslint/js" "^8.46.0"
+    "@eslint/eslintrc" "^2.1.2"
+    "@eslint/js" "^8.47.0"
     "@humanwhocodes/config-array" "^0.11.10"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"
@@ -242,7 +242,7 @@ eslint@^8.0.0:
     doctrine "^3.0.0"
     escape-string-regexp "^4.0.0"
     eslint-scope "^7.2.2"
-    eslint-visitor-keys "^3.4.2"
+    eslint-visitor-keys "^3.4.3"
     espree "^9.6.1"
     esquery "^1.4.2"
     esutils "^2.0.2"