]> git.openstreetmap.org Git - rails.git/commitdiff
Merge branch 'master' into feature/add-communities-page
authorAdam Hoyle <atomoil@gmail.com>
Sun, 17 Oct 2021 21:33:02 +0000 (22:33 +0100)
committerAdam Hoyle <atomoil@gmail.com>
Sun, 17 Oct 2021 21:33:02 +0000 (22:33 +0100)
65 files changed:
Gemfile.lock
README.md
app/assets/stylesheets/common.scss
app/controllers/api/tracepoints_controller.rb
app/controllers/application_controller.rb
app/controllers/oauth2_applications_controller.rb
app/helpers/user_helper.rb
app/models/oauth2_application.rb [new file with mode: 0644]
app/models/trace.rb
app/models/tracepoint.rb
app/views/api/tracepoints/index.gpx.builder [new file with mode: 0644]
app/views/api/users/_user.json.jbuilder
app/views/api/users/_user.xml.builder
app/views/changesets/_changeset.html.erb
app/views/oauth2_applications/_form.html.erb
config/initializers/doorkeeper.rb
config/locales/ba.yml
config/locales/be-Tarask.yml
config/locales/bg.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/et.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/he.yml
config/locales/hi.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/it.yml
config/locales/kn.yml
config/locales/ku-Latn.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/mk.yml
config/locales/my.yml
config/locales/nl.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/scn.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/xmf.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/locales/zh-hk.yml
lib/oauth.rb
package.json
test/controllers/api/tracepoints_controller_test.rb
test/controllers/api/users_controller_test.rb
test/controllers/oauth2_applications_controller_test.rb
test/factories/oauth_applications.rb
test/helpers/user_helper_test.rb
test/models/tracepoint_test.rb
yarn.lock

index 2f8e120da8adb2a3b6982d85b375b09b947eaa17..4f7f64b99b474c50c77ae5d9dd55eb276ce5ceb4 100644 (file)
@@ -77,13 +77,13 @@ GEM
     autoprefixer-rails (10.3.3.0)
       execjs (~> 2)
     aws-eventstream (1.2.0)
-    aws-partitions (1.503.0)
-    aws-sdk-core (3.121.0)
+    aws-partitions (1.513.0)
+    aws-sdk-core (3.121.1)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
       jmespath (~> 1.0)
-    aws-sdk-kms (1.48.0)
+    aws-sdk-kms (1.49.0)
       aws-sdk-core (~> 3, >= 3.120.0)
       aws-sigv4 (~> 1.1)
     aws-sdk-s3 (1.103.0)
@@ -151,9 +151,9 @@ GEM
       activerecord (>= 3.0, < 6.2)
       delayed_job (>= 3.0, < 5)
     docile (1.4.0)
-    doorkeeper (5.5.2)
+    doorkeeper (5.5.4)
       railties (>= 5)
-    doorkeeper-i18n (5.2.2)
+    doorkeeper-i18n (5.2.3)
       doorkeeper (>= 5.2)
     dry-configurable (0.13.0)
       concurrent-ruby (~> 1.0)
@@ -239,7 +239,7 @@ GEM
       concurrent-ruby (~> 1.0)
     i18n-js (3.9.0)
       i18n (>= 0.6.6)
-    image_optim (0.30.0)
+    image_optim (0.31.0)
       exifr (~> 1.2, >= 1.2.2)
       fspath (~> 3.0)
       image_size (>= 1.5, < 3)
@@ -262,7 +262,7 @@ GEM
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
     json (2.5.1)
-    jwt (2.2.3)
+    jwt (2.3.0)
     kgio (2.11.4)
     kramdown (2.3.1)
       rexml
@@ -282,7 +282,7 @@ GEM
     maxminddb (0.1.22)
     method_source (1.0.0)
     mini_magick (4.11.0)
-    mini_mime (1.1.1)
+    mini_mime (1.1.2)
     mini_portile2 (2.6.1)
     minitest (5.14.4)
     msgpack (1.4.2)
@@ -290,7 +290,7 @@ GEM
     multi_xml (0.6.0)
     multipart-post (2.1.1)
     nio4r (2.5.8)
-    nokogiri (1.12.4)
+    nokogiri (1.12.5)
       mini_portile2 (~> 2.6.1)
       racc (~> 1.4)
     oauth (0.4.7)
@@ -345,7 +345,7 @@ GEM
     popper_js (1.16.0)
     progress (3.6.0)
     public_suffix (4.0.6)
-    puma (5.5.0)
+    puma (5.5.1)
       nio4r (~> 2.0)
     quad_tile (1.0.1)
     r2 (0.2.7)
@@ -405,18 +405,18 @@ GEM
     rexml (3.2.5)
     rinku (2.0.6)
     rotp (6.2.0)
-    rubocop (1.21.0)
+    rubocop (1.22.1)
       parallel (~> 1.10)
       parser (>= 3.0.0.0)
       rainbow (>= 2.2.2, < 4.0)
       regexp_parser (>= 1.8, < 3.0)
       rexml
-      rubocop-ast (>= 1.9.1, < 2.0)
+      rubocop-ast (>= 1.12.0, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 1.4.0, < 3.0)
-    rubocop-ast (1.11.0)
+    rubocop-ast (1.12.0)
       parser (>= 3.0.1.1)
-    rubocop-minitest (0.15.0)
+    rubocop-minitest (0.15.2)
       rubocop (>= 0.90, < 2.0)
     rubocop-performance (1.11.5)
       rubocop (>= 1.7.0, < 2.0)
@@ -465,7 +465,7 @@ GEM
       sprockets (>= 3.0.0)
     strong_migrations (0.7.8)
       activerecord (>= 5)
-    terser (1.1.6)
+    terser (1.1.7)
       execjs (>= 0.3.0, < 3)
     thor (1.1.0)
     tilt (2.0.10)
index b96a77671c55dad31612736f808d6b5539a5ac33..8eb26bf27ee221b0d9845171e5e206b6c18d8db7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -35,7 +35,6 @@ number of dependencies for installation. For full details please see [INSTALL.md
 We're always keen to have more developers! Pull requests are very welcome.
 
 * Bugs are recorded in the [issue tracker](https://github.com/openstreetmap/openstreetmap-website/issues).
-* Some bug reports are also found on the [OpenStreetMap trac](https://trac.openstreetmap.org/) system, in the "[website](https://trac.openstreetmap.org/query?status=new&status=assigned&status=reopened&component=website&order=priority)" and "[api](https://trac.openstreetmap.org/query?status=new&status=assigned&status=reopened&component=api&order=priority)" components.
 * Translation is managed by [Translatewiki](https://translatewiki.net/wiki/Translating:OpenStreetMap).
 * There is a [rails-dev@openstreetmap.org](https://lists.openstreetmap.org/listinfo/rails-dev) mailing list for development discussion.
 * IRC - there is the #osm-dev channel on irc.oftc.net.
index e0eec7bda7e03e0e8942dd60013a435f2f948723..f8cd32438fc1a5e329de2fbca71b7aa3f00b87b2 100644 (file)
@@ -791,7 +791,6 @@ tr.turn:hover {
   }
 
   .comments {
-    float: right;
     color: $darkgrey;
   }
 
index b2d755fe6caeaefccfac88a7e94ddf569c6467b6..e758d559f99d0bb69eaeaca8ec7cecd8a1740862 100644 (file)
@@ -33,75 +33,11 @@ module Api
       # get all the points
       ordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[trackable identifiable] }).order("gpx_id DESC, trackid ASC, timestamp ASC")
       unordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[public private] }).order("gps_points.latitude", "gps_points.longitude", "gps_points.timestamp")
-      points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page).preload(:trace)
-
-      doc = XML::Document.new
-      doc.encoding = XML::Encoding::UTF_8
-      root = XML::Node.new "gpx"
-      root["version"] = "1.0"
-      root["creator"] = "OpenStreetMap.org"
-      root["xmlns"] = "http://www.topografix.com/GPX/1/0"
-
-      doc.root = root
-
-      # initialise these variables outside of the loop so that they
-      # stay in scope and don't get free'd up by the GC during the
-      # loop.
-      gpx_id = -1
-      trackid = -1
-      track = nil
-      trkseg = nil
-      anon_track = nil
-      anon_trkseg = nil
-      timestamps = false
-
-      points.each do |point|
-        if gpx_id != point.gpx_id
-          gpx_id = point.gpx_id
-          trackid = -1
-
-          if point.trace.trackable?
-            track = XML::Node.new "trk"
-            doc.root << track
-            timestamps = true
-
-            if point.trace.identifiable?
-              track << (XML::Node.new("name") << point.trace.name)
-              track << (XML::Node.new("desc") << point.trace.description)
-              track << (XML::Node.new("url") << url_for(:controller => "/traces", :action => "show", :display_name => point.trace.user.display_name, :id => point.trace.id))
-            end
-          else
-            # use the anonymous track segment if the user hasn't allowed
-            # their GPX points to be tracked.
-            timestamps = false
-            if anon_track.nil?
-              anon_track = XML::Node.new "trk"
-              doc.root << anon_track
-            end
-            track = anon_track
-          end
-        end
-
-        if trackid != point.trackid
-          if point.trace.trackable?
-            trkseg = XML::Node.new "trkseg"
-            track << trkseg
-            trackid = point.trackid
-          else
-            if anon_trkseg.nil?
-              anon_trkseg = XML::Node.new "trkseg"
-              anon_track << anon_trkseg
-            end
-            trkseg = anon_trkseg
-          end
-        end
-
-        trkseg << point.to_xml_node(:print_timestamp => timestamps)
-      end
+      @points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page).preload(:trace)
 
       response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""
 
-      render :xml => doc.to_s
+      render :formats => [:gpx]
     end
   end
 end
index 0884964edffbd3498b6f6466626e4e8e78203dff..517b11e140818818dd7ab16b7219a39f04337720 100644 (file)
@@ -395,4 +395,10 @@ class ApplicationController < ActionController::Base
 
     referer.to_s
   end
+
+  def scope_enabled?(scope)
+    doorkeeper_token&.includes_scope?(scope) || current_token&.includes_scope?(scope)
+  end
+
+  helper_method :scope_enabled?
 end
index 63b77be4bce8f53b8495df2468dff236941db940..97d84b1737eb5d7b86c434f65c97f7328eacd251 100644 (file)
@@ -20,8 +20,8 @@ class Oauth2ApplicationsController < Doorkeeper::ApplicationsController
   end
 
   def application_params
-    params[:doorkeeper_application][:scopes]&.delete("")
-    params.require(:doorkeeper_application)
+    params[:oauth2_application][:scopes]&.delete("")
+    params.require(:oauth2_application)
           .permit(:name, :redirect_uri, :confidential, :scopes => [])
           .merge(:owner => current_resource_owner)
   end
index 69b0f6d6bc5ca833e9df2983b60596fee60f95d2..eed55cd9d9a722d00a56dea6a7ee5073a582430a 100644 (file)
@@ -8,9 +8,9 @@ module UserHelper
     if user.image_use_gravatar
       user_gravatar_tag(user, options)
     elsif user.avatar.attached?
-      image_tag user_avatar_variant(user, :resize_to_limit => [100, 100]), options
+      user_avatar_variant_tag(user, { :resize_to_limit => [100, 100] }, options)
     else
-      image_tag "avatar_large.png", options
+      image_tag "avatar_large.png", options.merge(:width => 100, :height => 100)
     end
   end
 
@@ -19,11 +19,11 @@ module UserHelper
     options[:alt] ||= ""
 
     if user.image_use_gravatar
-      user_gravatar_tag(user, options)
+      user_gravatar_tag(user, options.merge(:size => 50))
     elsif user.avatar.attached?
-      image_tag user_avatar_variant(user, :resize_to_limit => [50, 50]), options
+      user_avatar_variant_tag(user, { :resize_to_limit => [50, 50] }, options)
     else
-      image_tag "avatar_small.png", options
+      image_tag "avatar_small.png", options.merge(:width => 50, :height => 50)
     end
   end
 
@@ -32,11 +32,11 @@ module UserHelper
     options[:alt] ||= ""
 
     if user.image_use_gravatar
-      user_gravatar_tag(user, options)
+      user_gravatar_tag(user, options.merge(:size => 50))
     elsif user.avatar.attached?
-      image_tag user_avatar_variant(user, :resize_to_limit => [50, 50]), options
+      user_avatar_variant_tag(user, { :resize_to_limit => [50, 50] }, options)
     else
-      image_tag "avatar_small.png", options
+      image_tag "avatar_small.png", options.merge(:width => 50, :height => 50)
     end
   end
 
@@ -69,6 +69,22 @@ module UserHelper
   private
 
   # Local avatar support
+  def user_avatar_variant_tag(user, variant_options, options)
+    if user.avatar.variable?
+      variant = user.avatar.variant(variant_options)
+      # https://stackoverflow.com/questions/61893089/get-metadata-of-active-storage-variant/67228171
+      if variant.processed?
+        metadata = variant.processed.send(:record).image.blob.metadata
+        if metadata["width"]
+          options[:width] = metadata["width"]
+          options[:height] = metadata["height"]
+        end
+      end
+      image_tag variant, options
+    else
+      image_tag user.avatar, options
+    end
+  end
 
   def user_avatar_variant(user, options)
     if user.avatar.variable?
@@ -90,7 +106,7 @@ module UserHelper
 
   def user_gravatar_tag(user, options = {})
     url = user_gravatar_url(user, options)
-    options.delete(:size)
+    options[:height] = options[:width] = options.delete(:size) || 100
     image_tag url, options
   end
 end
diff --git a/app/models/oauth2_application.rb b/app/models/oauth2_application.rb
new file mode 100644 (file)
index 0000000..1657615
--- /dev/null
@@ -0,0 +1,13 @@
+class Oauth2Application < Doorkeeper::Application
+  belongs_to :owner, :polymorphic => true
+
+  validate :allowed_scopes
+
+  private
+
+  def allowed_scopes
+    return if owner.administrator?
+
+    errors.add(:scopes) if scopes.any? { |scope| Oauth::PRIVILEGED_SCOPES.include?(scope) }
+  end
+end
index 0860d2b31954e1a3d255594650b071443399f702..b3d87fc0947be767264db9300b5426b909375415 100644 (file)
@@ -53,7 +53,7 @@ class Trace < ApplicationRecord
 
   def tagstring=(s)
     self.tags = if s.include? ","
-                  s.split(/\s*,\s*/).reject { |tag| tag =~ /^\s*$/ }.collect do |tag|
+                  s.split(/\s*,\s*/).grep_v(/^\s*$/).collect do |tag|
                     tt = Tracetag.new
                     tt.tag = tag
                     tt
index 000f257b4eba0f683db3c0af4c974fe80aa9015d..b3c37430d8624a0c61d419e1b8e2ae9bec23e3d6 100644 (file)
@@ -31,12 +31,4 @@ class Tracepoint < ApplicationRecord
   validates :timestamp, :presence => true
 
   belongs_to :trace, :foreign_key => "gpx_id"
-
-  def to_xml_node(print_timestamp: false)
-    el1 = XML::Node.new "trkpt"
-    el1["lat"] = lat.to_s
-    el1["lon"] = lon.to_s
-    el1 << (XML::Node.new("time") << timestamp.xmlschema) if print_timestamp
-    el1
-  end
 end
diff --git a/app/views/api/tracepoints/index.gpx.builder b/app/views/api/tracepoints/index.gpx.builder
new file mode 100644 (file)
index 0000000..291ef0d
--- /dev/null
@@ -0,0 +1,79 @@
+xml.instruct!
+
+xml.gpx("version" => "1.0",
+        "creator" => "OpenStreetMap.org",
+        "xmlns" => "http://www.topografix.com/GPX/1/0") do
+  # initialise these variables outside of the loop so that they
+  # stay in scope and don't get free'd up by the GC during the
+  # loop.
+  gpx_id = -1
+  trackid = -1
+  tracks = []
+  track = nil
+  trkseg = nil
+  anon_track = nil
+  anon_trkseg = nil
+
+  @points.each do |point|
+    if gpx_id != point.gpx_id
+      gpx_id = point.gpx_id
+      trackid = -1
+
+      if point.trace.trackable?
+        track = {}
+        track["trksegs"] = []
+        tracks << track
+
+        if point.trace.identifiable?
+          track["name"] = point.trace.name
+          track["desc"] = point.trace.description
+          track["url"] = url_for(:controller => "/traces", :action => "show", :display_name => point.trace.user.display_name, :id => point.trace.id)
+        end
+      else
+        # use the anonymous track segment if the user hasn't allowed
+        # their GPX points to be tracked.
+        if anon_track.nil?
+          anon_track = {}
+          anon_track["trksegs"] = []
+          tracks << anon_track
+        end
+        track = anon_track
+      end
+    end
+
+    if trackid != point.trackid
+      if point.trace.trackable?
+        trkseg = []
+        track["trksegs"] << trkseg
+        trackid = point.trackid
+      else
+        if anon_trkseg.nil?
+          anon_trkseg = []
+          anon_track["trksegs"] << anon_trkseg
+        end
+        trkseg = anon_trkseg
+      end
+    end
+
+    trkseg << point
+  end
+
+  tracks.each do |trk|
+    xml.trk do
+      if trk.key?("name")
+        xml.name trk["name"]
+        xml.desc trk["desc"]
+        xml.url trk["url"]
+      end
+      trk["trksegs"].each do |trksg|
+        xml.trkseg do
+          trksg.each do |tracepoint|
+            xml.trkpt("lat" => tracepoint.lat.to_s, "lon" => tracepoint.lon.to_s) do
+              xml.time tracepoint.timestamp.xmlschema if tracepoint.trace.trackable?
+            end
+          end
+        end
+      end
+    end
+  end
+end
index 8423353dd3a1af1f8e534e0bc8e659ef12cb3a2d..7659e4e110c5b40667cb681b21fb116f48295913 100644 (file)
@@ -65,5 +65,7 @@ json.user do
         json.count user.sent_messages.size
       end
     end
+
+    json.email user.email if scope_enabled?(:read_email)
   end
 end
index 9092f2c96bacaaf1cb2233756716c41d36ecd0fc..7d6b177f2f6db76d6d8222dd9918fc5b6d6efa7b 100644 (file)
@@ -40,5 +40,6 @@ xml.tag! "user", :id => user.id,
                            :unread => user.new_messages.size
       xml.tag! "sent", :count => user.sent_messages.size
     end
+    xml.tag! "email", user.email if scope_enabled?(:read_email)
   end
 end
index 267bdb5556b261dd4195cdb8c4b810c1ca4a1e75..714cd14b57245b217ed1c29de72232071d48a561 100644 (file)
       <%= changeset.tags["comment"].to_s.presence || t("browse.no_comment") %>
     </a>
   </p>
-  <div class="comments comments-<%= changeset.comments.length %>">
-    <%= changeset.comments.length %>
-    <span class="icon note grey"></span>
-  </div>
-  <div class="details">
-    <%= changeset_details(changeset) %>
-    &middot;
-    #<%= changeset.id %>
+  <div class="row">
+    <div class="col">
+      <%= changeset_details(changeset) %>
+      &middot;
+      #<%= changeset.id %>
+    </div>
+    <div class="col-auto comments comments-<%= changeset.comments.length %>">
+      <%= changeset.comments.length %>
+      <span class="icon note grey"></span>
+    </div>
   </div>
 <% end %>
index d69536c6b3ca38ee3e78b1d2bccda01cfd493dfb..7fde3e0e7f19d57aa0ca9b2a4ca0d7a43e49e3b4 100644 (file)
@@ -3,5 +3,5 @@
 <%= f.form_group :confidential do %>
   <%= f.check_box :confidential %>
 <% end %>
-<%= f.collection_check_boxes :scopes, Oauth.scopes, :name, :description %>
+<%= f.collection_check_boxes :scopes, Oauth.scopes(:privileged => current_user.administrator?), :name, :description %>
 <%= f.primary %>
index 549138b3377cee55a7f71dc6bce30a9af451ce17..a96e6fd6c68ea28bdb39e7a9c4f34a0949f4dc38 100644 (file)
@@ -48,6 +48,8 @@ Doorkeeper.configure do
   #   end
   # end
 
+  application_class "Oauth2Application"
+
   # Enables polymorphic Resource Owner association for Access Tokens and Access Grants.
   # By default this option is disabled.
   #
@@ -221,7 +223,7 @@ Doorkeeper.configure do
   # https://doorkeeper.gitbook.io/guides/ruby-on-rails/scopes
 
   # default_scopes  :public
-  optional_scopes(*Oauth::SCOPES)
+  optional_scopes(*Oauth::SCOPES, *Oauth::PRIVILEGED_SCOPES)
 
   # Allows to restrict only certain scopes for grant_type.
   # By default, all the scopes will be available for all the grant types.
@@ -417,10 +419,10 @@ Doorkeeper.configure do
   # Under some circumstances you might want to have applications auto-approved,
   # so that the user skips the authorization step.
   # For example if dealing with a trusted application.
-  #
-  # skip_authorization do |resource_owner, client|
-  #   client.superapp? or resource_owner.admin?
-  end
+
+  skip_authorization do |_, client|
+    client.scopes.include?("skip_authorization")
+  end
 
   # Configure custom constraints for the Token Introspection request.
   # By default this configuration option allows to introspect a token by another
index 9b25a8c5fbf1885f91e5195f4e99451ffd698803..73c883b9a7d7bde6637be6360d17d372de4fd1e6 100644 (file)
@@ -34,6 +34,9 @@ ba:
       client_application:
         create: Теркәлеү
         update: Яңыртырға
+      doorkeeper_application:
+        create: Теркәлеү
+        update: Яңыртырға
       redaction:
         create: Төҙәтеүҙе эшләү
         update: Төҙәтеүҙе һаҡлау
@@ -106,6 +109,10 @@ ba:
         latitude: Киңлек
         longitude: Оҙонлоҡ
         language: Тел
+      doorkeeper/application:
+        name: Исем
+        confidential: Конфиденциаль ҡушымта?
+        scopes: Рөхсәт
       friend:
         user: Ҡулланыусы
         friend: Дуҫ
@@ -433,6 +440,21 @@ ba:
     timeout:
       sorry: Ҡыҙғанысҡа ҡаршы, һеҙ һораған төҙәтмә пакеттары исемлеген алыу өсөн күп
         ваҡыт талап итә.
+  dashboards:
+    contact:
+      km away: '%{count}км һеҙҙән'
+      m away: '%{count}м һеҙҙән'
+    popup:
+      your location: Һеҙҙең урынығыҙ
+      nearby mapper: Яҡындағы картограф
+      friend: Дуҫ
+    show:
+      title: Минең панель
+      edit_your_profile: Профильде үҙгәртеү
+      my friends: Дуҫтарым
+      no friends: Һеҙ әле бер дуҫта өҫтәмәнегеҙ.
+      nearby users: Яҡындағы башҡа ҡулланыусылар
+      friends_diaries: дуҫтар көндәлеге
   diary_entries:
     new:
       title: Көндәлектә яңы яҙма
@@ -503,11 +525,17 @@ ba:
     comments:
       has_commented_on: '%{display_name} әле генә  көндәлектең ошо яҙмаһына комментарий
         яҙҙы'
+      no_comments: Көндәлектә комментарийҙар юҡ
       post: Post
       when: Ҡасан
       comment: Комментарий
       newer_comments: Яңыраҡ фекерҙәр
       older_comments: Иҫкерәк фекерҙәр
+  doorkeeper:
+    flash:
+      applications:
+        create:
+          notice: Ҡушымта теркәлгән.
   friendships:
     make_friend:
       heading: '%{user} дуҫтарға өҫтәргә?'
@@ -546,6 +574,7 @@ ba:
           platter: Platter Lift
           pylon: Пилон
           station: Канат күтәргесе станцияһы
+          t-bar: Т-образлы буксир-күтәргестәр
           "yes": Һауа юлы
         aeroway:
           aerodrome: Аэродром
@@ -845,14 +874,17 @@ ba:
           milestone: Тарихи ваҡиға
           mine: Карьер
           monument: Монумент
+          railway: Тарихи тимер юлы
           roman_road: Рим юлы
           ruins: Емереклектәр
+          rune_stone: Руник таш
           stone: Таш
           tomb: Ҡәбер
           tower: Башня
           wayside_cross: Юл яны тәреһе
           wayside_shrine: Юл яны ғибәҙәтханаһы
           wreck: Батҡан кәмә остоғо
+          "yes": Иҫтәлекле урын
         junction:
           "yes": Юл киҫелеше
         landuse:
@@ -874,7 +906,9 @@ ba:
           landfill: Сүплек
           meadow: Туғай
           military: Хәрби биләмә
+          mine: Шахта
           orchard: Емеш баҡсаһы
+          plant_nursery: Үҫемлектәр өсөн питомник
           quarry: Карьер
           railway: Тимер юл
           recreation_ground: Ял итеү урыны
@@ -890,6 +924,7 @@ ba:
           bird_hide: Йәшерен ултырғыс (ҡоштарҙы күҙәтеү өсөн)
           common: Альменда
           dog_park: Эт өсөн майҙансыҡ
+          firepit: Усаҡ урыны
           fishing: Балыҡ тотоу
           fitness_centre: Фитнес-үҙәк
           fitness_station: Фитнес-станция
@@ -901,8 +936,10 @@ ba:
           miniature_golf: Минигольф
           nature_reserve: Заповедник
           park: Парк
+          picnic_table: Пикник өҫтәле
           pitch: Спорт майҙансығы
           playground: Балаларҙың уйын майҙансығы
+          recreation_ground: Ял итеү урыны
           resort: Ҡотҡарыу ҡоралы
           sauna: Сауна
           slipway: Эллинг
@@ -913,7 +950,23 @@ ba:
           water_park: Аквапарк
           "yes": Буш ваҡыт
         man_made:
+          advertising: Реклама
+          antenna: Антенна
+          beacon: Маяҡ
+          beam: Нур
+          beehive: Умарта
+          bridge: Күпер
+          bunker_silo: Бункер
+          chimney: Төтөн торбаһы
+          communications_tower: Бәйләнеш манараһы
+          crane: Кран
+          flagpole: Флагшток
+          gasometer: Газометр
+          kiln: Мейес
           lighthouse: Маяҡ
+          manhole: Люк
+          mast: Мачта
+          mine: Рудник
           pipeline: Торба юлы
           works: Фабрика
           "yes": Кеше ҡулы менән яһалған
index d8296618b4429cff78dbf68352216ec1a0041d9b..35fcff6e24cd3ed60d5b3e915f4dfbb6f8afc7ef 100644 (file)
@@ -1,9 +1,10 @@
-# Messages for Belarusian (Taraškievica orthography) (беларуская (тарашкевіца))
+# Messages for Belarusian (Taraškievica orthography) (беларуская (тарашкевіца))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: EugeneZelenko
 # Author: Jim-by
 # Author: Macofe
+# Author: Nieszczarda2
 # Author: Red Winged Duck
 # Author: Renessaince
 # Author: Wizardist
@@ -103,6 +104,7 @@ be-Tarask:
         language: Мова
       doorkeeper/application:
         name: Назва
+        scopes: Дазволы
       friend:
         user: Удзельнік
         friend: Сябар
@@ -284,6 +286,11 @@ be-Tarask:
         title_comment: Набор зьменаў %{id} - %{comment}
     way:
       nodes: Вузлы
+      nodes_count:
+        one: '%{count} пункт'
+        few: '%{count} пункты'
+        many: '%{count} пунктаў'
+        other: '%{count} пунктаў'
     relation:
       members: Удзельнікі
       members_count:
@@ -1110,6 +1117,10 @@ be-Tarask:
           вашых чытачоў на www.openstreetmap.org (магчымае выкарыстаньне поўнага адрасу
           &lsquo;OpenStreetMap&rsquo;), на opendatacommons.org і, пры неабходнасьці,
           на www.creativecommons.org.
+        credit_3_1_html: Фрагмэнты мапы ў &ldquo;стандартным стылі&rdquo; на www.openstreetmap.org
+          - гэта прадукт OpenStreetMap Foundation з выкарыстаньнем дадзеных OpenStreetMap
+          згодна з Open Database ліцэнзіяй. Пры выкарыстанні гэтага стылю мапы патрабуецца
+          такая ж спасылка, як і для дадзеных Open Database.
         more_title_html: Даведацца болей
         more_1_html: Даведайцеся болей пра выкарыстаньне нашых зьвестак і пра спасыланьне
           на нас на <a href="https://osmfoundation.org/Licence">старонцы ліцэнзіі
@@ -1126,8 +1137,9 @@ be-Tarask:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), а таксама земляў <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Форарльбэрг</a> і
           Тыроль (на ўмовах <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT з дапаўненьнямі</a>).
         contributors_au_html: |-
-          <strong>Аўстралія</strong>: Утрымлівае зьвесткі пра прыгарады ад
-          Аўстралійскага бюро статыстыкі.
+          <strong>Аўстралія</strong>: Уключана ці распрацавана з выкарыстаньнем адміністрацыйных граніцаў &copy;
+          <a href="https://geoscape.com.au/legal/data-copyright-and-disclaimer/">Geoscape Australia</a>
+          ліцэнзаваных Аўстралійскаю супольнасьцю паводле міжнароднай ліцэнзіі <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 (CC BY 4.0)</a>.
         contributors_ca_html: |-
           <strong>Канада</strong>: Утрымлівае зьвесткі
           GeoBase&reg;, GeoGratis (&copy; Дэпартамэнта прыродных рэсурсаў
index 8dc45282bc3d2caa713f077814c742939a52529d..baf3b593fd6b9f9da12f9c6ad1d6654604161129 100644 (file)
@@ -1,6 +1,7 @@
 # Messages for Bulgarian (български)
 # Exported from translatewiki.net
 # Export driver: phpyaml
+# Author: BennyZ2304
 # Author: DCLXVI
 # Author: Kareyac
 # Author: Lyubomirv
@@ -569,6 +570,7 @@ bg:
           loading_dock: Товарна рампа
           marketplace: Пазар
           monastery: Манастир
+          money_transfer: Паричен превод
           motorcycle_parking: Паркинг за мотоцикли
           music_school: Музикално училище
           nightclub: Нощен клуб
@@ -654,6 +656,7 @@ bg:
           warehouse: Склад
           "yes": Сграда
         club:
+          sport: Спортен клуб
           "yes": Клуб
         craft:
           blacksmith: Ковач
@@ -675,6 +678,7 @@ bg:
           access_point: Тчока за достъп
           ambulance_station: Станция за линейки
           defibrillator: Дефибрилатор
+          fire_extinguisher: Пожарогасител
           landing_site: Място за аварийно приземяване
           phone: Телефон за спешни повиквания
           water_tank: Цистерна за спешни случаи
@@ -793,6 +797,7 @@ bg:
           miniature_golf: Мини-голф
           nature_reserve: Природен резерват
           park: Парк
+          picnic_table: Маса за излет
           pitch: Спортна площадка
           playground: Детска площадка
           resort: Курорт
@@ -1187,8 +1192,8 @@ bg:
     intro_text: OpenStreetMap е карта на света създадена от хора като вас, за свободно
       ползване и под отворен лиценз.
     intro_2_create_account: Създаване на сметка
-    hosting_partners_html: Хостингът е предоставен от %{ucl}, %{bytemark} и други
-      %{partners}.
+    hosting_partners_html: Хостингът се поддържа от %{ucl}, %{fastly}, %{bytemark}
+      и други %{partners}.
     partners_ucl: UCL
     partners_bytemark: Bytemark
     partners_partners: партньори
@@ -1270,10 +1275,22 @@ bg:
     confirm:
       heading: Проверете електронна си поща
       introduction_1: Изпратихме ви писмо за потвърждаване.
+      press confirm button: Натиснете копчето за потвърждение отдолу, за да активирате
+        профила си.
       button: Потвърждаване
+      success: Профилът е потвърден, благодарим за регистрацията!
+      already active: Този профил вече е бил потвърден.
+      unknown token: Този код за потвърждение е изтекъл или не съществува.
+      reconfirm_html: Ако искате отново да изпратим съобщението за потвърждение, <a
+        href="%{reconfirm}">натиснете тук</a>.
+    confirm_resend:
+      failure: Потребителят %{name} не е открит.
     confirm_email:
       heading: Потвърдете смяната на електронната поща
+      press confirm button: Натиснете копчето отдолу, за да потвърдите новата си електронна
+        поща.
       button: Потвърждаване
+      success: Промяната на електронна поща е потвърдена!
   messages:
     inbox:
       title: Входящи
@@ -1355,8 +1372,15 @@ bg:
       heading: Смени Парола за %{user}
       reset: Нулиране на парола
       flash changed: Паролата е променена успешно.
+  preferences:
+    show:
+      title: Предпочитания
+      preferred_languages: Предпочитани езици
+    edit:
+      cancel: Отказ
   profiles:
     edit:
+      cancel: Отказ
       image: Изображение
       gravatar:
         gravatar: Използване на Gravatar
@@ -1370,6 +1394,9 @@ bg:
       no home location: Не сте избрали своето местоположение.
       update home location on click: Променяне на моето местоположение при избиране
         от картата
+    update:
+      success: Профилът е обновен.
+      failure: Неуспешно обновление на профила.
   sessions:
     new:
       title: Влизане
@@ -1421,6 +1448,7 @@ bg:
   shared:
     markdown_help:
       headings: Заглавия
+      link: Препратка
       text: Текст
       image: Изображение
       alt: Алтернативен текст
@@ -1472,6 +1500,7 @@ bg:
     edit:
       not_public: Не сте посочили вашите редакции да бъдат публични.
       user_page_link: Потребителска страница
+      anon_edits_link_text: Разберете защо е така.
       id_not_configured: iD не е настроен
     export:
       title: Изнасяне
@@ -1799,6 +1828,7 @@ bg:
       my profile: Профил
       my settings: Настройки
       my comments: Моите коментари
+      my_preferences: Предпочитания
       blocks on me: Блокирани от мен
       blocks by me: Блокирани от мен
       send message: Изпратете съобщение
@@ -1825,12 +1855,15 @@ bg:
         grant:
           administrator: Позволи администраторски достъп
           moderator: Позволи модераторски достъп
+      block_history: Активни блокирания
+      moderator_history: Блокирания
       comments: Коментари
       create_block: Блокиране на този потребител
       activate_user: Активирай този Потребител
       deactivate_user: Деактивирай този Потребител
       confirm_user: Потвърди този Потребител
       hide_user: Скрий този Потребител
+      unhide_user: Разкрий този потребител
       delete_user: Изтриване на този потребител
       confirm: Потвърдете
       report: Докладване на потребителя
@@ -1868,6 +1901,10 @@ bg:
         one: Страница %{page} (%{first_item} от %{items})
         other: Страница %{page} (%{first_item}-%{last_item} от %{items})
       summary_no_ip_html: '%{name} създадено на %{date}'
+      hide: Скрий избраните потребители
+      empty: Не са открити съвпадащи профили
+    suspended:
+      support: поддръжка
   user_role:
     grant:
       confirm: Потвърждаване
@@ -1876,6 +1913,11 @@ bg:
   user_blocks:
     not_found:
       back: Обратно към индекс
+    new:
+      back: Виж всички блокирания
+    edit:
+      title: Промяна на блокирането на %{name}
+      heading_html: Промяна на блокирането на %{name}
     revoke:
       revoke: Анулиране!
     helper:
index 8c964cf391bc193bf7b83a5b129e4c071591a020..a2fb15749587ff42497a2b289eaa9c725c5d0b2d 100644 (file)
@@ -1938,11 +1938,11 @@ ca:
           no són possibles (per exemple, obres impreses), us suggerim d'adreçar els
           lectors a openstreetmap.org (potser indicant l'adreça completa d'OpenStreetMap),
           a opendatacommons.org i, si s'escau, a creativecommons.org.
-        credit_3_1_html: "Les tessel·les de mapa en &ldquo;standard style&rdquo; a
-          www.openstreetmap.org són un producte de \nla FundacióOpenStreetMap usant
-          dades de l'OpenStreetMap \nsota llicència Open Database License. Si useu
-          aquestes tessel·les, afegiu la següent atribució:\n&ldquo;Base map and data
-          from OpenStreetMap and OpenStreetMap Foundation&rdquo;."
+        credit_3_1_html: |-
+          Les tessel·les de mapa en &ldquo;standard style&rdquo; a www.openstreetmap.org són un
+          producte de la Fundació OpenStreetMap usant dades de l'OpenStreetMap  sota llicència Open
+          Database License. Quan s'utilitza aquest estil de mapa, la mateixa atribució és requerit quant a
+          les dades del mapa.
         credit_4_html: |-
           En el cas d'un mapa electrònic navegable, els crèdits han d'aparèixer a la cantonada del mapa.
           Per exemple:
index 9e0ddf7ace4a3daf17731990dff7e2494e9c684b..a78363fc00a65fbfc7ccdc0319dbb478c111a50d 100644 (file)
@@ -9,6 +9,7 @@
 # Author: DemonioCZ
 # Author: DoubyCz
 # Author: Dvorapa
+# Author: Fraxinus.cs
 # Author: H4nek
 # Author: Ilimanaq29
 # Author: JAn Dudík
@@ -1975,10 +1976,9 @@ cs:
 
           Nebo můžete (a pokud šíříte OSM jako data, tak musíte) uvést název licence a odkaz na ni přímo. Pokud používáte médium, které odkazy neumožňuje (např. v tištěném díle), navrhujeme, abyste své čtenáře nasměrovali na openstreetmap.org (zřejmě rozšířením „OpenStreetMap“ do této plné adresy), na opendatacommons.org a, pokud se vás to týká, na creativecommons.org.
         credit_3_1_html: "Mapové dlaždice ve &ldquo;standardním stylu&rdquo; na www.openstreetmap.org
-          jsou \nvytvořeny OpenStreetMap Foundation s pomocí OpenStreetMap dat \npod
-          Open Database License. Pokud používáte tyto dlaždice, použijte\nnásledující
-          uvedení zdroje:\n&ldquo;Podkladová mapa a data od OpenStreetMap a OpenStreetMap
-          Foundation&rdquo;."
+          jsou \nvytvořeny organizací OpenStreetMap Foundation s pomocí dat z OpenStreetMap
+          \npod licencí Open Database License. Při používání tohoto stylu mapy je
+          vyžadováno uvedení stejného zdroje jako u mapových dat."
         credit_4_html: |-
           U interaktivní elektronické mapy by autorství mělo být uvedeno v rohu mapy.
           Příklad:
index 7f7e537c1396845486f48cdb69543ae82a2035c1..4847f3f9e9467b24bc8c1a83f27b5e0dd1e1a178 100644 (file)
@@ -1,6 +1,7 @@
 # Messages for Danish (dansk)
 # Exported from translatewiki.net
 # Export driver: phpyaml
+# Author: Antonla
 # Author: Brufnus
 # Author: Christian List
 # Author: Dargelf
@@ -792,6 +793,7 @@ da:
           window_construction: Vinduessnedker
           winery: Vingård
           "yes": Håndsværksbutik
+        crossing: Fodgængerfelt
         emergency:
           access_point: Redningspunkt
           ambulance_station: Ambulancestation
@@ -1047,6 +1049,7 @@ da:
           hill: Bakke
           hot_spring: Varm kilde
           island: Ø
+          isthmus: Landtange
           land: Land
           marsh: Marsk
           moor: Bjerghede
@@ -1061,10 +1064,13 @@ da:
           sand: Sand
           scree: Klint
           scrub: Krat
+          shingle: Stenstrand
           spring: Kilde
           stone: Sten
           strait: Sund
           tree: Træ
+          tree_row: Trærække
+          tundra: Tundra
           valley: Dal
           volcano: Vulkan
           water: Vand
@@ -1462,8 +1468,10 @@ da:
     intro_text: OpenStreetMap er et kort over verden, skabt af folk som dig og gratis
       at bruge under en åben licens.
     intro_2_create_account: Opret en brugerkonto
-    hosting_partners_html: Driften støttes af %{ucl}, %{bytemark} og andre %{partners}.
+    hosting_partners_html: Driften støttes af %{ucl}, %{fastly}, %{bytemark} og andre
+      %{partners}.
     partners_ucl: University College London
+    partners_fastly: Fastly
     partners_bytemark: Bytemark Hosting
     partners_partners: partnere
     tou: Vilkår for anvendelse
@@ -2412,6 +2420,9 @@ da:
       flash: Du har tilbagekaldt adgang for %{application}
     permissions:
       missing: Du har ikke givet applikationen adgang til denne facilitet
+    scopes:
+      read_email: Læs brugerens e-mailadresse
+      skip_authorization: Godkend applikation automatisk
   oauth_clients:
     new:
       title: Registrere en ny applikation
index b2592c1c252c165d97d02a7df83f82af743a614f..183e68a90c0ff3c5b3e40e005441e92474c8b7eb 100644 (file)
@@ -1865,9 +1865,8 @@ en:
         credit_3_1_html: |
           The map tiles in the &ldquo;standard style&rdquo; at www.openstreetmap.org are a
           Produced Work by the OpenStreetMap Foundation using OpenStreetMap data
-          under the Open Database License. If you are using these tiles please use
-          the following attribution:
-          &ldquo;Base map and data from OpenStreetMap and OpenStreetMap Foundation&rdquo;.
+          under the Open Database License. When using this map style, the same attribution is
+          required as for the map data.
         credit_4_html: |
           For a browsable electronic map, the credit should appear in the corner of the map.
           For example:
@@ -2393,6 +2392,8 @@ en:
       read_gpx: Read private GPS traces
       write_gpx: Upload GPS traces
       write_notes: Modify notes
+      read_email: Read user email address
+      skip_authorization: Auto approve application
   oauth_clients:
     new:
       title: "Register a new application"
index 8660d9222aabafe149d6343f41cfac70395fc55d..4c5d05e4c254d0f3c71fc8932eaa3ad1cfa06a3d 100644 (file)
@@ -226,7 +226,7 @@ eo:
     default: Implicita (nune %{name})
     id:
       name: iD
-      description: iD (en-foliumila redaktilo)
+      description: iD (en-retfoliumila redaktilo)
     remote:
       name: ekstera redaktilo
       description: ekstera redaktilo (JOSM, Potlatch, Merkaartor)
@@ -1924,9 +1924,10 @@ eo:
           eble meti ligilojn (ekz. en paperaj mapoj), ni sugestas direkti viajn legantojn
           al openstreetmap.org (eble meti plenan retadreson), al opendatacommons.org
           kaj (se necesas) al creativecommons.org.
-        credit_3_1_html: |-
-          La map-kaheloj kaj la stilo &ldquo;norma&rdquo; ĉe www.openstreetmap.org estas la produktaĵo de la Fondaĵo OpenStreetMap uzante OpenStreetMap-datumojn laŭ la permesilo Open Database License. Por uzi tiujn ĉi map-kahelojn necesas enmeti la jenan atribuon:
-          &ldquo;Baza mapo kaj datumoj de OpenStreetMap kaj Fondaĵo OpenStreetMap&rdquo;.
+        credit_3_1_html: La map-kaheloj kaj la stilo “norma” ĉe www.openstreetmap.org
+          estas la produktaĵo de la Fondaĵo OpenStreetMap uzante OpenStreetMap-datumojn
+          laŭ la permesilo Open Database License. Por uzi tiujn ĉi map-kahelojn necesas
+          enmeti la saman atribuon kiel por la map-datumoj.
         credit_4_html: |-
           En esploreblaj elektronikaj mapoj, la aŭtorecon povas esti montrata ĉe la angulo de mapo.
           Ekzemplo:
@@ -2432,6 +2433,8 @@ eo:
       read_gpx: legi privatajn GPS-spurojn
       write_gpx: alŝuti GPS-spurojn
       write_notes: modifi rimarkojn
+      read_email: legi retpoŝtan adreson de uzanto
+      skip_authorization: Aŭtomate akcepti aplikaĵojn
   oauth_clients:
     new:
       title: Registri novan aplikaĵon
@@ -2453,7 +2456,7 @@ eo:
       title: Miaj OAuth-detaloj
       my_tokens: Miaj permesataj aplikaĵoj
       list_tokens: 'La jenaj ĵetonoj estis aldonitaj al aplikaĵoj komisie de vi:'
-      application: Aplikaĵa nomo
+      application: Nomo de aplikaĵo
       issued_at: Eldonita je
       revoke: Malvalidigi!
       my_apps: Miaj klientaj aplikaĵoj
index ad747bccf0d08da0777e4d1c2bd76f239779d57b..724f03439d312906107b2568ccd65037fdff1322 100644 (file)
@@ -859,6 +859,7 @@ es:
           window_construction: Construcción de ventanas
           winery: Bodega
           "yes": Tienda de artesanía
+        crossing: Cruce
         emergency:
           access_point: Punto de acceso
           ambulance_station: Base de ambulancias
@@ -1114,6 +1115,7 @@ es:
           hill: Colina
           hot_spring: Fuente termal
           island: Isla
+          isthmus: Istmo
           land: Tierra
           marsh: Marisma
           moor: Páramo
@@ -1132,6 +1134,8 @@ es:
           stone: Piedra
           strait: Estrecho
           tree: Árbol
+          tree_row: Fila de Árboles
+          tundra: Tundra
           valley: Valle
           volcano: Volcán
           water: Agua
@@ -1533,6 +1537,7 @@ es:
     hosting_partners_html: El alojamiento es apoyado por %{ucl}, %{bytemark}, y otros
       %{partners}.
     partners_ucl: UCL
+    partners_fastly: Rápido
     partners_bytemark: Bytemark Hosting
     partners_partners: socios
     tou: Términos de uso
index fa10ff5f634868c8922bf7e652fe27997f9d0d5a..4783719ce69b9fbe08bafca1923dc407df000a78 100644 (file)
@@ -407,6 +407,7 @@ et:
       nearby mapper: Lähedaloevad kaardistajad
       friend: Sõber
     show:
+      title: Minu andmelaud
       no_home_location_html: '%{edit_profile_link} ja määra enda asukoht, et näha
         ümberkaudseid kasutajaid.'
       edit_your_profile: Muuda profiili
@@ -485,7 +486,7 @@ et:
         title: OpenStreetMapi päevikusissekanded
         description: Hiljutised OpenStreetMapi kasutajate päevikusissekanded
     comments:
-      has_commented_on: '%{display_name} on kommenteerinud järgnevaid päeviku sissekandeid'
+      has_commented_on: '%{display_name} on kommenteerinud järgmiseid päeviku sissekandeid'
       no_comments: Päeviku kommentaarid puuduvad.
       post: Postitus
       when: Millal
@@ -1009,7 +1010,8 @@ et:
     intro_text: OpenStreetMap on maailma kaart, mille on loonud inimesed nagu sina
       ja seda võib vabalt kasutada avatud litsentsi tingimustel.
     intro_2_create_account: loo oma konto
-    hosting_partners_html: Majutust toetavad %{ucl}, %{bytemark} ja teised %{partners}.
+    hosting_partners_html: Majutust toetavad %{ucl}, %{fastly}, %{bytemark} ja teised
+      %{partners}.
     partners_ucl: UCL
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerid
@@ -1426,11 +1428,11 @@ et:
           aadressidele openstreetmap.org (võimalik, et laiendades teksti
           "OpenStreetMap" täisaadressiks), opendatacommons.org ja
           kui vaja, siis ka aadressile creativecommons.org.
-        credit_3_1_html: "Standardse kujundusega kaardipaanid asukohas www.openstreetmap.org
-          on\nlitsentsi Open Database License alla kuuluvatest andmetest loodud teos,\nmille
-          autor on OpenStreetMap Foundation. Kui kasutad neid kaardipaane,\nsiis palun
-          omista need autorile järgmiselt: \n&ldquo;Aluskaart ja andmed OpenStreetMapist
-          ja OpenStreetMap Foundationilt&rdquo;."
+        credit_3_1_html: |-
+          Standardse kujundusega kaardipaanid asukohas www.openstreetmap.org on
+          litsentsi Open Database License alla kuuluvatest andmetest loodud teos,
+          mille autor on OpenStreetMap Foundation. Kui kasutad neid kaardipaane,
+          siis tuleb need autorile omistada samamoodi nagu kaardiandmed.
         credit_4_html: |-
           Sirvitaval elektroonilisel kaardil peaks viide olema näha kaardi nurgas.
           Näiteks:
@@ -1456,11 +1458,11 @@ et:
           BY</a> tingimustel),\n<a href=\"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm\">Vorarlbergi
           liidumaast</a> ja\nTirooli liidumaast (<a href=\"https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/\">CC
           BY AT tingimustel koos õiendustega</a>)."
-        contributors_au_html: "<strong>Austraalia</strong>: Sisaldab andmeid, mille
-          allikas on \n<a href=\"https://www.psma.com.au/psma-data-copyright-and-disclaimer\">PSMA
-          Australia Limited</a>\nja mille kasutust lubab Austraalia Ühendus litsentsi
-          \n<a href=\"https://creativecommons.org/licenses/by/4.0/deed.et\">CC BY
-          4.0</a> tingimustel."
+        contributors_au_html: "<strong>Austraalia</strong>: Sisaldab andmeid või on
+          tuletatud andmetest, mille allikas on \n<a href=\"https://geoscape.com.au/legal/data-copyright-and-disclaimer/\">Geoscape
+          Australia</a>\nja mille kasutust lubab Austraalia Ühendus rahvusvahelise
+          litsentsi \n<a href=\"https://creativecommons.org/licenses/by/4.0/deed.et\">\"Autorile
+          viitamine 4.0\" (CC BY 4.0)</a> tingimustel."
         contributors_ca_html: |-
           <strong>Kanada</strong>: Sisaldab andmekogude
           GeoBase&reg;, GeoGratis (&copy; Kanada loodusvarade
@@ -1955,6 +1957,8 @@ et:
       confirm_delete: Kas kustutad selle rakenduse?
       permissions: Õigused
       redirect_uris: Ümbersuunamise URI-d
+    not_found:
+      sorry: Seda rakendust kahjuks ei leitud.
   oauth2_authorized_applications:
     index:
       title: Minu volitatud rakendused
@@ -2024,6 +2028,7 @@ et:
       my settings: Minu sätted
       my comments: Minu kommentaarid
       my_preferences: Minu eelistused
+      my_dashboard: Minu andmelaud
       blocks on me: Saadud blokeeringud
       blocks by me: Minu seatud blokeeringud
       edit_profile: Muuda profiili
index bb2dc2deed0480ae727e479c45cca70f43d0ecf3..b1e6ab09f20ace85f2d6e3e76fc741e2986e2534 100644 (file)
@@ -2414,6 +2414,7 @@ fa:
       read_gpx: خواندن ردهای جی‌پی‌اس خصوصی
       write_gpx: آپلود ردهای جی‌پی‌اس
       write_notes: اصلاح یادداشت‌ها
+      read_email: خواندن نشانی ایمیل کاربر
   oauth_clients:
     new:
       title: ثبت اپلیکیشن تازه
index 79c3e361c39c998ec56685c4a05489cd7d25d450..1b49049ce85f60bd90ecd18df608ddaaaadf74dc 100644 (file)
@@ -2315,6 +2315,7 @@ fi:
       missing: Et ole sallinut sovelluksen käyttöoikeutta tähän palveluun
     scopes:
       write_api: Muokkaa karttaa
+      read_email: Lue käyttäjän sähköpostiosoite
   oauth_clients:
     new:
       title: Rekisteröi uusi sovellus
index 818446669f6eb8a305eaa09c4ebb3313e086870f..95d42fdc3335f27ece46d466a648700e41e67f0d 100644 (file)
@@ -12,6 +12,7 @@
 # Author: DavidL
 # Author: Dereckson
 # Author: Derugon
+# Author: DreZhsh
 # Author: E THP
 # Author: Efred
 # Author: Eruedin
@@ -2034,9 +2035,10 @@ fr:
           licence CC BY-SA. Vous pouvez mentionner ceci avec un lien hypertexte vers
           <a href="https://www.openstreetmap.org/copyright">cette page de mentions légales</a>.
           Alternativement, et obligatoirement si vous distribuez OpenStreetMap sous forme de données brutes, vous pouvez directement nommer et fournir un lien vers la ou les licences. Sur les supports où les liens hypertextes sont impossibles (par exemple sur un support papier), nous vous suggérons de rediriger vos lecteurs vers le site openstreetmap.org (éventuellement en développant « OpenStreetMap » vers cette adresse complète) et vers opendatacommons.org.
-        credit_3_1_html: |-
-          Les tuiles de la carte dans le « style standard » sur www.openstreetmap.org sont un travail produit par la Fondation OpenStreetMap en utilisant les données d’OpenStreetMap sous la licence Open Database. Si vous utilisez ces tuiles, veuillez utiliser l’attribution suivante :
-          « Fond de carte et données d’OpenStreetMap et de la Fondation OpenStreetMap ».
+        credit_3_1_html: Les tuiles de la carte dans le « style standard » sur www.openstreetmap.org
+          sont un travail produit par la Fondation OpenStreetMap en utilisant les
+          données d’OpenStreetMap sous la licence Open Database. Lors de l'utilisation
+          de ce style de carte, la même attribution est requise pour les données cartographiques.
         credit_4_html: |-
           Pour une carte électronique navigable, le crédit devrait apparaître dans un coin de la carte.
           Par exemple :
@@ -2570,6 +2572,8 @@ fr:
       read_gpx: Lire les traces GPC privées
       write_gpx: Mettre à jour les traces GPC
       write_notes: Modifier les notes
+      read_email: Lire l'adresse e-mail de l'utilisateur
+      skip_authorization: Demande d'approbation automatique
   oauth_clients:
     new:
       title: Enregistrer une nouvelle application
index be51dbc5b838d943eac0d00cf113345d1c9f2f28..8281ced6053b6a2e4ff7ab71530a7fccff13dd5d 100644 (file)
@@ -554,8 +554,8 @@ he:
       report: לדווח על הרשומה הזאת
     diary_comment:
       comment_from_html: תגובה מאת %{link_user} על %{comment_created_at}
-      hide_link: ×\94סתרת ×\94ער×\94 ×\96×\95
-      unhide_link: ×\91×\99×\98×\95×\9c ×\94סתרת ×\94ער×\94 ×\96×\95
+      hide_link: ×\94סתרת ×\94×\94ער×\94 ×\94×\96×\90ת
+      unhide_link: ×\91×\99×\98×\95×\9c ×\94סתרת ×\94×\94ער×\94 ×\94×\96×\90ת
       confirm: אישור
       report: לדווח על ההערה הזאת
     location:
index 7cfea09e7c02337fcf2eb924ba8b2bd69586f80e..c5ec29ed6c88dd55c0d407b1bb641f26c74b5ef7 100644 (file)
@@ -15,6 +15,7 @@
 # Author: Siddhartha Ghai
 # Author: ThisIsACreeper0101
 # Author: Vdhatterwal
+# Author: पदाति
 ---
 hi:
   time:
@@ -36,6 +37,9 @@ hi:
       client_application:
         create: खाता बनाएं
         update: अपडेट करें
+      doorkeeper_application:
+        create: खाता बनाएं
+        update: अद्यतनित करें
       redaction:
         create: रिडैक्शन बनाएँ
         update: रिडैक्शन सहेजें
@@ -109,6 +113,7 @@ hi:
         language: भाषा
       doorkeeper/application:
         name: नाम
+        scopes: अनुमतियां
       friend:
         user: सदस्य
         friend: दोस्त
@@ -129,6 +134,8 @@ hi:
         title: विषय
         body: संदेश का शारीर
         recipient: प्राप्तकर्ता
+      redaction:
+        title: शीर्षक
       report:
         category: अपने रिपोर्ट का एक कारण दें
         details: कृपया अपनी समस्या के बारे में थोड़ी और जानकारी दें (ज़रूरी)
index 53c2fcfa0f23f4ae0d2bccd1031ba6c7263f580c..6f2a3598e81e2a98306059937d6c12895c60cc2e 100644 (file)
@@ -160,7 +160,10 @@ hsb:
       about_x_hours:
         other: před něhdźe hodźinu
       about_x_months:
-        other: něhdźe před měsacom
+        one: něhdźe před %{count} měsacom
+        two: něhdźe před %{count} měsacomaj
+        few: něhdźe před %{count} měsacami
+        other: něhdźe před %{count} měsacami
       about_x_years:
         other: něhdźe před lětom
       almost_x_years:
index 8a8f62ad4a1528127d31bc9c0654faa5dbb4da86..dd59409808025a42a182783a95ff75273dc62653 100644 (file)
@@ -1955,9 +1955,10 @@ hu:
           hogy a felhasználókat irányítsd az openstreetmap.org címre (esetlegesen
           az "OpenStreetMap" szót kiegészítve erre a teljes címre), és az opendatacommons.org
           címre, illetve - ha szükséges - a creativecommons.org címre.
-        credit_3_1_html: |-
-          A www.openstreetmap.org webhelyen található „szokásos stílusú” térképcsempék az OpenStreetMap Alapítvány alkotása, az OpenStreetMap adatok felhasználásával, az Open Database Licenc alatt. Ha ezeket a csempéket felhasználod, kérjük, írd ki a következőt:
-          Alaptérkép és adatok az OpenStreetMapről és az OpenStreetMap Alapítványtól
+        credit_3_1_html: A www.openstreetmap.org webhelyen található „szokásos stílusú”
+          térképcsempék az OpenStreetMap Alapítvány alkotása, az OpenStreetMap adatok
+          felhasználásával, az Open Database Licenc alatt. Ha ezeket a csempéket felhasználod,
+          ugyanaz a szerzőmegjelölés szükséges, mint a térképadatokhoz.
         credit_4_html: |-
           Böngészhető elektronikus térkép esetén a forrásra vonatkozó hivatkozás jelenjen meg a térkép sarkában.
           Például:
@@ -1981,9 +1982,10 @@ hu:
           <strong>Ausztria</strong>: adatokat tartalmaz a következő forrásból:
              <a href="https://data.wien.gv.at/">Bécs városa</a>
              <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a> licenc alatt.
-        contributors_au_html: 'Ausztrália: A Commonwealth of Australia által a <a
-          href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution
-          4.0 International licenc (CC BY 4.0)</a> alapján engedélyezett <a href="https://geoscape.com.au/legal/data-copyright-and-disclaimer/">Geoscape
+        contributors_au_html: '<strong>Ausztrália</strong>: A Commonwealth of Australia
+          által a <a href="https://creativecommons.org/licenses/by/4.0/">Creative
+          Commons Attribution 4.0 International licenc (CC BY 4.0)</a> alapján engedélyezett
+          <a href="https://geoscape.com.au/legal/data-copyright-and-disclaimer/">Geoscape
           Australia</a> Administrative Boundaries &copy; (közigazgatási határok) felhasználásával
           készült vagy azt tartalmazza.'
         contributors_ca_html: |-
@@ -1996,16 +1998,15 @@ hu:
           forrásokból: \nNational Land Survey of Finland's Topographic Database\nés
           más adatforrások <a href=\"https://www.maanmittauslaitos.fi/en/opendata-licence-version1\"></a>NLSFI
           licenc alatt."
-        contributors_fr_html: |-
-          <strong>France</strong>: adatokat tartalmaz a következő forrásból:
-             Direction Générale des Impôts.
+        contributors_fr_html: '<strong>Franciaország</strong>: adatokat tartalmaz
+          a következő forrásból: Direction Générale des Impôts.'
         contributors_nl_html: |-
           <strong>Hollandia</strong>: adatokat tartalmaz innen: Automotive Navigation Data, 2007
           (<a href="https://www.and.com">www.and.com</a>)
-        contributors_nz_html: '<strong>New Zealand</strong>:adatokat tartalmaz a következő
-          forrásból: <a href="https://data.linz.govt.nz/">LINZ Data Service</a> a
-          felhasználási engedély <a href="https://creativecommons.org/licenses/by/4.0/">CC
-          BY 4.0</a> szerint.'
+        contributors_nz_html: '<strong>Új-Zéland</strong>: adatokat tartalmaz a következő
+          forrásból: <a href="https://data.linz.govt.nz/">LINZ Data Service</a>, újrafelhasználható
+          <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> licenc
+          szerint.'
         contributors_si_html: '<strong>Szlovénia</strong>: Tartalmaz adatokat a <a
           href="http://www.gu.gov.si/en/">Földmérési és Térképészeti Hatóságtól</a>
           és a <a href="http://www.mkgp.gov.si/en/">Földművelési, Erdőgazdálkodási
index ea97dc65cd1e2489cee852f29468ccab33588dda..c51637059bc32b15dfef23237e327a98f8f918e9 100644 (file)
@@ -1932,9 +1932,10 @@ ia:
         credit_2_1_html: |-
           Vos debe etiam indicar clarmente que le datos es disponibile sub Open Database License. Vos pote facer isto con un ligamine a <a href="https://www.openstreetmap.org/copyright">iste pagina de copyright</a>.
           Alternativemente, e obligatorimente si vos distribue OSM in forma de datos, vos pote mentionar le licentia(s) e ligar directemente a illo(s). Si vos usa un medio de communication in le qual le ligamines non es possibile (p.ex. un obra imprimite), nos suggere que vos dirige vostre lectores a openstreetmap.org (forsan per inserer iste adresse complete in loco del parola &lsquo;OpenStreetMap&rsquo;) e a opendatacommons.org.
-        credit_3_1_html: |-
-          Le tegulas de carta in le &ldquo;stilo standard&rdquo sur www.openstreetmap.org es un obra producite per le Fundation OpenStreetMap usante datos de OpenStreetMap sub le licentia Open Database. Si tu usa iste tegulas, per favor usa le attribution sequente:
-          &ldquo;Fundo de carta e datos de OpenStreetMap e del Fundation OpenStreetMap&rdquo;.
+        credit_3_1_html: Le tegulas de carta in le &ldquo;stilo standard&rdquo sur
+          www.openstreetmap.org es un obra producite per le Fundation OpenStreetMap
+          usante datos de OpenStreetMap sub le licentia Open Database. Pro usar iste
+          stilo de carta, le mesme attribution es requirite como pro le datos cartographic.
         credit_4_html: 'Pro un carta electronic navigabile, le recognoscentia debe
           apparer in le angulo del carta. Per exemplo:'
         attribution_example:
@@ -2455,6 +2456,8 @@ ia:
       read_gpx: Leger tracias GPS private
       write_gpx: Incargar tracias GPS
       write_notes: Modificar notas
+      read_email: Leger le adresse de e-mail del usator
+      skip_authorization: Approbar automaticamente le application
   oauth_clients:
     new:
       title: Registrar un nove application
index 34c40202c0eaeb130874b0aeb69809527f35596e..7a58f289fec8facf433e7a58a0e089aff3727979 100644 (file)
@@ -1987,11 +1987,11 @@ it:
         credit_2_1_html: |-
           Inoltre devi specificare chiaramente che i dati sono disponibili sotto la Open Database Licese e, se usi le nostre tavole, che la cartografia è pubblicata con licenza CC BY-SA. Puoi fare ciò mettendo un collegamento URL a <a href="https://www.openstreetmap.org/copyright">questa pagina di copyright</a>.
           In alternativa, e necessariamente se stai distribuendo OSM sotto forma di dati, puoi citare e creare un collegamento diretto alle licenze. In mezzi di comunicazione dove i collegamenti URL non sono possibili (per esempio un'opera stampata), ti suggeriamo di indirizzare i lettori verso openstreetmap.org (magari esplicitando 'OpenStreetMap' come nome completo), verso opendatacommons.org e, se necessario, verso creativecommons.org.
-        credit_3_1_html: 'I tasselli della mappa nello &ldquo;stile predefinito&rdquo;
+        credit_3_1_html: I tasselli della mappa nello &ldquo;stile predefinito&rdquo;
           su www.openstreetmap.org sono frutto del lavoro della fondazione OpenStreetMap
-          a partire da dati OpenStreetMap rilasciati con licenza Open Database. Se
-          utilizzi questi tasselli, inserisci la seguente attribuzione: &ldquo;Mappa
-          di base e dati da OpenStreetMap e dalla fondazione OpenStreetMap&rdquo;.'
+          a partire da dati OpenStreetMap rilasciati con licenza Open Database. Quando
+          utilizzi questo stile mappa è richiesta la stessa attribuzione come per
+          i dati mappa.
         credit_4_html: |-
           In una mappa elettronica navigabile, i crediti devono essere mostrati nell'angolo della mappa.
           Ad esempio:
index 5912620413d34666240609f9c7b0620d1d91d575..9bc4a6b1b9cbf3b0df8d642192c056a811cec311 100644 (file)
@@ -73,6 +73,8 @@ kn:
         latitude: ಅಕ್ಷಾಂಶ
         longitude: ರೇಖಾಂಶ
         language: ಭಾಷೆ
+      doorkeeper/application:
+        name: ಹೆಸರು
       friend:
         user: ಬಳಕೆದಾರ
         friend: ಗೆಳೆಯ
@@ -94,6 +96,7 @@ kn:
         title: ಶೀರ್ಷಿಕೆ
       user:
         email: ಇ-ಅಂಚೆ
+        email_confirmation: ಮಿಂಚಂಚೆ ದೃಢೀಕರಣ
         new_email: ಹೊಸ ಇ-ಅಂಚೆ ವಿಳಾಸ
         active: ಸಕ್ರಿಯ
         display_name: ಹೆಸರನ್ನು ಪ್ರದರ್ಶಿಸು
@@ -148,6 +151,7 @@ kn:
       description: ದೂರ ನಿಯಂತ್ರಣ (JOSM, Potlatch, Merkaartor)
   auth:
     providers:
+      none: ಯಾವುದೂ ಇಲ್ಲ
       google: ಗೂಗಲ್
       facebook: ಫೇಸ್‍ಬುಕ್
       windowslive: ವಿಂಡೋಸ್ ಲೈವ್
@@ -222,6 +226,7 @@ kn:
     containing_relation:
       entry_html: ಸಂಬಂಧ %{relation_name}
     not_found:
+      title: ಸಿಗಲಿಲ್ಲ
       sorry: 'ಕ್ಷಮಿಸಿ, %{type} #%{id} ಸಿಗುತ್ತಿಲ್ಲ.'
       type:
         node: ‍ನೋಡ್
@@ -269,7 +274,7 @@ kn:
       no_edits: (ಸಂಪಾದನೆಗಳಿಲ್ಲ)
       view_changeset_details: ಬದಲಾವಣೆಯ ವಿವರಗಳನ್ನು ತೋರಿಸಿ
     changesets:
-      id: à²\97à³\81ರà³\81ತಿನ à²¸à²\82à²\96à³\8dಯà³\86
+      id: à²\90ಡಿ
       saved_at: ಇಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ
       user: ಬಳಕೆದಾರ
       comment: ಟಿಪ್ಪಣಿ
@@ -295,6 +300,15 @@ kn:
     index:
       title_all: ಓಪನ್ ಸ್ಟ್ತ್ರೀಟ್ ಮ್ಯಾಪ್ ಬದಲಾವಣೆಗಳ ಚರ್ಚೆ
       title_particular: ಓಪನ್ ಸ್ಟ್ರೀಟ್ ಮ್ಯಾಪ್ ಬದಲಾವಣಾ ಸಂಖ್ಯೆ %{changeset_id} ಯ ಚರ್ಚೆ
+  dashboards:
+    contact:
+      km away: '%{count} ಕಿಮೀ ದೂರ'
+      m away: '%{count} ಮೀ ದೂರ'
+    popup:
+      friend: ಗೆಳೆಯ
+    show:
+      my friends: ನನ್ನ ಗೆಳೆಯರು
+      no friends: ನೀವು ಇನ್ನೂ ಯಾವ ಗೆಳೆಯರನ್ನೂ ಸೇರಿಸಿಲ್ಲ.
   diary_entries:
     new:
       title: ದಿನಚರಿಯಲ್ಲಿ ಹೊಸದಾದ ದಾಖಲೆ
@@ -302,9 +316,9 @@ kn:
       location: ಸ್ಥಳ
       use_map_link: ನಕ್ಷೆ ಬಳಸು
     index:
-      title: ಬಳಕೆದಾರರ ದಿನಚರಿ
-      title_friends: ಗೆಳೆಯರ ದಿನಚರಿ
-      title_nearby: ಹತ್ತಿರದ ಬಳಕೆದಾರರ ದಿನಚರಿ
+      title: ಬಳಕೆದಾರರ ದಿನಚರಿಗಳು
+      title_friends: ಗೆಳೆಯರ ದಿನಚರಿಗಳು
+      title_nearby: ಹತ್ತಿರದ ಬಳಕೆದಾರರ ದಿನಚರಿಗಳು
       user_title: '%{user}ರ ದಿನಚರಿ'
       in_language_title: ದಿನಚರಿ ದಾಖಲಾತಿ %{language}ನಲ್ಲಿ
       new: ಹೊಸದಾದ ದಿನಚರಿ ದಾಖಲು
@@ -318,7 +332,7 @@ kn:
       marker_text: ದಿನಚರಿ ದಾಖಲೆಯ ಸ್ಥಳ
     show:
       title: '%{user}ಅವರ ದಿನಚರಿ | %{title}'
-      user_title: '%{user}à²\85ವರ à²¦à²¿à²¨à²\9aರಿ'
+      user_title: '%{user}ರ ದಿನಚರಿ'
       leave_a_comment: ಟಿಪ್ಪಣಿ ನೀಡಿರಿ
       login_to_leave_a_comment_html: '%{login_link} ಅಭಿಪ್ರಾಯ ತಿಳಿಸಲು'
       login: ಲಾಗಿನ್
@@ -337,6 +351,7 @@ kn:
       comment_from_html: '%{link_user}ಅವರಿಂದ %{comment_created_at}ರಂದು ಅಭಿಪ್ರಾಯ'
       hide_link: ಈ ಟಿಪ್ಪಣಿಯನ್ನು ಅಡಗಿಸಿ
       confirm: ಧೃಡಪಡಿಸಿ
+      report: ಈ ಟಿಪ್ಪಣಿಯನ್ನು ವರದಿ ಮಾಡಿ
     location:
       location: 'ಸ್ಥಳ:'
       view: ವೀಕ್ಷಿಸಿ
@@ -416,6 +431,7 @@ kn:
           "yes": ಸೇತುವೆ
         building:
           public: ಸಾರ್ವಜನಿಕ ಕಟ್ಟಡ
+          roof: ಛಾವಣಿ
           school: ಶಾಲಾ ಕಟ್ಟಡ
           "yes": ಕಟ್ಟಡ
         craft:
@@ -448,9 +464,12 @@ kn:
           railway: ಐತಿಹಾಸಿಕ ರೈಲ್ವೆ
           roman_road: ರೋಮನ್ ರಸ್ತೆ
           stone: ಕಲ್ಲು
+          tower: ಗೋಪುರ
         landuse:
+          cemetery: ಸ್ಮಶಾನ
           forest: ಅರಣ್ಯ
           grass: ‍ಹುಲ್ಲು
+          mine: ಗಣಿ
           orchard: ತೋಟ
         leisure:
           dog_park: ಶ್ವಾನ ಉದ್ಯಾನ
@@ -499,6 +518,7 @@ kn:
           ngo: ಸರ್ಕಾರೇತರ ಕಛೇರಿ
           "yes": ಕಛೇರಿ
         place:
+          archipelago: ದ್ವೀಪ ಸಮೂಹ
           city: ನಗರ
           country: ದೇಶ
           house: ಮನೆ
@@ -525,6 +545,7 @@ kn:
           books: ಪುಸ್ತಕದ ಅಂಗಡಿ
           car: ಕಾರಿನ ಅಂಗಡಿ
           car_parts: ಕಾರಿನ ಬಿಡಿ ಭಾಗಗಳು
+          chocolate: ಚಾಕೊಲೇಟ್
           clothes: ಬಟ್ಟೆಯ ಅಂಗಡಿ
           computer: ಗಣಕಯಂತ್ರದ ಅಂಗಡಿ
           florist: ಹೂವಿನಂಗಡಿ
@@ -644,6 +665,8 @@ kn:
       subject: ವಿಷಯ
       date: ದಿನಾಂಕ
       reply_button: ಉತ್ತರಿಸಿ
+      unread_button: ಓದಿಲ್ಲವೆಂದು ಗುರುತು ಮಾಡಿ
+      destroy_button: ಅಳಿಸು
       back: ಹಿಂದಕ್ಕೆ
       to: ಗೆ
     sent_message_summary:
@@ -654,15 +677,39 @@ kn:
     destroy:
       destroyed: ಸಂದೇಶವನ್ನು ಅಳಿಸಿ ಹಾಕಲಾಗಿದೆ
   passwords:
+    lost_password:
+      email address: 'ಮಿಂಚಂಚೆ ವಿಳಾಸ:'
     reset_password:
       flash changed: ನಿಮ್ಮ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.
+  preferences:
+    show:
+      title: ನನ್ನ ಪ್ರಾಶಸ್ತ್ಯಗಳು
+  profiles:
+    edit:
+      image: ಚಿತ್ರ
   sessions:
     new:
       title: ಲಾಗ್ ಇನ್
+      heading: ಲಾಗಿನ್
       password: 'ಪ್ರವೇಶಪದ:'
+      login_button: ಲಾಗಿನ್
     destroy:
       title: ಲಾಗ್ ಔಟ್
       logout_button: ಲಾಗ್ ಔಟ್
+  shared:
+    markdown_help:
+      headings: ತಲೆಬರಹಗಳು
+      heading: ತಲೆಬರಹ
+      first: ಮೊದಲ ವಸ್ತು
+      second: ಎರಡನೇ ವಸ್ತು
+      link: ಕೊಂಡಿ
+      text: ಪಠ್ಯ
+      image: ಚಿತ್ರ
+      alt: ಪರ್ಯಾಯ ಪಠ್ಯ
+      url: ಯುಆರ್‌ಎಲ್
+    richtext_field:
+      edit: ಸಂಪಾದಿಸಿ
+      preview: ಮುನ್ನೋಟ
   site:
     about:
       next: ಮುಂದಿನ
@@ -718,6 +765,7 @@ kn:
     key:
       table:
         entry:
+          main_road: ಮುಖ್ಯ ರಸ್ತೆ
           forest: ಅರಣ್ಯ
           park: ಉದ್ಯಾನ
           resident: ವಾಸ ಮಾಡುವ ಸ್ಥಳ
@@ -749,7 +797,7 @@ kn:
         italy: ಇಟಲಿ
   user_blocks:
     show:
-      created: ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ
+      created: 'ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ:'
   javascripts:
     directions:
       instructions:
index 188a57172189997e5193892f599b1bd521e0585a..8659b6c71c86af8e6f82e53b1661577c678f1d40 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Kurdish (Latin script) (kurdî (latînî))
+# Messages for Kurdish (Latin script) (kurdî (latînî))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: 1233qwer1234qwer4
index c366831e68730d2013f80af26cfe15901f34cb10..32e064e38e9b9a5fe3ba5b65c50018f2fe6db93c 100644 (file)
@@ -432,6 +432,7 @@ lb:
     popup:
       friend: Frënn
     show:
+      title: Meng Iwwersiichtssäit
       no_home_location_html: '%{edit_profile_link} a lee deng Heemecht fest, fir Benotzer
         an der Noperschaft ze gesinn.'
       edit_your_profile: Äre Profil änneren
@@ -1646,7 +1647,7 @@ lb:
   messages:
     inbox:
       title: Postagang
-      my_inbox: Postagang
+      my_inbox: Mäi Postagang
       my_outbox: Mäi Postausgang
       messages: Dir hutt %{new_messages} a(n) %{old_messages}
       new_messages:
@@ -1678,7 +1679,7 @@ lb:
       title: Kee sou ee Message
       heading: Kee sou ee Message
     outbox:
-      my_inbox: Postagang
+      my_inbox: Mäi Postagang
       my_outbox: Mäi Postausgang
       messages:
         one: Du hues %{count} Noriicht gesent
@@ -1861,7 +1862,7 @@ lb:
         a Lizenzsäit</a> fir Eenzelheeten.'
       legal_title: Rechtlech Hiweiser
       legal_1_html: |-
-        Dës Websäit a vill domat an Zesummenhang stoend Déngschter gi vun der <a href='https://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF) fir d'OSM-Communautéit bedriwwen. D'Verwendung vun allen OSMF-bedriwwenen Déngschter gëtt duerch eis „<a href="https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy">Acceptable Use Policies</a>“
+        Dës Websäit a vill domat an Zesummenhang stoend Déngschter gi vun der <a href='https://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF) fir d'OSM-Communautéit bedriwwen. D'Benotze vun allen OSMF-bedriwwenen Déngschter gëtt duerch eis „<a href="https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy">Acceptable Use Policies</a>“
         an eis <a href="https://wiki.osmfoundation.org/wiki/Privacy_Policy">Dateschutzrichtlinn</a> gereegelt.
       partners_title: Partneren
     copyright:
@@ -1948,7 +1949,7 @@ lb:
       max: max
       image_size: Gréisst vum Bild
       zoom: Zoom
-      add_marker: Eng Markéierung zu der Kaart bäifügen
+      add_marker: Eng Markéierung op der Kaart bäifügen
       latitude: 'Geographesch Breet:'
       longitude: 'Geographesch Längt:'
       output: Resultat
@@ -2105,7 +2106,7 @@ lb:
       description: 'Beschreiwung:'
       tags: 'Markéierungen:'
       none: Keen
-      edit_trace: Dës Spuer beaarbechten
+      edit_trace: Dës Spuer änneren
       trace_not_found: Spuer net fonnt!
       visibility: 'Visibilitéit:'
       confirm_delete: Dës Spuer läschen?
@@ -2165,6 +2166,7 @@ lb:
       read_gpx: Privat GPS-Spuere liesen
       write_gpx: GPS-Tracks eroplueden
       write_notes: Notizzen änneren
+      read_email: D'E-mail-Adress vum Benotzer liesen
   oauth_clients:
     show:
       authorize_url: 'URL autoriséieren:'
@@ -2254,6 +2256,7 @@ lb:
       my settings: Meng Astellungen
       my comments: Meng Bemierkungen
       my_preferences: Meng Benotzerastellungen
+      my_dashboard: Meng Iwwersiichtssäit
       blocks by me: vu Mir Gespaart
       send message: Message schécken
       diary: Blog
@@ -2276,7 +2279,7 @@ lb:
           administrator: Administrateur-Zougang ofhuelen
           moderator: Moderateursrechter ewechhuelen
       block_history: Aktiv Spären
-      moderator_history: Vergi Spueren
+      moderator_history: Vergi Spären
       comments: Bemierkungen
       create_block: Dëse Benotzer spären
       activate_user: Dëse Benotzer aktivéieren
index 7567e5cb0508c93513cfe69d4277f6c053e953f3..09b4b1726e212a10b7bfd2fadb5b9e32b40a42d1 100644 (file)
@@ -39,6 +39,8 @@ lt:
       client_application:
         create: Registruotis
         update: Atnaujinti
+      doorkeeper_application:
+        update: Atnaujinti
       redaction:
         create: Kurti redakciją
         update: Išsaugoti redakciją
@@ -109,6 +111,9 @@ lt:
         latitude: Platuma
         longitude: Ilguma
         language: Kalba
+      doorkeeper/application:
+        name: Vardas
+        scopes: Leidimai
       friend:
         user: Naudotojas
         friend: Draugas
@@ -130,20 +135,24 @@ lt:
         body: Tekstas
         recipient: Gavėjas
       redaction:
+        title: Pavadinimas
         description: Aprašymas
       report:
         category: Pasirinkti pranešimo priežastį
         details: Prašoma pateikti daugiau informacijos apie problemą (privaloma).
       user:
         email: El. paštas
-        new_email: 'Naujas e-pašto adresas:'
+        email_confirmation: El. pašto patvirtinimas
+        new_email: Naujas el. pašto adresas
         active: Aktyvus
         display_name: Rodomas vardas
-        description: Aprašymas
-        home_lat: 'Platuma:'
-        home_lon: 'Ilguma:'
-        languages: Kalbos
+        description: Profilio aprašymas
+        home_lat: Platuma
+        home_lon: Ilguma
+        languages: Pageidautinos kalbos
+        preferred_editor: Pageidautina rengyklė
         pass_crypt: Slaptažodis
+        pass_crypt_confirmation: Patvirtinti slaptažodį
     help:
       trace:
         tagstring: atskirta kableliais
@@ -198,7 +207,7 @@ lt:
       description: iD (rengyklė naršyklėje)
     remote:
       name: nuotoliniu valdymu
-      description: nuotolinį valdymą (JOSM arba Merkaartor)
+      description: Nuotolinis valdymas (JOSM, Potlatch, Merkaartor)
   auth:
     providers:
       none: Nei vienas
@@ -294,6 +303,7 @@ lt:
       entry_html: Ryšys %{relation_name}
       entry_role_html: Ryšys %{relation_name} (kaip %{relation_role})
     not_found:
+      title: Nerasta
       sorry: Atsiprašome, bet toks %{type}, kurio id %{id}, nerastas.
       type:
         node: taškas
@@ -405,6 +415,8 @@ lt:
       nearby mapper: Šalia esantis žemėlapių kūrėjas
       friend: Draugas
     show:
+      title: Valdymo skydas
+      edit_your_profile: Redaguoti profilį
       my friends: Mano draugai
       no friends: Jūs dar nepridėjote nei vieno draugo.
       nearby users: Kiti greta esantys naudotojai
@@ -449,6 +461,7 @@ lt:
         %{id}. Pasitikrinkite rašybą, arba nuoroda kurią jūs pasirinkite yra klaidinga.
     diary_entry:
       posted_by_html: Parašė %{link_user}, laikas %{created}, kalba %{language_link}.
+      updated_at_html: Paskutinį kartą atnaujinta %{updated}.
       comment_link: Komentuoti šį įrašą
       reply_link: Siųsti žinutę autoriui
       comment_count:
@@ -487,6 +500,11 @@ lt:
       comment: Komentuoti
       newer_comments: Naujesni komentarai
       older_comments: Senesni komentarai
+  doorkeeper:
+    flash:
+      applications:
+        create:
+          notice: Aplikacija užregistruota.
   friendships:
     make_friend:
       heading: Pridėti „%{user}“ kaip draugą?
index f1453e31ef114b4061a210fc5e454bba18e46d7d..ea020b7fe3fa4446b3de9633a02d89cd26ffc1a3 100644 (file)
@@ -1941,9 +1941,9 @@ mk:
           и\n(ако е релевантно) кон creativecommons.org."
         credit_3_1_html: "Картографските полиња во &ldquo;стандардниот стил&rdquo;
           на www.openstreetmap.org се \nдело на Задолжбината OpenStreetMap користејќи
-          Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ð¾Ð´ OpenStreetMap Ð¿Ð¾Ð´ Ð»Ð¸Ñ\86енÑ\86аÑ\82а Ð\9eÑ\82воÑ\80ена Ð±Ð°Ð·Ð° Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и. Ð\90ко Ð³Ð¸
-          ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¿Ð¾Ð»Ð¸Ñ\9aава, Ð²Ðµ Ð¼Ð¾Ð»Ð¸Ð¼Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð³Ð¾ Ð¸Ð·Ð²Ð¾Ñ\80оÑ\82: \n&ldquo;Ð\9eÑ\81новна ÐºÐ°Ñ\80Ñ\82а
-          Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и OpenStreetMap Ð¸ Ð\97адолжбина OpenStreetMap&rdquo;."
+          Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ð¾Ð´ OpenStreetMap Ð¿Ð¾Ð´ Ð»Ð¸Ñ\86енÑ\86аÑ\82а Ð\9eÑ\82воÑ\80ена Ð±Ð°Ð·Ð° Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и. Ð\9aога
+          Ð³Ð¾ ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð²Ð¾Ñ\98 Ñ\81Ñ\82ил Ð½Ð° ÐºÐ°Ñ\80Ñ\82аÑ\82а, Ð²Ðµ Ð¼Ð¾Ð»Ð¸Ð¼Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð³Ð¾ Ð¸Ñ\81Ñ\82иоÑ\82 Ð¸Ð·Ð²Ð¾Ñ\80 ÐºÐ°ÐºÐ¾
+          Ð·Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86иÑ\82е Ð½Ð° ÐºÐ°Ñ\80Ñ\82аÑ\82а."
         credit_4_html: |-
           Кај пребарливата електронска карта, припишувањето треба да се прикаже во аголот од картата.
           На пример:
@@ -2461,6 +2461,8 @@ mk:
       read_gpx: Читање на приватни ГПС-траги
       write_gpx: Подигање на ГПС-траги
       write_notes: Менување на белешки
+      read_email: Читање на корисничка е-пошта
+      skip_authorization: Автоодобрување на прилог
   oauth_clients:
     new:
       title: Пријавете нов прилог
index 6391a1b74275169202ea427795a6ec0fc2344f50..019efac9acb6d77d3bbd366a3e8340b4c9d74b3f 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: Dr Lotus Black
 # Author: Ninjastrikers
+# Author: ခွန်ပညာႏ(တောင်ႏကီꩻ)
 # Author: သူထွန်း
 ---
 my:
@@ -523,6 +524,7 @@ my:
     user_diaries_tooltip: အသုံးပြုသူများ၏ နေ့စဉ်မှတ်တမ်းများကို ကြည့်ရန်
     edit_with: '%{editor} ဖြင့် ပြင်ဆင်ရန်'
     intro_header: OpenStreetMap မှ ကြိုဆိုပါ၏
+    partners_fastly: မြန်မြန်ဆန်ဆန်
     tou: အသုံးပြုခြင်းဆိုင်ရာ သတ်မှတ်ချက်များ
     help: အ​ကူ​အ​ညီ​
     about: အကြောင်း
index 2c1d037d450c1d2e06ccba159125e2439f089d13..9f7e40ac78bb5dcad07774ad98ef57c6f096391a 100644 (file)
@@ -495,7 +495,7 @@ nl:
       nearby mapper: Dichtbijzijnde mapper
       friend: Vriend
     show:
-      title: Mijn Dashboard
+      title: Mijn dashboard
       no_home_location_html: '%{edit_profile_link} en stel uw thuislocatie in om gebruikers
         in de buurt te zien.'
       edit_your_profile: Pas uw profiel aan
@@ -813,7 +813,7 @@ nl:
           warehouse: Pakhuis
           "yes": Gebouw
         club:
-          scout: Scouts
+          scout: Scouting
           sport: Sportclub
           "yes": Club
         craft:
@@ -1998,11 +1998,10 @@ nl:
           naar openstreetmap.org (mogelijk door de naam \"OpenStreetMap\" naar dit
           webadres uit te breiden), naar opendatacommons.org en naar, indien van toepassing,
           creativecommons.org."
-        credit_3_1_html: "De kaarttegels in de &ldquo;standaard stijl&rdquo; op www.openstreetmap.org
+        credit_3_1_html: De kaarttegels in de &ldquo;standaard stijl&rdquo; op www.openstreetmap.org
           zijn een geproduceerd werk van de OpenStreetMap Foundation met OpenStreetMap-gegevens
-          onder de Open Database Licentie. Als u deze tegels gebruikt, gebruik dan
-          de volgende omschrijving: \n&ldquo;Basiskaart en gegevens van OpenStreetMap
-          en OpenStreetMap Foundation&rdquo;"
+          onder de Open Database Licentie. Wanneer deze kaartstijl wordt gebruikt
+          is dezelfde naamsvermelding nodig als voor de kaart-gegevens.
         credit_4_html: |-
           Voor een doorbladerbare, digitale kaart, moet de naamsvermelding in een hoek van de kaart weergegeven worden.
           Bijvoorbeeld:
@@ -2528,6 +2527,8 @@ nl:
       read_gpx: Persoonlijke gps-trajecten lezen
       write_gpx: Gps-trajecten uploaden
       write_notes: Notities wijzigen
+      read_email: E-mailadres lezen
+      skip_authorization: Aanvraag automatisch goedkeuren
   oauth_clients:
     new:
       title: Nieuwe toepassing registreren
@@ -2685,17 +2686,17 @@ nl:
         is de koppeling waarop u hebt geklikt onjuist.
       deleted: verwijderd
     show:
-      my diary: Dagboek
+      my diary: Mijn dagboek
       new diary entry: nieuw dagboekbericht
-      my edits: Bewerkingen
+      my edits: Mijn bewerkingen
       my traces: Mijn trajecten
       my notes: Mijn opmerkingen
       my messages: Mijn berichten
-      my profile: Profiel
-      my settings: Instellingen
+      my profile: Mijn profiel
+      my settings: Mijn instellingen
       my comments: Mijn reacties
       my_preferences: Mijn voorkeuren
-      my_dashboard: Mijn Dashboard
+      my_dashboard: Mijn dashboard
       blocks on me: Blokkades voor u
       blocks by me: Blokkades door u
       edit_profile: Profiel wijzigen
index d1a7f37efb545e423ebc6ab11cffac30ed0720c2..ec6f7fd47644c5702567e6891eedf07340619da7 100644 (file)
@@ -786,7 +786,7 @@ pl:
           "yes": Usługa
         boundary:
           aboriginal_lands: Rezerwat Indian
-          administrative: Granica gminy
+          administrative: Granica administracyjna
           census: Granica spisu ludności
           national_park: Park narodowy
           political: Granica okręgu wyborczego
@@ -1408,13 +1408,13 @@ pl:
       admin_levels:
         level2: Granica kraju
         level3: Granica regionu
-        level4: Granica
+        level4: Granica województwa
         level5: Granica regionu
         level6: Granica powiatu
         level7: Granica gminy
         level8: Granica miejscowości
         level9: Granica dzielnicy
-        level10: Granica przedmieścia
+        level10: Granica osiedla
         level11: Granica osiedla
       types:
         cities: Miasta
index ade21556fb2b13a132d4b53ba1ad6c5d12038f40..a73b9a0b28cc5cc02bd227b9f87a42c836a130e0 100644 (file)
@@ -2515,6 +2515,8 @@ pt-BR:
       read_gpx: Ler rotas GPS privadas
       write_gpx: Enviar rotas GPS
       write_notes: Modificar notas
+      read_email: Ler o endereço de e-mail do usuário
+      skip_authorization: Aplicação de aprovação automática
   oauth_clients:
     new:
       title: Registrar uma nova aplicação
index 70dea87af09d191d0bda3ae3540f3e0ef7fddb2b..80cf05a3e75c2f1587325cfe5ac63fb6cf686ad1 100644 (file)
@@ -463,6 +463,8 @@ ro:
       nearby mapper: Cartograful din apropiere
       friend: Prieten
     show:
+      title: Dashboardul meu
+      edit_your_profile: Editați-vă profilul
       my friends: Prietenii mei
       no friends: Nu ați adăugat încă niciun prieten.
       nearby users: Alți utilizatori din apropriere
@@ -810,6 +812,7 @@ ro:
           window_construction: Construcție ferestre
           winery: Domeniu viticol
           "yes": Magazin de artizanat
+        crossing: Trecere de pietoni
         emergency:
           access_point: Punct de acces
           ambulance_station: Stație de ambulanță
@@ -1040,6 +1043,7 @@ ro:
         mountain_pass:
           "yes": Trecătoare prin munți
         natural:
+          atoll: Atol
           bay: Golf
           beach: Plajă
           cape: Cap
@@ -1058,6 +1062,7 @@ ro:
           hill: Deal
           hot_spring: Izvor Termal
           island: Insulă
+          isthmus: Istm
           land: Teren
           marsh: Mlaștină
           moor: Baltă
@@ -1076,6 +1081,8 @@ ro:
           stone: Piatră
           strait: Strâmtoare
           tree: Copac
+          tree_row: Rând de copaci
+          tundra: Tundră
           valley: Vale
           volcano: Vulcan
           water: Apă
@@ -1126,6 +1133,7 @@ ro:
           locality: Localitate
           municipality: Comună
           neighbourhood: Cartier
+          plot: Parcelă
           postcode: Cod poștal
           quarter: Cvartet
           region: Regiune
@@ -1599,8 +1607,12 @@ ro:
         partial_changeset_without_comment: fără comentarii
       details: Mai multe detalii despre setul de modificări pot fi găsite la adresa
         %{url}.
+      details_html: Mai multe detalii despre setul de modificări pot fi găsite la
+        adresa %{url}.
       unsubscribe: Pentru a vă dezabona de la actualizările acestei setări de modificări,
         vizitați %{url} și dați clic pe "Dezabonați".
+      unsubscribe_html: Pentru a vă dezabona de la actualizările acestei setări de
+        modificări, vizitați %{url} și dați clic pe "Dezabonare".
   confirmations:
     confirm:
       heading: Verificați-vă e-mailul!
@@ -1629,6 +1641,7 @@ ro:
     inbox:
       title: Mesaje primite
       my_inbox: Mesaje primite
+      my_outbox: Mesaje trimise
       messages: Aveți mesaje %{new_messages} și %{old_messages}
       new_messages:
         one: '%{count} mesaj nou'
@@ -1663,6 +1676,8 @@ ro:
       body: Ne pare rău că nu există niciun mesaj cu acel id.
     outbox:
       title: Mesaje trimise
+      my_inbox: Mesaje primite
+      my_outbox: Mesaje trimise
       messages:
         one: Aveți %{count} mesaj trimis
         other: Aveți %{count} (de) mesaje trimise
@@ -1713,8 +1728,22 @@ ro:
       reset: Resetează parola
       flash changed: Parola dumneavoastră a fost schimbată.
       flash token bad: Nu ați găsit acel simbol, verificați adresa URL?
+  preferences:
+    show:
+      title: Preferințe
+      preferred_editor: Editor preferat
+      preferred_languages: Limbi preferate
+      edit_preferences: Editare preferințe
+    edit:
+      title: Editare preferințe
+      cancel: Revocare
+    update:
+      failure: Nu se pot salva preferințele.
+    update_success_flash:
+      message: Preferințele au fost salvate.
   profiles:
     edit:
+      cancel: Revocare
       image: Imagine
       gravatar:
         gravatar: Utilizați Gravatar
@@ -1906,11 +1935,10 @@ ro:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> and
           Land Tirol (under <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT with amendments</a>).
-        contributors_au_html: |-
-          <strong>Australia</strong>: Conține date cu sursa de la
-          <a href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA Australia Limited</a>
-          licensed by the Commonwealth of Australia under
-          <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
+        contributors_au_html: '<strong>Australia</strong>: Incorporează sau dezvoltate
+          pe baza limitelor administrative &copy; <a href="https://geoscape.com.au/legal/data-copyright-and-disclaimer/">Geoscape
+          Australia</a> licențiat de Commonwealth of Australia sub licența<a href="https://creativecommons.org/licenses/by/4.0/">Creative
+          Commons Attribution 4.0 Internațional (CC BY 4.0)</a>'
         contributors_ca_html: |-
           <strong>Canada</strong>: Conține date de la
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -2428,12 +2456,27 @@ ro:
       flash: Actualizarea informațiilor despre client cu succes
     destroy:
       flash: A distrus înregistrarea aplicației clientului
+  oauth2_authorizations:
+    new:
+      authorize: Autorizează
+      deny: Respinge
+    error:
+      title: A apărut o eroare
+    show:
+      title: Code de autorizare
+  oauth2_authorized_applications:
+    index:
+      application: Aplicație
+      permissions: Permisiuni
+    application:
+      revoke: Revocă accesul
+      confirm_revoke: Revocați accesul acestei aplicații?
   users:
     new:
       title: Înregistrare
       no_auto_account_create: Din păcate, în prezent nu putem crea automat un cont
         pentru dvs.
-      contact_support_html: Vă rugăm să contactați <a href="%{support}">webmasterul</a>
+      contact_support_html: Vă rugăm să contactați <a href="%{support}">suportul</a>
         pentru a organiza crearea unui cont - vom încerca să soluționăm cererea cât
         mai repede posibil.
       about:
@@ -2485,6 +2528,9 @@ ro:
         italy: Italia
         rest_of_world: Restul lumii
     terms_declined_flash:
+      terms_declined_html: Ne pare rău că ați decis să nu acceptați noii Termeni de
+        Contributor. Pentru mai multe informații, consultați %{terms_declined_link}.
+      terms_declined_link: această pagină wiki
       terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     no_such_user:
       title: Nici un utilizator găsit
@@ -2502,6 +2548,8 @@ ro:
       my profile: Profilul meu
       my settings: Setările mele
       my comments: Comentariile mele
+      my_preferences: Preferințele mele
+      my_dashboard: Dashboardul meu
       blocks on me: Blochează pe mine
       blocks by me: Blochează de mine
       send message: Trimite mesajul
@@ -2731,8 +2779,9 @@ ro:
     show:
       title: '%{block_on} blocat de %{block_by}'
       heading_html: '%{block_on} blocat de %{block_by}'
-      created: Creat
-      status: Stare
+      created: 'Creat:'
+      duration: 'Durată:'
+      status: 'Stare:'
       show: Arată
       edit: Modificare
       revoke: Revocă!
@@ -2761,6 +2810,7 @@ ro:
       title: Notele trimise sau comentate de %{user}
       heading: Notele %{user}
       subheading_html: Notele trimise sau comentate de %{user}
+      no_notes: Nicio notă
       id: Id
       creator: Creator
       description: Descriere
index 59385975cda92ae6ab4525aa8b36b0a596a1b2ee..539d717244259db6bb9ab0e37cbfd44aeaae9e30 100644 (file)
@@ -21,6 +21,7 @@
 # Author: Cjaushe4ka
 # Author: D1g
 # Author: DCamer
+# Author: DDPAT
 # Author: Diralik
 # Author: Dmitry-s93
 # Author: Dr&mx
@@ -547,6 +548,8 @@ ru:
       nearby mapper: Ближайший картограф
       friend: Друг
     show:
+      title: Моя панель
+      edit_your_profile: Править свой профиль
       my friends: Друзья
       no friends: Вы не добавили ещё ни одного друга.
       nearby users: Другие ближайшие пользователи
@@ -1489,7 +1492,8 @@ ru:
     intro_text: OpenStreetMap является картой мира, созданной такими же людьми, как
       и вы, и может свободно использоваться под открытой лицензией.
     intro_2_create_account: Создайте учётную запись
-    hosting_partners_html: Хостинг поддерживается %{ucl}, %{bytemark} и другими %{partners}.
+    hosting_partners_html: Хостинг поддерживается %{ucl}, %{fastly}, %{bytemark} и
+      другими %{partners}.
     partners_ucl: UCL
     partners_bytemark: Bytemark Hosting
     partners_partners: партнёрами
@@ -1974,9 +1978,7 @@ ru:
         credit_3_1_html: |-
           Фрагменты карты в &ldquo;standard style&rdquo; на сайте www.openstreetmap.org представляют собой
           Выполненную работу OpenStreetMap Foundation с использованием данных OpenStreetMap
-          под лицензией Open Database License. Если вы используете эти фрагменты, используйте
-          следующую атрибуцию:
-          &ldquo;Base map and data from OpenStreetMap and OpenStreetMap Foundation&rdquo;.
+          под лицензией Open Database License. При использовании этого стиля карты требуется такая же атрибуция, как и для данных карты.
         credit_4_html: |-
           В случае электронной карты с прокруткой, ссылка должна всегда находиться в углу окна просмотра карты.
           Например:
@@ -2000,8 +2002,11 @@ ru:
         contributors_at_html: |-
           <strong>Австрия.</strong> Данные <a href="https://data.wien.gv.at/">города Вена</a> (на условиях <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), а также земель <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Форарльберга</a> и
              Тироля (на условиях <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT с дополнениями</a>).
-        contributors_au_html: <strong>Австралия.</strong> Данные пригородов от Австралийского
-          бюро статистики.
+        contributors_au_html: |-
+          <strong>Австралия</strong>: Включено или разработано с использованием административных границ и копии;
+          <a href="https://geoscape.com.au/legal/data-copyright-and-disclaimer/">Geoscape Australia</a>
+          под лицензией Содружества Австралии по
+          <a href="https://creativecommons.org/licenses/by/4.0/">международной лицензии Creative Commons Attribution 4.0 (CC BY 4.0)</a>.
         contributors_ca_html: <strong>Канада.</strong> Данные от GeoBase ®, GeoGratis
           (© Департамент природных ресурсов Канады), CanVec (© Департамент природных
           ресурсов Канады) и StatCan (Отдел Географии, Статистическое ведомство Канады).
@@ -2187,8 +2192,7 @@ ru:
         приложение для Mac и Windows</a>.
       id_html: В качестве альтернативы вы можете установить в качестве редактора по
         умолчанию iD, который запускается в вашем веб-браузере, как раньше это делал
-        Potlatch. <a href="%{settings_url}">Измените свои пользовательские настройки
-        здесь</a>.
+        Potlatch. <a href="%{settings_url}">Измените свои настройки здесь</a>.
     sidebar:
       search_results: Результаты поиска
       close: Закрыть
index b36398a77c3f15e5b407b731f801e57b6348d92d..f7fa6ded1f52de6d9f999f180ffda5bce70776b6 100644 (file)
@@ -355,6 +355,7 @@ scn:
       in_language_title: Vuci dô diariu n %{language}
       new: Vuci nova dû diariu
       new_title: Scrivi na vuci nova ntô tò diariu di l'utenti
+      my_diary: Lu mè diariu
       no_entries: Nudda vuci ntô diariu
       recent_entries: Vuci di diariu ricenti
       older_entries: Vuci cchiù vecchî
@@ -993,6 +994,7 @@ scn:
       see_their_profile: Poi taliari lu sò prufilu nta %{userurl}.
       befriend_them: Lu poi macari agghiùnciri comu amicu nta %{befriendurl}.
     gpx_failure:
+      hi: Salutamu %{to_user},
       failed_to_import: 'nun arriniscìu a èssiri mpurtatu. Ccà c''è l''erruri:'
       subject: '[OpenStreetMap] Mpurtazzioni GPX nun arrinisciuta'
     gpx_success:
@@ -1250,6 +1252,7 @@ scn:
     markdown_help:
       text: Testu
       image: Mmàggini
+      url: URL
     richtext_field:
       edit: Cancia
       preview: Antiprima
index 9ee920c02543cdd178dded9b5db9f655fba5e5fe..3b5bce6a9c85b8329d51340c491095dfc8dcc27a 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Serbian (Latin script) (srpski (latinica))
+# Messages for Serbian (Latin script) (srpski (latinica))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Macofe
index 9d7c24b653e756f9df2a4e696ec701e2524b8052..762856d4e2b1dabd4a6c2685812a77c292324574 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Serbian (Cyrillic script) (српски (ћирилица))
+# Messages for Serbian (Cyrillic script) (српски (ћирилица))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Acamicamacaraca
@@ -1328,7 +1328,7 @@ sr:
   confirmations:
     confirm:
       heading: Проверите Ваш имејл!
-      introduction_1: Послалисмо ти е-писмо за потврду.
+      introduction_1: Послали смо ти е-писмо за потврду.
       introduction_2: Потврди свој налог тако што ћеш кликнути на везу у имејлу и
         моћићеш да почнеш са цртањем карте.
       press confirm button: Притисните дугме за потврду да бисте активирали налог.
index c60f375a572db81fd3e968d391200a7e03aed71c..70f4a0511c67155179d9ed2158f34527099fc6bb 100644 (file)
@@ -11,6 +11,7 @@
 # Author: Cohan
 # Author: Cybjit
 # Author: Dan Koehl
+# Author: Danieldegroot2
 # Author: Fader
 # Author: Grillo
 # Author: Haxpett
@@ -90,7 +91,7 @@ sv:
     models:
       acl: Tillgångskontrollista (ACL)
       changeset: Ändringsset
-      changeset_tag: Etikett till ändringsset
+      changeset_tag: Ändringssettagg
       country: Land
       diary_comment: Dagbokskommentar
       diary_entry: Dagboksinlägg
@@ -99,7 +100,7 @@ sv:
       language: Språk
       message: Meddelande
       node: Nod
-      node_tag: Nodetikett
+      node_tag: Nodtagg
       notifier: Meddelande
       old_node: Gammal nod
       old_node_tag: Gammal nodtagg
@@ -108,7 +109,7 @@ sv:
       old_relation_tag: Gammal relationstagg
       old_way: Gammal sträcka
       old_way_node: Gammal sträcknod
-      old_way_tag: Gammal sträcketikett
+      old_way_tag: Gammal sträcketagg
       relation: Relation
       relation_member: Relationsmedlem
       relation_tag: Relationstagg
@@ -116,22 +117,22 @@ sv:
       session: Session
       trace: Spår
       tracepoint: Spårpunkt
-      tracetag: Spåretikett
+      tracetag: Spårtagg
       user: Användare
-      user_preference: Användarinställning
+      user_preference: Användarpreferens
       user_token: Användarnyckel
       way: Sträcka
       way_node: Sträcknod
-      way_tag: Sträcketikett
+      way_tag: Sträcketagg
     attributes:
       client_application:
         name: Namn (krävs)
         url: Huvudapplikationsadress (obligatorisk)
         callback_url: Återkopplingsadress
         support_url: Supportadress
-        allow_read_prefs: läs deras användarinställningar
+        allow_read_prefs: läs deras användarpreferenser
         allow_write_prefs: ändra deras användarinställningar
-        allow_write_diary: skapa dagboksinlägg, kommentera och hitta vänner
+        allow_write_diary: skapa dagboksinlägg, kommentarer och hitta vänner.
         allow_write_api: ändra kartan
         allow_read_gpx: läs deras privata GPS-spår
         allow_write_gpx: ladda upp GPS-spår
@@ -146,6 +147,8 @@ sv:
         language: Språk
       doorkeeper/application:
         name: Namn
+        redirect_uri: Omdirigerings-URI:er
+        confidential: Konfidentiell applikation?
         scopes: Behörigheter
       friend:
         user: Användare
@@ -479,6 +482,8 @@ sv:
       nearby mapper: Användare i närheten
       friend: Vän
     show:
+      title: Min kontrollpanel
+      edit_your_profile: Redigera din profil
       my friends: Mina vänner
       no friends: Du har inte lagt till några vänner ännu.
       nearby users: Andra användare nära dig
@@ -564,6 +569,11 @@ sv:
       comment: Kommentar
       newer_comments: Nyare kommentarer
       older_comments: Äldre kommentarer
+  doorkeeper:
+    flash:
+      applications:
+        create:
+          notice: Applikation registrerad.
   friendships:
     make_friend:
       heading: Lägg till %{user} som en vän?
@@ -698,6 +708,7 @@ sv:
           ranger_station: Skogvaktarpost
           recycling: Återvinningsstation
           restaurant: Restaurang
+          sanitary_dump_station: Sanitär tömningsstation
           school: Skola
           shelter: Hydda
           shower: Dusch
@@ -719,12 +730,16 @@ sv:
           waste_basket: Papperskorg
           waste_disposal: Avfallshantering
           waste_dump_site: Soptipp
+          watering_place: Vattningsplats
           water_point: Vattenpunkt
           weighbridge: Fordonsvåg
+          "yes": Inrättning
         boundary:
+          aboriginal_lands: Urfolksmarker
           administrative: Administrativ gräns
           census: Folkräkningsgräns
           national_park: Nationalpark
+          political: Valgräns
           protected_area: Skyddat område
           "yes": Gräns
         bridge:
@@ -742,10 +757,15 @@ sv:
           cabin: Stuga
           chapel: Kapell
           church: Kyrkbyggnad
+          civic: Offentlig byggnad
           college: Universitetsbyggnad
           commercial: Kommersiell byggnad
+          construction: Byggnad under uppförande
+          detached: Fristående hus
           dormitory: Studenthem
+          duplex: Dubbelhus
           farm: Gård
+          farm_auxiliary: Utbyggnad på en gård
           garage: Garage
           garages: Garage
           greenhouse: Växthus
@@ -756,6 +776,8 @@ sv:
           houseboat: Husbåt
           hut: Hydda
           industrial: Industribyggnad
+          kindergarten: Dagisbyggnad
+          manufacture: Fabriksbyggnad
           office: Kontorsbyggnad
           public: Offentlig byggnad
           residential: Bostadsbyggnad
@@ -763,6 +785,8 @@ sv:
           roof: Tak
           ruins: Byggnadsruin
           school: Skolbyggnad
+          semidetached_house: Parhus
+          service: Servicebyggnad
           shed: Skjul
           stable: Stall
           static_caravan: Husvagn
@@ -773,6 +797,7 @@ sv:
           warehouse: Varuhus
           "yes": Byggnad
         club:
+          scout: Scoutklubbhus
           sport: Sportklubb
           "yes": Klubb
         craft:
@@ -781,11 +806,15 @@ sv:
           brewery: Bryggeri
           carpenter: Snickare
           caterer: Catering
+          confectionery: Godisbutik
           dressmaker: Sömmerska
           electrician: Elektriker
+          electronics_repair: Elektronikreparation
           gardener: Trädgårdsmästare
           glaziery: Glasmästeri
           handicraft: Konsthantverk
+          hvac: Värme- och ventilationsverk
+          metal_construction: Metallkonstruktör
           painter: Målare
           photographer: Fotograf
           plumber: Rörmokare
@@ -794,16 +823,22 @@ sv:
           shoemaker: Skomakare
           stonemason: Stenhuggare
           tailor: Skräddare
+          window_construction: Fönsterkonstruktion
           winery: Vingård
           "yes": Hantverksbutik
+        crossing: Övergångsställe
         emergency:
+          access_point: Åtkomstpunkt
           ambulance_station: Ambulansstation
           assembly_point: Samlingsplats
           defibrillator: Defibrillator
           fire_extinguisher: Brandsläckare
+          fire_water_pond: Branddamm
           landing_site: Nödlandningsplats
           life_ring: Livboj
           phone: Nödtelefon
+          siren: Varningssiren
+          suction_point: Beredskapssugpunkt
           water_tank: Nödvattentank
           "yes": Nödsituation
         highway:
@@ -816,6 +851,7 @@ sv:
           cycleway: Cykelspår
           elevator: Hiss
           emergency_access_point: Utryckningsplats
+          emergency_bay: Nödparkeringsplats
           footway: Gångväg
           ford: Vadställe
           give_way: Väjningspliktsskylt
@@ -848,34 +884,44 @@ sv:
           track: Traktorväg
           traffic_mirror: Traffikspegel
           traffic_signals: Trafiksignaler
+          trailhead: Vandringsstartpunkt
           trunk: Stamväg
           trunk_link: På-/avfart till stamväg/motortrafikled
           turning_loop: Vändslinga
           unclassified: Oklassificerad väg
           "yes": Väg
         historic:
+          aircraft: Historiskt flygplan
           archaeological_site: Arkeologisk plats
+          bomb_crater: Historisk bombkrater
           battlefield: Slagfält
           boundary_stone: Gränssten
           building: Historisk byggnad
           bunker: Bunker
+          cannon: Historisk kanon
           castle: Slott
+          charcoal_pile: Historisk träkolsbunke
           church: Kyrka
           city_gate: Stadsport
           citywalls: Stadsmurar
           fort: Fort
           heritage: Kulturarvsplats
+          hollow_way: Grottväg
           house: Hus
           manor: Herrgård
           memorial: Minnesmärke
+          milestone: Historisk milsten
           mine: Gruva
           mine_shaft: Gruvschakt
           monument: Monument
+          railway: Historisk järnväg
           roman_road: Romersk väg
           ruins: Ruin
+          rune_stone: Runsten
           stone: Sten
           tomb: Grav
           tower: Torn
+          wayside_chapel: Vägkyrka
           wayside_cross: Landmärke
           wayside_shrine: Vägkants-helgedom
           wreck: Vrak
@@ -884,6 +930,7 @@ sv:
           "yes": Korsning
         landuse:
           allotments: Kolonilotter
+          aquaculture: Akvakultur
           basin: Bäcken
           brownfield: Outvecklat område
           cemetery: Begravningsplats
@@ -903,9 +950,11 @@ sv:
           military: Militärområde
           mine: Gruva
           orchard: Fruktträdgård
+          plant_nursery: Plantskola
           quarry: Stenbrott
           railway: Järnväg
           recreation_ground: Rekreationsområde
+          religious: Religiös mark
           reservoir: Reservoar
           reservoir_watershed: Vattenreservoar
           residential: Bostadsområde
@@ -914,8 +963,12 @@ sv:
           vineyard: Vingård
           "yes": Markanvändning
         leisure:
+          adult_gaming_centre: Vuxenspelhall
+          amusement_arcade: Spelhall
+          bandstand: Orkesterpaviljong
           beach_resort: Badort
           bird_hide: Fågeltorn
+          bleachers: Läktarplatser
           bowling_alley: Bowlinghall
           common: Allmänning
           dance: Danslokal
@@ -931,6 +984,7 @@ sv:
           marina: Marina
           miniature_golf: Minigolf
           nature_reserve: Naturreservat
+          outdoor_seating: Utomhussittplats
           park: Park
           picnic_table: Picknickbord
           pitch: Idrottsplan
@@ -947,15 +1001,21 @@ sv:
           "yes": Fritid
         man_made:
           adit: Gruvöppning
+          advertising: Reklam
           antenna: Antenn
           avalanche_protection: Lavinskydd
           beacon: Fyr
+          beam: Bjälke
           beehive: Bikupa
           breakwater: Vågbrytare
           bridge: Bro
           bunker_silo: Bunker
+          cairn: Röse
           chimney: Skorsten
+          clearcut: Avverkning
+          communications_tower: Kommunikationstorn
           crane: Kran
+          cross: Kors
           dolphin: Dykdalb
           dyke: Dike
           embankment: Fördämning
@@ -973,15 +1033,19 @@ sv:
           pier: Pir
           pipeline: Pipeline
           pumping_station: Pumpstation
+          reservoir_covered: Täckt vattenbehållare
           silo: Silo
           snow_cannon: Snökanon
           snow_fence: Snöstaket
           storage_tank: Lagringstank
+          street_cabinet: Gatuskåp
           surveillance: Övervakning
           telescope: Teleskop
           tower: Torn
+          utility_pole: Bruksstolpe
           wastewater_plant: Avfallsfabrik
           watermill: Vattenkvarn
+          water_tap: Vattenkran
           water_tower: Vattentorn
           water_well: Brunn
           water_works: Vattenreningsverk
@@ -998,6 +1062,7 @@ sv:
         mountain_pass:
           "yes": Bergspass
         natural:
+          atoll: Atoll
           bare_rock: Klippa
           bay: Bukt
           beach: Strand
@@ -1017,6 +1082,7 @@ sv:
           hill: Kulle
           hot_spring: Varm källa
           island: Ö
+          isthmus: Näs
           land: Land
           marsh: Träsk
           moor: Hed
@@ -1031,29 +1097,43 @@ sv:
           sand: Sand
           scree: Taluskon
           scrub: Buskskog
+          shingle: Klappersten
           spring: Källa
           stone: Sten
           strait: Sund
           tree: Träd
+          tree_row: Trädrad
+          tundra: Tundra
           valley: Dal
           volcano: Vulkan
           water: Vatten
           wetland: Våtmark
           wood: Skog
+          "yes": Naturelement
         office:
           accountant: Revisor
           administrative: Administration
+          advertising_agency: Reklambyrå
           architect: Arkitekt
           association: Förening
           company: Företag
+          diplomatic: Diplomatiskt kontor
           educational_institution: Utbildningsinstitution
           employment_agency: Bemanningsföretag
+          energy_supplier: Energileverantörskontor
           estate_agent: Fastighetsmäklare
+          financial: Finanskontor
           government: Statligt kontor
           insurance: Försäkringskassa
           it: IT-kontor
           lawyer: Advokat
+          logistics: Logistik kontor
+          newspaper: Tidningskontor
           ngo: Icke-statligt kontor
+          notary: Notar
+          religion: Religiöst kontor
+          research: Forskningskontor
+          tax_advisor: Skatterådgivare
           telecommunication: Telefonbolagskontor
           travel_agent: Resebyrå
           "yes": Kontor
@@ -1111,9 +1191,13 @@ sv:
           tram_stop: Spårvagnshållplats
           yard: Bangård
         shop:
+          agrarian: Jordbruksbutik
           alcohol: Spritbutik
           antiques: Antikviteter
+          appliance: Vitvaruaffär
           art: Konstaffär
+          baby_goods: Babyvaror
+          bag: Väskbutik
           bakery: Bageri
           beauty: Skönhetssalong
           beverages: Dryckesbutik
@@ -1690,8 +1774,25 @@ sv:
       reset: Återställ lösenord
       flash changed: Ditt lösenord har ändrats.
       flash token bad: Hittade inte den nyckeln, kontrollera webbadressen.
+  preferences:
+    show:
+      title: Mina preferenser
+      preferred_editor: Föredraget redigeringsprogram
+      preferred_languages: Föredragna språk
+      edit_preferences: Redigera preferenser
+    edit:
+      title: Redigera inställningar
+      save: Uppdatera preferenser
+      cancel: Avbryt
+    update:
+      failure: Kunde inte uppdatera preferenser.
+    update_success_flash:
+      message: Inställningarna uppdaterade.
   profiles:
     edit:
+      title: Redigera profil
+      save: Uppdatera profil
+      cancel: Avbryt
       image: Bild
       gravatar:
         gravatar: Använd Gravatar
@@ -1707,6 +1808,9 @@ sv:
       home location: Hemposition
       no home location: Du har inte angivit någon hemposition.
       update home location on click: Uppdatera hemposition när jag klickar på kartan?
+    update:
+      success: Profil uppdaterad.
+      failure: Kunde inte uppdatera profilen.
   sessions:
     new:
       title: Logga in
@@ -1729,9 +1833,9 @@ sv:
       account not active: Tyvärr, ditt konto är inte aktiverat.<br />Vänligen klicka
         på länken i e-posten med kontobekräftelsen, för att aktivera ditt konto, eller
         <a href="%{reconfirm}">begär en ny epostsbekräftelse</a>.
-      account is suspended: |-
-        Tyvärr har ditt konto stängts av på grund av tvivelaktig aktivitet.<br />Kontakta <a href="%
-        {webmaster}">webbansvarig</a> om du vill diskutera saken.
+      account is suspended: Tyvärr har ditt konto stängts av på grund av tvivelaktig
+        aktivitet.<br />Kontakta <a href="%{webmaster}">supporten</a> om du vill diskutera
+        saken.
       auth failure: Kunde inte logga in med de uppgifterna.
       openid_logo_alt: Logga in med ett OpenID
       auth_providers:
@@ -2090,7 +2194,7 @@ sv:
         ner datorprogrammet för Mac och Windows</a>.
       id_html: Eller så kan du ange din standardredigerare som iD, vilket kör din
         webbläsare som Potlatch tidigare gjort. <a href="%{settings_url}">Ändra dina
-        inställningar här</a>.
+        preferenser här</a>.
     sidebar:
       search_results: Sökresultat
       close: Stäng
@@ -2301,13 +2405,16 @@ sv:
       in: i
     index:
       public_traces: Publika GPS-spår
-      my_traces: Mina GPS-spår
+      my_traces: Mina spår
       public_traces_from: Publika GPS-spår från %{user}
       description: Bläddra bland nyligen uppladdade GPS-spår
       tagged_with: ' taggad med %{tags}'
       empty_html: Ingenting här ännu. <a href='%{upload_link}'>Ladda upp ett nytt
         GPS-spår</a> eller lär dig om GPS-spår på <a href='https://wiki.openstreetmap.org/wiki/Beginners_Guide_1.2'>wikin</a>.
       upload_trace: Ladda upp GPS-spår
+      all_traces: Alla spår
+      traces_from: Offentliga GPS-spår från %{user}
+      remove_tag_filter: Ta bort taggfilter
     destroy:
       scheduled_for_deletion: GPS-spår schemalagt för radering
     make_public:
@@ -2340,6 +2447,11 @@ sv:
       need_to_see_terms: Din tillgång till API:t är tillfälligt avstängd. Logga in
         på webbgränssnittet för att se bidragsvillkor. Du behöver inte godkänna dem,
         men du måste titta på dem.
+    settings_menu:
+      account_settings: Kontoinställningar
+      oauth1_settings: OAuth 1-inställningar
+      oauth2_applications: OAuth 2-applikationer
+      oauth2_authorizations: OAuth 2-auktoriseringar
   oauth:
     authorize:
       title: Auktorisera tillgång till ditt konto
@@ -2347,7 +2459,7 @@ sv:
         %{user}. Var god kontrollera om du vill att programmet ska ha dessa möjligheter.
         Du kan välja eller ta bort hur många val du vill.
       allow_to: 'Tillåt klientapplikation att:'
-      allow_read_prefs: läs dina användarinställningar
+      allow_read_prefs: läs dina användarpreferenser.
       allow_write_prefs: ändra på dina användarinställningar.
       allow_write_diary: skapa dagboksinlägg, kommentarer och hitta vänner.
       allow_write_api: ändra på kartan.
@@ -2369,6 +2481,16 @@ sv:
       flash: Du tagit bort nyckeln för %{application}
     permissions:
       missing: Du har inte gett applikationen åtkomst till den här faciliteten
+    scopes:
+      read_prefs: Läs användarpreferenser
+      write_prefs: Ändra användarinställningar
+      write_diary: Skapa dagboksinlägg, kommentarer och hitta vänner.
+      write_api: Ändra på kartan
+      read_gpx: Läs privata GPS-spår
+      write_gpx: Ladda upp GPS-spår
+      write_notes: Ändra anteckningar
+      read_email: Läs användarens e-postadress
+      skip_authorization: Godkänn applikation automatiskt
   oauth_clients:
     new:
       title: Registrera ett nytt program
@@ -2388,12 +2510,12 @@ sv:
       requests: 'Begär följande behörigheter från användaren:'
     index:
       title: Mina OAuth-detaljer
-      my_tokens: Mina auktoriserade program
+      my_tokens: Mina auktoriserade applikationer
       list_tokens: 'Följande nycklar har utfärdats till program i ditt namn:'
       application: Applikationsnamn
       issued_at: Utfärdad den
       revoke: Återkalla!
-      my_apps: Mina klientprogram
+      my_apps: Mina klientapplikationer
       no_apps_html: Har du ett program som du vill registrera för användning hos oss
         med hjälp av %{oauth}-standarden? Du måste registrera din webbapplikation
         innan du kan göra OAuth-anropp till den här tjänsten.
@@ -2409,28 +2531,56 @@ sv:
     update:
       flash: Uppdaterade klientinformationen framgångsrikt
     destroy:
-      flash: Annullerade registreringen av klientprogrammet
+      flash: Annullerade registreringen av klientapplikationen
   oauth2_applications:
     index:
+      title: Mina klientapplikationer
+      new: Registrera ny applikation
       name: Namn
       permissions: Behörigheter
     application:
       edit: Redigera
       delete: Radera
+      confirm_delete: Radera den här applikationen?
+    new:
+      title: Registrera ett nytt applikation
+    edit:
+      title: Redigera din applikation
     show:
       edit: Redigera
       delete: Radera
+      confirm_delete: Radera den här applikationen?
+      client_id: Klient-ID
+      client_secret: Klienthemlighet
       permissions: Behörigheter
+      redirect_uris: Omdirigerings-URI:er
   oauth2_authorizations:
     new:
+      title: Auktorisering krävs
+      introduction: Auktorisera %{application} att få tillgång till ditt konto med
+        följande behörigheter?
+      authorize: Auktorisera
       deny: Neka
+    error:
+      title: Ett fel har uppstått
+    show:
+      title: Behörighetskod
+  oauth2_authorized_applications:
+    index:
+      title: Mina auktoriserade applikationer
+      application: Applikation
+      permissions: Behörigheter
+      no_applications_html: Du har ännu inte auktoriserad några %{oauth2}-applikationer.
+    application:
+      revoke: Återkalla åtkomst
+      confirm_revoke: Återkalla åtkomst till den här applikationen?
   users:
     new:
       title: Registrera
       no_auto_account_create: Tyvärr kan vi för närvarande inte kan skapa ett konto
         åt dig automatiskt.
-      contact_support_html: Kontakta <a href="%{support}">webbansvarig</a> för att
-        få ett konto skapat – vi kommer att behandla ansökan så snart som möjligt.
+      contact_support_html: Kontakta <a href="%{support}">supporten</a> för att få
+        ett konto skapat – vi kommer att behandla ansökan så snart som möjligt.
       about:
         header: Fri och redigerbar
         html: |-
@@ -2440,7 +2590,7 @@ sv:
       confirm email address: 'Bekräfta e-postadress:'
       display name: 'Visat namn:'
       display name description: Ditt offentligt visade användarnamn. Du kan ändra
-        detta senare i inställningarna.
+        detta senare i preferenserna.
       external auth: 'Tredjepartsautentisering:'
       use external auth: Alternativt kan du använda en tredje part för att logga in
       auth no password: Med autentisering av tredje part krävs inte lösenord, men
@@ -2480,6 +2630,8 @@ sv:
         italy: Italien
         rest_of_world: Övriga världen
     terms_declined_flash:
+      terms_declined_html: Vi beklagar att du bestämt dig för att inte acceptera de
+        nya användarvillkoren. För mer information, se %{terms_declined_link}.
       terms_declined_link: denna wikisida
       terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     no_such_user:
@@ -2498,8 +2650,11 @@ sv:
       my profile: Min profil
       my settings: Mina inställningar
       my comments: Mina kommentarer
+      my_preferences: Mina preferenser
+      my_dashboard: Min kontrollpanel
       blocks on me: Blockeringar av mig
       blocks by me: Blockeringar lagda av mig
+      edit_profile: Redigera profil
       send message: Skicka meddelande
       diary: Dagbok
       edits: Redigeringar
@@ -2598,6 +2753,7 @@ sv:
     suspended:
       title: Kontot avstängt
       heading: Kontot avstängt
+      support: support
       body_html: |-
         <p>
           Ditt konto har tyvärr stängts av på grund av
@@ -2725,8 +2881,9 @@ sv:
     show:
       title: '%{block_on} blockerad av %{block_by}'
       heading_html: '%{block_on} blockerad av %{block_by}'
-      created: Skapad
-      status: Status
+      created: 'Skapad:'
+      duration: 'Tidsperiod:'
+      status: 'Status:'
       show: Visa
       edit: Redigera
       revoke: Återkalla!
@@ -2754,6 +2911,7 @@ sv:
       title: Anteckningar skapade eller kommenterade av %{user}
       heading: '%{user}s anteckningar'
       subheading_html: Anteckningar skapade eller kommenterade av %{user}
+      no_notes: Inga anteckningar
       id: Id
       creator: Skapare
       description: Beskrivning
@@ -2959,7 +3117,7 @@ sv:
       directions_to: Vägbeskrivning hit
       add_note: Lägg till en anteckning här
       show_address: Visa adress
-      query_features: Sökfunktioner
+      query_features: Undersök kartobjekt
       centre_map: Centrera kartan här
   redactions:
     edit:
index 817fc82ff6ad49e61f3082f82eece0314e32a7bf..c4bc652eb1a4c008da11eb647a985d17bdafce16 100644 (file)
@@ -1463,7 +1463,7 @@ tr:
       title_html: 'Bildir: %{link}'
       missing_params: Yeni rapor oluşturulamadı
       disclaimer:
-        intro: 'Raporunuzu site moderatörlerine göndermeden önce, lütfen şunlardan
+        intro: 'Lütfen, raporunuzu site moderatörlerine göndermeden önce şunlardan
           emin olun:'
         not_just_mistake: Sorunun yalnızca bir hata olmadığından eminseniz
         unable_to_fix: Sorunu kendiniz veya diğer topluluk üyelerinin yardımıyla düzeltemiyorsanız
@@ -1739,7 +1739,7 @@ tr:
       destroy_button: Sil
     new:
       title: Mesaj gönder
-      send_message_to_html: '%{name}''ya yeni bir mesaj gönder'
+      send_message_to_html: '%{name} kullanıcısına yeni bir mesaj gönder'
       subject: Konu
       body: Mesaj
       back_to_inbox: Gelen kutusuna dön
@@ -1903,7 +1903,7 @@ tr:
   shared:
     markdown_help:
       title_html: <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
-        ile ayrıştırıl
+        ile ayrıştırılmaktadır
       headings: Başlıklar
       heading: Başlık
       subheading: Alt başlık
@@ -2006,9 +2006,8 @@ tr:
           öneriyoruz.
         credit_3_1_html: "Harita &ldquo;standart stili&rdquo; www.openstreetmap.org
           \nadresindeki OpenStreetMap Vakfı tarafından\nOpen Database Lisansı altında
-          OpenStreetMap verileri kullanılarak Üretilmiş Bir Çalışmadır. Bu döşemeleri
-          kullanıyorsanız lütfen\naşağıdaki ilişkilendirmeyi kullanın:\n&ldquo;OpenStreetMap
-          ve OpenStreetMap Vakfı'dan temel harita ve veriler&rdquo;."
+          OpenStreetMap verileri kullanılarak üretilmiş bir çalışmadır. Bu harita
+          stilini kullanırken harita verileriyle aynı atıf gereklidir."
         credit_4_html: |-
           Bir gezinebilir elektronik haritanın sağ alt köşesinde atfın görünmesi lazım.
           Örnegin;
@@ -2530,6 +2529,8 @@ tr:
       read_gpx: Özel GPS izlerini oku
       write_gpx: GPS izlerini yükle
       write_notes: Notları değiştir
+      read_email: Kullanıcı e-posta adresini oku
+      skip_authorization: Başvuruyu otomatik onayla
   oauth_clients:
     new:
       title: Yeni bir uygulama kaydedin
index 934f7e36c88d793d66ea221e1995c5eb450ebde9..b282e19fb9a9c28dd658e6d4e5b24d249300bb73 100644 (file)
@@ -484,7 +484,7 @@ uk:
     index:
       title: Набори змін
       title_user: Набори змін від %{user}
-      title_friend: Ð\9dабоÑ\80и Ð·Ð¼Ñ\96н Ð¼Ð¾Ñ\97Ñ\85 Ð´Ñ\80Ñ\83зÑ\96в
+      title_friend: Набори змін друзів
       title_nearby: Набори змін користувачів поряд з вами
       empty: Жодного набору змін не знайдено.
       empty_area: На цій ділянці набори змін відсутні.
@@ -1834,16 +1834,16 @@ uk:
       flash token bad: Неможливо знайти такий код підтвердження, перевірте посилання.
   preferences:
     show:
-      title: Ð\9dалаÑ\88Ñ\82Ñ\83вання
+      title: Ð\92подобання
       preferred_editor: Типовий редактор
       preferred_languages: Типові мови
-      edit_preferences: Ð\97мÑ\96на Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83вань
+      edit_preferences: Ð\97мÑ\96на Ð²Ð¿Ð¾Ð´Ð¾Ð±ань
     edit:
       title: Зміна налаштувань
-      save: Ð\97беÑ\80егÑ\82и Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83вання
+      save: Ð\97беÑ\80егÑ\82и Ð²Ð¿Ð¾Ð´Ð¾Ð±ання
       cancel: Скасувати
     update:
-      failure: Ð\9dеможливо Ð·Ð±ÐµÑ\80егÑ\82и Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83вання.
+      failure: Ð\9dеможливо Ð·Ð±ÐµÑ\80егÑ\82и Ð²Ð¿Ð¾Ð´Ð¾Ð±ання.
     update_success_flash:
       message: Налаштування збережено.
   profiles:
@@ -2018,12 +2018,11 @@ uk:
           посилань неможливе (наприклад друковані матеріали), ми пропонуємо посилатися
           безпосередньо на www.openstreetmap.org (або розширено "www.openstreetmap.org,
           OpenStreetMap") та на opendatacommons.org.
-        credit_3_1_html: Тайли мап &ldquo;Стандартного шару&rdquo; з www.openstreetmap.org
-          є Виробленим твором (Produced Work) Фундації OpenStreetMap, створеним на
-          основі даних OpenStreetMap на умовах Open Database License. В разі використання
-          цих тайлів, будь ласка, посилайтесь відповідно – &ldquo;Base map and data
-          from OpenStreetMap and OpenStreetMap Foundation&rdquo; (&ldquo;Мапа і дані
-          – OpenStreetMap та Фундація OpenStreetMap&rdquo;)
+        credit_3_1_html: |-
+          Плитки мапи в & ldquo; стандартному стилі & rdquo; на www.openstreetmap.org є
+          Виконана робота OpenStreetMap Foundation з використанням даних OpenStreetMap
+          під Ліцензією відкритих баз даних. При використанні цього стилю мапи така сама атрибуція
+          необхідні для даних мапи.
         credit_4_html: |-
           Для мап, що використовуються в електронному вигляді, посилання на їх джерело повинне знаходитись у кутку мапи.
           Наприклад:
@@ -2542,6 +2541,8 @@ uk:
       read_gpx: Отримувати приватні GPS-треки
       write_gpx: Завантажувати GPS-треки
       write_notes: Змінювати нотатки
+      read_email: Прочитайте електронну адресу користувача
+      skip_authorization: Автоматичне схвалення заявки
   oauth_clients:
     new:
       title: Зареєструвати новий застосунок
@@ -2560,13 +2561,13 @@ uk:
       confirm: Ви впевнені?
       requests: 'Запит таких дозволів з боку користувача:'
     index:
-      title: Ð\9cоÑ\97 OAuth-подÑ\80обиÑ\86Ñ\96
+      title: Ð\94еÑ\82алÑ\96 OAuth
       my_tokens: Мої автентифіковані застосунки
       list_tokens: 'Такі маркери були випущені для застосунків на ваше ім’я:'
       application: Назва застосунка
       issued_at: Виданий в
       revoke: Відкликати!
-      my_apps: Ð\9cоÑ\97 ÐºÐ»Ñ\96Ñ\94нÑ\82Ñ\81Ñ\8cкÑ\96 Ð·Ð°Ñ\81Ñ\82оÑ\81Ñ\83нки
+      my_apps: Ð\97аÑ\81Ñ\82оÑ\81Ñ\83нки-клÑ\96Ñ\94нÑ\82и
       no_apps_html: Чи є у вас застосунки, які б ви хотіли зареєструватися для взаємодії
         з нами з допомогою %{oauth}? Ви повинні зареєструвати ваш вебзастосунок перед
         тим, як він зможе зробити OAuth-запит до цієї служби.
@@ -2585,7 +2586,7 @@ uk:
       flash: Знищено реєстрацію клієнтського застосунку
   oauth2_applications:
     index:
-      title: Ð\9cоÑ\97 Ð·астосунки-клієнти
+      title: Ð\97астосунки-клієнти
       no_applications_html: Чи є у вас програми, які б ви хотіли зареєструвати для
         взаємодії з нами через %{oauth2}? Ви повинні зареєструвати ваш вебзастосунок
         перед тим, як він зможе зробити OAuth-запит до цієї служби.
@@ -2626,7 +2627,7 @@ uk:
       title: Код авторизації
   oauth2_authorized_applications:
     index:
-      title: Ð\9cоÑ\97 Ð°вторизовані застосунки
+      title: Ð\90вторизовані застосунки
       application: Застосунок
       permissions: Дозволи
       no_applications_html: У вас ще немає застосунків авторизованих через %{oauth2}.
@@ -2709,7 +2710,7 @@ uk:
       my profile: Профіль
       my settings: Налаштування
       my comments: Мої коментарі
-      my_preferences: Ð\9dалаÑ\88Ñ\82Ñ\83вання
+      my_preferences: Ð\92подобання
       my_dashboard: Інформація
       blocks on me: Мої блокування
       blocks by me: Заблоковано мною
index db723ed8cab9c5dfd5df31fb7d449f47d8b89ba2..322044caa14cadd745edd276c08337d991f145db 100644 (file)
@@ -416,6 +416,20 @@ xmf:
     index:
       title_all: OpenStreetMap-შ თირუეფიშ პაკეტიშ სხუნუა
       title_particular: 'OpenStreetMap თირუეფიშ პაკეტიშ სხუნუა #%{changeset_id}'
+  dashboards:
+    contact:
+      km away: თქვანდე %{count}კმ.
+      m away: თქვანდე %{count}მ.
+    popup:
+      your location: თქვანი ორენი
+      nearby mapper: უახოლაში კარტოგრაფი
+      friend: მაჸალე
+    show:
+      title: ჩქიმი პანელი
+      edit_your_profile: თქვანი პროფილიშ რედაქტირაფა
+      my friends: ჩქიმი მაჸალეეფი
+      no friends: დიო აკა მაჸალე ვეგეიძინჷნა.
+      nearby users: შხვა უახოლაში მახვარებუ
   diary_entries:
     new:
       title: დღარს ახალი დინნაჭარაშ კეთება
@@ -568,6 +582,7 @@ xmf:
           police: პოლიცია
           post_box: საფოსტე ყუთი
           post_office: ფოსტა
+          prison: ციხე
           pub: პაბი
           public_bath: ოჯარალე აბანო
           public_building: ოჯარე ნოდგჷმი
index 5a093b378f7268632a0b47246f9c28ce742bc0f5..589a931777c084c37823a3e518d1c59e411671e8 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Simplified Chinese (中文(简体))
+# Messages for Simplified Chinese (中文(简体))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: )8
@@ -31,6 +31,7 @@
 # Author: Ken418
 # Author: Koalberry
 # Author: Lakejason0
+# Author: Lantx
 # Author: LaoShuBaby
 # Author: Lepus
 # Author: Liangent
@@ -839,6 +840,7 @@ zh-CN:
           window_construction: 窗户施工
           winery: 酿酒厂
           "yes": 工艺品店
+        crossing: 十字路口
         emergency:
           ambulance_station: 救护站
           assembly_point: 集合地点
@@ -1107,6 +1109,7 @@ zh-CN:
           sand: 沙滩
           scree: 岩屑堆
           scrub: 灌木丛
+          shingle: 砾滩
           spring: 泉
           stone: 石
           strait: 海峡
@@ -1886,9 +1889,8 @@ zh-CN:
           href="https://www.openstreetmap.org/copyright">此版权页</a>以注明。另外,若您要以数据形式发布
           OSM,您可以属名并直接链接协议。若某些媒介无法进行链接(如印刷品),我们建议您引导您的读者至 openstreetmap.org (或 OpenStreetMap
           的完整网址)、opendatacommons.org,及可能相关的 creativecommons.org。
-        credit_3_1_html: |-
-          在 www.openstreetmap.org 上的&ldquo;标准样式&rdquo;地图图块是由 OpenStreetMap 基金会使用基于开放数据库授权的的 OpenStreetMap 数据制作的作品。如果您有使用这些图块,请使用以下署名:
-          &ldquo;基础地图和数据来自 OpenStreetMap 和 OpenStreetMap 基金会&rdquo;。
+        credit_3_1_html: 在 www.openstreetmap.org 上的&ldquo;标准样式&rdquo;地图图块是由 OpenStreetMap
+          基金会使用基于开放数据库授权的的 OpenStreetMap 数据制作的作品。使用此地图样式时,需要与地图数据具有相同的署名。
         credit_4_html: |-
           对于可浏览的电子地图,标记会出现在地图的右下角。
           例如:
index b5bcbb730368422b59c358e8c71aa8fac746a5f6..7c2547793631030af0cc66bdd13f352286434904 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Traditional Chinese (中文(繁體))
+# Messages for Traditional Chinese (中文(繁體))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: A Retired User
@@ -1873,9 +1873,8 @@ zh-TW:
           授權。您可以透過連結至<a href="https://www.openstreetmap.org/copyright">此版權頁</a>以作註明。您亦可以指明並直接連結至授權內容
           (但若您要以資料形式發布 OSM,這是必要條件) 。在無法作出連結的媒體 (如印刷品) ,我們建議你引導你的讀者至 openstreetmap.org
           (如註明 OpenStreetMap 的完整網址) 、opendatacommons.org,及 (如相關的話) creativecommons.org。
-        credit_3_1_html: |-
-          在 www.openstreetmap.org 上的&ldquo;標準樣式&rdquo;地圖圖塊是由 OpenStreetMap 基金會使用基於開放資料庫授權的 OpenStreetMap 資料來完成。如果您有使用這些圖塊,請使用以下署名:
-          &ldquo;出自 OpenStreetMap 與 OpenStreetMap 基金會的底圖與資料&rdquo;。
+        credit_3_1_html: 在 www.openstreetmap.org 上的&ldquo;標準樣式&rdquo;地圖圖塊是由 OpenStreetMap
+          基金會使用基於開放資料庫授權的 OpenStreetMap 資料來完成。當使用此地圖樣式時,需要與地圖資料相同的屬名。
         credit_4_html: |-
           對於可瀏覽的電子地圖,標明出處的文字應放在地圖的一角。
           例如:
@@ -2322,6 +2321,8 @@ zh-TW:
       read_gpx: 讀取私人 GPS 軌跡
       write_gpx: 上傳 GPS 軌跡
       write_notes: 修改註記
+      read_email: 讀取使用者電子郵件位址
+      skip_authorization: 自動核准申請
   oauth_clients:
     new:
       title: 註冊新的應用程式
index 62458cf095f90064e2527fd53e2c61d748065285..f715296d2cb994685f55d0a7eaf0cca2fb1d855c 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Chinese (Hong Kong) (中文(香港))
+# Messages for Chinese (Hong Kong) (中文(香港))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: C933103
index 8f45a3b4b3b438fa6eeffd4df4459f994a91dbdf..7ff2ba8b4358428c04814a899d5e8563be0b971b 100644 (file)
@@ -1,5 +1,6 @@
 module Oauth
   SCOPES = %w[read_prefs write_prefs write_diary write_api read_gpx write_gpx write_notes].freeze
+  PRIVILEGED_SCOPES = %w[read_email skip_authorization].freeze
 
   class Scope
     attr_reader :name
@@ -13,7 +14,9 @@ module Oauth
     end
   end
 
-  def self.scopes
-    SCOPES.collect { |s| Scope.new(s) }
+  def self.scopes(privileged: false)
+    scopes = SCOPES
+    scopes += PRIVILEGED_SCOPES if privileged
+    scopes.collect { |s| Scope.new(s) }
   end
 end
index 201e433d1ae2288347de99cbf55f06a42051156e..bf8881668482a79c684374f006282cb915f528bf 100644 (file)
@@ -12,6 +12,6 @@
     "qs": "^6.9.4"
   },
   "devDependencies": {
-    "eslint": "^7.3.1"
+    "eslint": "^8.0.0"
   }
 }
index a904e8127693f37e7ccb48900a3e8b0259311074..7d561522c12c7fc1fd225e9ae65461cc7c814d43 100644 (file)
@@ -148,5 +148,14 @@ module Api
         assert_equal "The minimum latitude must be less than the maximum latitude, but it wasn't", @response.body, "bbox: #{bbox}"
       end
     end
+
+    # Ensure the lat/lon is formatted as a decimal e.g. not 4.0e-05
+    def test_lat_lon_xml_format
+      create(:tracepoint, :latitude => (0.00004 * GeoRecord::SCALE).to_i, :longitude => (0.00008 * GeoRecord::SCALE).to_i)
+
+      get trackpoints_path(:bbox => "0,0,0.1,0.1")
+      assert_match(/lat="0.0000400"/, response.body)
+      assert_match(/lon="0.0000800"/, response.body)
+    end
   end
 end
index d0d1e0dcf1e2a31ce9893bdfcd6c7b153d7d2be3..cb2c7520504dfa38f0c51cde7434cfafb4a15834 100644 (file)
@@ -48,7 +48,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, false)
+      check_xml_details(user, false, false)
 
       # check that a suspended user is not returned
       get api_user_path(:id => create(:user, :suspended).id)
@@ -72,7 +72,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, false)
+      check_json_details(js, user, false, false)
     end
 
     def test_show_oauth1
@@ -94,7 +94,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, true)
+      check_xml_details(user, true, false)
 
       # check that we can fetch a different user's details as XML with read_prefs
       signed_get api_user_path(:id => other_user.id), :oauth => { :token => good_token }
@@ -102,7 +102,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(other_user, false)
+      check_xml_details(other_user, false, false)
 
       # check that we can fetch our own details as XML without read_prefs
       signed_get api_user_path(:id => user.id), :oauth => { :token => bad_token }
@@ -110,7 +110,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, false)
+      check_xml_details(user, false, false)
 
       # check that we can fetch our own details as JSON with read_prefs
       signed_get api_user_path(:id => user.id, :format => "json"), :oauth => { :token => good_token }
@@ -122,7 +122,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, true)
+      check_json_details(js, user, true, false)
 
       # check that we can fetch a different user's details as JSON with read_prefs
       signed_get api_user_path(:id => other_user.id, :format => "json"), :oauth => { :token => good_token }
@@ -134,7 +134,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, other_user, false)
+      check_json_details(js, other_user, false, false)
 
       # check that we can fetch our own details as JSON without read_prefs
       signed_get api_user_path(:id => other_user.id, :format => "json"), :oauth => { :token => bad_token }
@@ -146,7 +146,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, other_user, false)
+      check_json_details(js, other_user, false, false)
     end
 
     def test_show_oauth2
@@ -169,7 +169,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, true)
+      check_xml_details(user, true, false)
 
       # check that we can fetch a different user's details as XML with read_prefs
       get api_user_path(:id => other_user.id), :headers => bearer_authorization_header(good_token.token)
@@ -177,7 +177,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(other_user, false)
+      check_xml_details(other_user, false, false)
 
       # check that we can fetch our own details as XML without read_prefs
       get api_user_path(:id => user.id), :headers => bearer_authorization_header(bad_token.token)
@@ -185,7 +185,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, false)
+      check_xml_details(user, false, false)
 
       # check that we can fetch our own details as JSON with read_prefs
       get api_user_path(:id => user.id, :format => "json"), :headers => bearer_authorization_header(good_token.token)
@@ -197,7 +197,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, true)
+      check_json_details(js, user, true, false)
 
       # check that we can fetch a different user's details as JSON with read_prefs
       get api_user_path(:id => other_user.id, :format => "json"), :headers => bearer_authorization_header(good_token.token)
@@ -209,7 +209,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, other_user, false)
+      check_json_details(js, other_user, false, false)
 
       # check that we can fetch our own details as JSON without read_prefs
       get api_user_path(:id => user.id, :format => "json"), :headers => bearer_authorization_header(bad_token.token)
@@ -221,7 +221,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, false)
+      check_json_details(js, user, false, false)
     end
 
     def test_details
@@ -244,7 +244,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, true)
+      check_xml_details(user, true, false)
 
       # check that data is returned properly in json
       auth_header = basic_authorization_header user.email, "test"
@@ -257,7 +257,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, true)
+      check_json_details(js, user, true, false)
     end
 
     def test_details_oauth1
@@ -280,7 +280,7 @@ module Api
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, true)
+      check_xml_details(user, true, false)
 
       # check that we can't fetch details as JSON without read_prefs
       signed_get user_details_path(:format => "json"), :oauth => { :token => bad_token }
@@ -296,7 +296,7 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, true)
+      check_json_details(js, user, true, false)
     end
 
     def test_details_oauth2
@@ -308,24 +308,35 @@ module Api
                           :scopes => %w[read_prefs])
       bad_token = create(:oauth_access_token,
                          :resource_owner_id => user.id)
+      email_token = create(:oauth_access_token,
+                           :resource_owner_id => user.id,
+                           :scopes => %w[read_prefs read_email])
 
       # check that we can't fetch details as XML without read_prefs
       get user_details_path, :headers => bearer_authorization_header(bad_token.token)
       assert_response :forbidden
 
-      # check that we can fetch details as XML
+      # check that we can fetch details as XML without read_email
       get user_details_path, :headers => bearer_authorization_header(good_token.token)
       assert_response :success
       assert_equal "application/xml", response.media_type
 
       # check the data that is returned
-      check_xml_details(user, true)
+      check_xml_details(user, true, false)
+
+      # check that we can fetch details as XML with read_email
+      get user_details_path, :headers => bearer_authorization_header(email_token.token)
+      assert_response :success
+      assert_equal "application/xml", response.media_type
+
+      # check the data that is returned
+      check_xml_details(user, true, true)
 
       # check that we can't fetch details as JSON without read_prefs
       get user_details_path(:format => "json"), :headers => bearer_authorization_header(bad_token.token)
       assert_response :forbidden
 
-      # check that we can fetch details as JSON
+      # check that we can fetch details as JSON without read_email
       get user_details_path(:format => "json"), :headers => bearer_authorization_header(good_token.token)
       assert_response :success
       assert_equal "application/json", response.media_type
@@ -335,7 +346,19 @@ module Api
       assert_not_nil js
 
       # check the data that is returned
-      check_json_details(js, user, true)
+      check_json_details(js, user, true, false)
+
+      # check that we can fetch details as JSON with read_email
+      get user_details_path(:format => "json"), :headers => bearer_authorization_header(email_token.token)
+      assert_response :success
+      assert_equal "application/json", response.media_type
+
+      # parse the response
+      js = ActiveSupport::JSON.decode(@response.body)
+      assert_not_nil js
+
+      # check the data that is returned
+      check_json_details(js, user, true, true)
     end
 
     def test_index
@@ -347,7 +370,7 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
-        check_xml_details(user1, false)
+        check_xml_details(user1, false, false)
         assert_select "user[id='#{user2.id}']", :count => 0
         assert_select "user[id='#{user3.id}']", :count => 0
       end
@@ -357,7 +380,7 @@ module Api
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
         assert_select "user[id='#{user1.id}']", :count => 0
-        check_xml_details(user2, false)
+        check_xml_details(user2, false, false)
         assert_select "user[id='#{user3.id}']", :count => 0
       end
 
@@ -365,9 +388,9 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 2 do
-        check_xml_details(user1, false)
+        check_xml_details(user1, false, false)
         assert_select "user[id='#{user2.id}']", :count => 0
-        check_xml_details(user3, false)
+        check_xml_details(user3, false, false)
       end
 
       get api_users_path, :params => { :users => user1.id, :format => "json" }
@@ -376,7 +399,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user1, false)
+      check_json_details(js["users"][0], user1, false, false)
 
       get api_users_path, :params => { :users => user2.id, :format => "json" }
       assert_response :success
@@ -384,7 +407,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user2, false)
+      check_json_details(js["users"][0], user2, false, false)
 
       get api_users_path, :params => { :users => "#{user1.id},#{user3.id}", :format => "json" }
       assert_response :success
@@ -392,8 +415,8 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 2, js["users"].count
-      check_json_details(js["users"][0], user1, false)
-      check_json_details(js["users"][1], user3, false)
+      check_json_details(js["users"][0], user1, false, false)
+      check_json_details(js["users"][1], user3, false, false)
 
       get api_users_path, :params => { :users => create(:user, :suspended).id }
       assert_response :not_found
@@ -416,7 +439,7 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
-        check_xml_details(user1, true)
+        check_xml_details(user1, true, false)
         assert_select "user[id='#{user2.id}']", :count => 0
         assert_select "user[id='#{user3.id}']", :count => 0
       end
@@ -426,7 +449,7 @@ module Api
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
         assert_select "user[id='#{user1.id}']", :count => 0
-        check_xml_details(user2, false)
+        check_xml_details(user2, false, false)
         assert_select "user[id='#{user3.id}']", :count => 0
       end
 
@@ -434,18 +457,18 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 2 do
-        check_xml_details(user1, true)
+        check_xml_details(user1, true, false)
         assert_select "user[id='#{user2.id}']", :count => 0
-        check_xml_details(user3, false)
+        check_xml_details(user3, false, false)
       end
 
       signed_get api_users_path, :params => { :users => "#{user1.id},#{user3.id}" }, :oauth => { :token => bad_token }
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 2 do
-        check_xml_details(user1, false)
+        check_xml_details(user1, false, false)
         assert_select "user[id='#{user2.id}']", :count => 0
-        check_xml_details(user3, false)
+        check_xml_details(user3, false, false)
       end
 
       signed_get api_users_path, :params => { :users => user1.id, :format => "json" }, :oauth => { :token => good_token }
@@ -454,7 +477,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user1, true)
+      check_json_details(js["users"][0], user1, true, false)
 
       signed_get api_users_path, :params => { :users => user2.id, :format => "json" }, :oauth => { :token => good_token }
       assert_response :success
@@ -462,7 +485,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user2, false)
+      check_json_details(js["users"][0], user2, false, false)
 
       signed_get api_users_path, :params => { :users => "#{user1.id},#{user3.id}", :format => "json" }, :oauth => { :token => good_token }
       assert_response :success
@@ -470,8 +493,8 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 2, js["users"].count
-      check_json_details(js["users"][0], user1, true)
-      check_json_details(js["users"][1], user3, false)
+      check_json_details(js["users"][0], user1, true, false)
+      check_json_details(js["users"][1], user3, false, false)
 
       signed_get api_users_path, :params => { :users => "#{user1.id},#{user3.id}", :format => "json" }, :oauth => { :token => bad_token }
       assert_response :success
@@ -479,8 +502,8 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 2, js["users"].count
-      check_json_details(js["users"][0], user1, false)
-      check_json_details(js["users"][1], user3, false)
+      check_json_details(js["users"][0], user1, false, false)
+      check_json_details(js["users"][1], user3, false, false)
 
       signed_get api_users_path, :params => { :users => create(:user, :suspended).id }, :oauth => { :token => good_token }
       assert_response :not_found
@@ -503,7 +526,7 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
-        check_xml_details(user1, true)
+        check_xml_details(user1, true, false)
         assert_select "user[id='#{user2.id}']", :count => 0
         assert_select "user[id='#{user3.id}']", :count => 0
       end
@@ -513,7 +536,7 @@ module Api
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 1 do
         assert_select "user[id='#{user1.id}']", :count => 0
-        check_xml_details(user2, false)
+        check_xml_details(user2, false, false)
         assert_select "user[id='#{user3.id}']", :count => 0
       end
 
@@ -521,18 +544,18 @@ module Api
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 2 do
-        check_xml_details(user1, true)
+        check_xml_details(user1, true, false)
         assert_select "user[id='#{user2.id}']", :count => 0
-        check_xml_details(user3, false)
+        check_xml_details(user3, false, false)
       end
 
       get api_users_path, :params => { :users => "#{user1.id},#{user3.id}" }, :headers => bearer_authorization_header(bad_token.token)
       assert_response :success
       assert_equal "application/xml", response.media_type
       assert_select "user", :count => 2 do
-        check_xml_details(user1, false)
+        check_xml_details(user1, false, false)
         assert_select "user[id='#{user2.id}']", :count => 0
-        check_xml_details(user3, false)
+        check_xml_details(user3, false, false)
       end
 
       get api_users_path, :params => { :users => user1.id, :format => "json" }, :headers => bearer_authorization_header(good_token.token)
@@ -541,7 +564,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user1, true)
+      check_json_details(js["users"][0], user1, true, false)
 
       get api_users_path, :params => { :users => user2.id, :format => "json" }, :headers => bearer_authorization_header(good_token.token)
       assert_response :success
@@ -549,7 +572,7 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 1, js["users"].count
-      check_json_details(js["users"][0], user2, false)
+      check_json_details(js["users"][0], user2, false, false)
 
       get api_users_path, :params => { :users => "#{user1.id},#{user3.id}", :format => "json" }, :headers => bearer_authorization_header(good_token.token)
       assert_response :success
@@ -557,8 +580,8 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 2, js["users"].count
-      check_json_details(js["users"][0], user1, true)
-      check_json_details(js["users"][1], user3, false)
+      check_json_details(js["users"][0], user1, true, false)
+      check_json_details(js["users"][1], user3, false, false)
 
       get api_users_path, :params => { :users => "#{user1.id},#{user3.id}", :format => "json" }, :headers => bearer_authorization_header(bad_token.token)
       assert_response :success
@@ -566,8 +589,8 @@ module Api
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
       assert_equal 2, js["users"].count
-      check_json_details(js["users"][0], user1, false)
-      check_json_details(js["users"][1], user3, false)
+      check_json_details(js["users"][0], user1, false, false)
+      check_json_details(js["users"][1], user3, false, false)
 
       get api_users_path, :params => { :users => create(:user, :suspended).id }, :headers => bearer_authorization_header(good_token.token)
       assert_response :not_found
@@ -608,7 +631,7 @@ module Api
 
     private
 
-    def check_xml_details(user, include_private)
+    def check_xml_details(user, include_private, include_email)
       assert_select "user[id='#{user.id}']", :count => 1 do
         assert_select "description", :count => 1, :text => user.description
 
@@ -678,10 +701,16 @@ module Api
           assert_select "languages", :count => 0
           assert_select "messages", :count => 0
         end
+
+        if include_email
+          assert_select "email", :count => 1, :text => user.email
+        else
+          assert_select "email", :count => 0
+        end
       end
     end
 
-    def check_json_details(js, user, include_private)
+    def check_json_details(js, user, include_private, include_email)
       assert_equal user.id, js["user"]["id"]
       assert_equal user.description, js["user"]["description"]
       assert js["user"]["contributor_terms"]["agreed"]
@@ -721,6 +750,12 @@ module Api
       else
         assert_nil js["user"]["messages"]
       end
+
+      if include_email
+        assert_equal user.email, js["user"]["email"]
+      else
+        assert_nil js["user"]["email"]
+      end
     end
   end
 end
index eec5e02ec926d46dd64a4eea1e3d7670427f35d6..149b6ee35ec458c3a59305dc474311254cd9412a 100644 (file)
@@ -67,11 +67,11 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "oauth2_applications/new"
     assert_select "form", 1 do
-      assert_select "input#doorkeeper_application_name", 1
-      assert_select "textarea#doorkeeper_application_redirect_uri", 1
-      assert_select "input#doorkeeper_application_confidential", 1
+      assert_select "input#oauth2_application_name", 1
+      assert_select "textarea#oauth2_application_redirect_uri", 1
+      assert_select "input#oauth2_application_confidential", 1
       Oauth.scopes.each do |scope|
-        assert_select "input#doorkeeper_application_scopes_#{scope.name}", 1
+        assert_select "input#oauth2_application_scopes_#{scope.name}", 1
       end
     end
   end
@@ -87,7 +87,7 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     session_for(user)
 
     assert_difference "Doorkeeper::Application.count", 0 do
-      post oauth_applications_path(:doorkeeper_application => {
+      post oauth_applications_path(:oauth2_application => {
                                      :name => "Test Application"
                                    })
     end
@@ -95,7 +95,7 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_template "oauth2_applications/new"
 
     assert_difference "Doorkeeper::Application.count", 0 do
-      post oauth_applications_path(:doorkeeper_application => {
+      post oauth_applications_path(:oauth2_application => {
                                      :name => "Test Application",
                                      :redirect_uri => "https://test.example.com/",
                                      :scopes => ["bad_scope"]
@@ -105,7 +105,7 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_template "oauth2_applications/new"
 
     assert_difference "Doorkeeper::Application.count", 1 do
-      post oauth_applications_path(:doorkeeper_application => {
+      post oauth_applications_path(:oauth2_application => {
                                      :name => "Test Application",
                                      :redirect_uri => "https://test.example.com/",
                                      :scopes => ["read_prefs"]
@@ -115,6 +115,32 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_redirected_to oauth_application_path(:id => Doorkeeper::Application.find_by(:name => "Test Application").id)
   end
 
+  def test_create_privileged
+    session_for(create(:user))
+
+    assert_difference "Doorkeeper::Application.count", 0 do
+      post oauth_applications_path(:oauth2_application => {
+                                     :name => "Test Application",
+                                     :redirect_uri => "https://test.example.com/",
+                                     :scopes => ["read_email"]
+                                   })
+    end
+    assert_response :success
+    assert_template "oauth2_applications/new"
+
+    session_for(create(:administrator_user))
+
+    assert_difference "Doorkeeper::Application.count", 1 do
+      post oauth_applications_path(:oauth2_application => {
+                                     :name => "Test Application",
+                                     :redirect_uri => "https://test.example.com/",
+                                     :scopes => ["read_email"]
+                                   })
+    end
+    assert_response :redirect
+    assert_redirected_to oauth_application_path(:id => Doorkeeper::Application.find_by(:name => "Test Application").id)
+  end
+
   def test_show
     user = create(:user)
     client = create(:oauth_application, :owner => user)
@@ -154,11 +180,11 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "oauth2_applications/edit"
     assert_select "form", 1 do
-      assert_select "input#doorkeeper_application_name", 1
-      assert_select "textarea#doorkeeper_application_redirect_uri", 1
-      assert_select "input#doorkeeper_application_confidential", 1
+      assert_select "input#oauth2_application_name", 1
+      assert_select "textarea#oauth2_application_redirect_uri", 1
+      assert_select "input#oauth2_application_confidential", 1
       Oauth.scopes.each do |scope|
-        assert_select "input#doorkeeper_application_scopes_#{scope.name}", 1
+        assert_select "input#oauth2_application_scopes_#{scope.name}", 1
       end
     end
   end
@@ -178,7 +204,7 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_template "oauth2_applications/not_found"
 
     put oauth_application_path(:id => client,
-                               :doorkeeper_application => {
+                               :oauth2_application => {
                                  :name => "New Name",
                                  :redirect_uri => nil
                                })
@@ -186,7 +212,7 @@ class Oauth2ApplicationsControllerTest < ActionDispatch::IntegrationTest
     assert_template "oauth2_applications/edit"
 
     put oauth_application_path(:id => client,
-                               :doorkeeper_application => {
+                               :oauth2_application => {
                                  :name => "New Name",
                                  :redirect_uri => "https://new.example.com/url"
                                })
index a9b3b875da7b003ff912b879aae2b9fce2547934..1e62d2c973eaff522ae26cc26aba99cad5b5add3 100644 (file)
@@ -1,5 +1,5 @@
 FactoryBot.define do
-  factory :oauth_application, :class => "Doorkeeper::Application" do
+  factory :oauth_application, :class => "Oauth2Application" do
     sequence(:name) { |n| "OAuth application #{n}" }
     sequence(:redirect_uri) { |n| "https://example.com/app/#{n}" }
 
index 758baa1cb7d42dc9d56567c548f0ea6548b09322..8cef4d2dc570512340f50500801eb0d030e33dfb 100644 (file)
@@ -12,7 +12,6 @@ class UserHelperTest < ActionView::TestCase
 
     image = user_image(user, :class => "foo")
     assert_match %r{^<img class="foo" .* src="/images/avatar_large.png" />$}, image
-
     image = user_image(gravatar_user)
     assert_match %r{^<img class="user_image" .* src="http://www.gravatar.com/avatar/.*" />$}, image
 
@@ -66,6 +65,50 @@ class UserHelperTest < ActionView::TestCase
     assert_match %r{^http://www.gravatar.com/avatar/}, url
   end
 
+  def test_user_image_sizes_default_image
+    user = create(:user)
+
+    image = user_image(user)
+    assert_match %r{^<img .* width="100" height="100" .* />$}, image
+
+    thumbnail = user_thumbnail(user)
+    assert_match %r{^<img .* width="50" height="50" .* />$}, thumbnail
+  end
+
+  def test_user_image_sizes_avatar
+    user = create(:user)
+    user.avatar.attach(:io => File.open("test/gpx/fixtures/a.gif"), :filename => "a.gif")
+
+    # first time access, no width or height is found
+    image = user_image(user)
+    assert_no_match %r{^<img .* width="100" height="100" .* />$}, image
+
+    thumbnail = user_thumbnail(user)
+    assert_no_match %r{^<img .* width="50" height="50" .* />$}, thumbnail
+
+    # Small hacks to simulate what happens when the images have been fetched at least once before
+    variant = user.avatar.variant(:resize_to_limit => [100, 100])
+    variant.processed.send(:record).image.blob.analyze
+    variant = user.avatar.variant(:resize_to_limit => [50, 50])
+    variant.processed.send(:record).image.blob.analyze
+
+    image = user_image(user)
+    assert_match %r{^<img .* width="100" height="100" .* />$}, image
+
+    thumbnail = user_thumbnail(user)
+    assert_match %r{^<img .* width="50" height="50" .* />$}, thumbnail
+  end
+
+  def test_user_image_sizes_gravatar
+    user = create(:user, :image_use_gravatar => true)
+
+    image = user_image(user)
+    assert_match %r{^<img .* width="100" height="100" .* />$}, image
+
+    thumbnail = user_thumbnail(user)
+    assert_match %r{^<img .* width="50" height="50" .* />$}, thumbnail
+  end
+
   def test_openid_logo
     logo = openid_logo
     assert_match %r{^<img .* class="openid_logo" src="/images/openid_small.png" />$}, logo
index a672b7c62b9de9e0374afc4f93470e730c154e75..2ffbef09fae8f7c5d7de527c2fcb889dc3615e63 100644 (file)
@@ -7,12 +7,4 @@ class TracepointTest < ActiveSupport::TestCase
     tracepoint.timestamp = nil
     assert_not tracepoint.valid?
   end
-
-  # Ensure the lat/lon is formatted as a decimal e.g. not 4.0e-05
-  def test_lat_lon_xml_format
-    tracepoint = build(:tracepoint, :latitude => 0.00004 * GeoRecord::SCALE, :longitude => 0.00008 * GeoRecord::SCALE)
-
-    assert_match(/lat="0.0000400"/, tracepoint.to_xml_node.to_s)
-    assert_match(/lon="0.0000800"/, tracepoint.to_xml_node.to_s)
-  end
 end
index d69e8135697414b738fa276e95556e7bbc3525c3..e876bffd45f32d504314e3b88be06562098cead3 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,35 +2,14 @@
 # yarn lockfile v1
 
 
-"@babel/code-frame@7.12.11":
-  version "7.12.11"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
-  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
-  dependencies:
-    "@babel/highlight" "^7.10.4"
-
-"@babel/helper-validator-identifier@^7.12.11":
-  version "7.12.11"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
-  integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
-
-"@babel/highlight@^7.10.4":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c"
-  integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.12.11"
-    chalk "^2.0.0"
-    js-tokens "^4.0.0"
-
-"@eslint/eslintrc@^0.4.3":
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
-  integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
+"@eslint/eslintrc@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.3.tgz#41f08c597025605f672251dcc4e8be66b5ed7366"
+  integrity sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==
   dependencies:
     ajv "^6.12.4"
-    debug "^4.1.1"
-    espree "^7.3.0"
+    debug "^4.3.2"
+    espree "^9.0.0"
     globals "^13.9.0"
     ignore "^4.0.6"
     import-fresh "^3.2.1"
     minimatch "^3.0.4"
     strip-json-comments "^3.1.1"
 
-"@humanwhocodes/config-array@^0.5.0":
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
-  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
+"@humanwhocodes/config-array@^0.6.0":
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a"
+  integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==
   dependencies:
     "@humanwhocodes/object-schema" "^1.2.0"
     debug "^4.1.1"
@@ -62,10 +41,10 @@ acorn-jsx@^5.3.1:
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
   integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
 
-acorn@^7.4.0:
-  version "7.4.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
-  integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
+acorn@^8.5.0:
+  version "8.5.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
+  integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
 
 ajv@^6.10.0, ajv@^6.12.4:
   version "6.12.4"
@@ -77,39 +56,15 @@ ajv@^6.10.0, ajv@^6.12.4:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-ajv@^8.0.1:
-  version "8.5.0"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b"
-  integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==
-  dependencies:
-    fast-deep-equal "^3.1.1"
-    json-schema-traverse "^1.0.0"
-    require-from-string "^2.0.2"
-    uri-js "^4.2.2"
-
 ansi-colors@^3.2.1:
   version "3.2.4"
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
   integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
 
 ansi-regex@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
-  integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
-
-ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
-ansi-styles@^4.0.0:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
-  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
-  dependencies:
-    color-convert "^2.0.1"
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
 ansi-styles@^4.1.0:
   version "4.2.1"
@@ -126,10 +81,10 @@ argparse@^1.0.7:
   dependencies:
     sprintf-js "~1.0.2"
 
-astral-regex@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
-  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
 balanced-match@^1.0.0:
   version "1.0.0"
@@ -162,15 +117,6 @@ callsites@^3.0.0:
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
   integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 
-chalk@^2.0.0:
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
 chalk@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
@@ -179,13 +125,6 @@ chalk@^4.0.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
-
 color-convert@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -193,11 +132,6 @@ color-convert@^2.0.1:
   dependencies:
     color-name "~1.1.4"
 
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
 color-name@~1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
@@ -217,12 +151,12 @@ cross-spawn@^7.0.2:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-debug@^4.0.1, debug@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
-  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+debug@^4.1.1, debug@^4.3.2:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
+  integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
   dependencies:
-    ms "^2.1.1"
+    ms "2.1.2"
 
 deep-is@^0.1.3:
   version "0.1.3"
@@ -241,11 +175,6 @@ doctrine@^3.0.0:
   dependencies:
     esutils "^2.0.2"
 
-emoji-regex@^8.0.0:
-  version "8.0.0"
-  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
-  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
 enquirer@^2.3.5:
   version "2.3.5"
   resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381"
@@ -253,72 +182,66 @@ enquirer@^2.3.5:
   dependencies:
     ansi-colors "^3.2.1"
 
-escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
 escape-string-regexp@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-eslint-scope@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
-  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+eslint-scope@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978"
+  integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==
   dependencies:
     esrecurse "^4.3.0"
-    estraverse "^4.1.1"
+    estraverse "^5.2.0"
 
-eslint-utils@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
-  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+eslint-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
   dependencies:
-    eslint-visitor-keys "^1.1.0"
-
-eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
-  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+    eslint-visitor-keys "^2.0.0"
 
 eslint-visitor-keys@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
   integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
 
-eslint@^7.3.1:
-  version "7.32.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
-  integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
+eslint-visitor-keys@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186"
+  integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==
+
+eslint@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.0.1.tgz#3610e7fe4a05c2154669515ca60835a76a19f700"
+  integrity sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==
   dependencies:
-    "@babel/code-frame" "7.12.11"
-    "@eslint/eslintrc" "^0.4.3"
-    "@humanwhocodes/config-array" "^0.5.0"
+    "@eslint/eslintrc" "^1.0.3"
+    "@humanwhocodes/config-array" "^0.6.0"
     ajv "^6.10.0"
     chalk "^4.0.0"
     cross-spawn "^7.0.2"
-    debug "^4.0.1"
+    debug "^4.3.2"
     doctrine "^3.0.0"
     enquirer "^2.3.5"
     escape-string-regexp "^4.0.0"
-    eslint-scope "^5.1.1"
-    eslint-utils "^2.1.0"
-    eslint-visitor-keys "^2.0.0"
-    espree "^7.3.1"
+    eslint-scope "^6.0.0"
+    eslint-utils "^3.0.0"
+    eslint-visitor-keys "^3.0.0"
+    espree "^9.0.0"
     esquery "^1.4.0"
     esutils "^2.0.2"
     fast-deep-equal "^3.1.3"
     file-entry-cache "^6.0.1"
     functional-red-black-tree "^1.0.1"
-    glob-parent "^5.1.2"
+    glob-parent "^6.0.1"
     globals "^13.6.0"
     ignore "^4.0.6"
     import-fresh "^3.0.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
-    js-yaml "^3.13.1"
+    js-yaml "^4.1.0"
     json-stable-stringify-without-jsonify "^1.0.1"
     levn "^0.4.1"
     lodash.merge "^4.6.2"
@@ -326,22 +249,21 @@ eslint@^7.3.1:
     natural-compare "^1.4.0"
     optionator "^0.9.1"
     progress "^2.0.0"
-    regexpp "^3.1.0"
+    regexpp "^3.2.0"
     semver "^7.2.1"
     strip-ansi "^6.0.0"
     strip-json-comments "^3.1.0"
-    table "^6.0.9"
     text-table "^0.2.0"
     v8-compile-cache "^2.0.3"
 
-espree@^7.3.0, espree@^7.3.1:
-  version "7.3.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
-  integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+espree@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090"
+  integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==
   dependencies:
-    acorn "^7.4.0"
+    acorn "^8.5.0"
     acorn-jsx "^5.3.1"
-    eslint-visitor-keys "^1.3.0"
+    eslint-visitor-keys "^3.0.0"
 
 esprima@^4.0.0:
   version "4.0.1"
@@ -362,11 +284,6 @@ esrecurse@^4.3.0:
   dependencies:
     estraverse "^5.2.0"
 
-estraverse@^4.1.1:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
-  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
 estraverse@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
@@ -441,12 +358,12 @@ get-intrinsic@^1.0.2:
     has "^1.0.3"
     has-symbols "^1.0.1"
 
-glob-parent@^5.1.2:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
-  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+glob-parent@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
   dependencies:
-    is-glob "^4.0.1"
+    is-glob "^4.0.3"
 
 glob@^7.1.3:
   version "7.1.6"
@@ -467,11 +384,6 @@ globals@^13.6.0, globals@^13.9.0:
   dependencies:
     type-fest "^0.20.2"
 
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
 has-flag@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@@ -530,15 +442,10 @@ is-extglob@^2.1.1:
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
   integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
 
-is-fullwidth-code-point@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
-  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-glob@^4.0.0, is-glob@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
-  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+is-glob@^4.0.0, is-glob@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
   dependencies:
     is-extglob "^2.1.1"
 
@@ -557,11 +464,6 @@ js-cookie@^3.0.0:
   resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
   integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==
 
-js-tokens@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
 js-yaml@^3.13.1:
   version "3.13.1"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
@@ -570,16 +472,18 @@ js-yaml@^3.13.1:
     argparse "^1.0.7"
     esprima "^4.0.0"
 
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
 json-schema-traverse@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
   integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
 
-json-schema-traverse@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
-  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-
 json-stable-stringify-without-jsonify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
@@ -603,21 +507,11 @@ levn@^0.4.1:
     prelude-ls "^1.2.1"
     type-check "~0.4.0"
 
-lodash.clonedeep@^4.5.0:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
-  integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-
 lodash.merge@^4.6.2:
   version "4.6.2"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-lodash.truncate@^4.4.2:
-  version "4.4.2"
-  resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
-  integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
-
 minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -625,7 +519,7 @@ minimatch@^3.0.4:
   dependencies:
     brace-expansion "^1.1.7"
 
-ms@^2.1.1:
+ms@2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
@@ -705,15 +599,10 @@ qs@^6.9.4:
   dependencies:
     side-channel "^1.0.4"
 
-regexpp@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
-  integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
-
-require-from-string@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
-  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+regexpp@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
 
 resolve-from@^4.0.0:
   version "4.0.0"
@@ -753,29 +642,11 @@ side-channel@^1.0.4:
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
-slice-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
-  integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
-  dependencies:
-    ansi-styles "^4.0.0"
-    astral-regex "^2.0.0"
-    is-fullwidth-code-point "^3.0.0"
-
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
-string-width@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
-  integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
-  dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.0"
-
 strip-ansi@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
@@ -788,13 +659,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
-supports-color@^5.3.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
 supports-color@^7.1.0:
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
@@ -802,18 +666,6 @@ supports-color@^7.1.0:
   dependencies:
     has-flag "^4.0.0"
 
-table@^6.0.9:
-  version "6.7.1"
-  resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
-  integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
-  dependencies:
-    ajv "^8.0.1"
-    lodash.clonedeep "^4.5.0"
-    lodash.truncate "^4.4.2"
-    slice-ansi "^4.0.0"
-    string-width "^4.2.0"
-    strip-ansi "^6.0.0"
-
 text-table@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"