]> git.openstreetmap.org Git - rails.git/commitdiff
Merge pull request #5056 from AntonKhorev/diary-og-description
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 14 Aug 2024 13:38:28 +0000 (14:38 +0100)
committerGitHub <noreply@github.com>
Wed, 14 Aug 2024 13:38:28 +0000 (14:38 +0100)
Set og:description meta tag to diary entry description

42 files changed:
Gemfile.lock
app/assets/javascripts/index/directions-endpoint.js [new file with mode: 0644]
app/assets/javascripts/index/directions.js
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/richtext.js
app/assets/stylesheets/common.scss
app/controllers/api/notes_controller.rb
app/controllers/diary_comments_controller.rb
app/views/api/changesets/index.json.jbuilder
app/views/api/messages/inbox.json.jbuilder
app/views/api/messages/outbox.json.jbuilder
app/views/api/notes/index.json.jbuilder
app/views/api/users/index.json.jbuilder
app/views/shared/_richtext_field.html.erb
config/locales/az.yml
config/locales/be.yml
config/locales/bg.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cy.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/fa.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/is.yml
config/locales/lb.yml
config/locales/mk.yml
config/locales/nl.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/skr-arab.yml
config/locales/zh-TW.yml
script/cleanup
test/controllers/diary_comments_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/controllers/user_blocks_controller_test.rb
yarn.lock

index 00984911cba78e05b9f568389776d9b6d2e2f30c..4cb7d0729b63bfd0d3633927f202617f799bd5be 100644 (file)
@@ -95,8 +95,8 @@ GEM
     autoprefixer-rails (10.4.19.0)
       execjs (~> 2)
     aws-eventstream (1.3.0)
-    aws-partitions (1.962.0)
-    aws-sdk-core (3.201.3)
+    aws-partitions (1.963.0)
+    aws-sdk-core (3.201.4)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
@@ -152,7 +152,7 @@ GEM
       rack-test (>= 0.6.3)
       regexp_parser (>= 1.5, < 3.0)
       xpath (~> 3.2)
-    concurrent-ruby (1.3.3)
+    concurrent-ruby (1.3.4)
     config (5.5.1)
       deep_merge (~> 1.2, >= 1.2.1)
     connection_pool (2.4.1)
@@ -403,8 +403,8 @@ GEM
       actionpack (>= 4.2)
       omniauth (~> 2.0)
     openstreetmap-deadlock_retry (1.3.1)
-    parallel (1.25.1)
-    parser (3.3.4.0)
+    parallel (1.26.2)
+    parser (3.3.4.2)
       ast (~> 2.4.1)
       racc
     pg (1.5.7)
@@ -485,7 +485,7 @@ GEM
       io-console (~> 0.5)
     request_store (1.7.0)
       rack (>= 1.4)
-    rexml (3.3.4)
+    rexml (3.3.5)
       strscan
     rinku (2.0.6)
     rotp (6.3.0)
diff --git a/app/assets/javascripts/index/directions-endpoint.js b/app/assets/javascripts/index/directions-endpoint.js
new file mode 100644 (file)
index 0000000..0f53e77
--- /dev/null
@@ -0,0 +1,84 @@
+OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, geocodeCallback) {
+  var endpoint = {};
+
+  endpoint.marker = L.marker([0, 0], {
+    icon: L.icon({
+      iconUrl: iconUrl,
+      iconSize: [25, 41],
+      iconAnchor: [12, 41],
+      popupAnchor: [1, -34],
+      shadowUrl: OSM.MARKER_SHADOW,
+      shadowSize: [41, 41]
+    }),
+    draggable: true,
+    autoPan: true
+  });
+
+  endpoint.marker.on("drag dragend", function (e) {
+    endpoint.setLatLng(e.target.getLatLng());
+    dragCallback(e.type === "drag");
+  });
+
+  input.on("keydown", function () {
+    input.removeClass("is-invalid");
+  });
+
+  input.on("change", function (e) {
+    // make text the same in both text boxes
+    var value = e.target.value;
+    endpoint.setValue(value);
+  });
+
+  endpoint.setValue = function (value, latlng) {
+    endpoint.value = value;
+    delete endpoint.latlng;
+    input.removeClass("is-invalid");
+    input.val(value);
+
+    if (latlng) {
+      endpoint.setLatLng(latlng);
+    } else {
+      endpoint.getGeocode();
+    }
+  };
+
+  endpoint.getGeocode = function () {
+    // if no one has entered a value yet, then we can't geocode, so don't
+    // even try.
+    if (!endpoint.value) {
+      return;
+    }
+
+    endpoint.awaitingGeocode = true;
+
+    var viewbox = map.getBounds().toBBoxString(); // <sw lon>,<sw lat>,<ne lon>,<ne lat>
+
+    $.getJSON(OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox, function (json) {
+      endpoint.awaitingGeocode = false;
+      endpoint.hasGeocode = true;
+      if (json.length === 0) {
+        input.addClass("is-invalid");
+        alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
+        return;
+      }
+
+      endpoint.setLatLng(L.latLng(json[0]));
+
+      input.val(json[0].display_name);
+
+      geocodeCallback();
+    });
+  };
+
+  endpoint.setLatLng = function (ll) {
+    var precision = OSM.zoomPrecision(map.getZoom());
+    input.val(ll.lat.toFixed(precision) + ", " + ll.lng.toFixed(precision));
+    endpoint.hasGeocode = true;
+    endpoint.latlng = ll;
+    endpoint.marker
+      .setLatLng(ll)
+      .addTo(map);
+  };
+
+  return endpoint;
+};
index ae01cb566f5732fcb088900ad7c028aa2d7a43b7..ccd4a68c253ada6b537f063f465b9fb61f2e7a18 100644 (file)
@@ -1,9 +1,10 @@
+//= require ./directions-endpoint
 //= require_self
 //= require_tree ./directions
 //= require qs/dist/qs
 
 OSM.Directions = function (map) {
-  var awaitingRoute; // true if we've asked the engine for a route and are waiting to hear back
+  var routeRequest = null; // jqXHR object of an ongoing route request or null
   var chosenEngine;
 
   var popup = L.popup({ autoPanPadding: [100, 100] });
@@ -21,17 +22,19 @@ OSM.Directions = function (map) {
   });
 
   var endpointDragCallback = function (dragging) {
-    if (map.hasLayer(polyline)) {
-      getRoute(false, !dragging);
-    }
+    if (!map.hasLayer(polyline)) return;
+    if (dragging && !chosenEngine.draggable) return;
+    if (dragging && routeRequest) return;
+
+    getRoute(false, !dragging);
   };
   var endpointGeocodeCallback = function () {
     getRoute(true, true);
   };
 
   var endpoints = [
-    Endpoint($("input[name='route_from']"), OSM.MARKER_GREEN, endpointDragCallback, endpointGeocodeCallback),
-    Endpoint($("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointGeocodeCallback)
+    OSM.DirectionsEndpoint(map, $("input[name='route_from']"), OSM.MARKER_GREEN, endpointDragCallback, endpointGeocodeCallback),
+    OSM.DirectionsEndpoint(map, $("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointGeocodeCallback)
   ];
 
   var expiry = new Date();
@@ -51,94 +54,6 @@ OSM.Directions = function (map) {
     select.append("<option value='" + i + "'>" + I18n.t("javascripts.directions.engines." + engine.id) + "</option>");
   });
 
-  function Endpoint(input, iconUrl, dragCallback, geocodeCallback) {
-    var endpoint = {};
-
-    endpoint.marker = L.marker([0, 0], {
-      icon: L.icon({
-        iconUrl: iconUrl,
-        iconSize: [25, 41],
-        iconAnchor: [12, 41],
-        popupAnchor: [1, -34],
-        shadowUrl: OSM.MARKER_SHADOW,
-        shadowSize: [41, 41]
-      }),
-      draggable: true,
-      autoPan: true
-    });
-
-    endpoint.marker.on("drag dragend", function (e) {
-      var dragging = (e.type === "drag");
-      if (dragging && !chosenEngine.draggable) return;
-      if (dragging && awaitingRoute) return;
-      endpoint.setLatLng(e.target.getLatLng());
-      dragCallback(dragging);
-    });
-
-    input.on("keydown", function () {
-      input.removeClass("is-invalid");
-    });
-
-    input.on("change", function (e) {
-      // make text the same in both text boxes
-      var value = e.target.value;
-      endpoint.setValue(value);
-    });
-
-    endpoint.setValue = function (value, latlng) {
-      endpoint.value = value;
-      delete endpoint.latlng;
-      input.removeClass("is-invalid");
-      input.val(value);
-
-      if (latlng) {
-        endpoint.setLatLng(latlng);
-      } else {
-        endpoint.getGeocode();
-      }
-    };
-
-    endpoint.getGeocode = function () {
-      // if no one has entered a value yet, then we can't geocode, so don't
-      // even try.
-      if (!endpoint.value) {
-        return;
-      }
-
-      endpoint.awaitingGeocode = true;
-
-      var viewbox = map.getBounds().toBBoxString(); // <sw lon>,<sw lat>,<ne lon>,<ne lat>
-
-      $.getJSON(OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox, function (json) {
-        endpoint.awaitingGeocode = false;
-        endpoint.hasGeocode = true;
-        if (json.length === 0) {
-          input.addClass("is-invalid");
-          alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
-          return;
-        }
-
-        endpoint.setLatLng(L.latLng(json[0]));
-
-        input.val(json[0].display_name);
-
-        geocodeCallback();
-      });
-    };
-
-    endpoint.setLatLng = function (ll) {
-      var precision = OSM.zoomPrecision(map.getZoom());
-      input.val(ll.lat.toFixed(precision) + ", " + ll.lng.toFixed(precision));
-      endpoint.hasGeocode = true;
-      endpoint.latlng = ll;
-      endpoint.marker
-        .setLatLng(ll)
-        .addTo(map);
-    };
-
-    return endpoint;
-  }
-
   $(".directions_form .reverse_directions").on("click", function () {
     var coordFrom = endpoints[0].latlng,
         coordTo = endpoints[1].latlng,
@@ -202,7 +117,7 @@ OSM.Directions = function (map) {
 
   function getRoute(fitRoute, reportErrors) {
     // Cancel any route that is already in progress
-    if (awaitingRoute) awaitingRoute.abort();
+    if (routeRequest) routeRequest.abort();
 
     // go fetch geocodes for any endpoints which have not already
     // been geocoded.
@@ -236,8 +151,8 @@ OSM.Directions = function (map) {
     $("#sidebar_content").html($(".directions_form .loader_copy").html());
     map.setSidebarOverlaid(false);
 
-    awaitingRoute = chosenEngine.getRoute([o, d], function (err, route) {
-      awaitingRoute = null;
+    routeRequest = chosenEngine.getRoute([o, d], function (err, route) {
+      routeRequest = null;
 
       if (err) {
         map.removeLayer(polyline);
index 55d492b29421968cad2e0b3585aebdcdd2c0e23a..82efab506c80f4d7dbd27f465f04928d383664f9 100644 (file)
@@ -22,7 +22,7 @@ L.OSM.layers = function (options) {
         .prop("checked", map.hasLayer(layer))
         .appendTo(buttonContainer);
 
-      var item = $("<label class='btn btn-outline-primary border-4 rounded-3 bg-transparent position-absolute top-0 start-0 bottom-0 end-0 m-n1 overflow-hidden'>")
+      var item = $("<label class='btn btn-outline-primary border-4 rounded-3 bg-transparent position-absolute p-0 h-100 w-100 overflow-hidden'>")
         .prop("for", id)
         .append($("<span class='badge position-absolute top-0 start-0 rounded-top-0 rounded-start-0 py-1 px-2 bg-body bg-opacity-75 text-body text-wrap text-start fs-6 lh-base'>").append(layer.options.name))
         .appendTo(buttonContainer);
index 259b914de614f6d2762cbd4beb3e07ca7adc0843..1576656eece0a21f91457a548a5c2b4279dc52f7 100644 (file)
@@ -4,18 +4,33 @@ $(document).ready(function () {
    * the associated preview pne so that it will be regenerated when
    * the user next switches to it.
    */
-  $(".richtext_content textarea").change(function () {
-    $(this).parents(".richtext_container").find(".richtext_preview").empty();
+  $(".richtext_container textarea").change(function () {
+    var container = $(this).closest(".richtext_container");
+
+    container.find(".tab-pane[id$='_preview']").empty();
   });
 
   /*
-   * Install a handler to switch to preview mode
+   * Install a handler to set the minimum preview pane height
+   * when switching away from an edit pane
    */
-  $(".richtext_dopreview").on("show.bs.tab", function () {
-    var editor = $(this).parents(".richtext_container").find("textarea");
-    var preview = $(this).parents(".richtext_container").find(".richtext_preview");
+  $(".richtext_container button[data-bs-target$='_edit']").on("hide.bs.tab", function () {
+    var container = $(this).closest(".richtext_container");
+    var editor = container.find("textarea");
+    var preview = container.find(".tab-pane[id$='_preview']");
     var minHeight = editor.outerHeight() - preview.outerHeight() + preview.height();
 
+    preview.css("min-height", minHeight + "px");
+  });
+
+  /*
+   * Install a handler to switch to preview mode
+   */
+  $(".richtext_container button[data-bs-target$='_preview']").on("show.bs.tab", function () {
+    var container = $(this).closest(".richtext_container");
+    var editor = container.find("textarea");
+    var preview = container.find(".tab-pane[id$='_preview']");
+
     if (preview.contents().length === 0) {
       preview.oneTime(500, "loading", function () {
         preview.addClass("loading");
@@ -26,7 +41,22 @@ $(document).ready(function () {
         preview.removeClass("loading");
       });
     }
-
-    preview.css("min-height", minHeight + "px");
   });
+
+  var updateHelp = function () {
+    $(".richtext_container .richtext_help_sidebar:not(:visible):not(:empty)").each(function () {
+      var container = $(this).closest(".richtext_container");
+      $(this).children().appendTo(container.find(".tab-pane[id$='_help']"));
+    });
+    $(".richtext_container .richtext_help_sidebar:visible:empty").each(function () {
+      var container = $(this).closest(".richtext_container");
+      container.find(".tab-pane[id$='_help']").children().appendTo($(this));
+      if (container.find("button[data-bs-target$='_help'].active").length) {
+        container.find("button[data-bs-target$='_edit']").tab("show");
+      }
+    });
+  };
+
+  updateHelp();
+  $(window).on("resize", updateHelp);
 });
index a1734682e159e2c3040ca67fee5b828c864331cd..321b0bcb9af1dd17fa091ca51e1f8dbf397991b7 100644 (file)
@@ -412,9 +412,12 @@ body.small-nav {
 
 .layers-ui {
   .base-layers > * {
-    height: 56px;
+    height: 3.5rem;
 
     > .btn {
+      box-sizing: content-box;
+      top: - map.get($border-widths, 4);
+      left: - map.get($border-widths, 4);
       --bs-btn-border-color: var(--bs-body-bg);
     }
     > .btn:hover {
index d53059a94e0f019f1e56e374e332d8b6f483f07f..be36421d943baf40b0ea2cd8553a1752a2ec323a 100644 (file)
@@ -115,12 +115,12 @@ module Api
       comment = params[:text]
 
       # Find the note and check it is valid
-      @note = Note.find(id)
-      raise OSM::APINotFoundError unless @note
-      raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
-
-      # Mark the note as hidden
       Note.transaction do
+        @note = Note.lock.find(id)
+        raise OSM::APINotFoundError unless @note
+        raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+
+        # Mark the note as hidden
         @note.status = "hidden"
         @note.save
 
@@ -146,13 +146,13 @@ module Api
       comment = params[:text]
 
       # Find the note and check it is valid
-      @note = Note.find(id)
-      raise OSM::APINotFoundError unless @note
-      raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
-      raise OSM::APINoteAlreadyClosedError, @note if @note.closed?
-
-      # Add a comment to the note
       Note.transaction do
+        @note = Note.lock.find(id)
+        raise OSM::APINotFoundError unless @note
+        raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+        raise OSM::APINoteAlreadyClosedError, @note if @note.closed?
+
+        # Add a comment to the note
         add_comment(@note, comment, "commented")
       end
 
@@ -174,13 +174,13 @@ module Api
       comment = params[:text]
 
       # Find the note and check it is valid
-      @note = Note.find_by(:id => id)
-      raise OSM::APINotFoundError unless @note
-      raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
-      raise OSM::APINoteAlreadyClosedError, @note if @note.closed?
-
-      # Close the note and add a comment
       Note.transaction do
+        @note = Note.lock.find_by(:id => id)
+        raise OSM::APINotFoundError unless @note
+        raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+        raise OSM::APINoteAlreadyClosedError, @note if @note.closed?
+
+        # Close the note and add a comment
         @note.close
 
         add_comment(@note, comment, "closed")
@@ -204,13 +204,13 @@ module Api
       comment = params[:text]
 
       # Find the note and check it is valid
-      @note = Note.find_by(:id => id)
-      raise OSM::APINotFoundError unless @note
-      raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible? || current_user.moderator?
-      raise OSM::APINoteAlreadyOpenError, @note unless @note.closed? || !@note.visible?
-
-      # Reopen the note and add a comment
       Note.transaction do
+        @note = Note.lock.find_by(:id => id)
+        raise OSM::APINotFoundError unless @note
+        raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible? || current_user.moderator?
+        raise OSM::APINoteAlreadyOpenError, @note unless @note.closed? || !@note.visible?
+
+        # Reopen the note and add a comment
         @note.reopen
 
         add_comment(@note, comment, "reopened")
index a9a7a2641b902bcef70038d186b59eab5b1846d3..35dbbb559cce41b03491eda4258404fda9a6cd47 100644 (file)
@@ -41,7 +41,7 @@ class DiaryCommentsController < ApplicationController
       # Add the commenter to the subscribers if necessary
       @entry.subscriptions.create(:user => current_user) unless @entry.subscribers.exists?(current_user.id)
 
-      redirect_to diary_entry_path(@entry.user, @entry)
+      redirect_to diary_entry_path(@entry.user, @entry, :anchor => "comment#{@diary_comment.id}")
     else
       render :action => "new"
     end
index f52d69865d9d2f63f3205641f9d5c028e52b1e5c..ce094fa3457ef5fb21093f6eba365c4fda5fb5cb 100644 (file)
@@ -1,5 +1,5 @@
 json.partial! "api/root_attributes"
 
-json.changesets(@changesets) do |changeset|
-  json.partial! changeset
+json.changesets do
+  json.array! @changesets, :partial => "changeset", :as => :changeset
 end
index 524006ded54588099e51aba88cea05b81dc66f9f..122a82495b93abdf08eb9b10dce48fd8d60199f8 100644 (file)
@@ -1,5 +1,5 @@
 json.partial! "api/root_attributes"
 
-json.messages(@messages) do |message|
-  json.partial! message
+json.messages do
+  json.array! @messages, :partial => "message", :as => :message
 end
index 524006ded54588099e51aba88cea05b81dc66f9f..122a82495b93abdf08eb9b10dce48fd8d60199f8 100644 (file)
@@ -1,5 +1,5 @@
 json.partial! "api/root_attributes"
 
-json.messages(@messages) do |message|
-  json.partial! message
+json.messages do
+  json.array! @messages, :partial => "message", :as => :message
 end
index 7909391f5ae939f231121b01c958134ad0afce72..5660a8ad5038b0006b0b0f2fd6abd7709d06cbfc 100644 (file)
@@ -1,5 +1,5 @@
 json.type "FeatureCollection"
 
-json.features(@notes) do |note|
-  json.partial! note
+json.features do
+  json.array! @notes, :partial => "note", :as => :note
 end
index 1ad07d47cd2639cc63d49ae093b9785478a5868b..d2dbd4d4f5c6113fd03a381e779215dabe3e58c4 100644 (file)
@@ -1,5 +1,5 @@
 json.partial! "api/root_attributes"
 
-json.users(@users) do |user|
-  json.partial! user
+json.users do
+  json.array! @users, :partial => "user", :as => :user
 end
index 23817576276da21b53d39c9ad8c3b3b819092adb..5b84fd6ed889bce1d774cdbb746082a946b8056a 100644 (file)
@@ -1,25 +1,29 @@
-<div id="<%= id %>_container" class="row richtext_container">
-  <div id="<%= id %>_content" class="col-sm-8 mb-3 mb-sm-0 richtext_content">
-    <ul class="nav nav-tabs mb-3" role="tablist">
-      <li class="nav-item">
-        <button type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#<%= id %>_edit"><%= t(".edit") %></button>
-      </li>
-      <li class="nav-item">
-        <button type="button" class="nav-link richtext_dopreview" data-bs-toggle="tab" data-bs-target="#<%= id %>_preview"><%= t(".preview") %></button>
-      </li>
-    </ul>
-    <div class="tab-content">
+<div class="richtext_container">
+  <ul class="nav nav-tabs mb-3">
+    <li class="nav-item">
+      <button type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#<%= id %>_edit"><%= t(".edit") %></button>
+    </li>
+    <li class="nav-item">
+      <button type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#<%= id %>_preview"><%= t(".preview") %></button>
+    </li>
+    <li class="nav-item d-block d-sm-none">
+      <button type="button" class="nav-link" data-bs-toggle="tab" data-bs-target="#<%= id %>_help"><%= t(".help") %></button>
+    </li>
+  </ul>
+  <div class="row g-3">
+    <div class="tab-content col-sm-8">
       <div id="<%= id %>_edit" class="tab-pane show active">
         <%= builder.text_area(attribute, options.merge(:wrapper => false, "data-preview-url" => preview_url(:type => type))) %>
       </div>
-      <div id="<%= id %>_preview" class="tab-pane richtext_preview richtext text-break"></div>
-    </div>
-  </div>
-  <div id="<%= id %>_help" class="col-sm-4 richtext_help">
-    <div class="card bg-body-tertiary h-100">
-      <div class="card-body">
-        <%= render :partial => "shared/#{type}_help" %>
+      <div id="<%= id %>_preview" class="tab-pane richtext text-break"></div>
+      <div id="<%= id %>_help" class="tab-pane">
+        <div class="card bg-body-tertiary h-100">
+          <div class="card-body">
+            <%= render :partial => "shared/#{type}_help" %>
+          </div>
+        </div>
       </div>
     </div>
+    <aside class="col-sm-4 d-none d-sm-block richtext_help_sidebar"></aside>
   </div>
 </div>
index 7dc5da35f91c0742de2591e289a65fb879599759..f4582936b7cfb4917e45110e288747b16a29a128 100644 (file)
@@ -1020,7 +1020,7 @@ az:
         alt: Vikipediya hesabı ilə daxil olun
   oauth_clients:
     show:
-      confirm: Əminsinizmi?
+      confirm: Əminsiniz?
     index:
       revoke: Ləğv et!
   users:
@@ -1114,5 +1114,5 @@ az:
   redactions:
     show:
       user: 'Yaradıcısı:'
-      confirm: Əminsinizmi?
+      confirm: Əminsiniz?
 ...
index 8ed552833e24e7fe449543b6a8b7b17fc74f2407..11060ff26812f2a73e4c3a82702b13d14243d99a 100644 (file)
@@ -109,7 +109,7 @@ be:
     attributes:
       client_application:
         name: Імя (абявязкова)
-        url: Ð\93алоÑ\9eнÑ\8b URL-адÑ\80аÑ\81 Ð´Ð°Ñ\81Ñ\82аÑ\81аванÑ\8cнÑ\8f (абявязкова)
+        url: Ð\93алоÑ\9eнÑ\8b URL-адÑ\80аÑ\81 Ð¿Ñ\80агÑ\80амÑ\8b (абявязкова)
         callback_url: URL-адрас зваротнага выкліку
         support_url: URL-адрас падтрымкі
         allow_read_prefs: чытаць параметры ўдзельніка
@@ -335,7 +335,7 @@ be:
         link text: што гэта?
       public editing:
         heading: Агульнае рэдагаванне
-        enabled: Ð£ÐºÐ»Ñ\8eÑ\87ана. Ð\92Ñ\8b - Ð½Ðµ Ð°Ð½Ð°Ð½Ñ\96мнÑ\8b Ñ\96 Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\80Ñ\8dдагаваÑ\86Ñ\8c Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f.
+        enabled: Уключана. Вы - не ананімны і можаце рэдагаваць даныя.
         enabled link: http://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
         enabled link text: што гэта?
         disabled: Адключана. Вы не можаце больш рэдагаваць, але ўсе ранейшыя змены
@@ -355,9 +355,9 @@ be:
       delete_account: Выдаліць уліковы запіс...
     go_public:
       heading: Публічнае рэдагаванне
-      currently_not_public: " \nУ Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8b Ð¼Ð¾Ð¼Ð°Ð½Ñ\82 Ð²Ð°Ñ\88Ñ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\8f, Ñ\96 Ð»Ñ\8eдзÑ\96 Ð½Ðµ
-        Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c Ð°Ð´Ð¿Ñ\80аÑ\9eлÑ\8fÑ\86Ñ\8c Ð²Ð°Ð¼ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ\96 Ð°Ð±Ð¾ Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ð²Ð°Ñ\88ае Ð¼ÐµÑ\81Ñ\86азнаÑ\85оджанне. Ð\9aаб
-        паказаць тое, што вы рэдагавалі, і дазволіць людзям звязацца з вамі праз вэб-сайт,
+      currently_not_public: " \nУ Ð³Ñ\8dÑ\82Ñ\8b Ð¼Ð¾Ð¼Ð°Ð½Ñ\82 Ð²Ð°Ñ\88Ñ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\8f, Ñ\96 Ð»Ñ\8eдзÑ\96 Ð½Ðµ Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c
+        Ð°Ð´Ð¿Ñ\80аÑ\9eлÑ\8fÑ\86Ñ\8c Ð²Ð°Ð¼ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ\96 Ð°Ð±Ð¾ Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ð²Ð°Ñ\88ае Ð¼ÐµÑ\81Ñ\86азнаÑ\85оджанне. Ð\9aаб Ð¿Ð°ÐºÐ°Ð·Ð°Ñ\86Ñ\8c
+        тое, што вы рэдагавалі, і дазволіць людзям звязацца з вамі праз вэб-сайт,
         націсніце кнопку ніжэй."
       only_public_can_edit: Пасля пераходу на API 0.6 толькі публічныя карыстальнікі
         могуць рэдагаваць даныя мапы.
@@ -1692,8 +1692,8 @@ be:
     tou: Умовы карыстання
     osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць
       неабходная тэхнічная праца.
-    osm_read_only: Ð\91аза Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85 OpenStreetMap Ð·Ð°Ñ\80аз Ð´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f Ñ\82олÑ\8cкÑ\96 Ð´Ð»Ñ\8f Ñ\87Ñ\8bÑ\82аннÑ\8f,
-      Ñ\82амÑ\83 Ñ\88Ñ\82о Ð¿Ñ\80аÑ\85одзÑ\96Ñ\86Ñ\8c Ð½ÐµÐ°Ð±Ñ\85однаÑ\8f Ñ\82Ñ\8dÑ\85нÑ\96Ñ\87наÑ\8f Ð¿Ñ\80аÑ\86а.
+    osm_read_only: Ð\91аза Ð´Ð°Ð½Ñ\8bÑ\85 OpenStreetMap Ð·Ð°Ñ\80аз Ð´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f Ñ\82олÑ\8cкÑ\96 Ð´Ð»Ñ\8f Ñ\87Ñ\8bÑ\82аннÑ\8f, Ñ\82амÑ\83
+      што праходзіць неабходная тэхнічная праца.
     donate: Падтрымайце OpenStreetMap %{link} у фонд абнаўлення тэхнікі.
     help: Даведка
     about: Пра праект
@@ -1780,8 +1780,8 @@ be:
     lost_password:
       subject: '[OpenStreetMap] Запыт на змену пароля'
       greeting: Добры дзень,
-      hopefully_you: Ð¥Ñ\82оÑ\81Ñ\8cÑ\86Ñ\96 (Ñ\81падзÑ\8fемÑ\81Ñ\8f, Ñ\88Ñ\82о Ð²Ñ\8b) Ð·Ð°Ð¿Ñ\8bÑ\82аÑ\9e Ð·Ð¼ÐµÐ½Ñ\83 Ð¿Ð°Ñ\80олÑ\8f Ð´Ð»Ñ\8f Ñ\80аÑ\85Ñ\83нка
-        на openstreetmap.org, прывязанага да гэтага адраса электроннай пошты.
+      hopefully_you: Ð\9dеÑ\85Ñ\82а (Ñ\81падзÑ\8fемÑ\81Ñ\8f, Ñ\88Ñ\82о Ð²Ñ\8b) Ð·Ð°Ð¿Ð°Ñ\82Ñ\80абаваÑ\9e Ð·Ð¼ÐµÐ½Ñ\8b Ð¿Ð°Ñ\80олÑ\8f Ð´Ð° Ñ\9eлÑ\96ковага
+        Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\83 Ð½Ð° openstreetmap.org, Ð¿Ñ\80Ñ\8bвÑ\8fзанага Ð´Ð° Ð³Ñ\8dÑ\82ага Ð°Ð´Ñ\80аÑ\81а Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\82Ñ\8b.
       click_the_link: Калі гэта вы, калі ласка, перайдзіце па спасылцы, паказанай
         ніжэй, каб змяніць ваш пароль.
     note_comment_notification:
@@ -2069,13 +2069,12 @@ be:
       used_by_html: '%{name} забяспечвае картаграфічнымі данымі тысячы сайтаў, мабільных
         праграм і прылад'
       lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць
-        Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f Ð°Ð± Ð´Ð°Ñ\80огаÑ\85, Ñ\81Ñ\86ежкаÑ\85, ÐºÐ°Ñ\84Ñ\8d, Ð²Ð°ÐºÐ·Ð°Ð»Ð°Ñ\85 Ñ\96 Ð¼Ð½Ð¾Ð³Ñ\96Ñ\85 Ñ\96нÑ\88Ñ\8bÑ\85 Ð°Ð±'екÑ\82аÑ\85 Ð¿Ð° Ñ\9eÑ\81Ñ\96м
+        даныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім
         свеце.
       local_knowledge_title: Веданне мясцовасці
       local_knowledge_html: OpenStreetMap надае асаблівае значэнне веданню мясцовасці.
         Удзельнікі выкарыстоўваюць аэрафотаздымкі, GPS-прылады і нізкатэхналагічныя
-        палявыя карты для праверкі таго, што дадзеныя OSM з'яўляюцца дакладнымі і
-        актуальнымі.
+        палявыя карты для праверкі таго, што даныя OSM з'яўляюцца дакладнымі і актуальнымі.
       community_driven_title: Развіваецца супольнасцю
       community_driven_1_html: |-
         Супольнасць OpenStreetMap разнастайная, зацятая і расце штодзень.
@@ -2131,22 +2130,32 @@ be:
         credit_title_html: Як спасылацца на OpenStreetMap
         credit_1_html: 'Там, дзе вы выкарыстоўваеце даныя OpenStreetMap, вы павінны
           выканаць наступныя дзве рэчы:'
+        credit_2_1: Аддаць належнае OpenStreetMap, змясціўшы  паведамленне аб ахове
+          аўтарскага права.
+        credit_2_2: Выразна давесці, што даныя прадастаўляюцца па ліцэнзіі Open Database.
+        credit_3_html: |-
+          Мы маем разнастайныя патрабаванні адносна таго, як павінна
+          адлюстроўвацца паведамленне аб ахове аўтарскага права ў залежнасці ад спосабу выкарыстання нашых даных. Напрыклад, розныя правілы прымяняюцца
+          ў залежнасці ад таго, ці Вы стварылі анлайн-карту, друкаваную карту або статычную выяву. Падрабязную інфармацыю аб нашых
+          патрабаваннях можна знайсці ў %{attribution_guidelines_link}.
+        credit_3_attribution_guidelines: рэкамендацыях па атрыбуцыі
+        credit_4_1_html: |-
+          Для паведамлення, што даныя прадастаўляюцца па ліцэнзіі Open
+          Database, можна дадаць спасылку на %{this_copyright_page_link}.
+          У якасці альтэрнатывы (абавязкова, калі вы распаўсюджваеце OSM у форме даных), вы можаце дадаць назву ліцэнзіі і спасылку на яе тэкст. У выпадках, калі дадаць спасылку немагчыма (напрыклад, у друкаваных выданнях), мы прапануем накіроўваць чытачоў да openstreetmap.org (калі ласка, змяніце
+          'OpenStreetMap' на поўны адрас) і да opendatacommons.org.
+          У гэтым прыкладзе адзнака з'яўляецца ў вугле карты.
+        credit_4_1_this_copyright_page: гэтую старонку
         attribution_example:
           alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы
           title: Прыклад спасылкі
         more_title_html: Даведацца больш
         contributors_title_html: Нашы ўдзельнікі
         contributors_intro_html: 'Нашымі ўдзельнікамі з''яўляюцца тысячы людзей. Мы
-          таксама ўключаем дадзеныя ад нацыянальных картаграфічных агенцтваў, якія
-          распаўсюджваюцца на ўмовах адкрытых ліцэнзій, сярод іх:'
-        contributors_at_austria: |2-
-           Пераключыць змест
-
-          Аўстрыя
-        contributors_au_australia: |2-
-           Пераключыць змест
-
-          Аўстралія
+          таксама ўключаем даныя ад нацыянальных картаграфічных агенцтваў, якія распаўсюджваюцца
+          на ўмовах адкрытых ліцэнзій, сярод іх:'
+        contributors_at_austria: Аўстрыя
+        contributors_au_australia: Аўстралія
         contributors_ca_canada: Канада
         contributors_cz_czechia: Чэхія
         contributors_fi_finland: Фінляндыя
@@ -2159,12 +2168,12 @@ be:
         contributors_es_spain: Іспанія
         contributors_za_south_africa: Паўднёвая Афрыка
         contributors_footer_2_html: |-
-          Ð£ÐºÐ»Ñ\8eÑ\87Ñ\8dнне Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85 Ñ\83 OpenStreetMap Ð½Ðµ Ð°Ð·Ð½Ð°Ñ\87ае, Ñ\88Ñ\82о Ð¿Ð°Ñ\81Ñ\82аÑ\9eÑ\88Ñ\87Ñ\8bкÑ\96 Ð¿Ð°Ñ\87аÑ\82ковÑ\8bÑ\85 Ð´Ð°Ð´Ð·Ðµных
+          Ð£ÐºÐ»Ñ\8eÑ\87Ñ\8dнне Ð´Ð°Ð½Ñ\8bÑ\85 Ñ\83 OpenStreetMap Ð½Ðµ Ð°Ð·Ð½Ð°Ñ\87ае, Ñ\88Ñ\82о Ð¿Ð°Ñ\81Ñ\82аÑ\9eÑ\88Ñ\87Ñ\8bкÑ\96 Ð¿Ð°Ñ\87аÑ\82ковÑ\8bÑ\85 Ð´Ð°ных
           якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці
           прымаюць на сябе якую-небудзь адказнасць.
         infringement_title_html: Парушэнне аўтарскіх правоў
         infringement_1_html: Удзельнікі супольнасці OSM павінны заўсёды памятаць пра
-          Ñ\82ое, Ñ\88Ñ\82о Ð·Ð°Ð±Ð°Ñ\80анÑ\8fеÑ\86Ñ\86а Ð´Ð°Ð´Ð°Ð²Ð°Ñ\86Ñ\8c Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f Ð· Ð»Ñ\8eбÑ\8bÑ\85 Ð°Ð±Ð°Ñ\80оненÑ\8bÑ\85 Ð°Ñ\9eÑ\82аÑ\80Ñ\81кÑ\96м Ð¿Ñ\80авам
+          тое, што забараняецца дадаваць даныя з любых абароненых аўтарскім правам
           крыніц (напрыклад, з Google Maps або з друкаваных карт) без дазволу праваўладальнікаў.
     index:
       js_1: Вы карыстаецеся вандроўнікам без падтрымкі JavaScript.
@@ -2190,16 +2199,16 @@ be:
       too_large:
         advice: 'Калі экспарт вышэй не атрымаўся, то разгледзьце магчымасць выкарыстання
           адной з наступных крыніц:'
-        body: Гэтая вобласць занадта вялікая, каб быць экспартаваная як OpenStreetMap
-          XML-дадзеныя. Калі ласка, павялічце або абярыце меншую вобласць, альбо скарыстайцеся
-          Ð°Ð´Ð½Ð¾Ð¹ Ð· ÐºÑ\80Ñ\8bнÑ\96Ñ\86, Ð¿ÐµÑ\80алÑ\96Ñ\87анÑ\8bÑ\85 Ð½Ñ\96жÑ\8dй, Ð´Ð»Ñ\8f Ð·Ð°Ð³Ñ\80Ñ\83зкÑ\96 Ð²Ñ\8fлÑ\96кага Ð°Ð±'емÑ\83 Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85.
+        body: Гэтая вобласць занадта вялікая, каб быць экспартаванай у фармаце OpenStreetMap
+          XML. Калі ласка, павялічце або абярыце меншую вобласць, альбо скарыстайцеся
+          адной з крыніц, пералічаных ніжэй, для загрузкі вялікага аб'ему даных.
         planet:
           title: Планета OSM
-          description: Ð Ñ\8dгÑ\83лÑ\8fÑ\80на Ð°Ð±Ð½Ð°Ñ\9eлÑ\8fемÑ\8bÑ\8f ÐºÐ¾Ð¿Ñ\96Ñ\96 Ð¿Ð¾Ñ\9eнай Ð±Ð°Ð·Ñ\8b Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85 OpenStreetMap
+          description: Рэгулярна абнаўляемыя копіі поўнай базы даных OpenStreetMap
         overpass:
           title: Overpass API
           description: Спампаваць абмежаваную гэтым прастакутнікам вобласць з люстэрка
-            Ð±Ð°Ð·Ñ\8b Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85 OpenStreetMap
+            базы даных OpenStreetMap
         geofabrik:
           title: Загрузкі Geofabrik
           description: Рэгулярна абнаўляемыя выбаркі кантынентаў, краін і асобных
@@ -2214,10 +2223,10 @@ be:
         title: Як дапамагчы
         join_the_community:
           title: Далучыцца да супольнасці
-          explanation_html: Калі вы заўважылі, недакладнасці ў нашых картаграфічных
-            Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\85, Ð½Ð°Ð¿Ñ\80Ñ\8bклад Ð´Ð°Ñ\80ога Ð½Ðµ Ð¿Ð°Ð·Ð½Ð°Ñ\87ана Ñ\86Ñ\96 Ð²Ð°Ñ\88 Ð°Ð´Ñ\80аÑ\81, Ð»ÐµÐ¿Ñ\88Ñ\8b Ñ\81поÑ\81аб Ð³Ñ\8dÑ\82а
-            выправіць - далучыцца да супольнасці OpenStreetMap і дадаць або выправіць
-            Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f Ñ\81амаÑ\81Ñ\82ойна.
+          explanation_html: Калі вы заўважылі недакладнасці ў нашых картаграфічных
+            Ð´Ð°Ð½Ñ\8bÑ\85, Ð½Ð°Ð¿Ñ\80Ñ\8bклад, ÐºÐ°Ð»Ñ\96 Ð½Ðµ Ð¿Ð°Ð·Ð½Ð°Ñ\87ана Ð´Ð°Ñ\80ога Ñ\86Ñ\96 Ð²Ð°Ñ\88 Ð°Ð´Ñ\80аÑ\81, Ð»ÐµÐ¿Ñ\88Ñ\8b Ñ\81поÑ\81аб
+            Ð³Ñ\8dÑ\82а Ð²Ñ\8bпÑ\80авÑ\96Ñ\86Ñ\8c - Ð´Ð°Ð»Ñ\83Ñ\87Ñ\8bÑ\86Ñ\86а Ð´Ð° Ñ\81Ñ\83полÑ\8cнаÑ\81Ñ\86Ñ\96 OpenStreetMap Ñ\96 Ð´Ð°Ð´Ð°Ñ\86Ñ\8c Ð°Ð±Ð¾ Ð²Ñ\8bпÑ\80авÑ\96Ñ\86Ñ\8c
+            даныя самастойна.
       other_concerns:
         title: Іншыя перасцярогі
     help:
@@ -2233,6 +2242,9 @@ be:
       beginners_guide:
         title: Дапаможнік для пачаткоўцаў
         description: Супольнасць падтрымлівае дапаможнік для пачаткоўцаў.
+      community:
+        title: Форум супольнасці
+        description: Агульнае месца для пошуку дапамогі і абмеркаванняў OpenStreetMap.
       mailing_lists:
         title: Рассылкі
         description: Задайце пытанне ці далучыцеся да абмеркавання цікавых тэм на
@@ -2389,8 +2401,8 @@ be:
       help_url: http://wiki.openstreetmap.org/wiki/RU:Upload
     create:
       upload_trace: Адаслаць GPS-след
-      trace_uploaded: Ваш GPX-файл быў адасланы і чакае ўстаўкі ў базу дадзеных. Гэта
-        звычайна робіцца не больш за паўгадзіны. Вы атрымаеце працверджанне аб заканчэнні
+      trace_uploaded: Ваш GPX-файл быў адасланы і чакае дадавання ў базу даных. Гэта
+        звычайна робіцца не больш за паўгадзіны. Вы атрымаеце пацверджанне аб заканчэнні
         працэсу па электроннай пошце.
       upload_failed: На жаль, загрузка GPX не атрымалася. Адміністратар быў праінфармаваны
         пра памылку. Калі ласка, паспрабуйце яшчэ раз
@@ -2486,6 +2498,11 @@ be:
       need_to_see_terms: Ваш доступ да API часова прыпынены. Калі ласка, ўвайдзіце
         ў вэб-інтэрфейс для прагляду ўмоў удзелу. Вы не абавязаны пагаджацца, але
         вам варта праглядзець іх.
+    settings_menu:
+      account_settings: Налады ўліковага запісу
+      oauth1_settings: Налады OAuth 1
+      oauth2_applications: Праграмы OAuth 2
+      oauth2_authorizations: Аўтарызацыі OAuth 2
     auth_providers:
       openid:
         title: Уваход праз OpenID
@@ -2522,21 +2539,21 @@ be:
       grant_access: Прадастаўленне Доступу
     authorize_success:
       title: Запыт на аўтарызацыю дазволены
-      allowed_html: Ð\92Ñ\8b Ð½Ð°Ð´Ð°Ð»Ñ\96 Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\8e %{app_name} Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\80аÑ\85Ñ\83нка.
+      allowed_html: Ð\92Ñ\8b Ð½Ð°Ð´Ð°Ð»Ñ\96 Ð¿Ñ\80агÑ\80аме %{app_name} Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\9eлÑ\96ковага Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\83.
       verification: 'Праверачны код: %{code}.'
     authorize_failure:
       title: Не ўдалося выканаць запыт аўтарызацыі
-      denied: Ð\92Ñ\8b Ñ\81каÑ\81авалÑ\96 Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\8e %{app_name} Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\80аÑ\85Ñ\83нка.
+      denied: Ð\92Ñ\8b Ñ\81каÑ\81авалÑ\96 Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð²Ð°Ñ\88ага Ñ\9eлÑ\96ковага Ð·Ð°Ð¿Ñ\96Ñ\81Ñ\83 Ð´Ð»Ñ\8f Ð¿Ñ\80агÑ\80амÑ\8b %{app_name}.
       invalid: Токен аўтарызацыі не сапраўдны.
     revoke:
-      flash: Ð\92Ñ\8b Ð°Ð´ÐºÐ»Ñ\96калÑ\96 Ñ\82окен Ð´Ð»Ñ\8f Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\8f %{application}
+      flash: Ð\92Ñ\8b Ð°Ð´ÐºÐ»Ñ\96калÑ\96 Ñ\82окен Ð´Ð»Ñ\8f Ð¿Ñ\80агÑ\80амÑ\8b %{application}
     permissions:
       missing: Вы не дазволілі праграме атрымаць доступ да гэтай функцыі
   oauth_clients:
     new:
-      title: Зарэгістраваць новае дастасаванне
+      title: Зарэгістраваць новую праграму
     edit:
-      title: Ð Ñ\8dдагаваÑ\86Ñ\8c Ð\92аÑ\88ае Ð´Ð°Ñ\81Ñ\82аÑ\81аванне
+      title: Ð Ñ\8dдагаваÑ\86Ñ\8c Ð¿Ñ\80агÑ\80амÑ\83
     show:
       title: Падрабязнасьці OAuth для %{app_name}
       key: 'Ключ спажыўца:'
@@ -2551,18 +2568,18 @@ be:
       requests: 'Запыт наступных дазволаў ад удзельніка:'
     index:
       title: Мае падрабязнасці OAuth
-      my_tokens: Ð\9cае Ð°Ñ\9eÑ\82аÑ\80Ñ\8bзаванÑ\8bÑ\8f Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\96
-      list_tokens: 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\82окенÑ\8b Ð±Ñ\8bлÑ\96 Ñ\81Ñ\82воÑ\80анÑ\8bÑ\8f Ð´Ð»Ñ\8f Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\8fÑ\9e Ð½Ð° Ð\92аÑ\88ае Ñ\96мÑ\8f:'
-      application: Ð\9dазва Ð´Ð°Ñ\81Ñ\82аÑ\81аванÑ\8cнÑ\8f
+      my_tokens: Ð\9cае Ð°Ñ\9eÑ\82аÑ\80Ñ\8bзаванÑ\8bÑ\8f Ð¿Ñ\80агÑ\80амÑ\8b
+      list_tokens: 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\82окенÑ\8b Ð±Ñ\8bлÑ\96 Ñ\81Ñ\82воÑ\80анÑ\8bÑ\8f Ð´Ð»Ñ\8f Ð²Ð°Ñ\88Ñ\8bÑ\85 Ð¿Ñ\80агÑ\80ам:'
+      application: Ð\9dазва Ð¿Ñ\80агÑ\80амÑ\8b
       issued_at: 'Выпісаны:'
       revoke: Адазваны!
-      my_apps: Ð\9cае ÐºÐ»Ñ\96енÑ\86кÑ\96Ñ\8f Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\96
-      no_apps_html: Ð\92Ñ\8b Ð¼Ð°ÐµÑ\86е Ð´Ð°Ñ\81Ñ\82аÑ\81аванне, Ñ\8fкое жадаеце зарэгістраваць для ўзаемадзеяння
-        з намі праз стандарт %{oauth}? Вам неабходна зарэгістраваць Вашае вэб-дастасаванне
-        Ð¿ÐµÑ\80ад Ñ\82Ñ\8bм, Ñ\8fк Ñ\8fно Ð·Ð¼Ð¾Ð¶Ð° Ð·Ñ\80абÑ\96Ñ\86Ñ\8c OAuth-запÑ\8bÑ\82Ñ\8b Ð½Ð° Ð³Ñ\8dÑ\82Ñ\8b Ñ\81еÑ\80вÑ\8dр.
+      my_apps: Ð\9cае ÐºÐ»Ñ\96енÑ\86кÑ\96Ñ\8f Ð¿Ñ\80агÑ\80амÑ\8b
+      no_apps_html: Ð\92Ñ\8b Ð¼Ð°ÐµÑ\86е Ð¿Ñ\80агÑ\80амÑ\83, Ñ\8fкÑ\83Ñ\8e жадаеце зарэгістраваць для ўзаемадзеяння
+        з намі праз стандарт %{oauth}? Вам неабходна зарэгістраваць Вашу вэб-праграму
+        Ð¿ÐµÑ\80ад Ñ\82Ñ\8bм, Ñ\8fк Ñ\8fна Ð·Ð¼Ð¾Ð¶Ð° Ð·Ñ\80абÑ\96Ñ\86Ñ\8c OAuth-запÑ\8bÑ\82Ñ\8b Ð½Ð° Ð³Ñ\8dÑ\82Ñ\8b Ñ\81еÑ\80вер.
       oauth: OAuth
-      registered_apps: 'Ð\92Ñ\8b Ð¼Ð°ÐµÑ\86е Ð·Ð°Ñ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аванÑ\8bмÑ\96 Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\8f ÐºÐ»Ñ\96енÑ\86кÑ\96Ñ\8f Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\96:'
-      register_new: Ð\97аÑ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аваÑ\86Ñ\8c Ð\92аÑ\88ае Ð´Ð°Ñ\81Ñ\82аÑ\81аванне
+      registered_apps: 'Ð\92Ñ\8b Ð¼Ð°ÐµÑ\86е Ð·Ð°Ñ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аванÑ\8bмÑ\96 Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\8f ÐºÐ»Ñ\96енÑ\86кÑ\96Ñ\8f Ð¿Ñ\80агÑ\80амÑ\8b:'
+      register_new: Ð\97аÑ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аваÑ\86Ñ\8c Ð¿Ñ\80агÑ\80амÑ\83
     form:
       requests: 'Запытаць наступныя дазволы ад удзельніка:'
     not_found:
@@ -2572,7 +2589,7 @@ be:
     update:
       flash: Кліенцкая інфармацыя была абноўленая паспяхова
     destroy:
-      flash: Ð\97нÑ\96Ñ\88Ñ\87анаÑ\8f Ñ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аÑ\86Ñ\8bÑ\8f ÐºÐ»Ñ\96енÑ\86кага Ð´Ð°Ñ\81Ñ\82аÑ\81аваннÑ\8f
+      flash: Ð Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аÑ\86Ñ\8bÑ\8f ÐºÐ»Ñ\96енÑ\86кай Ð¿Ñ\80агÑ\80амÑ\8b Ð²Ñ\8bдалена
   oauth2_applications:
     index:
       new: Зарэгістраваць новую праграму
@@ -2658,8 +2675,11 @@ be:
       my profile: Мой профіль
       my settings: Мае налады
       my comments: Мае каментары
+      my_preferences: Мае параметры
+      my_dashboard: Мая панэль
       blocks on me: Мае блакіроўкі
       blocks by me: Заблакавана мною
+      edit_profile: Рэдагаваць профіль
       send message: Адаслаць паведамленне
       diary: Дзённік
       edits: Змены
index 67ecb6745853489fcb1aeaee9e5c3e0dacf10ebd..46ccd82e7cf9683adc1645eaa02a52be557cee7a 100644 (file)
@@ -1570,8 +1570,8 @@ bg:
         credit_title_html: Как да кредитирате OpenStreetMap
         credit_1_html: 'Когато използвате данни от OpenStreetMap, от вас се изисква
           да направите следните две неща:'
-        credit_2_1: Ð\9fÑ\80едоÑ\81Ñ\82авеÑ\82е ÐºÑ\80едиÑ\82 ÐºÑ\8aм OpenStreetMap, ÐºÐ°Ñ\82о Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ\82е Ð½Ð°Ñ\88еÑ\82о Ñ\83ведомление
-          за авторски права.
+        credit_2_1: Ð\9eÑ\82дайÑ\82е Ð½ÐµÐ¾Ð±Ñ\85одимоÑ\82о Ð½Ð° OpenStreetMap, Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ð¹ÐºÐ¸ Ñ\83ведомлениеÑ\82о
+          Ð½Ð¸ Ð·Ð° Ð°Ð²Ñ\82оÑ\80Ñ\81ки Ð¿Ñ\80ава.
         credit_2_2: Ясно да посочите, че данните са достъпни съгласно Лиценза за отворени
           бази данни (Open Database License).
         credit_3_html: По отношение на известието за авторските права имаме различни
@@ -1582,9 +1582,10 @@ bg:
           права. Пълна информация за изискванията може да бъде намерена в %{attribution_guidelines_link}.
         more_title_html: Открийте повече
         contributors_title_html: Нашите сътрудници
-        contributors_intro_html: 'Нашите сътрудници са хиляди хора. Ние включваме
-          и данни, които са отворено лицензирани от национални картографски агенции
-          и други източници, сред които:'
+        contributors_intro_html: |-
+          Нашите сътрудници са хиляди. Ние включваме и
+          данни, които са отворено лицензирани от национални картографски агенции
+          и други източници, сред които:
         infringement_title_html: Нарушаване на авторските права
         infringement_1_html: Напомняме на сътрудниците на OSM никога да не добавят
           данни от източници, защитени с авторски права (например Google Maps или
@@ -1805,7 +1806,7 @@ bg:
           степен като местните клонове. Всъщност много групи съществуват много успешно
           като неформално събиране на хора или като общностна група. Всеки може да
           ги създаде или да се присъедини към тях. Прочетете повече на %{communities_wiki_link}.
-        communities_wiki: уики страница Общности
+        communities_wiki: уики страницата на общностите
   traces:
     new:
       upload_trace: Качване на следи от GPS
@@ -1888,13 +1889,13 @@ bg:
         alt: Лого на OpenID
       google:
         title: Влизане с Гугъл
-        alt: Лого на Google
+        alt: Лого на Гугъл
       facebook:
         title: Влизане с Facebook
-        alt: Лого на Facebook
+        alt: Лого на Фейсбук
       microsoft:
         title: Влизане с Майкрософт
-        alt: Лого на Microsoft
+        alt: Лого на Майкрософт
       github:
         title: Влизане с GitHub
         alt: Лого на GitHub
index eb1e7f6e9dacc27c2795065fadd89774cac25070..fda7c84183a19ab2f90d8b8e8ca4f307a1e38c76 100644 (file)
@@ -2954,7 +2954,7 @@ ca:
       blocks_on_user: Bloquejos a %{user}
       blocks_by_me: Bloquejos fets per mi
       blocks_by_user: Bloquejos fets per %{user}
-      block: 'Bloqueja #%{id}'
+      block: 'Bloqueig #%{id}'
   user_mutes:
     index:
       title: Usuaris silenciats
index 1fcecbf077223f603807ca16089b0a1284943f1e..27d9a1c5bc6711a81d906cadc8033d29973466a9 100644 (file)
@@ -1510,7 +1510,7 @@ ce:
       reported_item: Хаамин тема
       states:
         ignored: Игнорйина
-        open: Ð\95лина
+        open: Ð\99иллина
         resolved: Кечйина
     show:
       title: '%{status} проблема #%{issue_id}'
@@ -1990,6 +1990,7 @@ ce:
     richtext_field:
       edit: Нисйан
       preview: Хьажа
+      help: ГӀо
   site:
     about:
       next: Кхин дӀа
index 4f1cd9229fee01c061f55b18a0d194e6709788ee..78278e7fb8175e238cb14f45123b883bf6ec50b3 100644 (file)
@@ -2590,7 +2590,7 @@ cy:
     helper:
       time_future_html: Yn dod i ben mewn %{time}.
       until_login: Gweithredol hyd nes bod y defnyddiwr yn mewngofnodi.
-      time_past_html: Wedi dod i ben %{time} yn ôl.
+      time_past_html: Wedi dod i ben %{time}.
       block_duration:
         hours:
           zero: '%{count} awr'
index fe20af61a8364f765b36a3286b0e9e518e1310a9..a6c6c4bb7d0d6c809acde799f3d30a2c9524dc55 100644 (file)
@@ -1702,6 +1702,8 @@ da:
     gpx_failure:
       hi: Hej %{to_user},
       failed_to_import: 'kunne ikke importeres. Her er fejlen:'
+      more_info: Yderligere information vedrørende fejl i forbindelse med GPX-import
+        og hvordan de kan undgås, kan findes på %{url}.
       more_info_html: Yderligere information vedrørende fejl i forbindelse med GPX-import
         og hvordan de kan undgås, kan findes på %{url}
       subject: '[OpenStreetMap] GPX-importering mislykkedes'
@@ -1710,6 +1712,8 @@ da:
       loaded:
         one: indlæst med %{trace_points} ud af %{count} muligt punkt.
         other: indlæst med %{trace_points} ud af %{count} mulige punkter.
+      trace_location: Dit spor er tilgængeligt på %{trace_url}
+      all_your_traces: Alle dine uploadede GPX-spor kan findes på %{url}
       all_your_traces_html: Alle dine succesfuldt overførte GPX-spor kan findes på
         %{url}.
       subject: '[OpenStreetMap] GPX-importering lykkedes'
@@ -2011,6 +2015,7 @@ da:
     richtext_field:
       edit: Rediger
       preview: Forhåndsvisning
+      help: Hjælp
   site:
     about:
       next: Næste
index 171efd3f8d1d474d44f71d1710b1a965523d0412..8a5358ab3a4083a9d06ca52676530998d632b967 100644 (file)
@@ -426,7 +426,7 @@ de:
         preisgegeben.
       not_reversible: Dies kann nicht rückgängig gemacht werden und alle neuen Mitglieder
         sind jetzt standardmäßig öffentlich.
-      make_edits_public_button: Alle meine Bearbeitungen öffentlich machen
+      make_edits_public_button: Alle meine Bearbeitungen veröffentlichen
     update:
       success_confirm_needed: Deine Änderungen wurden gespeichert. Du erhältst nun
         eine E-Mail, um deine neue E-Mail-Adresse zu bestätigen.
@@ -590,7 +590,7 @@ de:
     no_such_entry:
       title: Dieser Änderungssatz existiert nicht
       heading: 'Kein Eintrag mit der ID: %{id}'
-      body: Es gibt leider keinen Änderungssatz mit der ID %{id}. Bitte überprüfe
+      body: Es existiert leider kein Änderungssatz mit der ID %{id}. Bitte überprüfe
         deine Rechtschreibung, oder vielleicht ist der Link, auf den du geklickt hast,
         falsch.
     show:
@@ -653,8 +653,8 @@ de:
       my friends: Meine Freunde
       no friends: Du hast noch keine Freunde hinzugefügt.
       nearby users: Mapper in der Nähe
-      no nearby users: Es gibt bisher keine Benutzer, die einen Standort in deiner
-        Nähe angegeben haben.
+      no nearby users: Es existieren bisher keine Benutzer, die einen Standort in
+        deiner Nähe angegeben haben.
       friends_changesets: Änderungssätze deiner Freunde
       friends_diaries: Blogs deiner Freunde
       nearby_changesets: Änderungssätze von Benutzern in der Nähe
@@ -1737,7 +1737,7 @@ de:
       nicht verfügbar.
     osm_read_only: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
       im „Nur-Lesen-Modus“.
-    nothing_to_preview: Es gibt keine Vorschau.
+    nothing_to_preview: Es existiert keine Vorschau.
     donate: Unterstütze die OpenStreetMap-Hardwarespendenaktion durch eine eigene
       %{link}.
     help: Hilfe
@@ -1978,7 +1978,7 @@ de:
     no_such_message:
       title: Nachricht nicht vorhanden
       heading: Nachricht nicht vorhanden
-      body: Leider gibt es keine Nachricht mit dieser ID.
+      body: Leider existiert keine Nachricht mit dieser ID.
     outbox:
       title: Gesendet
       actions: Aktionen
@@ -2126,6 +2126,7 @@ de:
     richtext_field:
       edit: Bearbeiten
       preview: Vorschau
+      help: Hilfe
   site:
     about:
       next: Nächste
@@ -2146,7 +2147,7 @@ de:
         Unsere Mitwirkenden sind begeisterte Kartierer, GIS-Fachleute, Ingenieure
         die die OSM-Server betreiben, humanitäre Helfer, die von Katastrophen betroffene Gebiete kartieren,
         und vieles mehr.
-        Um mehr über die Gemeinschaft zu erfahren, besuchen Sie den %{osm_blog_link},
+        Um mehr über die Gemeinschaft zu erfahren, besuche den %{osm_blog_link},
         %{user_diaries_link}, %{community_blogs_link}, und die
         Website der %{osm_foundation_link}.
       community_driven_osm_blog: OpenStreetMap Blog
@@ -2154,11 +2155,11 @@ de:
       community_driven_community_blogs: Community-Blogs
       community_driven_osm_foundation: OSM-Stiftung
       open_data_title: Open Data
-      open_data_1_html: |-
-        OpenStreetMap ist %{open_data}: Es steht Ihnen frei, es für jeden Zweck zu verwenden
-        solange Sie OpenStreetMap und seine Mitwirkenden nennen. Wenn Sie die Daten
-        oder auf den Daten in bestimmter Weise aufbauen, dürfen Sie das Ergebnis nur
-        unter der gleichen Lizenz weitergeben. Siehe den %{copyright_license_link} für weitere Details.
+      open_data_1_html: 'OpenStreetMap ist %{open_data}: Es steht dir frei, sie für
+        jeden Zweck zu nutzen, solange du OpenStreetMap und seine Mitwirkenden erwähnst.
+        Wenn du die Daten auf bestimmte Weise veränderst oder darauf aufbaust, darfst
+        du das Ergebnis nur unter derselben Lizenz weitergeben. Siehe den %{copyright_license_link}
+        für weitere Informationen.'
       open_data_open_data: offene Daten
       open_data_copyright_license: Copyright und Lizenz Seite
       legal_title: Rechtliche Hinweise
@@ -2171,9 +2172,8 @@ de:
       legal_1_1_terms_of_use: Nutzungsbedingungen
       legal_1_1_aup: Richtlinien für die akzeptable Nutzung
       legal_1_1_privacy_policy: Datenschutzrichtlinie
-      legal_2_1_html: |-
-        Bitte %{contact_the_osmf_link}
-        wenn Sie lizenzrechtliche, urheberrechtliche oder andere rechtliche Fragen haben.
+      legal_2_1_html: Bitte kontaktiere %{contact_the_osmf_link}, wenn du Lizenz-,
+        Urheberrechts- oder andere rechtliche Fragen hast.
       legal_2_1_contact_the_osmf: OSMF kontaktieren
       legal_2_2_html: OpenStreetMap, das Lupenlogo und State of the Map sind %{registered_trademarks_link}.
       legal_2_2_registered_trademarks: eingetragenes Markenzeichen der OSMF
@@ -2457,8 +2457,8 @@ de:
           und Organisationen, die zu OpenStreetMap wechseln.
       welcomemat:
         title: Für Organisationen
-        description: Mit einer Organisation Pläne machen für OpenStreetMap? Finde
-          heraus, was du wissen musst, auf der Willkommensseite.
+        description: Mit einer Organisation für OpenStreetMap Pläne entwicken? Finde
+          auf der Willkommensseite heraus, was du wissen musst.
       wiki:
         url: https://wiki.openstreetmap.org/wiki/DE:Hauptseite
         title: OpenStreetMap Wiki
@@ -2640,7 +2640,7 @@ de:
       lede_text: |-
         Menschen auf der ganzen Welt tragen zu OpenStreetMap bei oder verwenden es.
         Während viele als Einzelpersonen mitmachen, haben andere Gemeinschaften gebildet.
-        Diese Gruppen gibt es in verschiedenen Größen und sie repräsentieren geografische Einheiten von kleinen Städten bis hin zu großen länderübergreifenden Regionen. Sie können sowohl formell als auch informell sein.
+        Diese Gruppen existieren in verschiedenen Größen und sie repräsentieren geografische Einheiten von kleinen Städten bis hin zu großen länderübergreifenden Regionen. Sie können sowohl formell als auch informell sein.
       local_chapters:
         title: Lokale Verbände
         about_text: Lokale Verbände sind Gruppen auf Landes- oder Regionsebene, die
@@ -2739,8 +2739,8 @@ de:
       description: Letzte GPS-Track-Uploads durchsuchen
       tagged_with: ' gekennzeichnet mit %{tags}'
       empty_title: Noch nichts vorhanden
-      empty_upload_html: '%{upload_link} oder erfahren Sie mehr über GPS-Tracks auf
-        der %{wiki_link}.'
+      empty_upload_html: '%{upload_link} oder erfahre mehr über GPS-Tracks auf der
+        %{wiki_link}.'
       upload_new: Einen neuen Track hochladen
       wiki_page: Wiki-Seite
       upload_trace: Lade einen Track hoch
@@ -2972,7 +2972,7 @@ de:
       display name description: Dein öffentlich angezeigter Benutzername. Er kann
         später in den Einstellungen geändert werden.
       by_signing_up:
-        html: Mit Ihrer Anmeldung stimmen Sie unseren %{tou_link}, %{privacy_policy_link}
+        html: Mit deiner Registrierung stimmest du unseren %{tou_link}, %{privacy_policy_link}
           und %{contributor_terms_link} zu.
         privacy_policy: Datenschutzrichtlinie
         privacy_policy_title: OSMF-Datenschutzrichtlinie einschließlich Abschnitt
@@ -3034,8 +3034,8 @@ de:
     no_such_user:
       title: Benutzer nicht gefunden
       heading: Der Benutzer %{user} existiert nicht
-      body: Es gibt leider keinen Benutzer mit dem Namen %{user}. Du hast dich möglicherweise
-        vertippt oder bist einem ungültigem Link gefolgt.
+      body: Es existiert leider kein Benutzer mit dem Namen %{user}. Du hast dich
+        möglicherweise vertippt oder bist einem ungültigem Link gefolgt.
       deleted: gelöscht
     show:
       my diary: Mein Blog
index 38d191b11c48b4ffe0726734af0027b30cbcf9f7..1cddcdda28efbe6da45815e2ee17c35ad91f2b9d 100644 (file)
@@ -2060,6 +2060,7 @@ el:
     richtext_field:
       edit: Επεξεργασία
       preview: Προεπισκόπηση
+      help: Βοήθεια
   site:
     about:
       next: Επόμενη
@@ -3182,8 +3183,8 @@ el:
       title: Σημειώσεις που υποβλήθηκαν ή σχολιάστηκαν από τον χρήστη %{user}
       heading: Σημειώσεις του χρήστη %{user}
       subheading_html: Σημειώσεις που %{submitted} ή %{commented} από τον χρήστη %{user}
-      subheading_submitted: Ï\85Ï\80οβλήθηκε
-      subheading_commented: Ï\83Ï\87ολιάÏ\83Ï\84ηκε
+      subheading_submitted: Ï\85Ï\80οβλήθηκαν
+      subheading_commented: Ï\83Ï\87ολιάÏ\83Ï\84ηκαν
       no_notes: Χωρίς σημειώσεις
       id: Αναγνωριστικό
       creator: Δημιουργός
index a694163377f100a3c3a89261d07d1d8ad0a3ecb1..ac41952c7a51ab540ea01b2e19c3530691c9a253 100644 (file)
@@ -1905,6 +1905,7 @@ en:
     richtext_field:
       edit: Edit
       preview: Preview
+      help: Help
   site:
     about:
       next: Next
index 66296e847f9c4e00476bc12786c9ce78b5e951db..8f406a40a6b9b7601e26a27819fe72abf4fb9cf3 100644 (file)
@@ -1987,6 +1987,7 @@ eo:
     richtext_field:
       edit: Redakti
       preview: Antaŭvidi
+      help: Helpo
   site:
     about:
       next: Sekva
index bf6b5ec3fc371170af78d23e06fdcc3944eb37e1..a56e6870676cd572e9d1aa86147de4581b6f0fb5 100644 (file)
@@ -1506,6 +1506,7 @@ fa:
       نگهداری آن انجام گیرد.
     osm_read_only: پایگاه دادهٔ OpenStreetMap هم‌اکنون در حالت فقط‌خواندنی است تا
       کارهای ضروری برای نگهداری آن انجام گیرد.
+    nothing_to_preview: چیزی برای پیش‌نمایش وجود ندارد.
     donate: با %{link} به «صندوق ارتقای سخت‌افزار»، OpenStreetMap را حمایت کنید.
     help: راهنما
     about: درباره
@@ -1746,7 +1747,7 @@ fa:
       people_mapping_nearby: کسانی که نزدیک شما نقشه می‌کشند
     reply:
       wrong_user: شما با نام کاربری %{user} وارد سامانه شده‌اید، اما پیامی که درخواست
-        پاسخ به آن را دارید به این کابر ارسال نشده است. برای پاسخدادن لطفاً با نام
+        پاسخ به آن را دارید به این کابر ارسال نشده است. برای پاسخ دادن لطفاً با نام
         کاربری صحیح وارد سامانه شوید.
     show:
       title: خواندن پیام
index ab1c14f2bda47e2ca46c4ed56a01ed15d5ea3c31..704af303b3beec58dbc9138b6b3dcfe908e98390 100644 (file)
@@ -947,7 +947,7 @@ fr:
           prison: Prison
           pub: Pub
           public_bath: Bains publics
-          public_bookcase: Microbibliothèque
+          public_bookcase: Boîte à livres
           public_building: Bâtiment public
           ranger_station: Poste de garde forestière
           recycling: Point de recyclage
@@ -1831,6 +1831,7 @@ fr:
         one: s’est chargé correctement avec %{trace_points} dd %{count} point possible.
         other: s’est chargé correctement avec %{trace_points} des %{count} points
           possibles.
+      trace_location: Votre trace est disponible à %{trace_url}
       all_your_traces: Toutes vos traces de GPX téléversées avec succès peuvent être
         trouvées à %{url}.
       all_your_traces_html: Toutes vos traces de GPX téléversées avec succès peuvent
index 49a80694e59c83d2c6637eef73cf1225948da11e..df09fa28ac6673ddfd0e172251872d4735e971f5 100644 (file)
@@ -2023,6 +2023,7 @@ gl:
     richtext_field:
       edit: Editar
       preview: Vista previa
+      help: Axuda
   site:
     about:
       next: Seguinte
index aeff2510981f18a903bacf061ddbdf3d5ca5b8e6..1f6ad00678ec9ab49f3ef3bd1116fad188f2bc74 100644 (file)
@@ -2022,6 +2022,7 @@ he:
     richtext_field:
       edit: עריכה
       preview: תצוגה מקדימה
+      help: עזרה
   site:
     about:
       next: הבא
index 897f9237ab30ae37a7aa9dabf594af2bb30ecb41..0010ca86f7eb5213cfb7ff1e98a7b55628a7456b 100644 (file)
@@ -1652,6 +1652,7 @@ is:
     osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
     osm_read_only: Ekki er hægt að skrifa í OpenStreetMap gagnagrunninn í augnablikinu
       vegna viðhalds.
+    nothing_to_preview: Ekkert til að forskoða.
     donate: Hjálpaðu OpenStreetMap verkefninu með %{link} í vélbúnaðarsjóðinn.
     help: Hjálp
     about: Um hugbúnaðinn
index 89dce410858e99f7ba316e3f4704835c191b5475..47efa9990c053650957a8307252b74ebc0f25d97 100644 (file)
@@ -1856,6 +1856,7 @@ lb:
     richtext_field:
       edit: Änneren
       preview: Virschau
+      help: Hëllef
   site:
     about:
       next: Weider
index 7a77d5fc177ae038596934ea5379ad577a1ae74a..c5488a93ddac284a0c73842508c29e6eb96570ac 100644 (file)
@@ -1615,6 +1615,7 @@ mk:
       работиме на неопходни одржувања.
     osm_read_only: Базата на податоци на OpenStreetMap моментално може само да се
       чита, додека ги извршиме неопходните одржувања.
+    nothing_to_preview: Нема што да се прегледа.
     donate: Поддржете ја OpenStreetMap со %{link} за Фондот за обнова на машинската
       опрема.
     help: Помош
@@ -1985,6 +1986,7 @@ mk:
     richtext_field:
       edit: Уреди
       preview: Преглед
+      help: Помош
   site:
     about:
       next: Следно
index 0a90b62e7e28df4ef56f98455be308b3cfdbc1c0..50c38b63a8d738d391ed0f4d9d8d907a9f45ec53 100644 (file)
@@ -1686,6 +1686,7 @@ nl:
       uitvoeren van onderhoudswerkzaamheden.
     osm_read_only: De OpenStreetMap-database kan op het moment niet gewijzigd worden
       wegens het uitvoeren van onderhoudswerkzaamheden.
+    nothing_to_preview: Er is geen voorvertoning.
     donate: Ondersteun OpenStreetMap door te %{link} aan het Hardware Upgrade-fonds.
     help: Hulp
     about: Over
@@ -1734,13 +1735,19 @@ nl:
       befriend_them: U kunt deze gebruiker ook als vriend toevoegen op %{befriendurl}.
       befriend_them_html: U kunt deze gebruiker ook als vriend toevoegen op %{befriendurl}.
     gpx_description:
+      description_with_tags: Het ziet ernaar uit dat uw GPX-bestand %{trace_name}
+        met beschrijving %{trace_description} en de labels %{tags}
       description_with_tags_html: Het ziet ernaar uit dat uw GPX-bestand %{trace_name}
         met beschrijving %{trace_description} en de labels %{tags}
+      description_with_no_tags: Het ziet ernaar uit dat uw GPX-bestand %{trace_name}
+        met beschrijving %{trace_description} zonder labels
       description_with_no_tags_html: Het ziet ernaar uit dat uw GPX-bestand %{trace_name}
         met beschrijving %{trace_description} zonder labels
     gpx_failure:
       hi: Hallo %{to_user},
       failed_to_import: 'is niet geïmporteerd. Hier volgt de foutmelding:'
+      more_info: Meer informatie over mislukte GPX-imports en hoe u ze kunt vermijden,
+        kunt u vinden op %{url}.
       more_info_html: Meer informatie over mislukte GPX-imports en hoe u ze kunt vermijden,
         kunt u vinden op %{url}.
       subject: '[OpenStreetMap] GPX-import mislukt'
@@ -1749,6 +1756,8 @@ nl:
       loaded:
         one: goed ontvangen, met %{trace_points} van %{count} mogelijk punt.
         other: goed ontvangen; met %{trace_points} van %{count} mogelijke punten.
+      trace_location: Uw traject is beschikbaar op %{trace_url}
+      all_your_traces: Al uw succesvol geüploade GPX-traces zijn te vinden op %{url}.
       all_your_traces_html: Alle succesvol geüploade GPX-traces zijn te vinden op
         %{url}.
       subject: '[OpenStreetMap] GPX-import afgerond'
@@ -2056,6 +2065,7 @@ nl:
     richtext_field:
       edit: Bewerken
       preview: Voorvertoning
+      help: Hulp
   site:
     about:
       next: Volgende
@@ -2768,6 +2778,8 @@ nl:
       write_notes: Opmerkingen wijzigen
       write_redactions: Kaartgegevens redigeren
       read_email: E-mailadres lezen
+      consume_messages: Gebruikersberichten lezen, bijwerken en verwijderen
+      send_messages: Privéberichten naar andere gebruikers verzenden
       skip_authorization: Toepassing automatisch goedkeuren
     for_roles:
       moderator: Deze toestemming geldt alleen voor acties die alleen toegankelijk
@@ -3094,6 +3106,8 @@ nl:
     update:
       only_creator_can_edit: Alleen de moderator die deze blokkade heeft ingesteld
         kan wijzigingen aanbrengen.
+      only_creator_or_revoker_can_edit: Alleen de moderator die deze blokkade heeft
+        ingesteld of ingetrokken kan wijzigingen aanbrengen.
       success: De blokkade is bijgewerkt.
     index:
       title: Gebruikersblokkades
index 7aeef96967ed1db20468878a90530c0d1d0dbeab..53baf02fbf18686d7e9fed414ec1abc18dc7da35 100644 (file)
@@ -2114,6 +2114,7 @@ ru:
     richtext_field:
       edit: Править
       preview: Предпросмотр
+      help: Помощь
   site:
     about:
       next: Далее
index 19b8ad615ec97ada1a5ea7f2108aa7e10949ed55..d5b548045a9326c9d5a485e1d48f9f42a310526b 100644 (file)
@@ -48,7 +48,7 @@ sk:
         create: Registrovať
         update: Aktualizovať
       oauth2_application:
-        create: Registrácia
+        create: Registrovať
         update: Aktualizovať
       redaction:
         create: Vytvoriť revíziu
@@ -2367,6 +2367,7 @@ sk:
       delete_trace: Vymazať túto stopu
       trace_not_found: Stopa nenájdená!
       visibility: 'Viditeľnosť:'
+      confirm_delete: Vymazať túto stopu?
     trace_paging_nav:
       older: Staršie stopy
       newer: Novšie stopy
@@ -2388,9 +2389,11 @@ sk:
       details_with_tags_html: '%{time_ago} používateľom %{user} v %{tags}'
     index:
       public_traces: Verejné GPS stopy
+      my_gps_traces: Moje GPS stopy
       public_traces_from: Verejné GPS stopy od %{user}
       description: Prechádzať nedávno nahrané GPS stopy
       tagged_with: ' označený s %{tags}'
+      empty_title: Zatiaľ tu nič nie je
       upload_trace: Nahrať stopu
       all_traces: Všetky stopy
       my_traces: Moje stopy
@@ -2488,6 +2491,8 @@ sk:
       write_notes: Meniť poznámky
       write_redactions: Upravovať údaje mapy
       read_email: Čítať používateľovu emailovú adresu
+      consume_messages: Čítať, aktualizovať stav a mazať správy používateľov
+      send_messages: Posielať súkromné správy iným používateľom
       skip_authorization: Automaticky schváliť aplikáciu
     for_roles:
       moderator: Toto oprávnenie je pre akcie dostupné iba moderátorom
@@ -2535,26 +2540,33 @@ sk:
       flash: Registrácia klientskej aplikácie bola zrušená
   oauth2_applications:
     index:
+      title: Moje klientske aplikácie
       no_applications_html: Máte nejakú aplikáciu, využívajúcu štandard %{oauth2},
         ktorá by s nami mala spolupracovať? Aplikáciu je potrebné najprv zaregistrovať,
         až potom bude môcť posielať OAuth požiadavky k tejto službe.
       new: Zaregistrovať novú aplikáciu
       permissions: Povolenia
     application:
+      edit: Upraviť
       confirm_delete: Odstrániť túto aplikáciu?
     new:
       title: Zaregistrovať novú aplikáciu
     edit:
       title: Upraviť aplikáciu
     show:
+      edit: Upraviť
       confirm_delete: Odstrániť túto aplikáciu?
+      client_secret_warning: Uistite sa, že tento tajný kľúč si uložíte - viac sa
+        už nezobrazí
       permissions: Povolenia
     not_found:
       sorry: Ľutujeme, takúto aplikáciu sa nepodarilo nájsť.
   oauth2_authorizations:
     new:
+      title: Je potrebná autorizácia
       introduction: Povoliť %{application} prístup k vášmu účtu s nasledovnými oprávneniami?
       authorize: Autorizovať
+      deny: Odmietnuť
     show:
       title: Autorizačný kód
   oauth2_authorized_applications:
index 4cadb8aa2b298649a9df2d9be510201ff905affd..534716394a388456a2055ee5ba66e7a0ce9e3c76 100644 (file)
@@ -1130,6 +1130,7 @@ skr-arab:
     richtext_field:
       edit: لکھو
       preview: پیشگی ݙکھالا
+      help: مدد
   site:
     about:
       next: اڳلا
index 732499dc25377c4d3c72e71e9c2908d3db9a4fee..23b7a7bb21e906410cc0537edab91067f5436b0c 100644 (file)
@@ -788,7 +788,7 @@ zh-TW:
           mobile_money_agent: 行動支付代理
           monastery: 修道院
           money_transfer: 匯款
-          motorcycle_parking: æ\91©æ\89\98車停車場
+          motorcycle_parking: æ©\9f車停車場
           music_school: 音樂學校
           nightclub: 夜店
           nursing_home: 照護中心
@@ -844,7 +844,7 @@ zh-TW:
           protected_area: 保護區
           "yes": 邊界
         bridge:
-          aqueduct: 高架水道
+          aqueduct: 水道橋
           boardwalk: 木棧走道
           suspension: 吊橋
           swing: 平轉橋
@@ -867,9 +867,9 @@ zh-TW:
           dormitory: 宿舍
           duplex: 複式住宅
           farm: 農舍
-          farm_auxiliary: 農設施
-          garage: 車庫
-          garages: 車庫
+          farm_auxiliary: 農設施
+          garage: 私人車庫
+          garages: 集合車庫
           greenhouse: 溫室
           hangar: 機棚
           hospital: 醫院建築
@@ -904,19 +904,19 @@ zh-TW:
           sport: 運動俱樂部
           "yes": 俱樂部
         craft:
-          beekeeper: 養蜂人
+          beekeeper: 蜂農
           blacksmith: 鐵匠
           brewery: 地方小型釀造廠
           carpenter: 木匠
-          caterer: å®´æ\9c\83æ\89¿è¾¦
+          caterer: å¤\96ç\87´
           confectionery: 甜點店
           dressmaker: 女裝裁縫
-          electrician: 電
+          electrician: 電氣技師
           electronics_repair: 電器維修
           gardener: 園藝師
           glaziery: 玻璃匠
           handicraft: 手工藝
-          hvac: 暖通空調工程
+          hvac: 冷暖空調工程
           metal_construction: 金屬加工
           painter: 油漆匠
           photographer: 攝影師
@@ -1013,8 +1013,8 @@ zh-TW:
           house: 老屋
           manor: 莊園
           memorial: 紀念物
-          milestone: 歷史里程碑
-          mine: ç¤¦å ´
+          milestone: 古蹟里程標
+          mine: ç¤¦å\9d\91
           mine_shaft: 豎井
           monument: 紀念建築
           railway: 歷史鐵路
@@ -1251,7 +1251,7 @@ zh-TW:
           house: 房屋
           houses: 房屋
           island: 小島
-          islet: 礁岩
+          islet: 小島
           isolated_dwelling: 獨立住宅
           locality: 地方
           municipality: 自治邦
@@ -1375,8 +1375,8 @@ zh-TW:
           medical_supply: 醫療器材與輔具店
           mobile_phone: 行動通訊行
           money_lender: 貸款
-          motorcycle: æ\91©æ\89\98車經銷商
-          motorcycle_repair: æ\91©æ\89\98車維修行
+          motorcycle: æ©\9f車經銷商
+          motorcycle_repair: æ©\9f車維修行
           music: 唱片行
           musical_instrument: 樂器
           newsagent: 書報攤
@@ -1920,6 +1920,7 @@ zh-TW:
     richtext_field:
       edit: 編輯
       preview: 預覽
+      help: 說明
   site:
     about:
       next: 下一頁
@@ -3085,16 +3086,16 @@ zh-TW:
         slight_left_without_exit: 靠左至 %{name}
         via_point_without_exit: (通過點)
         follow_without_exit: 延著 %{name}
-        roundabout_without_exit: 離開迴旋處進入%{name}
+        roundabout_without_exit: 離開圓環進入%{name}
         leave_roundabout_without_exit: 離開圓環 - %{name}
-        stay_roundabout_without_exit: 繼續圓環 - %{name}
+        stay_roundabout_without_exit: 繼續行駛圓環 - %{name}
         start_without_exit: 在 %{name} 開始
         destination_without_exit: 到達目地
         against_oneway_without_exit: 沿單程路%{name}逆行
         end_oneway_without_exit: 單行道終點於 %{name}
-        roundabout_with_exit: å¾\9eå\9c\93ç\92°å\87ºå\8f£ %{exit} é\9b¢é\96\8bè\87³ %{name}
-        roundabout_with_exit_ordinal: 於圓環的 %{exit} 出口離開進入 %{name}
-        exit_roundabout: 離開迴旋處進入%{name}
+        roundabout_with_exit: å¾\9eå\87ºå\8f£ %{exit} é\9b¢é\96\8bå\9c\93ç\92°å\88° %{name}
+        roundabout_with_exit_ordinal: 從出口 %{exit} 離開圓環到 %{name}
+        exit_roundabout: 離開圓環到 %{name}
         unnamed: 未命名道路
         courtesy: 感謝 %{link} 提供路線資訊
         exit_counts:
index 7601d35cf9386a276a1fabd7199a3e00a6cb9c23..e829be176b9ece957a1a36a87db9942717c27ebf 100755 (executable)
@@ -6,4 +6,7 @@ OauthNonce.where("timestamp < EXTRACT(EPOCH FROM NOW() - INTERVAL '1 day')").del
 OauthToken.where("invalidated_at < NOW() - INTERVAL '28 days'").delete_all
 RequestToken.where("authorized_at IS NULL AND created_at < NOW() - INTERVAL '28 days'").delete_all
 
+Doorkeeper::AccessGrant.where("revoked_at < NOW() - INTERVAL '28 days' OR (created_at + expires_in * INTERVAL '1 second') < NOW() - INTERVAL '28 days'").delete_all
+Doorkeeper::AccessToken.where("revoked_at < NOW() - INTERVAL '28 days' OR (created_at + expires_in * INTERVAL '1 second') < NOW() - INTERVAL '28 days'").delete_all
+
 exit 0
index fa978d606baa57ee9871eb1251fbb4f15cd99f44..a06565aa1ca2740a6696aeffe5413062a853297f 100644 (file)
@@ -115,14 +115,14 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest
         end
       end
     end
-    assert_redirected_to diary_entry_path(entry.user, entry)
+    comment = DiaryComment.last
+    assert_redirected_to diary_entry_path(entry.user, entry, :anchor => "comment#{comment.id}")
     email = ActionMailer::Base.deliveries.first
     assert_equal [user.email], email.to
     assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject
     assert_match(/New comment/, email.text_part.decoded)
     assert_match(/New comment/, email.html_part.decoded)
     ActionMailer::Base.deliveries.clear
-    comment = DiaryComment.order(:id).last
     assert_equal entry.id, comment.diary_entry_id
     assert_equal other_user.id, comment.user_id
     assert_equal "New comment", comment.body
@@ -157,14 +157,14 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest
         end
       end
     end
-    assert_redirected_to diary_entry_path(entry.user, entry)
+    comment = DiaryComment.last
+    assert_redirected_to diary_entry_path(entry.user, entry, :anchor => "comment#{comment.id}")
     email = ActionMailer::Base.deliveries.first
     assert_equal [user.email], email.to
     assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject
     assert_match %r{http://example.com/spam}, email.text_part.decoded
     assert_match %r{http://example.com/spam}, email.html_part.decoded
     ActionMailer::Base.deliveries.clear
-    comment = DiaryComment.order(:id).last
     assert_equal entry.id, comment.diary_entry_id
     assert_equal other_user.id, comment.user_id
     assert_equal spammy_text, comment.body
index 1ea183400c2ea549f5bf629cd1b69c7e596ee21f..e98342e10a041d04cec90f4a05810a8ec63e23d7 100644 (file)
@@ -163,7 +163,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
                                                 :longitude => "2.2", :language_code => "en" })
     end
     assert_redirected_to :action => :index, :display_name => user.display_name
-    entry = DiaryEntry.order(:id).last
+    entry = DiaryEntry.last
     assert_equal user.id, entry.user_id
     assert_equal "New Title", entry.title
     assert_equal "This is a new body for the diary entry", entry.body
@@ -189,7 +189,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
                                                 :longitude => "2.2", :language_code => "de" })
     end
     assert_redirected_to :action => :index, :display_name => user.display_name
-    entry = DiaryEntry.order(:id).last
+    entry = DiaryEntry.last
     assert_equal user.id, entry.user_id
     assert_equal "New Title", entry.title
     assert_equal "This is a new body for the diary entry", entry.body
@@ -217,7 +217,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
                               :diary_entry => { :title => spammy_title, :body => spammy_body, :language_code => "en" })
     end
     assert_redirected_to :action => :index, :display_name => user.display_name
-    entry = DiaryEntry.order(:id).last
+    entry = DiaryEntry.last
     assert_equal user.id, entry.user_id
     assert_equal spammy_title, entry.title
     assert_equal spammy_body, entry.body
index 2e9d79ef759e8add899921259fc241ad3f37b3de..b172945ec056ea635a90973b0cb9c2627e9c89f7 100644 (file)
@@ -352,10 +352,9 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
                             :user_block_period => "12",
                             :user_block => { :needs_view => false, :reason => "Vandalism" })
     end
-    id = UserBlock.order(:id).ids.last
-    assert_redirected_to user_block_path(:id => id)
+    b = UserBlock.last
+    assert_redirected_to user_block_path(:id => b.id)
     assert_equal "Created a block on user #{target_user.display_name}.", flash[:notice]
-    b = UserBlock.find(id)
     assert_in_delta Time.now.utc, b.created_at, 1
     assert_in_delta Time.now.utc, b.updated_at, 1
     assert_in_delta Time.now.utc + 12.hours, b.ends_at, 1
@@ -388,7 +387,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
                           :user_block_period => "336",
                           :user_block => { :needs_view => false, :reason => "Vandalism" })
 
-    block = UserBlock.order(:id).last
+    block = UserBlock.last
     assert_equal 1209600, block.ends_at - block.created_at
   end
 
index 290ff527c1c96064f6f4ca5e66c119d559efebfd..02589ab7534e3486d07f965a1fb1563c03dc5d22 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@9.8.0":
-  version "9.8.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.8.0.tgz#ae9bc14bb839713c5056f5018bcefa955556d3a4"
-  integrity sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==
+"@eslint/js@9.9.0":
+  version "9.9.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.0.tgz#d8437adda50b3ed4401964517b64b4f59b0e2638"
+  integrity sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==
 
 "@eslint/object-schema@^2.1.4":
   version "2.1.4"
@@ -246,15 +246,15 @@ eslint-visitor-keys@^4.0.0:
   integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
 
 eslint@^9.0.0:
-  version "9.8.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.8.0.tgz#a4f4a090c8ea2d10864d89a6603e02ce9f649f0f"
-  integrity sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==
+  version "9.9.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.0.tgz#8d214e69ae4debeca7ae97daebbefe462072d975"
+  integrity sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.11.0"
     "@eslint/config-array" "^0.17.1"
     "@eslint/eslintrc" "^3.1.0"
-    "@eslint/js" "9.8.0"
+    "@eslint/js" "9.9.0"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@humanwhocodes/retry" "^0.3.0"
     "@nodelib/fs.walk" "^1.2.8"