]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/2548'
authorTom Hughes <tom@compton.nu>
Wed, 18 Mar 2020 20:15:06 +0000 (20:15 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 18 Mar 2020 20:15:06 +0000 (20:15 +0000)
68 files changed:
.rubocop.yml
Gemfile
Gemfile.lock
app/assets/javascripts/index/history.js
app/assets/stylesheets/_bootstrap-custom.scss [deleted file]
app/assets/stylesheets/common.scss
app/controllers/api/map_controller.rb
app/controllers/api/nodes_controller.rb
app/controllers/api/old_controller.rb
app/controllers/api/relations_controller.rb
app/controllers/api/ways_controller.rb
app/controllers/api_controller.rb
app/controllers/issues_controller.rb
app/views/browse/_common_details.html.erb
app/views/browse/_containing_relation.html.erb
app/views/browse/_relation_member.html.erb
app/views/browse/changeset.html.erb
app/views/changesets/index.atom.builder
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/comments.html.erb
app/views/diary_entries/index.html.erb
app/views/messages/_message_summary.html.erb
app/views/messages/_sent_message_summary.html.erb
app/views/messages/show.html.erb
app/views/traces/_trace.html.erb
app/views/traces/edit.html.erb
app/views/traces/index.html.erb
app/views/traces/show.html.erb
app/views/user_blocks/_block.html.erb
app/views/user_blocks/_blocks.html.erb
app/views/user_blocks/blocks_on.html.erb
app/views/user_blocks/revoke.html.erb
app/views/user_blocks/show.html.erb
app/views/users/_contact.html.erb
app/views/users/_user.html.erb
app/views/users/index.html.erb
config/locales/be.yml
config/locales/ca.yml
config/locales/de.yml
config/locales/es.yml
config/locales/fa.yml
config/locales/fit.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/ia.yml
config/locales/it.yml
config/locales/lb.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/oc.yml
config/locales/pt-PT.yml
config/locales/ru.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/zh-TW.yml
package.json
test/controllers/api/traces_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/controllers/issues_controller_test.rb
test/controllers/traces_controller_test.rb
test/factories/traces.rb
test/gpx/images/.gitkeep [deleted file]
test/gpx/traces/.gitkeep [deleted file]
test/models/trace_test.rb
test/system/issues_test.rb
test/test_helper.rb
yarn.lock

index 77f26d863bf5b41a23ea4ca47540ab36eb21ff7c..1c41c027a68b40d4e79fb07f081cd891ae31a731 100644 (file)
@@ -61,9 +61,6 @@ Rails/SkipsModelValidations:
     - 'db/migrate/*.rb'
     - 'app/controllers/users_controller.rb'
 
-Style/BracesAroundHashParameters:
-  EnforcedStyle: context_dependent
-
 Style/Documentation:
   Enabled: false
 
@@ -76,12 +73,21 @@ Style/IfInsideElse:
 Style/GuardClause:
   Enabled: false
 
+Style/HashEachMethods:
+  Enabled: true
+
 Style/HashSyntax:
   EnforcedStyle: hash_rockets
   Exclude:
     - 'lib/tasks/testing.rake'
     - 'config/initializers/wrap_parameters.rb'
 
+Style/HashTransformKeys:
+  Enabled: true
+
+Style/HashTransformValues:
+  Enabled: true
+
 Style/MixinUsage:
   Exclude:
     - 'bin/setup'
diff --git a/Gemfile b/Gemfile
index 9a3fb1f6b03d3e82b49f74f5cace9443fb335e8e..95144d438f1957f8a1f6f60d039b2ec6a90e4d1f 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -138,7 +138,6 @@ end
 
 # Gems needed for running tests
 group :test do
-  gem "fakefs", :require => "fakefs/safe"
   gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
   gem "rails-controller-testing"
   gem "rubocop"
index 7761ee733e46306c1c07a4ca7b7a7ea2942d00f6..95fdf3569521b7e89bc81930dd2c222a2cddf15e 100644 (file)
@@ -2,7 +2,7 @@ GEM
   remote: https://rubygems.org/
   specs:
     SystemTimer (1.2.3)
-    aasm (5.0.6)
+    aasm (5.0.8)
       concurrent-ruby (~> 1.0)
     actioncable (6.0.2.1)
       actionpack (= 6.0.2.1)
@@ -67,29 +67,29 @@ GEM
       zeitwerk (~> 2.2)
     addressable (2.7.0)
       public_suffix (>= 2.0.2, < 5.0)
-    annotate (3.0.3)
+    annotate (3.1.0)
       activerecord (>= 3.2, < 7.0)
       rake (>= 10.4, < 14.0)
     ast (2.4.0)
     autoprefixer-rails (9.7.4)
       execjs
     aws-eventstream (1.0.3)
-    aws-partitions (1.272.0)
-    aws-sdk-core (3.90.0)
+    aws-partitions (1.281.0)
+    aws-sdk-core (3.91.0)
       aws-eventstream (~> 1.0, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
       jmespath (~> 1.0)
-    aws-sdk-kms (1.29.0)
+    aws-sdk-kms (1.30.0)
       aws-sdk-core (~> 3, >= 3.71.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.60.2)
+    aws-sdk-s3 (1.61.0)
       aws-sdk-core (~> 3, >= 3.83.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.1)
-    aws-sigv4 (1.1.0)
+    aws-sigv4 (1.1.1)
       aws-eventstream (~> 1.0, >= 1.0.2)
-    better_errors (2.5.1)
+    better_errors (2.6.0)
       coderay (>= 1.0.0)
       erubi (>= 1.0.0)
       rack (>= 0.9.0)
@@ -104,13 +104,13 @@ GEM
     bigdecimal (1.1.0)
     binding_of_caller (0.8.0)
       debug_inspector (>= 0.0.1)
-    bootsnap (1.4.5)
+    bootsnap (1.4.6)
       msgpack (~> 1.0)
     bootstrap (4.3.1)
       autoprefixer-rails (>= 9.1.0)
       popper_js (>= 1.14.3, < 2)
       sassc-rails (>= 2.0.0)
-    browser (3.0.3)
+    browser (4.0.0)
     builder (3.2.4)
     bzip2-ffi (1.0.0)
       ffi (~> 1.0)
@@ -152,9 +152,10 @@ GEM
       activerecord (>= 3.0, < 6.1)
       delayed_job (>= 3.0, < 5)
     docile (1.3.2)
-    dry-configurable (0.9.0)
+    dry-configurable (0.11.3)
       concurrent-ruby (~> 1.0)
       dry-core (~> 0.4, >= 0.4.7)
+      dry-equalizer (~> 0.2)
     dry-container (0.7.2)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 0.1, >= 0.1.3)
@@ -167,35 +168,35 @@ GEM
       concurrent-ruby (~> 1.0)
       dry-core (~> 0.2)
       dry-equalizer (~> 0.2)
-    dry-schema (1.4.3)
+    dry-schema (1.5.0)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 0.8, >= 0.8.3)
       dry-core (~> 0.4)
       dry-equalizer (~> 0.2)
       dry-initializer (~> 3.0)
       dry-logic (~> 1.0)
-      dry-types (~> 1.2)
-    dry-types (1.3.0)
+      dry-types (~> 1.4)
+    dry-types (1.4.0)
       concurrent-ruby (~> 1.0)
       dry-container (~> 0.3)
       dry-core (~> 0.4, >= 0.4.4)
       dry-equalizer (~> 0.3)
       dry-inflector (~> 0.1, >= 0.1.2)
       dry-logic (~> 1.0, >= 1.0.2)
-    dry-validation (1.4.2)
+    dry-validation (1.5.0)
       concurrent-ruby (~> 1.0)
       dry-container (~> 0.7, >= 0.7.1)
       dry-core (~> 0.4)
       dry-equalizer (~> 0.2)
       dry-initializer (~> 3.0)
-      dry-schema (~> 1.4, >= 1.4.3)
+      dry-schema (~> 1.5)
     dynamic_form (1.1.4)
-    erb_lint (0.0.31)
+    erb_lint (0.0.30)
       activesupport
       better_html (~> 1.0.7)
       html_tokenizer
       rainbow
-      rubocop (~> 0.79.0)
+      rubocop (~> 0.51)
       smart_properties
     erubi (1.9.0)
     execjs (2.7.0)
@@ -205,7 +206,6 @@ GEM
     factory_bot_rails (5.1.1)
       factory_bot (~> 5.1.0)
       railties (>= 4.2.0)
-    fakefs (1.0.0)
     faraday (1.0.0)
       multipart-post (>= 1.2, < 3)
     ffi (1.12.2)
@@ -216,14 +216,14 @@ GEM
       ffi (>= 1.0.0)
     globalid (0.4.2)
       activesupport (>= 4.2.0)
-    hashdiff (1.0.0)
-    hashie (3.6.0)
+    hashdiff (1.0.1)
+    hashie (4.1.0)
     html_tokenizer (0.0.7)
     htmlentities (4.3.4)
     http_accept_language (2.0.5)
     i18n (0.9.5)
       concurrent-ruby (~> 1.0)
-    i18n-js (3.5.1)
+    i18n-js (3.6.0)
       i18n (>= 0.6.6)
     image_optim (0.26.5)
       exifr (~> 1.2, >= 1.2.2)
@@ -277,7 +277,7 @@ GEM
     multi_xml (0.6.0)
     multipart-post (2.1.1)
     nio4r (2.5.2)
-    nokogiri (1.10.8)
+    nokogiri (1.10.9)
       mini_portile2 (~> 2.4.0)
     nokogumbo (2.0.2)
       nokogiri (~> 1.8, >= 1.8.4)
@@ -293,8 +293,8 @@ GEM
       multi_json (~> 1.3)
       multi_xml (~> 0.5)
       rack (>= 1.2, < 3)
-    omniauth (1.9.0)
-      hashie (>= 3.4.6, < 3.7.0)
+    omniauth (1.9.1)
+      hashie (>= 3.4.6)
       rack (>= 1.6.2, < 3)
     omniauth-facebook (6.0.0)
       omniauth-oauth2 (~> 1.2)
@@ -322,7 +322,7 @@ GEM
       omniauth-oauth2 (~> 1.4)
     openstreetmap-deadlock_retry (1.3.0)
     parallel (1.19.1)
-    parser (2.7.0.2)
+    parser (2.7.0.4)
       ast (~> 2.4.0)
     pg (1.2.2)
     poltergeist (1.18.1)
@@ -333,7 +333,7 @@ GEM
     progress (3.5.2)
     psych (3.1.0)
     public_suffix (4.0.3)
-    puma (3.12.2)
+    puma (3.12.4)
     quad_tile (1.0.1)
     r2 (0.2.7)
     rack (2.2.2)
@@ -383,17 +383,19 @@ GEM
     rb-fsevent (0.10.3)
     rb-inotify (0.10.1)
       ffi (~> 1.0)
-    regexp_parser (1.6.0)
+    regexp_parser (1.7.0)
     request_store (1.5.0)
       rack (>= 1.4)
+    rexml (3.2.4)
     rinku (2.0.6)
     rotp (5.1.0)
       addressable (~> 2.5)
-    rubocop (0.79.0)
+    rubocop (0.80.1)
       jaro_winkler (~> 1.5.1)
       parallel (~> 1.10)
       parser (>= 2.7.0.1)
       rainbow (>= 2.2.2, < 4.0)
+      rexml
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 1.4.0, < 1.7)
     rubocop-performance (1.5.2)
@@ -452,7 +454,7 @@ GEM
     validates_email_format_of (1.6.3)
       i18n
     vendorer (0.2.0)
-    webmock (3.8.2)
+    webmock (3.8.3)
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
@@ -461,7 +463,7 @@ GEM
     websocket-extensions (0.1.4)
     xpath (3.2.0)
       nokogiri (~> 1.8)
-    zeitwerk (2.2.2)
+    zeitwerk (2.3.0)
 
 PLATFORMS
   ruby
@@ -493,7 +495,6 @@ DEPENDENCIES
   dynamic_form
   erb_lint
   factory_bot_rails
-  fakefs
   faraday
   ffi-libarchive
   gd2-ffij (>= 0.4.0)
index 80fb68444f6469ee4e41e03d2f09654a337dfe12..ddb454c13155e770bc4110e8b028d3a054fe13dd 100644 (file)
@@ -40,12 +40,14 @@ OSM.History = function (map) {
   };
 
   function highlightChangeset(id) {
-    group.getLayer(id).setStyle({ fillOpacity: 0.3, color: "#FF6600", weight: 3 });
+    var layer = group.getLayer(id);
+    if (layer) layer.setStyle({ fillOpacity: 0.3, color: "#FF6600", weight: 3 });
     $("#changeset_" + id).addClass("selected");
   }
 
   function unHighlightChangeset(id) {
-    group.getLayer(id).setStyle({ fillOpacity: 0, color: "#FF9500", weight: 2 });
+    var layer = group.getLayer(id);
+    if (layer) layer.setStyle({ fillOpacity: 0, color: "#FF9500", weight: 2 });
     $("#changeset_" + id).removeClass("selected");
   }
 
diff --git a/app/assets/stylesheets/_bootstrap-custom.scss b/app/assets/stylesheets/_bootstrap-custom.scss
deleted file mode 100644 (file)
index d3072d2..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap v4.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2019 The Bootstrap Authors
- * Copyright 2011-2019 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-@import "bootstrap/functions";
-@import "bootstrap/variables";
-@import "bootstrap/mixins";
-@import "bootstrap/root";
-@import "bootstrap/reboot";
-@import "bootstrap/type";
-// @import "bootstrap/images";
-// @import "bootstrap/code";
-@import "bootstrap/grid";
-// @import "bootstrap/tables";
-// @import "bootstrap/forms";
-@import "bootstrap/buttons";
-// @import "bootstrap/transitions";
-@import "bootstrap/dropdown";
-@import "bootstrap/button-group";
-// @import "bootstrap/input-group";
-// @import "bootstrap/custom-forms";
-@import "bootstrap/nav";
-@import "bootstrap/navbar";
-@import "bootstrap/card";
-// @import "bootstrap/breadcrumb";
-// @import "bootstrap/pagination";
-@import "bootstrap/badge";
-// @import "bootstrap/jumbotron";
-@import "bootstrap/alert";
-// @import "bootstrap/progress";
-// @import "bootstrap/media";
-@import "bootstrap/list-group";
-// @import "bootstrap/close";
-// @import "bootstrap/toasts";
-// @import "bootstrap/modal";
-@import "bootstrap/tooltip";
-// @import "bootstrap/popover";
-// @import "bootstrap/carousel";
-// @import "bootstrap/spinners";
-@import "bootstrap/utilities";
-// @import "bootstrap/print";
index d3382eb3f24559a3466c85eca1f0d9cbb2f9342c..9b6b69db797673f2cdd1a338d7c95e32d01fe9a8 100644 (file)
@@ -1,5 +1,5 @@
 @import "parameters";
-@import "bootstrap-custom";
+@import "bootstrap";
 
 /* Styles common to large and small screens */
 
@@ -773,6 +773,7 @@ header .search_forms,
 
   input[type=text].overflow {
     border-right: none;
+    border-radius: 3px 0px 0px 3px;
   }
 
   input:focus {
@@ -2047,16 +2048,11 @@ a.button {
   }
 }
 
-/* Rules for doing distinct colour of alternate table rows */
+/* Customise the background colour of striped tables */
 
-.table0,
-.item0 {
-  background: $offwhite;
-}
-
-.table1,
-.item1 {
-  background: #fff;
+.table-striped > tbody > tr:nth-child(2n+1) > td,
+.table-striped > tbody > tr:nth-child(2n+1) > th {
+   background-color: $offwhite;
 }
 
 /* Rules for OpenID logo */
index 113554c72fb38ad590fcbfcf869ce8d7a20f4747..1b5150537bccb8299a990d4e0c47b20598a7df53 100644 (file)
@@ -5,7 +5,7 @@ module Api
     before_action :check_api_readable
     around_action :api_call_handle_error, :api_call_timeout
 
-    before_action :set_default_request_format
+    before_action :set_request_formats
 
     # This is probably the most common call of all. It is used for getting the
     # OSM data for a specified bounding box, usually for editing. First the
index 336aebc915793f05f4f7429214cb6ba74b169eb5..9204d96c0250c1901e0c031de81b6df25c6b9971 100644 (file)
@@ -13,7 +13,7 @@ module Api
     before_action :check_api_readable, :except => [:create, :update, :delete]
     around_action :api_call_handle_error, :api_call_timeout
 
-    before_action :set_default_request_format, :except => [:create, :update, :delete]
+    before_action :set_request_formats, :except => [:create, :update, :delete]
 
     # Create a node from XML.
     def create
index f672e7c4960d9c66c1d0e94c9dd2eac272c53a0e..f8e42476f878c11aaa6aac42f81b5f5ddf7d5536 100644 (file)
@@ -16,7 +16,7 @@ module Api
     before_action :lookup_old_element, :except => [:history]
     before_action :lookup_old_element_versions, :only => [:history]
 
-    before_action :set_default_request_format, :except => [:redact]
+    before_action :set_request_formats, :except => [:redact]
 
     def history
       # the .where() method used in the lookup_old_element_versions
index 329c5e29c7fa7adfc504da3ab7efcd719701adc7..28e4a026bc47a820a5eb40faa7aa1c221e6364f6 100644 (file)
@@ -11,7 +11,7 @@ module Api
     before_action :check_api_readable, :except => [:create, :update, :delete]
     around_action :api_call_handle_error, :api_call_timeout
 
-    before_action :set_default_request_format, :except => [:create, :update, :delete]
+    before_action :set_request_formats, :except => [:create, :update, :delete]
 
     def create
       assert_method :put
index a7c876710ce4c8eafbbab30566d63f42a71a48ca..3b58f208b14e729a696a0f7e2e0ba0cd6ada631e 100644 (file)
@@ -11,7 +11,7 @@ module Api
     before_action :check_api_readable, :except => [:create, :update, :delete]
     around_action :api_call_handle_error, :api_call_timeout
 
-    before_action :set_default_request_format, :except => [:create, :update, :delete]
+    before_action :set_request_formats, :except => [:create, :update, :delete]
 
     def create
       assert_method :put
index 64514a4321f8ff3523621fae28b2830f6f3fa6e5..478810dfc21d40448410662adf82179a2e0d60be 100644 (file)
@@ -4,52 +4,45 @@ class ApiController < ApplicationController
   private
 
   ##
-  # Set default request format to xml unless a client requests a specific format,
-  # which can be done via (a) URL suffix and/or (b) HTTP Accept header, where
-  # the URL suffix always takes precedence over the Accept header.
-  def set_default_request_format
+  # Set allowed request formats if no explicit format has been
+  # requested via a URL suffix. Allowed formats are taken from
+  # any HTTP Accept header with XML as the default.
+  def set_request_formats
     unless params[:format]
       accept_header = request.headers["HTTP_ACCEPT"]
-      if accept_header.nil?
-        # e.g. unit tests don't set an Accept: header by default, force XML in this case
-        request.format = "xml"
-        return
-      end
-
-      req_mimetypes = []
-
-      # Some clients (JOSM) send Accept headers which cannot be parsed by Rails, example: *; q=.2
-      # To be fair, JOSM's Accept header doesn't adhere to RFC 7231, section 5.3.1, et al. either
-      # As a workaround for backwards compatibility, we're assuming XML format
-      begin
-        req_mimetypes = Mime::Type.parse(accept_header)
-      rescue Mime::Type::InvalidMimeType
-        request.format = "xml"
-        return
-      end
-
-      # req_mimetypes contains all Accept header MIME types with descending priority
-      req_mimetypes.each do |mime|
-        if mime.symbol == :xml
-          request.format = "xml"
-          break
-        end
-
-        if mime.symbol == :json
-          request.format = "json"
-          break
-        end
 
-        # Any format, not explicitly requesting XML or JSON -> assume XML as default
-        if mime == "*/*"
-          request.format = "xml"
-          break
+      if accept_header
+        # Some clients (such asJOSM) send Accept headers which cannot be
+        # parse by Rails, for example:
+        #
+        #   Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
+        #
+        # where both "*" and ".2" as a quality do not adhere to the syntax
+        # described in RFC 7231, section 5.3.1, etc.
+        #
+        # As a workaround, and for back compatibility, default to XML format.
+        mimetypes = begin
+                      Mime::Type.parse(accept_header)
+                    rescue Mime::Type::InvalidMimeType
+                      Array(Mime[:xml])
+                    end
+
+        # Allow XML and JSON formats, and treat an all formats wildcard
+        # as XML for backwards compatibility - all other formats are discarded
+        # which will result in a 406 Not Acceptable response being sent
+        formats = mimetypes.map do |mime|
+          if mime.symbol == :xml then :xml
+          elsif mime.symbol == :json then :json
+          elsif mime == "*/*" then :xml
+          end
         end
-
-        # In case the client requests some other format besides XML, JSON and */*,
-        # we deliberately don't set request.format. The framework will return an
-        # ActionController::UnknownFormat error to the client later on in this case.
+      else
+        # Default to XML if no accept header was sent - this includes
+        # the unit tests which don't set one by default
+        formats = Array(:xml)
       end
+
+      request.formats = formats.compact
     end
   end
 
index 61f466f626a0ef94e27fc908e0b670d0f6aaac82..d136e7230a4b7baf3ccd6eebfda383843598fdc2 100644 (file)
@@ -80,6 +80,8 @@ class IssuesController < ApplicationController
   private
 
   def find_issue
-    @issue = Issue.find(params[:id])
+    @issue = Issue.visible_to(current_user).find(params[:id])
+  rescue ActiveRecord::RecordNotFound
+    head :not_found
   end
 end
index 1c8f1c5da4293105c06200e2b29647b8395a7d05..669e0fe6dee4358452740c2540c041080d4cb0c7 100644 (file)
@@ -1,6 +1,6 @@
 <h4>
   <% if common_details.changeset.tags['comment'].present? %>
-    <%= linkify(h(common_details.changeset.tags["comment"])) %>
+    <%= linkify(common_details.changeset.tags["comment"]) %>
   <% else %>
     <%= t "browse.no_comment" %>
   <% end %>
@@ -15,7 +15,7 @@
 
 <div class="details">
   <%= t "browse.version" %>
-  #<%= h(common_details.version) %>
+  #<%= common_details.version %>
   &middot;
   <%= t "browse.in_changeset" %>
   #<%= link_to common_details.changeset_id, :action => :changeset, :id => common_details.changeset_id %>
index ba05c1fe427471e805464e210fe4719df3921746..06220a97ddb9267b471e2aaea31a86273b0a5463 100644 (file)
@@ -1,7 +1,7 @@
-<li><%= linked_name = link_to h(printable_name(containing_relation.relation)), :action => "relation", :id => containing_relation.relation.id.to_s
+<li><%= linked_name = link_to printable_name(containing_relation.relation), :action => "relation", :id => containing_relation.relation.id.to_s
         if containing_relation.member_role.blank?
           t ".entry_html", :relation_name => linked_name
         else
-          t ".entry_role_html", :relation_name => linked_name, :relation_role => h(containing_relation.member_role)
+          t ".entry_role_html", :relation_name => linked_name, :relation_role => containing_relation.member_role
         end %>
 </li>
index fe0f363574e0e0904023d4bc1c91f08aa617b16d..51b2bb3e6dd05cc288f38c1cda03a64a029a4c4a 100644 (file)
@@ -5,6 +5,6 @@
   <%= if relation_member.member_role.blank?
         t ".entry_html", :type => type_str, :name => linked_name
       else
-        t ".entry_role_html", :type => type_str, :name => linked_name, :role => h(relation_member.member_role)
+        t ".entry_role_html", :type => type_str, :name => linked_name, :role => relation_member.member_role
       end %>
 </li>
index 9b68a03e79b46af71c6af4c825d908a10e0b043a..3c41dd83fefd32a482b43e07568e6cdcdb4ce286 100644 (file)
@@ -6,7 +6,7 @@
 </h2>
 
 <div class="browse-section">
-  <h6><%= linkify(h(@changeset.tags["comment"].to_s.presence || t("browse.no_comment"))) %></h6>
+  <h6><%= linkify(@changeset.tags["comment"].to_s.presence || t("browse.no_comment")) %></h6>
   <div class="details"><%= changeset_details(@changeset) %></div>
 
   <%= render :partial => "tag_details", :object => @changeset.tags.except("comment") %>
@@ -38,7 +38,7 @@
                   <%= t(".commented_by",
                         :when => friendly_date_ago(comment.created_at),
                         :exact_time => l(comment.created_at),
-                        :user => link_to(h(comment.author.display_name), user_path(comment.author))).html_safe %>
+                        :user => link_to(comment.author.display_name, user_path(comment.author))).html_safe %>
                   <% if current_user and current_user.moderator? %>
                     — <span class="action-button deemphasize" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_hide_url(comment.id) %>"><%= t("javascripts.changesets.show.hide_comment") %></span>
                   <% end %>
@@ -51,7 +51,7 @@
                   <%= t(".hidden_commented_by",
                         :when => friendly_date_ago(comment.created_at),
                         :exact_time => l(comment.created_at),
-                        :user => link_to(h(comment.author.display_name), user_path(comment.author))).html_safe %>
+                        :user => link_to(comment.author.display_name, user_path(comment.author))).html_safe %>
                   — <span class="action-button deemphasize" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_unhide_url(comment.id) %>"><%= t("javascripts.changesets.show.unhide_comment") %></span>
                  </small>
                 <%= comment.body.to_html %>
index b1fbd6992aa14c3ddd4d2e9c65a7c9bc9621093f..2bbae2cc277a9cd4d1172319351e4261de8065ed 100644 (file)
@@ -24,9 +24,9 @@ atom_feed(:language => I18n.locale, :schema_date => 2009,
                  :type => "application/osmChange+xml"
 
       if !changeset.tags.empty? && changeset.tags.key?("comment")
-        entry.title t("browse.changeset.feed.title_comment", :id => h(changeset.id), :comment => h(changeset.tags["comment"])), :type => "html"
+        entry.title t("browse.changeset.feed.title_comment", :id => changeset.id, :comment => changeset.tags["comment"]), :type => "html"
       else
-        entry.title t("browse.changeset.feed.title", :id => h(changeset.id))
+        entry.title t("browse.changeset.feed.title", :id => changeset.id)
       end
 
       if changeset.user.data_public?
@@ -51,7 +51,7 @@ atom_feed(:language => I18n.locale, :schema_date => 2009,
             table.tr do |tr|
               tr.th t("browse.changeset.belongs_to")
               tr.td do |td|
-                td.a h(changeset.user.display_name), :href => user_url(changeset.user, :only_path => false)
+                td.a changeset.user.display_name, :href => user_url(changeset.user, :only_path => false)
               end
             end
           end
@@ -62,7 +62,7 @@ atom_feed(:language => I18n.locale, :schema_date => 2009,
                 td.table :cellpadding => "0" do |tag_table|
                   changeset.tags.sort.each do |tag|
                     tag_table.tr do |tag_tr|
-                      tag_tr.td << "#{h(tag[0])} = #{linkify(h(tag[1]))}"
+                      tag_tr.td << "#{tag[0]} = #{linkify(tag[1])}"
                     end
                   end
                 end
index 3893072adc11cfb58f73d0dbdd3f353f7c5b0b16..db48478263968d0103adc44727c3706bdfabe036 100644 (file)
@@ -1,6 +1,6 @@
 <div class="clearfix diary-comment<%= " deemphasize" unless diary_comment.visible? %>">
   <%= user_thumbnail diary_comment.user %>
-  <p class="deemphasize comment-heading" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to h(diary_comment.user.display_name), user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
+  <p class="deemphasize comment-heading" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
     <% if current_user and diary_comment.user.id != current_user.id %>
       | <%= report_link(t(".report"), diary_comment) %>
     <% end %>
index 5508817a81e47bf4868ba487fe24a64c958de66a..b0c464718011160ada4c5990be1faf64e3849f2d 100644 (file)
@@ -4,10 +4,10 @@
       <%= user_thumbnail diary_entry.user %>
     <% end %>
 
-    <h2><%= link_to h(diary_entry.title), diary_entry_path(diary_entry.user, diary_entry) %></h2>
+    <h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
 
     <small class='deemphasize'>
-      <%= t(".posted_by_html", :link_user => (link_to h(diary_entry.user.display_name), user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
+      <%= t(".posted_by_html", :link_user => (link_to diary_entry.user.display_name, user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
     </small>
 
   </div>
index 00045efc08f992058930b2d18417c29fcc232b16..ec8c3dfda8e7535ac419171d0910171bd96abd51 100644 (file)
@@ -2,7 +2,7 @@
   <h1><%= t(".has_commented_on", :display_name => @user.display_name) %></h1>
 <% end %>
 
-<table class="messages" width="100%">
+<table class="table table-striped" width="100%">
   <thead>
     <tr>
       <th width="25%"><%= t ".post" %></th>
@@ -11,8 +11,7 @@
     </tr>
   </thead>
   <% @comments.each do |comment| -%>
-  <% cl = cycle("table0", "table1") %>
-  <tr class="<%= cl %><%= " deemphasize" unless comment.visible? %>">
+  <tr class="<%= "deemphasize" unless comment.visible? %>">
     <td width="25%"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
     <td width="25%"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :'datetime.distance_in_words_ago') %></span></td>
     <td width="50%" class="richtext"><%= comment.body.to_html %></td>
index a599aea177468c9122af638012788f22c3260394..32a4e1e0fb7154f32f2f8b8d0789f84e122a8968 100644 (file)
@@ -3,7 +3,7 @@
     <% if @user %>
       <%= user_image @user %>
     <% end %>
-    <h1><%= h(@title) %></h1>
+    <h1><%= @title %></h1>
 
     <ul class='secondary-actions clearfix'>
       <% unless params[:friends] or params[:nearby] -%>
index 057a8980a5315318add12b7224f1dd2428e4c008..3b732f7befd415552bf9fabbeac2ef44b4861646 100644 (file)
@@ -1,6 +1,6 @@
 <tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" unless message_summary.message_read? %>">
-  <td class="inbox-sender"><%= link_to h(message_summary.sender.display_name), user_path(message_summary.sender) %></td>
-  <td class="inbox-subject"><%= link_to h(message_summary.title), message_path(message_summary) %></td>
+  <td class="inbox-sender"><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
+  <td class="inbox-subject"><%= link_to message_summary.title, message_path(message_summary) %></td>
   <td class="inbox-sent"><%= l message_summary.sent_on, :format => :friendly %></td>
   <td class="inbox-mark-unread"><%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true %></td>
   <td class="inbox-mark-read"><%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true %></td>
index d3f3227e5c19f26ede099826618daa461540b3b2..ba18ca875c018c9d271ff474f7d9711c24db8eda 100644 (file)
@@ -1,6 +1,6 @@
 <tr class="inbox-row">
-  <td class="inbox-sender"><%= link_to h(sent_message_summary.recipient.display_name), user_path(sent_message_summary.recipient) %></td>
-  <td class="inbox-subject"><%= link_to h(sent_message_summary.title), message_path(sent_message_summary) %></td>
+  <td class="inbox-sender"><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
+  <td class="inbox-subject"><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
   <td class="inbox-sent"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
   <td class="inbox-destroy"><%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true %></td>
 </tr>
index ea4f5e40df5e2f0473cf4cdc49ba7c9f41b3ca35..7cf674fefd678b4ed21792b0e1e9f2ac8f479ff1 100644 (file)
@@ -1,11 +1,11 @@
 <% if current_user == @message.recipient %>
   <% content_for :heading do %>
-    <h2><%= h(@message.title) %></h2>
+    <h2><%= @message.title %></h2>
   <% end %>
 
   <div class='info-line clearfix'>
     <%= user_thumbnail_tiny @message.sender %>
-    <%= link_to h(@message.sender.display_name), user_path(@message.sender) %></td>
+    <%= link_to @message.sender.display_name, user_path(@message.sender) %></td>
     <div class='right'>
       <%= l @message.sent_on, :format => :friendly %>
     </div>
 
 <% else %>
 
-  <h2><%= h(@message.title) %></h2>
+  <h2><%= @message.title %></h2>
 
   <div class='info-line clearfix'>
     <%= user_thumbnail_tiny @message.recipient %>
-    <%= link_to h(@message.recipient.display_name), user_path(@message.recipient) %></td>
+    <%= link_to @message.recipient.display_name, user_path(@message.recipient) %></td>
     <div class='right'>
       <%= l @message.sent_on, :format => :friendly %>
     </div>
index 47860d50d4284dfeedf1b7f825beea665f3a9dfb..8c662ef8750b4b3c3865d3b32d9fdb794157faef 100644 (file)
@@ -1,6 +1,5 @@
 <tr>
-  <% cl = cycle("table0", "table1") %>
-  <td class="<%= cl %>">
+  <td>
     <% if Settings.status != "gpx_offline" %>
       <% if trace.inserted %>
         <a href="<%= url_for :controller => "traces", :action => "show", :id => trace.id, :display_name => trace.user.display_name %>"><img src="<%= url_for :controller => "traces", :action => "icon", :id => trace.id, :display_name => trace.user.display_name %>" border="0" alt="" /></a>
@@ -9,7 +8,7 @@
       <% end %>
     <% end %>
   </td>
-  <td class="<%= cl %>"><%= link_to trace.name, :controller => "traces", :action => "show", :display_name => trace.user.display_name, :id => trace.id %>
+  <td><%= link_to trace.name, :controller => "traces", :action => "show", :display_name => trace.user.display_name, :id => trace.id %>
     <span class="trace_summary" title="<%= trace.timestamp %>"> ...
       <% if trace.inserted %>
         (<%= t ".count_points", :count => trace.size %>)
@@ -27,7 +26,7 @@
       <br />
       <%= trace.description %>
     <br />
-    <%= t ".by" %> <%= link_to h(trace.user.display_name), user_path(trace.user) %>
+    <%= t ".by" %> <%= link_to trace.user.display_name, user_path(trace.user) %>
     <% if !trace.tags.empty? %>
       <%= t ".in" %>
       <%= safe_join(trace.tags.collect { |tag| link_to_tag tag.tag }, ", ") %>
index 6583e32f1f5cdc2aeec545858a3d4459abecb37d..e3771bac0b225d3390860c3ae5593cb6960d778c 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h2><%= t ".heading", :name => h(@trace.name) %></h2>
+  <h2><%= t ".heading", :name => @trace.name %></h2>
 <% end %>
 
 <img src="<%= url_for :controller => "traces", :action => "picture", :id => @trace.id, :display_name => @trace.user.display_name %>">
@@ -32,7 +32,7 @@
   <% end %>
     <div class='standard-form-row'>
       <label class='standard-label'><%= t ".owner" %></label>
-      <p class='deemphasize'><%= link_to h(@trace.user.display_name), user_path(@trace.user) %></p>
+      <p class='deemphasize'><%= link_to @trace.user.display_name, user_path(@trace.user) %></p>
     </div>
     <div class='standard-form-row'>
       <label class='standard-label'><%= t ".description" %></label>
index fff62ba551ee00d61f31164ebbdad3148edefa9e..86ac37f00fe44040982e090fff994d1b2c281a0b 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h1><%= h(@title) %></h1>
+  <h1><%= @title %></h1>
   <ul class='secondary-actions clearfix'>
     <li><%= t(".description") %></li>
     <li><%= rss_link_to :action => "georss", :display_name => @display_name, :tag => @tag %></li>
@@ -25,7 +25,7 @@
 <% if @traces.size > 0 %>
   <%= render :partial => "trace_paging_nav" %>
 
-  <table id="trace_list" cellpadding="3">
+  <table id="trace_list" class="table table-borderless table-striped">
     <thead>
       <tr>
         <th></th>
index e049797a864127ea8a0a164613fba02c4e0f7980..e652453695b30a8942b5df14fd3420b110db9260 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h2><%= t ".heading", :name => h(@trace.name) %></h2>
+  <h2><%= t ".heading", :name => @trace.name %></h2>
 <% end %>
 
 <% if Settings.status != "gpx_offline" %>
   <% end %>
   <tr>
     <td><%= t ".owner" %></td>
-    <td><%= link_to h(@trace.user.display_name), user_path(@trace.user) %></td>
+    <td><%= link_to @trace.user.display_name, user_path(@trace.user) %></td>
   </tr>
   <tr>
     <td><%= t ".description" %></td>
-    <td><%= h(@trace.description) %></td>
+    <td><%= @trace.description %></td>
   </tr>
   <tr>
     <td><%= t ".tags" %></td>
index ec04c79b7e897f04c337113070f0d8471d3e6259..b309e9e119bd661b023b05fc2a5d537739b91dd7 100644 (file)
@@ -1,24 +1,22 @@
 <tr>
-  <% c1 = cycle("table0", "table1") %>
-
   <% if show_user_name %>
-  <td class="<%= c1 %>"><%= link_to h(block.user.display_name), user_path(block.user) %></td>
+  <td><%= link_to block.user.display_name, user_path(block.user) %></td>
   <% end %>
   <% if show_creator_name %>
-  <td class="<%= c1 %>"><%= link_to h(block.creator.display_name), user_path(block.creator) %></td>
+  <td><%= link_to block.creator.display_name, user_path(block.creator) %></td>
   <% end %>
-  <td class="<%= c1 %>"><%= h truncate(block.reason) %></td>
-  <td class="<%= c1 %>"><%= h block_status(block) %></td>
-  <td class="<%= c1 %>">
+  <td><%= h truncate(block.reason) %></td>
+  <td><%= h block_status(block) %></td>
+  <td>
     <% if block.revoker_id.nil? %>
       <%= t(".not_revoked") %>
     <% else %>
-      <%= link_to h(block.revoker.display_name), user_path(block.revoker) %>
+      <%= link_to block.revoker.display_name, user_path(block.revoker) %>
     <% end %>
   </td>
-  <td class="<%= c1 %>"><%= link_to t(".show"), block %></td>
-  <td class="<%= c1 %>"><% if current_user and current_user.id == block.creator_id and block.active? %><%= link_to t(".edit"), edit_user_block_path(block) %><% end %></td>
+  <td><%= link_to t(".show"), block %></td>
+  <td><% if current_user and current_user.id == block.creator_id and block.active? %><%= link_to t(".edit"), edit_user_block_path(block) %><% end %></td>
   <% if show_revoke_link %>
-  <td class="<%= c1 %>"><% if block.active? %><%= link_to t(".revoke"), :controller => "user_blocks", :action => "revoke", :id => block.id %><% end %></td>
+  <td><% if block.active? %><%= link_to t(".revoke"), :controller => "user_blocks", :action => "revoke", :id => block.id %><% end %></td>
   <% end %>
 </tr>
index 03ee7ae8e0163f61b1374b602c02a3dd373e080b..8955852c1a818f2219194ad05869a0702aad9e38 100644 (file)
@@ -1,4 +1,4 @@
-<table id="block_list" cellpadding="3">
+<table id="block_list" class="table table-borderless table-striped table-sm">
   <thead>
     <tr>
       <% if show_user_name %>
index 3275c003cef889d2aff8a09265ce78b91d94ec32..e82711a4ee3292a92bf2bc464966e703094e09f2 100644 (file)
@@ -5,5 +5,5 @@
 <% unless @user_blocks.empty? %>
 <%= render :partial => "blocks", :locals => { :show_revoke_link => can?(:revoke, UserBlock), :show_user_name => false, :show_creator_name => true } %>
 <% else %>
-<p><%= t ".empty", :name => h(@user.display_name) %></p>
+<p><%= t ".empty", :name => @user.display_name %></p>
 <% end %>
index df48747dd2bff4e9a452191b2a7a6ea048c6aad6..ce14bf0d2df08b67d8dacf94c4c08640a3d4677b 100644 (file)
@@ -1,6 +1,6 @@
 <% @title = t(".title",
-              :block_on => h(@user_block.user.display_name),
-              :block_by => h(@user_block.creator.display_name)) %>
+              :block_on => @user_block.user.display_name,
+              :block_by => @user_block.creator.display_name) %>
 
 <% content_for :heading do %>
   <h1><%= t(".heading_html",
index 6bfb412efce4813a17642f0f245acbac43e39a08..69207d4e47e453a2ad08db84302b35d306475c45 100644 (file)
@@ -24,7 +24,7 @@
 <% if @user_block.revoker %>
 <p>
   <b><%= t ".revoker" %></b>
-  <%= link_to h(@user_block.revoker.display_name), user_path(@user_block.revoker) %>
+  <%= link_to @user_block.revoker.display_name, user_path(@user_block.revoker) %>
 </p>
 <% end %>
 
index 1479a1e4fbbd652e4f64021efed01a1f1bf963b4..8379bcd07a22c17391d485c7324855c830706127 100644 (file)
@@ -8,7 +8,7 @@
   <%= user_thumbnail contact %>
   <div class='activity-details'>
     <p class='deemphasize'>
-      <%= link_to h(contact.display_name), user_path(contact) %>
+      <%= link_to contact.display_name, user_path(contact) %>
       <% if @user.home_lon and @user.home_lat and contact.home_lon and contact.home_lat %>
         <% distance = @user.distance(contact) %>
         <% if distance < 1 %>
index c8fd4ac9e8718a7e9a265f58c99708c6b05904b5..399ef8dcd89843d0c7603152b6b8ec99a5b95947 100644 (file)
@@ -1,6 +1,4 @@
-<% cl = cycle("table0", "table1") %>
-
-<tr class="<%= cl %>">
+<tr>
   <td>
     <%= user_thumbnail(user) %>
   </td>
@@ -8,12 +6,12 @@
     <p>
       <% if user.creation_ip %>
         <%= t "users.index.summary_html",
-              :name => link_to(h(user.display_name), user_path(user)),
+              :name => link_to(user.display_name, user_path(user)),
               :ip_address => link_to(user.creation_ip, :ip => user.creation_ip),
               :date => l(user.creation_time, :format => :friendly) %>
       <% else %>
         <%= t "users.index.summary_no_ip_html",
-              :name => link_to(h(user.display_name), user_path(user)),
+              :name => link_to(user.display_name, user_path(user)),
               :date => l(user.creation_time, :format => :friendly) %>
       <% end %>
     </p>
index 01b7c60aa11bbbae82a013d8f7ae1a63c4b30fb6..cc71702222121efcdde10c9b3f88656baabd1532 100644 (file)
@@ -13,7 +13,7 @@
     <%= hidden_field_tag :status, params[:status] if params[:status] %>
     <%= hidden_field_tag :ip, params[:ip] if params[:ip] %>
     <%= hidden_field_tag :page, params[:page] if params[:page] %>
-    <table id="user_list">
+    <table id="user_list" class="table table-borderless table-striped">
       <thead>
         <tr>
           <td colspan="2">
index 00cf7dd2a5637f108f2094280b9b3de0ecee792e..74b7662fe740690cd064b3975608256a9548dd09 100644 (file)
@@ -8,6 +8,7 @@
 # Author: Jhnrvr
 # Author: Jim-by
 # Author: Macofe
+# Author: Maksim L.
 # Author: Mechanizatar
 # Author: Unomano
 # Author: Дзяніс Тутэйшы
@@ -192,13 +193,13 @@ be:
     notes:
       comment:
         opened_at_html: Створана %{when}
-        opened_at_by_html: Створана %{when} карыстальнікам %{user}
+        opened_at_by_html: Створана %{when} удзельнікам %{user}
         commented_at_html: Абноўлена %{when}
-        commented_at_by_html: Абноўлена %{when} карыстальнікам %{user}
+        commented_at_by_html: Абноўлена %{when} удзельнікам %{user}
         closed_at_html: Вырашана %{when}
-        closed_at_by_html: Вырашаны %{when} карыстальнікам %{user}
+        closed_at_by_html: Вырашаны %{when} удзельнікам %{user}
         reopened_at_html: Пераадкрыта %{when}
-        reopened_at_by_html: Пераадкрыта %{when} карыстальнікам %{user}
+        reopened_at_by_html: Пераадкрыта %{when} удзельнікам %{user}
       rss:
         title: Заўвагі OpenStreetMap
         description_area: Спіс заўваг створаных, пракаментаваных ці вырашаных у вашым
@@ -326,11 +327,11 @@ be:
       commented_by: Каментарый ад %{user} <abbr title='%{exact_time}'>%{when} </abbr>
       commented_by_anonymous: Ананімны каментарый <abbr title='%{exact_time}'>%{when}
         </abbr>
-      closed_by: Вырашана карыстальнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
-      closed_by_anonymous: Вырашана ананімным карыстальнікам <abbr title='%{exact_time}'>%{when}</abbr>
-      reopened_by: Паўторна актывавана карыстальнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
-      reopened_by_anonymous: Пераадкрыта ананімным карыстальнікам <abbr title='%{exact_time}'>%{when}</abbr>
-      hidden_by: Схавана карыстальнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      closed_by: Вырашана ўдзельнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      closed_by_anonymous: Вырашана ананімным удзельнікам <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by: Паўторна актывавана ўдзельнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by_anonymous: Пераадкрыта ананімным удзельнікам <abbr title='%{exact_time}'>%{when}</abbr>
+      hidden_by: Схавана ўдзельнікам %{user} <abbr title='%{exact_time}'>%{when}</abbr>
       report: Паскардзіцца на гэтую заўвагу
     query:
       title: Пошук аб’ектаў
@@ -369,7 +370,7 @@ be:
   changeset_comments:
     comment:
       comment: Новы каментар на пакет правак %{changeset_id} ад %{author}
-      commented_at_by_html: Абноўлена %{when} карыстальнікам %{user}
+      commented_at_by_html: Абноўлена %{when} удзельнікам %{user}
     comments:
       comment: Новы каментар на пакет правак %{changeset_id} ад %{author}
     index:
@@ -1067,7 +1068,7 @@ be:
       reports: Скаргі
       last_updated: Апошняе змяненне
       last_updated_time_html: <abbr title='%{title}'>%{time}</abbr>
-      last_updated_time_user_html: <abbr title='%{title}'>%{time}</abbr> карыстальнікам
+      last_updated_time_user_html: <abbr title='%{title}'>%{time}</abbr> удзельнікам
         %{user}
       link_to_reports: Глядзець скаргі
       reports_count:
@@ -1110,7 +1111,7 @@ be:
       comment_from_html: Каментарый ад %{user_link} у %{comment_created_at}
       reassign_param: Пераназначыць праблему?
     reports:
-      reported_by_html: Паведамлена як %{category} карыстальнікам %{user} у %{updated_at}
+      reported_by_html: Паведамлена як %{category} удзельнікам %{user} у %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, каментар #%{comment_id}'
@@ -1312,9 +1313,9 @@ be:
         subject_other: '[OpenStreetMap] %{commenter} пракаментаваў цікавы вам набор
           зменаў'
         your_changeset: '%{commenter} пакінуў каментарый на адзін з вашых набораў
-          зменаў, створаных %{time}'
+          змен, створаных %{time}'
         commented_changeset: '%{commenter}% у %{time} пакінуў каментарый да набору
-          зменаў ад %{changeset_author}, які вы адсочваеце'
+          змен ад %{changeset_author}, за якім вы назіраеце'
         partial_changeset_with_comment: з каментаром '%{changeset_comment}'
         partial_changeset_without_comment: без каментароў
       details: Дадатковыя звесткі аб наборы зьменаў можна знайсці ў %{url}.
@@ -2189,8 +2190,8 @@ be:
       heading: Умовы
       heading_ct: Умовы ўдзелу
       read and accept with tou: Калі ласка, азнаёмцеся з пагадненнем удзельнікаў і
-        Ð· Ñ\83мовамÑ\96 Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82аннÑ\8f, Ð¿Ð°Ñ\81лÑ\8f Ñ\87аго Ð¿Ð°Ñ\81Ñ\82аÑ\9eÑ\86е Ð°Ð±ÐµÐ´Ð·Ñ\8cве Ð¿Ñ\82Ñ\83Ñ\88кÑ\96 Ñ\96 Ð½Ð°Ñ\86Ñ\96Ñ\81нÑ\96Ñ\86е ÐºÐ½Ð¾Ð¿ÐºÑ\83
-        "Ð\9fÑ\80аÑ\86Ñ\8fгнÑ\83Ñ\82ь".
+        з умовамі карыстання, пасля чаго пастаўце абедзьве птушкі і націсніце кнопку
+        "Ð\9fÑ\80аÑ\86Ñ\8fгнÑ\83Ñ\86ь".
       contributor_terms_explain: Гэтае пагадненне регулюе ўмовы вашага існага і будучага
         ўкладу.
       read_ct: Я прачытаў і пагаджаюся з пагадненнем удзельнікаў.
index c74b48310bfcd3bc7b557a3c9b3b8751224cb9d5..4b0bd959178f188869b00ded9117064a1f78f0cb 100644 (file)
@@ -56,29 +56,29 @@ ca:
       message:
         create: Envia
       client_application:
-        create: Registra
-        update: Modifica
+        create: Registrar
+        update: Edita
       redaction:
-        create: Crea una redacció
-        update: Desa la redacció
+        create: Crear un informe
+        update: Desar un informe
       trace:
-        create: Puja
-        update: Desa els canvis
+        create: Pujar
+        update: Desar els canvis
       user_block:
-        create: Crea un bloc
-        update: Actualitza el bloc
+        create: Crear un bloc
+        update: Actualitzar el bloc
   activerecord:
     errors:
       messages:
         invalid_email_address: no sembla ser una adreça electrònica vàlida
-        email_address_not_routable: no és encaminable
+        email_address_not_routable: no és rutejable
     models:
       acl: Llista de control d'accés
       changeset: Conjunt de canvis
       changeset_tag: Etiqueta del conjunt de canvis
       country: País
-      diary_comment: Comentari de diari
-      diary_entry: Entrada de diari
+      diary_comment: Comentari al diari
+      diary_entry: Entrada al diari
       friend: Amic
       language: Llengua
       message: Missatge
@@ -90,7 +90,7 @@ ca:
       old_relation: Relació antiga
       old_relation_member: Membre de la relació antiga
       old_relation_tag: Etiqueta de relació antiga
-      old_way: Camí antic
+      old_way: Via antiga
       old_way_node: Node de la via antiga
       old_way_tag: Etiqueta de la via antiga
       relation: Relació
@@ -100,7 +100,7 @@ ca:
       trace: Traça
       tracepoint: Punt de la traça
       tracetag: Etiqueta de la traça
-      user: Usuari
+      user: Usuari/a
       user_preference: Preferència de l'usuari
       user_token: Testimoni d'usuari
       way: Via
@@ -116,7 +116,7 @@ ca:
         longitude: Longitud
         language: Idioma
       friend:
-        user: Usuari
+        user: Usuari/a
         friend: Amic
       trace:
         user: Usuari
@@ -155,20 +155,26 @@ ca:
         other: gairebé fa gairebé %{count} anys
       half_a_minute: fa mig minut
       less_than_x_seconds:
-        other: un=fa menys d'1 segon
+        one: fa menys d'1 segon
+        other: fa menys de %{count} segons
       less_than_x_minutes:
-        other: un=fa menys d’1 minut
+        one: fa menys d'1 minut
+        other: fa menys de %{count} minuts
       over_x_years:
-        other: un=fa més d’1 any
+        one: fa més d'1 any
+        other: fa més de %{count} anys
       x_seconds:
         one: fa 1 segon
         other: fa %{count} segons
       x_minutes:
-        other: un=fa 1 minut
+        one: fa 1 minut
+        other: fa %{count} minuts
       x_days:
-        other: un=fa 1 dia
+        one: fa 1 dia
+        other: fa %{count} dies
       x_months:
-        other: un=fa 1 mes
+        one: fa 1 mes
+        other: fa %{count} mesos
       x_years:
         other: un=fa 1 any
   printable_name:
@@ -190,18 +196,18 @@ ca:
   api:
     notes:
       comment:
-        opened_at_html: Creat %{when}
-        opened_at_by_html: Creat %{when} per %{user}
-        commented_at_html: Actualitzat %{when}
-        commented_at_by_html: Actualitzat %{when} per %{user}
-        closed_at_html: Resolt %{when}
-        closed_at_by_html: Resolt %{when} per %{user}
-        reopened_at_html: Reactivat %{when}
-        reopened_at_by_html: Reactivat %{when} per %{user}
+        opened_at_html: Creat %{when}
+        opened_at_by_html: Creat %{when} per %{user}
+        commented_at_html: Actualitzat %{when}
+        commented_at_by_html: Actualitzat %{when} per %{user}
+        closed_at_html: Resolt %{when}
+        closed_at_by_html: Resolt %{when} per %{user}
+        reopened_at_html: Reactivat %{when}
+        reopened_at_by_html: Reactivat %{when} per %{user}
       rss:
         title: Notes d'OpenStreetMap
         description_area: Una llista de notes reportades, comentades o bé tancades
-          a la vostra àrea [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
+          a la teva àrea [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Un agregador rss per a la nota %{id}
         opened: Nota nova (a prop de %{place})
         commented: nou comentari (a prop de %{place})
@@ -224,8 +230,8 @@ ca:
     anonymous: anònim
     no_comment: (cap comentari)
     part_of: Part de
-    download_xml: Descarregar l'XML
-    view_history: Mostra l'historial
+    download_xml: Baixa l’XML
+    view_history: Mostra lhistorial
     view_details: Mostra els detalls
     location: 'Ubicació:'
     changeset:
@@ -245,10 +251,10 @@ ca:
       feed:
         title: Conjunt de canvis %{id}
         title_comment: Conjunt de canvis %{id} - %{comment}
-      join_discussion: Inicieu sessió per unir-vos a la discussió
-      discussion: Discussió
-      still_open: Conjunt de canvis encara obert - la discussió començarà quan es
-        tanqui el conjunt de canvis.
+      join_discussion: Inicieu una sessió per a unir-vos al debat
+      discussion: Debat
+      still_open: Conjunt de canvis encara obert - el debat començarà quan es tanqui
+        el conjunt de canvis.
     node:
       title_html: 'Node: %{name}'
       history_title_html: 'Historial del node: %{name}'
@@ -301,7 +307,7 @@ ca:
       feature_warning: Carregant %{num_features} característiques que poden fer que
         el vostre navegador funcioni més lent o que no respongui. Voleu mostrar aquestes
         dades de tota manera?
-      load_data: Carrega dades
+      load_data: Carregar dades
       loading: S'està carregant...
     tag_details:
       tags: Etiquetes
@@ -311,7 +317,7 @@ ca:
       wikidata_link: L'element %{page} a Wikidata
       wikipedia_link: L'article %{page} a la Viquipèdia
       wikimedia_commons_link: L'element %{page} a Wikimedia Commons
-      telephone_link: Telefona %{phone_number}
+      telephone_link: Trucar %{phone_number}
       colour_preview: Previsualització de color %{colour_value}
     note:
       title: 'Nota: %{id}'
@@ -329,10 +335,10 @@ ca:
       reopened_by: Reactivat per %{user} a <abbr title='%{exact_time}'>%{when}</abbr>
       reopened_by_anonymous: Reactivat per un anònim a <abbr title='%{exact_time}'>%{when}</abbr>
       hidden_by: Ocultat per %{user} a <abbr title='%{exact_time}'>%{when}</abbr>
-      report: Reporta aquesta nota
+      report: Reportar aquesta nota
     query:
-      title: Consulta objectes
-      introduction: Cliqueu en el mapa per a trobar objectes propers.
+      title: Consultar objectes
+      introduction: Feu clic al mapa per a trobar objectes propers.
       nearby: Objectes propers
       enclosing: Objectes envoltants
   changesets:
@@ -372,8 +378,8 @@ ca:
     comments:
       comment: 'Nou comentari de %{author} al conjunt de canvis #%{changeset_id}'
     index:
-      title_all: Discussió de conjunts de canvis d'OpenStreetMap
-      title_particular: 'Discussió del conjunt de canvis #%{changeset_id} d''OpenStreetMap'
+      title_all: Debat sobre els conjunts de canvis d'OpenStreetMap
+      title_particular: 'Debat sobre el conjunt de canvis #%{changeset_id} d''OpenStreetMap'
     timeout:
       sorry: La llista de comentaris de conjunts de canvis que heu sol·licitat ha
         trigat massa a recuperar-se.
@@ -426,20 +432,20 @@ ca:
       hide_link: Amaga aquesta entrada
       unhide_link: Mostra aquesta entrada
       confirm: Confirma
-      report: Denuncieu aquesta entrada
+      report: Denuncia aquesta entrada
     diary_comment:
       comment_from_html: Comentari de %{link_user} el %{comment_created_at}
       hide_link: Amaga aquest comentari
       unhide_link: Mostra aquest comentari
       confirm: Confirma
-      report: Reporteu aquest comentari
+      report: Denuncia aquest comentari
     location:
       location: 'Ubicació:'
       view: Mostra
-      edit: Modifica
+      edit: Editar
     feed:
       user:
-        title: Entrades de diari d'OpenStreetMap per a %{user}
+        title: Entrades de diari d'OpenStreetMap de %{user}
         description: Entrades de diari recents d'OpenStreetMap de %{user}
       language:
         title: Entrades de diari d'OpenStreetMap en %{language_name}
@@ -449,7 +455,7 @@ ca:
         description: Entrades de diari recents dels usuaris d'OpenStreetMap
     comments:
       has_commented_on: '%{display_name} ha comentat les següents entrades de diari'
-      post: Publica
+      post: Publicar
       when: Quan
       comment: Comentari
       newer_comments: Comentaris més nous
@@ -486,14 +492,14 @@ ca:
           holding_position: Punt d'espera
           parking_position: Punt d'estacionament
           runway: Pista
-          taxiway: Carrer de rodada
+          taxiway: Carrer de rodatge
           terminal: Terminal
         amenity:
           animal_shelter: Refugi d'animals
-          arts_centre: Centre d'Art
+          arts_centre: Centre d'art
           atm: Caixer automàtic
           bank: Banc
-          bar: Bar
+          bar: Bar de copes
           bbq: Barbacoa
           bench: Banc
           bicycle_parking: Aparcament de bicicletes
@@ -509,40 +515,40 @@ ca:
           car_wash: Rentat de cotxes
           casino: Casino
           charging_station: Estació de recàrrega
-          childcare: Llar d'infants
+          childcare: Ludoteca
           cinema: Cinema
           clinic: Clínica
           clock: Rellotge
-          college: Institut
+          college: Facultat
           community_centre: Centre cívic
           courthouse: Jutjat
           crematorium: Crematori
           dentist: Dentista
           doctors: Metges
-          drinking_water: Aigua potable
+          drinking_water: Punt d'aigua potable
           driving_school: Autoescola
           embassy: Ambaixada
-          fast_food: Menjar ràpid
+          fast_food: Lloc de menjar ràpid
           ferry_terminal: Terminal de ferris
           fire_station: Parc de bombers
           food_court: Àrea de restauració
-          fountain: Font
+          fountain: Font ornamental
           fuel: Benzinera
           gambling: Jocs d'atzar
           grave_yard: Cementiri
           grit_bin: Contenidor de sal
           hospital: Hospital
-          hunting_stand: Aguait
+          hunting_stand: Mirador de fauna
           ice_cream: Gelateria
-          kindergarten: Jardí d'infància
+          kindergarten: Escola bressol
           library: Biblioteca
-          marketplace: Mercat
+          marketplace: Mercat ambulant
           monastery: Monestir
           motorcycle_parking: Aparcament per a motos
           nightclub: Club nocturn
           nursing_home: Residència geriàtrica
           office: Oficina
-          parking: Pàrquing
+          parking: Aparcament
           parking_entrance: Entrada d'aparcament
           parking_space: Plaça d’aparcament
           pharmacy: Farmàcia
@@ -552,20 +558,20 @@ ca:
           post_office: Oficina de correus
           preschool: Parvulari
           prison: Presó
-          pub: Pub
+          pub: Bar - Pub
           public_building: Edifici públic
           recycling: Punt de reciclatge
           restaurant: Restaurant
-          retirement_home: Residència geriàtrica
+          retirement_home: Casal d'avis
           sauna: Sauna
-          school: Escola
+          school: Escola - Institut
           shelter: Refugi
           shop: Botiga
           shower: Dutxa
           social_centre: Centre social
           social_club: Club social
           social_facility: Equipament social
-          studio: Estudi
+          studio: Estudi de grabació
           swimming_pool: Piscina
           taxi: Taxi
           telephone: Telèfon públic
@@ -616,30 +622,30 @@ ca:
         highway:
           abandoned: Carretera abandonada
           bridleway: Camí de ferradura
-          bus_guideway: Carril d'autobús guiat
+          bus_guideway: Carril per a troleibús
           bus_stop: Parada d'autobús
-          construction: Autopista en construcció
-          corridor: Corredor
+          construction: Carretera en construcció
+          corridor: Passadís
           cycleway: Carril bici
           elevator: Ascensor
           emergency_access_point: Accés d'emergència
-          footway: Sendera
+          footway: Via per a vianants
           ford: Gual
           give_way: Senyal de cediu el pas
           living_street: Carrer residencial
           milestone: Fita
           motorway: Autopista
-          motorway_junction: Nus viari
-          motorway_link: Enllaç d'autopista
+          motorway_junction: Enllaç d'autopista
+          motorway_link: Calçada d'autopista
           passing_place: Apartador
-          path: Camí
+          path: Corriol - Sender
           pedestrian: Via de vianants
-          platform: Andana per a bus o tramvia
-          primary: Carretera principal
-          primary_link: Carretera principal
-          proposed: Carretera projectada
+          platform: Andana per a transport públic
+          primary: Carretera primària
+          primary_link: Carretera primària
+          proposed: Carretera proposada
           raceway: Circuit de curses
-          residential: Carrer residencial
+          residential: Carrer
           rest_area: Àrea de descans
           road: Carretera
           secondary: Carretera secundària
@@ -648,16 +654,16 @@ ca:
           services: Àrea de serveis
           speed_camera: Radar
           steps: Graons
-          stop: Senyal d'estop
+          stop: Senyal dstop
           street_lamp: Fanal
           tertiary: Carretera terciària
           tertiary_link: Carretera terciària
-          track: Pista
-          traffic_signals: Senyals de trànsit
-          trail: Sendera
-          trunk: Autovia
-          trunk_link: Autovia
-          turning_loop: Rotonda de canvi de sentit
+          track: Pista - Camí
+          traffic_signals: Semàfors
+          trail: Trialera
+          trunk: Via ràpida
+          trunk_link: Via ràpida
+          turning_loop: Canvi de sentit final
           unclassified: Carretera sense classificar
           "yes": Carretera
         historic:
@@ -668,9 +674,9 @@ ca:
           bunker: Búnquer
           castle: Castell
           church: Església
-          city_gate: Porta de la ciutat
-          citywalls: Muralles de la vila
-          fort: Fort
+          city_gate: Porta de la població
+          citywalls: Muralles de la població
+          fort: Fortí
           heritage: Patrimoni de la humanitat
           house: Casa
           icon: Icona
@@ -693,7 +699,7 @@ ca:
         landuse:
           allotments: Horts
           basin: Conca
-          brownfield: Erm urbà
+          brownfield: Terra no urbanitzada
           cemetery: Cementiri
           commercial: Zona comercial
           conservation: Conservació
@@ -724,10 +730,10 @@ ca:
           "yes": Ús del terreny
         leisure:
           beach_resort: Complex turístic de platja
-          bird_hide: Aguait
+          bird_hide: Mirador d'ocells
           common: Terreny comunal
           dog_park: Parc caní
-          firepit: Pou per a fer for
+          firepit: Pou per a fer foc
           fishing: Àrea de pesca
           fitness_centre: Gimnàs
           fitness_station: Gimnàs a l'aire lliure
@@ -750,7 +756,7 @@ ca:
           swimming_pool: Piscina
           track: Pista d'atletisme
           water_park: Parc aquàtic
-          "yes": Esbarjo
+          "yes": Oci
         man_made:
           adit: Galeria d'accés
           beacon: Balisa
@@ -793,7 +799,7 @@ ca:
           bunker: Búnquer
           "yes": Militar
         mountain_pass:
-          "yes": Coll
+          "yes": Coll - Port de muntanya
         natural:
           bay: Badia
           beach: Platja
@@ -889,8 +895,8 @@ ca:
           light_rail: Tren lleuger
           miniature: Ferrocarril en miniatura
           monorail: Monorail
-          narrow_gauge: Ferroviari de via estreta
-          platform: Andana
+          narrow_gauge: Ferrocarril de via estreta
+          platform: Andana de tren
           preserved: Ferrocarril conservat
           proposed: Ferrocarril projectat
           spur: Branc ferroviari
@@ -904,7 +910,7 @@ ca:
         shop:
           alcohol: Licorista
           antiques: Antiquari
-          art: Galeria d'Art
+          art: Galeria d'art
           bakery: Fleca
           beauty: Saló de bellesa
           beverages: Botiga de begudes
@@ -938,9 +944,9 @@ ca:
           florist: Floristeria
           food: Botiga d'alimentació
           funeral_directors: Funerària
-          furniture: Mobles
+          furniture: Botiga de mobles
           gallery: Galeria
-          garden_centre: Jardineria
+          garden_centre: Centre de jardineria
           general: Botiga generalista
           gift: Botiga de regals
           greengrocer: Verduleria
@@ -970,7 +976,7 @@ ca:
           pet: Botiga d'animals
           pharmacy: Farmàcia
           photo: Fotògraf
-          seafood: Marisc
+          seafood: Botiga de marisc
           second_hand: Botiga de segona mà
           shoes: Sabateria
           sports: Botiga d'esports
@@ -985,7 +991,7 @@ ca:
           vacant: Botiga tancada
           variety_store: Botiga de preus baixos
           video: Videoclub
-          wine: Vinateria
+          wine: Vinateria - Celler
           "yes": Botiga
         tourism:
           alpine_hut: Refugi de muntanya
@@ -1001,7 +1007,7 @@ ca:
           guest_house: Pensió
           hostel: Alberg
           hotel: Hotel
-          information: Informació
+          information: Punt d'informació
           motel: Hotel de carretera
           museum: Museu
           picnic_site: Àrea de pícnic
@@ -1009,14 +1015,14 @@ ca:
           viewpoint: Mirador
           zoo: Zoològic
         tunnel:
-          building_passage: Passatge d'edifici
-          culvert: Canonada
+          building_passage: Passatge en edifici
+          culvert: Desguàs
           "yes": Túnel
         waterway:
           artificial: Curs d'aigua artificial
           boatyard: Drassana
           canal: Canal
-          dam: Dam
+          dam: Presa - Embassament
           derelict_canal: Canal abandonat
           ditch: Rasa
           dock: Moll
@@ -1026,19 +1032,19 @@ ca:
           mooring: Amarratge
           rapids: Ràpids
           river: Riu
-          stream: Rierol
-          wadi: Riera
+          stream: Riera - Torrent
+          wadi: Uadi
           waterfall: Cascada
           weir: Assut
           "yes": Curs d'aigua
       admin_levels:
-        level2: Frontera internacional (nivell 2)
+        level2: Frontera (nivell 2)
         level4: Límit estatal (nivell 4)
         level5: Límit regional (nivell 5)
         level6: Límit comarcal (nivell 6)
         level8: Límit municipal (nivell 8)
         level9: Límit intramunicipal (nivell 9)
-        level10: Límit intramunicipal (nivell 10)
+        level10: Límit de suburbi-barri (nivell 10)
     description:
       title:
         osm_nominatim: Ubicació segons <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
@@ -1054,21 +1060,21 @@ ca:
   issues:
     index:
       title: Incidències
-      select_status: Selecciona l'estat
-      select_type: Selecciona el tipus
-      select_last_updated_by: Selecció la darrera actualització feta per
-      reported_user: Usuari reportat
+      select_status: Seleccionaestat
+      select_type: Seleccionar tipus
+      select_last_updated_by: Seleccionar darrera actualització feta per
+      reported_user: Usuari denunciat
       not_updated: No actualitzat
       search: Cerca
-      search_guidance: 'Cerca incidències:'
+      search_guidance: 'Cercar incidències:'
       user_not_found: El compte d’usuari no existeix
       issues_not_found: No s'ha trobat cap incidència d'aquest tipus
       status: Estat
-      reports: Informes
+      reports: Denúncies
       last_updated: Darrera actualització
       last_updated_time_html: <abbr title='%{title}'> %{time}</abbr>
       last_updated_time_user_html: <abbr title='%{title}'>%{time}</abbr> per %{user}
-      link_to_reports: Veure els informes
+      link_to_reports: Veure les denúncies
       reports_count:
         one: 1 Informe
         other: '%{count} Informes'
@@ -1078,8 +1084,8 @@ ca:
         open: Obert
         resolved: Resolt
     update:
-      new_report: El vostre informe s'ha registrat correctament
-      successful_update: El vostre informe s'ha actualitzat correctament
+      new_report: S’ha registrat la vostra denúncia correctament
+      successful_update: S’ha actualitzat la vostra denúncia correctament
       provide_details: Proporcioneu els detalls demanats
     show:
       title: '%{status} Incidència #%{issue_id}'
@@ -1092,22 +1098,22 @@ ca:
       last_updated_at: Actualitzat per darrer cop a %{datetime} per %{displayname}
       resolve: Resol
       ignore: Ignora
-      reopen: Reobre
+      reopen: Torna a obrir
       reports_of_this_issue: Denúncies sobre aquesta qüestió
-      read_reports: Llegeix els informes
-      new_reports: Informes nous
+      read_reports: Llegir denúncies
+      new_reports: Noves denúncies
       other_issues_against_this_user: Altres incidències contra aquest usuari
       no_other_issues: No hi ha cap altra incidència contra aquest usuari
       comments_on_this_issue: Comentaris sobre aquesta incidència
     resolve:
-      resolved: L'estat de la incidència ha passat a "Resolt"
+      resolved: L'estat de la incidència ha passat a "Resolta"
     ignore:
-      ignored: L'estat de la incidència ha passat a "Ignorat"
+      ignored: L'estat de la incidència ha passat a "Ignorada"
     reopen:
-      reopened: L'estat de la incidència ha passat a "Obert"
+      reopened: L'estat de la incidència ha passat a "Oberta"
     comments:
       comment_from_html: Comentari de %{user_link} a %{comment_created_at}
-      reassign_param: Reassigna incidència?
+      reassign_param: Reassignar incidència?
     reports:
       reported_by_html: Denunciat com a %{category} per %{user} a %{updated_at}
     helper:
@@ -1119,12 +1125,12 @@ ca:
       comment_created: S’ha creat el comentari correctament
   reports:
     new:
-      title_html: Informe %{link}
-      missing_params: No s'ha pogut crear un nou informe
+      title_html: Denunciar %{link}
+      missing_params: No s'ha pogut crear una nova denúncia
       details: Proporcioneu més detalls del problema (obligatori).
-      select: 'Tria un motiu del teu informe:'
+      select: 'Tria un motiu de la teva denúncia:'
       disclaimer:
-        intro: 'Abans d''enviar el teu informe als moderadors del lloc web, comprova
+        intro: 'Abans d''enviar la teva denúncia als moderadors del lloc web, comprova
           que:'
         not_just_mistake: Estàs segur que el problema no és només un error
         unable_to_fix: No pots resoldre el problema tu sol ni tampoc amb l'ajuda dels
@@ -1153,7 +1159,7 @@ ca:
           abusive_label: Aquesta nota és injuriosa
           other_label: Un altre
     create:
-      successful_report: El vostre informe s'ha registrat correctament
+      successful_report: S’ha registrat la vostra denúncia correctament
       provide_details: Proporcioneu els detalls demanats
   layouts:
     project_name:
@@ -1162,13 +1168,13 @@ ca:
     logo:
       alt_text: Logotip de l'OpenStreetMap
     home: Vés a la ubicació d'inici
-    logout: Finalitza la sessió
-    log_in: Inicia sessió
-    log_in_tooltip: Inicia una sessió amb un compte existent
-    sign_up: Crea un compte
+    logout: Surt
+    log_in: Inicia la sessió
+    log_in_tooltip: Entra amb un compte existent
+    sign_up: Registreu-vos-hi
     start_mapping: Comença a cartografiar
-    sign_up_tooltip: Crea un compte per a col·laborar
-    edit: Modifica
+    sign_up_tooltip: Creeu un compte per a editar
+    edit: Edita
     history: Historial
     export: Exporta
     issues: Incidències
@@ -1177,13 +1183,13 @@ ca:
     gps_traces: Traces de GPS
     gps_traces_tooltip: Gestiona les traces GPS
     user_diaries: Diaris d'usuari
-    user_diaries_tooltip: Mostra els diaris d'usuari
-    edit_with: Modifica amb %{editor}
-    tag_line: El wikimapamundi lliure
+    user_diaries_tooltip: Mostra els diaris dusuari
+    edit_with: Edita amb %{editor}
+    tag_line: El mapa col·laboratiu lliure
     intro_header: OpenStreetMap us dona la benviguda
     intro_text: L'OpenStreetMap és un mapa del món creat per persones com tu i d'ús
       lliure sota una llicència oberta.
-    intro_2_create_account: Crea un compte d'usuari
+    intro_2_create_account: Crea un compte dusuari
     hosting_partners_html: L'allotjament és a càrrec de %{ucl}, %{bytemark} i d'altres
       %{partners}.
     partners_ucl: UCL
@@ -1402,7 +1408,7 @@ ca:
   site:
     about:
       next: Següent
-      copyright_html: © Col·laboradors<br>d’OpenStreetMap
+      copyright_html: © Col·laboradors/es<br>d’OpenStreetMap
       used_by_html: '%{name} proporciona dades cartogràfiques a milers de llocs web,
         aplicacions per a mòbils i dispositius'
       lede_text: OpenStreetMap està fet per una comunitat de cartògrafs que aporten
@@ -1426,15 +1432,15 @@ ca:
       legal_title: Avisos legals
       legal_1_html: "Aquest lloc web i molts altres serveis relacionats són operats
         formalment per la \n<a href=\"http://osmfoundation.org/\">Fundació OpenStreetMap</a>
-        (OSMF)  en nom de la comunitat. L'ús de tots els serveis operats per l'OSMF
+        (OSMF) en nom de la comunitat. L'ús de tots els serveis operats per l'OSMF
         es troba subjecte a les nostres <a href=\"https://wiki.osmfoundation.org/wiki/Terms_of_Use\">,
         </a> <a href=\"http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\npolítiques
         d'ús acceptable</a> i a les nostres <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">polítiques
-        de privadesa</a>\n<br> \n<a href=\"http://osmfoundation.org/Contact\">Contacteu
-        amb l'OSMF</a> \nsi teniu qüestions sobre llicències, drets d'autor o altres
-        aspectes legals.\nOpenStreetMap, el logotip de la lupa i l'Estat del Mapa
-        són <a href=\"https://wiki.osmfoundation.org/wiki/Trademark_Policy\">marques
-        registrades de l'OSFM</a>."
+        de privadesa</a>"
+      legal_2_html: |-
+        <a href="https://osmfoundation.org/Contact">Contacta</a> amb l'OSMF si tens dubtes de llicència, drets de còpia o altres qüestions legals.
+
+        OpenStreetMap, el logo i Estat del Mapa són <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">marques registrades de l'OSMF</a>.<br><br>
       partners_title: Socis
     copyright:
       foreign:
@@ -1557,7 +1563,7 @@ ca:
       js_2: L'OpenStreetMap utilitza JavaScript per al mapa lliscant.
       permalink: Enllaç permanent
       shortlink: Enllaç curt
-      createnote: Afegiu una nota
+      createnote: Afegeix una nota
       license:
         copyright: Copyright d'OpenStreetMap i els seus col·laboradors sota llicència
           oberta
@@ -1611,7 +1617,7 @@ ca:
           description: Descarrega aquest requadre delimitador des d'una rèplica de
             la base de dades d'OpenStreetMap
         geofabrik:
-          title: Descàrregues de Geofabrik
+          title: Baixades del Geofabrik
           description: Extractes actualitzats regularment de continents, països i
             ciutats seleccionades
         metro:
@@ -1714,17 +1720,17 @@ ca:
         entry:
           motorway: Autopista
           main_road: Carretera principal
-          trunk: Autovia
+          trunk: Via ràpida
           primary: Carretera principal
           secondary: Carretera secundària
           unclassified: Carretera sense classificar
-          track: Pista
+          track: Pista - Camí
           bridleway: Camí de ferradura
           cycleway: Carril bici
           cycleway_national: Carril bici nacional
           cycleway_regional: Carril bici regional
           cycleway_local: Carril bici local
-          footway: Camí de vianants
+          footway: Via de vianants
           rail: Ferrocarril
           subway: Metro
           tram:
@@ -1735,7 +1741,7 @@ ca:
           - telecadira
           runway:
           - Pista d'aeroport
-          - carrer de rodada
+          - carrer de rodatge
           apron:
           - Estacionament d'avions
           - terminal
@@ -1754,7 +1760,7 @@ ca:
           heathland: Bruguerar
           lake:
           - Llac
-          - Embassament
+          - bassa
           farm: Granja
           brownfield: Àrea industrial abandonada
           cemetery: Cementiri
@@ -1764,7 +1770,7 @@ ca:
           reserve: Reserva natural
           military: Àrea militar
           school:
-          - Escola
+          - Escola - Institut
           - Universitat
           building: Edifici significatiu
           station: Estació de tren
@@ -1772,7 +1778,7 @@ ca:
           - Cim
           - pic
           tunnel: Línia discontínua = túnel
-          bridge: Línia negra = bridge
+          bridge: Línia negra = pont
           private: Accés privat
           destination: Servitud de pas
           construction: Carreteres en construcció
@@ -1780,7 +1786,7 @@ ca:
           bicycle_parking: Aparcament de bicicletes
           toilets: Lavabos
     richtext_area:
-      edit: Modifica
+      edit: Edita
       preview: Previsualització
     markdown_help:
       title_html: Analitzat amb <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
@@ -1824,7 +1830,7 @@ ca:
         tag_html: Una <strong>etiqueta</strong> és un recull de dades sobre un node
           o una via, com ara el nom d'un restaurant o la velocitat màxima d'una carretera.
       rules:
-        title: Regles
+        title: Normes
         paragraph_1_html: "L'OpenStreetMap té poques les regles formals però esperem
           que tots els participants col·laborin i es comuniquin amb la comunitat.
           Si voler dur a terme\naltres activitats que no siguin l'edició manual, llegiu
@@ -1856,8 +1862,8 @@ ca:
       identifiable: Identificable (mostrat a la llista de traes i com a punts identificables
         ordenats segons marques temporals)
     new:
-      upload_trace: Puja una traça GPS
-      upload_gpx: 'Puja l''arxiu GPX:'
+      upload_trace: Pujar traça GPS
+      upload_gpx: 'Pujaarxiu GPX:'
       description: 'Descripció:'
       tags: 'Etiquetes:'
       tags_help: separat per comes
@@ -1885,13 +1891,13 @@ ca:
       title: Editant traça %{name}
       heading: Editant traça %{name}
       filename: 'Nom del fitxer:'
-      download: descàrrega
+      download: baixa
       uploaded_at: 'Pujat a:'
       points: 'Punts:'
       start_coord: 'Coordenades d''inici:'
       map: mapa
       edit: modificació
-      owner: 'Propietari:'
+      owner: 'Propietari/a:'
       description: 'Descripció:'
       tags: 'Etiquetes:'
       tags_help: separat per comes
@@ -1911,16 +1917,16 @@ ca:
       points: 'Punts:'
       start_coordinates: 'Coordenades d''inici:'
       map: mapa
-      edit: modificació
+      edit: edita
       owner: 'Propietari:'
       description: 'Descripció:'
       tags: 'Etiquetes:'
       none: Cap
-      edit_trace: Edita aquesta traça
-      delete_trace: Suprimeix aquesta traça
+      edit_trace: Editar aquesta traça
+      delete_trace: Esborra aquesta traça
       trace_not_found: No s'ha trobat la traça!
       visibility: 'Visibilitat:'
-      confirm_delete: Esborra aquesta traça?
+      confirm_delete: Esborrar aquesta traça?
     trace_paging_nav:
       showing_page: Pàgina %{page}
       older: Traces més antigues
@@ -1932,8 +1938,8 @@ ca:
         other: '%{count} punts'
       more: més
       trace_details: Mostra els detalls de la traça
-      view_map: Visualitza el mapa
-      edit: modificació
+      view_map: Mostra el mapa
+      edit: edita
       edit_map: Edita el mapa
       public: PÚBLIC
       identifiable: IDENTIFICABLE
@@ -1998,9 +2004,9 @@ ca:
       allow_write_diary: crear entrades de diari, comentaris i fer amics.
       allow_write_api: modificar el mapa.
       allow_read_gpx: llegir les vostres traces GPS privades.
-      allow_write_gpx: carregar traces GPS.
+      allow_write_gpx: pujar traces GPS.
       allow_write_notes: modificar les notes.
-      grant_access: Permet l'accés
+      grant_access: Permet laccés
     authorize_success:
       title: Sol·licitud d'autorització permesa
       allowed_html: Heu permès que l'aplicació %{app_name} accedeixi al vostre compte.
@@ -2050,6 +2056,7 @@ ca:
       no_apps_html: ¿Teniu cap aplicació que voldríeu inscriure per usar amb nosaltres
         utilitzant l'estàndard %{oauth}? Heu de registrar la vostra aplicació web
         abans que pugui fer peticions OAuth a aquest servei.
+      oauth: OAuth
       registered_apps: 'Teniu les següents aplicacions client registrades:'
       register_new: Registreu l'aplicació
     form:
@@ -2076,8 +2083,8 @@ ca:
       flash: S'ha destruït el registre de l'aplicació client
   users:
     login:
-      title: Accés
-      heading: Accés
+      title: Inicia la sessió
+      heading: Inicia la sessió
       email or username: 'Adreça de correu o nom d''usuari:'
       password: 'Contrasenya:'
       openid_html: '%{logo} OpenID:'
@@ -2130,9 +2137,9 @@ ca:
           title: Inicieu la sessió amb AOL
           alt: Inicieu la sessió amb un compte OpenID d'AOL
     logout:
-      title: Tanca la sessió
+      title: Surt
       heading: Tanca la sessió d'OpenStreetMap
-      logout_button: Tanca la sessió
+      logout_button: Surt
     lost_password:
       title: Contrasenya perduda
       heading: Heu oblidat la contrasenya?
@@ -2152,7 +2159,7 @@ ca:
       flash changed: S'ha canviat la contrasenya.
       flash token bad: No s'ha trobat el testimoni. Comproveu la URL.
     new:
-      title: Creeu un compte
+      title: Registreu-vos-hi
       no_auto_account_create: No us podem crear un compte automàticament.
       contact_webmaster_html: Contacteu amb el <a href="%{webmaster}">webmestre</a>
         per gestionar la creació d'un compte - intentarem tractar la sol·licitud tan
@@ -2179,7 +2186,7 @@ ca:
       use external auth: 'Alternativament, inicieu la sessió mitjançant un tercer:'
       auth no password: Amb l'autenticació per tercers cal contrasenya, però alguns
         servidors o eines extres sí que en poden demanar una.
-      continue: Creeu un compte
+      continue: Registreu-vos-hi
       terms accepted: Gràcies per acceptar els nous termes de col·laboració.
       terms declined: Heu decidit no acceptar els nous termes de col·laboració. Per
         a més informació, consulteu <a href="%{url}">aquesta pàgina wiki</a>.
@@ -2221,7 +2228,7 @@ ca:
     show:
       my diary: El meu diari
       new diary entry: entrada de diari nova
-      my edits: Les meves modificacions
+      my edits: Les meves edicions
       my traces: Les meves traces
       my notes: Les meves notes de mapa
       my messages: Els meus missatges
@@ -2233,7 +2240,7 @@ ca:
       blocks by me: Blocs fets per mi
       send message: Envia un missatge
       diary: Diari
-      edits: Modificacions
+      edits: Edicions
       traces: Traces
       notes: Notes de mapa
       remove as friend: Deixa l'amistat
@@ -2549,8 +2556,8 @@ ca:
       created: Creat
       status: Estat
       show: Mostra
-      edit: Edició
-      revoke: Revoca-ho!
+      edit: Edita
+      revoke: Revoca
       confirm: N'esteu segur?
       reason: 'Motiu del blocatge:'
       back: Mostra tots els blocs
@@ -2559,7 +2566,7 @@ ca:
     block:
       not_revoked: (no revocat)
       show: Mostra
-      edit: Modifica
+      edit: Edita
       revoke: Revoca!
     blocks:
       display_name: S'ha blocat l'usuari
index 4a11885ba51b82f1d0f383d5e3f026379feeb565..bc671165e9467e21933e3447408e0337fa412e24 100644 (file)
@@ -113,7 +113,7 @@ de:
       node_tag: Knoten-Attribut
       notifier: Benachrichtiger
       old_node: Alter Knoten
-      old_node_tag: Alter-Knoten-Attribut
+      old_node_tag: AlteKnoten-Attribut
       old_relation: Alte Relation
       old_relation_member: Alte-Relation-Mitglied
       old_relation_tag: Alte-Relation-Attribut
index 0f6e7cb4020a1ffbb4ab5dd0319e978a81e4aa3d..3a8352f18a3bcf8d23c86709fb567565ce375f86 100644 (file)
@@ -44,6 +44,7 @@
 # Author: MarcoAurelio
 # Author: McDutchie
 # Author: Mor
+# Author: Nancystodd
 # Author: Nemo bis
 # Author: Nunte
 # Author: Ovruni
@@ -1141,6 +1142,7 @@ es:
     reopen:
       reopened: El estado de la incidencia se ha establecido en 'Abierto'.
     comments:
+      comment_from_html: Comentario de %{user_link} en %{comment_created_at}
       reassign_param: Reasignar incidencia?
     reports:
       reported_by_html: Reportado como %{category} por %{user} en %{updated_at}
@@ -1471,6 +1473,11 @@ es:
         de uso</a>,  <a href=\"https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nnormativa
         de uso aceptable</a> y nuestra <a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\">normativa
         de privacidad</a>."
+      legal_2_html: |-
+        Por favor, <a href='https://osmfoundation.org/Contact'> comuníquese con el OSMF</a>
+        Si tiene licencias, derechos de autor u otras preguntas legales.
+        <br>
+        OpenStreetMap, el logotipo de la lupa y el estado del mapa son <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy"> marcas registradas de OSMF</a>.
       partners_title: Socios
     copyright:
       foreign:
@@ -2656,6 +2663,7 @@ es:
       locate:
         title: Mostrar mi ubicación
         metersUnit: metros
+        feetUnit: pies
         popup: Estás a {distance} {unit} de este punto
       base:
         standard: Estándar
index b564e176d0d5b22f08a1e30ece7a61d8d54595b7..4a0573205f0d790b7dcfceb93b315b5ce2eec2af 100644 (file)
@@ -1098,7 +1098,8 @@ fa:
     reopen:
       reopened: وضعیت مسئله به «باز» تغییر داده کرده است
     reports:
-      reported_by_html: '%{user} آن را به‌عنوان %{category} گزارش کرد'
+      reported_by_html: در %{updated_at}،‏ %{user} آن را به‌عنوان %{category} گزارش
+        کرد
     helper:
       reportable_title:
         diary_comment: '%{entry_title}، نظر #%{comment_id}'
@@ -1912,7 +1913,9 @@ fa:
       newer: ردهای تازه‌تر
     trace:
       pending: در انتظار
-      count_points: ‏%{count} نقطه
+      count_points:
+        one: 1 نقطه
+        other: '%{count} نقطه'
       more: بیشتر
       trace_details: مشاهده جزئیات رد
       view_map: نمایش نقشه
@@ -1971,10 +1974,9 @@ fa:
   oauth:
     authorize:
       title: اجازهٔ دسترسی به حسابتان را صادر کنید
-      request_access_html: برنامهٔ %{app_name}%{app_name} درخواست دسترسی به حساب کاربری
-        شما را دارد (%{user}). لطفاً بررسی کنید که آیا مایلید برنامه به قابلیت‌های
-        زیر دسترسی داشته باشد. می‌توانید همه یا فقط مواردی را که دوست دارید انتخاب
-        کنید.
+      request_access_html: برنامهٔ %{app_name} درخواست دسترسی به حساب کاربری شما را
+        دارد (%{user}). لطفاً بررسی کنید که آیا مایلید برنامه به قابلیت‌های زیر دسترسی
+        داشته باشد. می‌توانید همه یا فقط مواردی را که دوست دارید انتخاب کنید.
       allow_to: 'برنامهٔ کارخواه مجاز است که:'
       allow_read_prefs: ترجیحات کاربری شما را بخواند.
       allow_write_prefs: ترجیحات کاربری شما را تغییر دهد.
index 99245763017a7546ae39992a38f25c3ecc9e10d6..03ac069376d74858e0de7eb7a66fee36cc0f064d 100644 (file)
@@ -197,7 +197,7 @@ fit:
     part_of: Osana seuraavia
     download_xml: Lattaa XML-fiilinä
     view_history: Näytä histuuria
-    view_details: Näytä tiot
+    view_details: Näytä tieot
     location: 'Sijainti:'
     changeset:
       title: 'Muutoskokoelma: %{id}'
@@ -269,8 +269,8 @@ fit:
         relation: relaatio
     start_rjs:
       feature_warning: Ladathaan %{num_features} ominaisuutta, mikä saatta hidasthaa
-        eli kaathaa verkkoselaimen. Haluakko varmasti näythää nämä tiot?
-      load_data: Lattaa tiot
+        eli kaathaa verkkoselaimen. Haluakko varmasti näythää nämä tieot?
+      load_data: Lattaa tieot
       loading: Ladathaan...
     tag_details:
       tags: Ominaisuusdetaljit
@@ -281,7 +281,7 @@ fit:
       wikipedia_link: Artikkeli %{page} Wikipeetiassa
       wikimedia_commons_link: '%{page} Wikimeetia Commonsissa'
       telephone_link: Soita %{phone_number}
-      colour_preview: Värin %{colour_value} etukattelu
+      colour_preview: Värin %{colour_value} esikattelu
     note:
       title: 'Karttailmoitus: %{id}'
       new_note: Uusi karttailmoitus
@@ -295,8 +295,8 @@ fit:
       commented_by_anonymous: Kommentti tuntemattomalta käyttäjältä <abbr title='%{exact_time}'>%{when}</abbr>
       closed_by: Ratkaissut käyttäjä %{user} <abbr title='%{exact_time}'>%{when}</abbr>
       closed_by_anonymous: Ratkaissut tuntematon käyttäjä <abbr title='%{exact_time}'>%{when}</abbr>
-      reopened_by: Avvannut uudelleen käyttäjä %{user} <abbr title='%{exact_time}'>%{when}</abbr>
-      reopened_by_anonymous: Avvannut uudelleen tuntematon käyttäjä <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by: Aukassu uuesti käyttäjä %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by_anonymous: Aukassu uuesti tuntematon käyttäjä <abbr title='%{exact_time}'>%{when}</abbr>
       hidden_by: Piilottanut käyttäjä %{user} <abbr title='%{exact_time}'>%{when}</abbr>
       report: Ilmianna karttailmotus
     query:
@@ -312,7 +312,7 @@ fit:
     changeset:
       anonymous: Tuntematon
       no_edits: (ei mookkauksia)
-      view_changeset_details: Näytä muutoskokoelman tarkemmat tiot
+      view_changeset_details: Näytä muutoskokoelman tarkemmat tieot
     changesets:
       id: Tunniste
       saved_at: Säästetty
@@ -507,9 +507,9 @@ fit:
         open: Avvaa
         resolved: Ratkaistu
     update:
-      new_report: Ilmianto on vastaanotettu
-      successful_update: Ilmianto on päivitetty
-      provide_details: Täyennä tarvittavat tiot
+      new_report: Ilmianto oon vastaanotettu
+      successful_update: Ilmianto oon päivitetty
+      provide_details: Täyennä tarvittavat tieot
     show:
       title: '%{status} Tapaus #%{issue_id}'
       reports:
@@ -521,7 +521,7 @@ fit:
       last_updated_at: Viimeisin käsittelijä %{displayname} %{datetime}
       resolve: Ratkase
       ignore: Merkitte aiheettomaksi
-      reopen: Avvaa uuelleen
+      reopen: Aukase uuesti
       reports_of_this_issue: Ilmianna tapahtuma
       read_reports: Lue ilmiantoja
       new_reports: Uuet ilmiannot
@@ -535,7 +535,7 @@ fit:
     reopen:
       reopened: Tapaus on markeerattu käsittelyssä olevaksi
     comments:
-      reassign_param: Haluatko määrittää tapauksen tilan uuelleen?
+      reassign_param: Haluatko määrittää tapauksen tilan uuesti?
     reports:
       reported_by_html: Käyttäjä %{user} ilmiantanut merkinnällä %{category}
     helper:
@@ -549,7 +549,7 @@ fit:
     new:
       title_html: Ilmianna %{link}
       missing_params: Ilmotuksen luominen epäonnistui
-      details: Kuvaile ongelmaa (pakollinen)
+      details: Kuvaile prupleemaa (pakollinen)
       select: 'Valitte ilmiannon syy:'
       categories:
         diary_entry:
@@ -574,7 +574,7 @@ fit:
     history: Histuuria
     export: Eksporteeraus
     issues: Ilmiannot
-    data: Tiot
+    data: Tieot
     export_data: Exporteeraa tiedostona
     gps_traces: GPS-jäljet
     gps_traces_tooltip: Hallitse GPS-jälkiä
@@ -611,7 +611,7 @@ fit:
     signup_confirm:
       subject: '[OpenStreetMap] Tervetuloa OpenStreetMaphiin'
       greeting: Hei!
-      created: Joku (toivottavasti sinä) on luonut käyttäjäkonttun atressissa %{site_url}.
+      created: Joku (toivottavasti sinä) oon luonut käyttäjäkonttun atressissa %{site_url}.
       confirm: 'Jos olet luonut tämän käyttäjäkonttun, vahvista se knapauttamalla
         tätä länkkiä:'
       welcome: Käyttäjäkottun vahvistamisen jälkheen haluaisimme kertoa joitain hyödyllisiä
@@ -649,7 +649,7 @@ fit:
       title: Saapuneet
       my_inbox: Saapuneet
       outbox: Lähetetyt
-      messages: Kansiossa on %{new_messages} ja %{old_messages}.
+      messages: Kansiossa oon %{new_messages} ja %{old_messages}.
       new_messages:
         one: '%{count} lukematon viesti'
         other: '%{count} lukematonta viestiä'
@@ -673,7 +673,7 @@ fit:
       body: Sisältö
       back_to_inbox: Takashiin saapuneisiin
     create:
-      message_sent: Viesti on lähätetty.
+      message_sent: Viesti oon lähätetty.
       limit_exceeded: Olet lähettänyt runsaasti viestejä lyhyessä ajassa. Odota hetki
         ennen kuin yrität lähettää lisää.
     no_such_message:
@@ -685,8 +685,8 @@ fit:
       inbox: Saapuneet
       outbox: Lähätetyt
       messages:
-        one: Kansiossa on %{count} lähätetty viesti.
-        other: Kansiossa on %{count} lähätettyä viestiä.
+        one: Kansiossa oon %{count} lähätetty viesti.
+        other: Kansiossa oon %{count} lähätettyä viestiä.
       to: Vastaanottaja
       subject: Otsikko
       date: Taatumi
@@ -729,18 +729,18 @@ fit:
         ajan tasalla.
       community_driven_title: Yhteisön voima
       community_driven_html: |-
-        OpenStreetMap-yhteisö on monipuolinen, intohimoinen ja kasvaa joka päivä. Yhteisöön kuuluu harrastajakartoittajia, GIS-ammattilaisia, järjestelmää ylläpitäviä insinöörejä, humanitaarisia auttajia, jotka kartoittavat katastrofin kärsineitä alueita sekä monia muita. Lisätietoja yhteisöstä saa lukemalla <a href='https://blog.openstreetmap.org'>OpenStreetMap-blogia</a>, <a href='%{diary_path}'>käyttäjien päiväkirjoja</a>,
+        OpenStreetMap-yhteisö oon monipuolinen, intohimoinen ja kasvaa joka päivä. Yhteisöön kuuluu harrastajakartoittajia, GIS-ammattilaisia, järjestelmää ylläpitäviä insinöörejä, humanitaarisia auttajia, jotka kartoittavat katastrofin kärsineitä alueita sekä monia muita. Lisätietoja föreeninkistä saa lukemalla <a href='https://blog.openstreetmap.org'>OpenStreetMap-blogia</a>, <a href='%{diary_path}'>käyttäjitten päiväkirjoja</a>,
         <a href='https://blogs.openstreetmap.org/'>yhteisöblogeja</a> ja
         <a href='https://www.osmfoundation.org/'>OSM-säätiön</a> verkkosivua.
       open_data_title: Avoin taatta
-      open_data_html: 'OpenStreetMap on <i>avointa taattaa</i>: palvelua saa käyttää
+      open_data_html: 'OpenStreetMap oon <i>avointa taattaa</i>: palvelua saa käyttää
         vapaasti mihin tahansa, kunhan OpenStreetMap tekijöineen mainitaan. Jos palvelua
         kehitetään tai muuunnellaan, sitä saa levittää eteenpäin vain samala lisensillä.
-        Lisätietoja on <a href=''%{copyright_path}''>Tekijänoikeus ja lisensi</a>
+        Lisätietoja oon <a href=''%{copyright_path}''>Tekijänoikeus ja lisensi</a>
         -sivula.'
       legal_title: Lakitekninen jako
       legal_1_html: "Tämä ja monet muut OSM-sivustot ovat muodollisesti <a href='https://osmfoundation.org/'>OpenStreetMap-säätiön</a>
-        (OSMF) hallinnoimia OSM-yhteisön puolesta. Kaikkien näiden sivustojen käyttöön
+        (OSMF) hallinnoimia OSM-yhteisön puolesta. Kaikkien näiden sivustojen käythöön
         sovelletaan <a href=\"https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nsallitun
         käytön käytäntöjä</a>, <a href=\"https://wiki.osmfoundation.org/wiki/Terms_of_Use\">käyttöehtoja</a>
         ja <a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\">tietosuojakäytäntöä</a>
@@ -753,21 +753,21 @@ fit:
     copyright:
       foreign:
         title: Tietoja tästä käänöksestä
-        html: Jos tämän käänätyn sivun ja %{english_original_link} välillä on eroja,
-          englantinkielinen sivu on aina etusijalla.
+        html: Jos tämän käänätyn sivun ja %{english_original_link} välillä oon eroja,
+          engelskankielinen sivu oon aina etusijalla.
         english_link: englantinkielisen alkuperäisversuunin
       native:
         title: Tästä sivusta
-        html: Tällä sivula on alkuperänen englanninkielinen versuuni tekijäoikeuksista.
-          Saatavilla on myös %{native_link}. Voit myös lopettaa tekijänoikeuksien
+        html: Tällä sivula oon alkuperänen engelskankielinen versuuni tekijäoikeuksista.
+          Saatavilla oon myös %{native_link}. Voit myös lopettaa tekijänoikeuksien
           lukemisen ja %{mapping_link}.
         native_link: meänkielinen versuuni
         mapping_link: aloittaa kartoituksen
       legal_babble:
         title_html: Tekijänoikeus ja lisensi
         intro_1_html: |-
-          OpenStreetMap<sup><a href="#trademarks">&reg;</a></sup> on <i>avointa taattaa</i>, jonka <a
-          href="https://osmfoundation.org/">OpenStreetMap Foundation</a> (OSMF) on lisensoinut <a
+          OpenStreetMap<sup><a href="#trademarks">&reg;</a></sup> oon <i>avointa taattaa</i>, jonka <a
+          href="https://osmfoundation.org/">OpenStreetMap Foundation</a> (OSMF) oon lisensoinut <a
           href="https://opendatacommons.org/licenses/odbl/">Open Data Commons Open Database -lisensillä</a> (ODbL).
         intro_2_html: "OpenStreetMapin karttoja ja tietoja voi kopioida, levittää,
           välittää ja mukauttaa, \nkunhan OpenStreetMap ja sen tekijät mainitaan.
@@ -775,11 +775,11 @@ fit:
           vain samalla lisensillä.\n<a href=\"https://opendatacommons.org/licenses/odbl/1.0/\">Lakitekstissä</a>
           mainitaan levittäjän oikeudet ja velvollisuudet."
         intro_3_html: |-
-          Kartta-aineisto ja dokumentaatio on lisensoitu <a href="https://creativecommons.org/licenses/by-sa/2.0/deed.fi">Creative
+          Kartta-aineisto ja dokumentaatio oon lisensoitu <a href="https://creativecommons.org/licenses/by-sa/2.0/deed.fi">Creative
           Commons Nimeä-Jaa samoin 2.0</a> -lisensillä (CC-BY-SA).
         credit_title_html: OpenStreetMapin mainitseminen
-        credit_1_html: OpenStreetMapin sisältöä levitettäessä on mainittava teksti
-          &quot;&copy; OpenStreetMapin tekijät&quot; tai sen englantinkielinen vastine
+        credit_1_html: OpenStreetMapin sisältöä levitettäessä oon mainittava teksti
+          &quot;&copy; OpenStreetMapin tekijät&quot; tai sen engelskankielinen vastine
           &quot;&copy; OpenStreetMap contributors&quot;.
         credit_2_html: "Levittäjän tulee tehdä selväksi, että aineisto on saatavilla
           Open Database -lisenssillä\nja kartta-aineisto CC-BY-SA-lisenssillä. Tämä
@@ -790,7 +790,7 @@ fit:
         credit_3_html: 'Sivustolle upotetun interaktiivisen karttaikkunan tulee sisältää
           tekijän nimi kartan alaosassa:'
         attribution_example:
-          alt: Esimerkki siitä, miten nimetä OpenStreetMap nettisivulla
+          alt: Esimerkki siitä, miten nimetä OpenStreetMap nettisivula
           title: Nimeämisesimerkki
         more_title_html: Lisätietoja
         contributors_title_html: Meän tekijät
@@ -798,7 +798,7 @@ fit:
       permalink: Ikunen länkki
       shortlink: Lyhylänkki
     edit:
-      user_page_link: käyttäjätiot
+      user_page_link: käyttäjätieot
     export:
       title: Alueen eksporteeraus
       area_to_export: Eksporteerattava alue
@@ -827,7 +827,7 @@ fit:
       paste_html: Jäljennä ja liitä tämä HTML-kooti verkkosivulesi
       export_button: Eksporteeraa
     fixthemap:
-      title: Ilmota ongelmasta / Korjaa karttaa
+      title: Ilmota prupleemasta / Korjaa karttaa
       how_to_help:
         title: Kuinka voin auttaa
         join_the_community:
@@ -852,7 +852,7 @@ fit:
       search: Haku
       from: Lähtöpaikka
       to: Määränpää
-      where_am_i: Mikä tämä paikka on?
+      where_am_i: Mikä tämä paikka oon?
       submit_text: Hae
     key:
       table:
@@ -861,7 +861,7 @@ fit:
             1: yniversiteetti
     richtext_area:
       edit: Mookkaa
-      preview: Etukattelu
+      preview: Esikattelu
     markdown_help:
       link: Länkki
       text: Teksti
@@ -1014,7 +1014,7 @@ fit:
       flash success: Kaikki tekemäsi mookkaukset ovat nyt julkisia.
     make_friend:
       button: Lissää ystäväksi
-      success: '%{name} on nyt sinun ystävä!'
+      success: '%{name} oon nyt sinun ystävä!'
       failed: Käyttäjää %{name} ei voitu lisätä sinun ystävälistaan.
       already_a_friend: '%{name} on jo sinun ystävä.'
     remove_friend:
@@ -1106,7 +1106,7 @@ fit:
     create:
       flash: Redaktio luotu.
     update:
-      flash: Muutokset on säästetty.
+      flash: Muutokset oon säästetty.
     destroy:
       not_empty: Redaktio ei ole tyhjä. Ota poies redaktiotiot kaikista tähän redaktioon
         liittyvistä versuuneista ennen sen tuhoamista.
index c7cee3ba01562835a106d06d14fdec0e5fa507f7..0900679e60f64cbe567d284b9538a34be1b8c700 100644 (file)
@@ -247,7 +247,7 @@ fr:
         closed: note fermée (près de %{place})
         reopened: note réactivée (près de %{place})
       entry:
-        comment: Commentaire
+        comment: Commenter
         full: Note complète
   browse:
     created: Créé
@@ -1009,7 +1009,7 @@ fr:
           optician: Opticien
           organic: Magasin d’alimentation bio
           outdoor: Magasin d’articles pour activité en plein air
-          paint: Galerie de peinture
+          paint: Magasin de peinture
           pawnbroker: Prêteur sur gages
           pet: Animalerie
           pharmacy: Pharmacie
index a62a564899542e6ad5695e37d0417a6274c77687..7dd6057f6628417a99aa70cb01fb36f86e8c68ab 100644 (file)
@@ -12,7 +12,6 @@
 # Author: Maria zaos
 # Author: McDutchie
 # Author: Mgl.branco
-# Author: Navhy
 # Author: Nemo bis
 # Author: Toliño
 # Author: Vivaelcelta
@@ -631,7 +630,7 @@ gl:
           proposed: Proxecto de estrada
           raceway: Circuíto
           residential: Estrada ou rúa residencial
-          rest_area: Área de lecer
+          rest_area: Área de repouso
           road: Estrada
           secondary: Estrada secundaria
           secondary_link: Estrada secundaria
index 68ac436c7e8312c7dae9000be4cb5b1eaad39d92..a525982d2b7f1d3cf8471872aaba2ae5182199fd 100644 (file)
@@ -28,8 +28,8 @@ ia:
         create: Registrar
         update: Modificar
       redaction:
-        create: Crear obscuration
-        update: Salveguardar obscuration
+        create: Crear suppression
+        update: Salveguardar suppression
       trace:
         create: Incargar
         update: Salveguardar modificationes
@@ -264,9 +264,9 @@ ia:
         changeset: gruppo de modificationes
         note: nota
     redacted:
-      redaction: Obscuration %{id}
+      redaction: Suppression %{id}
       message_html: Le version %{version} de iste %{type} non pote esser monstrate
-        perque illo ha essite obscurate. Vide %{redaction_link} pro detalios.
+        perque illo ha essite supprimite. Vide %{redaction_link} pro detalios.
       type:
         node: nodo
         way: via
@@ -741,6 +741,7 @@ ia:
           embankment: Terrapleno
           flagpole: Palo de baniera
           gasometer: Gasometro
+          groyne: Rumpeundas
           kiln: Furno
           lighthouse: Pharo
           mast: Mast
@@ -884,6 +885,7 @@ ia:
           beauty: Salon de beltate
           beverages: Boteca de bibitas
           bicycle: Magazin de bicyclettas
+          bookmaker: Agente de sponsiones
           books: Libreria
           boutique: Boutique
           butcher: Macelleria
@@ -922,11 +924,16 @@ ia:
           hairdresser: Perruccheria
           hardware: Quincalieria
           hifi: Hi-fi
+          houseware: Magazin de articulos domestic
+          interior_decoration: Decoration interior
           jewelry: Joieleria
           kiosk: Kiosque
+          kitchen: Magazin de cocina
           laundry: Lavanderia
+          lottery: Lotteria
           mall: Galeria mercante
           market: Mercato
+          massage: Massage
           mobile_phone: Boteca de telephonos mobile
           motorcycle: Magazin de motocyclos
           music: Magazin de musica
@@ -934,17 +941,25 @@ ia:
           optician: Optico
           organic: Boteca de alimentos organic
           outdoor: Magazin de sport al aere libere
+          paint: Magazin de colores
+          pawnbroker: Prestator sur pignore
           pet: Boteca de animales
           pharmacy: Pharmacia
           photo: Magazin de photographia
+          seafood: Fructos de mar
           second_hand: Magazin de secunde mano
           shoes: Scarperia
           sports: Magazin de sport
           stationery: Papireria
           supermarket: Supermercato
           tailor: Sartor
+          ticket: Billeteria
+          tobacco: Tabacheria
           toys: Magazin de joculos
           travel_agency: Agentia de viages
+          tyres: Magazin de pneus
+          vacant: Magazin vacante
+          variety_store: Magazin a precio unic
           video: Magazin de video
           wine: Magazin de vinos
           "yes": Boteca
@@ -970,6 +985,7 @@ ia:
           viewpoint: Puncto de vista
           zoo: Jardin zoologic
         tunnel:
+          building_passage: Passage sub edificio
           culvert: Tubo de aqua subterranee
           "yes": Tunnel
         waterway:
@@ -1066,9 +1082,10 @@ ia:
     reopen:
       reopened: Le stato del problema ha essite cambiate a 'Aperte'
     comments:
+      comment_from_html: Commento de %{user_link} del %{comment_created_at}
       reassign_param: Reassignar problema?
     reports:
-      reported_by_html: Reportate como %{category} per %{user}
+      reported_by_html: Reportate como %{category} per %{user} le %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, commento #%{comment_id}'
@@ -1272,10 +1289,10 @@ ia:
           de modificationes'
         subject_other: '[OpenStreetMap] %{commenter} ha commentate un gruppo de modificationes
           que te interessa'
-        your_changeset: '%{commenter} ha commentate un de tu gruppos de modificationes
-          create le %{time}'
-        commented_changeset: '%{commenter} ha commentate un gruppo de modificationes
-          que tu observa, create per %{changeset_author} le %{time}'
+        your_changeset: '%{commenter} ha commentate a %{time} un de tu gruppos de
+          modificationes'
+        commented_changeset: '%{commenter} ha commentate a %{time} un gruppo de modificationes
+          que tu observa, create per %{changeset_author}'
         partial_changeset_with_comment: con commento '%{changeset_comment}'
         partial_changeset_without_comment: sin commento
       details: Plus detalios sur le gruppo de modificationes pote esser trovate a
@@ -1390,10 +1407,10 @@ ia:
         OSMF es subjecte a nostre <a href=\"https://wiki.osmfoundation.org/wiki/Terms_of_Use\">conditiones
         de uso</a>, a nostre <a href=\"https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\npoliticas
         de uso acceptabile</a> e a nostre <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">politica
-        de confidentialitate</a>.\n<br> \n<a href=\"https://osmfoundation.org/Contact\">Contacta
-        OSMF</a> \nsi vos ha questiones sur licentias, derectos de autor o altere
-        themas juridic.\n<br>\nOpenStreetMap, le logotypo de lupa e \"State of the
-        Map\" es <a href=\"https://wiki.osmfoundation.org/wiki/Trademark_Policy\">marcas
+        de confidentialitate</a>."
+      legal_2_html: "<a href=\"https://osmfoundation.org/Contact\">Contacta OSMF</a>
+        \nsi vos ha questiones sur licentias, derectos de autor o altere themas juridic.\n<br>\nOpenStreetMap,
+        le logotypo de lupa e \"State of the Map\" es <a href=\"https://wiki.osmfoundation.org/wiki/Trademark_Policy\">marcas
         commercial registrate del OSMF</a>."
       partners_title: Partners
     copyright:
@@ -1416,23 +1433,20 @@ ia:
           href="https://opendatacommons.org/licenses/odbl/">Open Data
           Commons Open Database License</a> (ODbL) per le <a
           href="https://osmfoundation.org/">Fundation OpenStreetMap</a> (OSMF).
-        intro_2_html: |2-
-            Vos es libere de copiar, distribuer, transmitter e adaptar nostre cartas
-            e datos, a condition que vos da recognoscentia a OpenStreetMap e su
-            contributores. Si vos altera o extende nostre cartas e datos, vos
-            pote distribuer le resultato solmente sub le mesme licentia. Le
-            complete <a href="https://opendatacommons.org/licenses/odbl/1.0/">codice
-            legal</a> explica vostre derectos e responsabilitates.
-        intro_3_html: |-
-          Le cartographia in nostre tegulas de carta, e nostre documentation, son
-          publicate sub licentia <a href="https://creativecommons.org/licenses/by-sa/2.0/">Creative
+        intro_2_html: Vos es libere de copiar, distribuer, transmitter e adaptar nostre
+          datos, a condition que vos da recognoscentia a OpenStreetMap e su contributores.
+          Si vos altera o extende nostre datos, vos pote distribuer le resultato solmente
+          sub le mesme licentia. Le <a href="https://opendatacommons.org/licenses/odbl/1.0/">codice
+          juridic</a> complete explica vostre derectos e responsabilitates.
+        intro_3_html: Le cartographia in nostre tegulas cartographic, e nostre documentation,
+          es publicate sub licentia <a href="https://creativecommons.org/licenses/by-sa/2.0/">Creative
           Commons Attribution-ShareAlike 2.0</a> (CC-BY-SA).
         credit_title_html: Como dar recognoscentia a OpenStreetMap
         credit_1_html: |-
           Nos require que vos usa le recognoscentia &ldquo;&copy; OpenStreetMap
           contributors&rdquo;.
         credit_2_html: |-
-          Vos debe anque clarificar que le datos es disponibile sub Open Database License, e si vos usa nostre tegulas cartographic, que le cartographia es licentiate sub CC-BY-SA. Vos pote facer isto con un ligamine a <a href="https://www.openstreetmap.org/copyright">iste pagina de copyright</a>.
+          Vos debe etiam indicar clarmente que le datos es disponibile sub Open Database License, e si vos usa nostre tegulas cartographic, que le cartographia es licentiate sub CC-BY-SA. 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;), a opendatacommons.org, e (si relevante) a creativecommons.org.
         credit_3_html: 'Pro un carta electronic navigabile, le recognoscentia debe
           apparer in le angulo del carta. Per exemplo:'
@@ -1440,9 +1454,9 @@ ia:
           alt: Exemplo de como recognoscer OpenStreetMap in un pagina web
           title: Exemplo de recognoscentia
         more_title_html: Pro saper plus
-        more_1_html: |-
-          Lege plus sur le uso de nostre datos, e como recognoscer nos, in le <a
-          href="https://osmfoundation.org/Licence">pagina de licentia OSMF</a>.
+        more_1_html: Lege plus sur le uso de nostre datos, e sur como citar correctemente
+          lor fonte, in le <a href="https://osmfoundation.org/Licence">pagina de licentia
+          OSMF</a>.
         more_2_html: |-
           Ben que OpenStreetMap es datos aperte, nos non pote fornir un API cartographic gratuite pro tertios. Vide nostre <a href="https://operations.osmfoundation.org/policies/api/">politica pro le uso del API</a>,
           <a href="https://operations.osmfoundation.org/policies/tiles">politica pro le uso de tegulas</a>
@@ -1451,29 +1465,30 @@ ia:
         contributors_intro_html: 'Nostre contributores es milles de personas. Nos
           include anque le datos sub licentia aperte de agentias cartographic national
           e de altere fontes, inter le quales:'
-        contributors_at_html: |-
-          <strong>Austria</strong>: Contine datos ab le
-             <a href="https://data.wien.gv.at/">Citate de Vienna</a> licentiate sub
-             <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>.
-        contributors_au_html: |-
-          <strong>Australia</strong>: Contine datos de suburbios a base
-             de datos del Australian Bureau of Statistics.
+        contributors_at_html: '<strong>Austria</strong>: Contine datos ab le <a href="https://data.wien.gv.at/">Citate
+          de Vienna</a> licentiate sub <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> e Land Tirol (sub <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC
+          BY AT con emendamentos</a>).'
+        contributors_au_html: '<strong>Australia</strong>: Contine datos obtenite
+          ab <a href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA
+          Australia Limited</a> licentiate per le Commonwealth de Australia sub <a
+          href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.'
         contributors_ca_html: |-
           <strong>Canada</strong>: Contine datos ab
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
              Resources Canada), CanVec (&copy; Department of Natural
              Resources Canada), e StatCan (Geography Division,
              Statistics Canada).
-        contributors_fi_html: "<strong>Finlandia</strong>: Contine datos ab le base
-          de datos topographic del Inspection \nNational del Territorio de Finlandia
-          e de altere insimules de datos, sub le\n<a href=\"https://www.maanmittauslaitos.fi/en/NLS_open_data_licence_version1_20120501\">licentia
-          NLSFI</a>."
+        contributors_fi_html: '<strong>Finlandia</strong>: Contine datos ab le base
+          de datos topographic del Inspection National del Territorio de Finlandia
+          e de altere insimules de datos, sub le <a href="https://www.maanmittauslaitos.fi/en/opendata-licence-version1">licentia
+          NLSFI</a>.'
         contributors_fr_html: |-
           <strong>Francia</strong>: Contine datos fornite per le
              Direction Générale des Impôts.
-        contributors_nl_html: |-
-          <strong>Nederlandia</strong>: Contine datos &copy; AND, 2007
-          (<a href="https://www.and.com">www.and.com</a>)
+        contributors_nl_html: '<strong>Nederlandia</strong>: Contine datos &copy;
+          AND, 2007 (<a href="https://www.and.com">www.and.com</a>)'
         contributors_nz_html: '<strong>Nove Zelandia</strong>: Contine datos proveniente
           de <a href="https://data.linz.govt.nz/">LINZ Data Service</a> e licentiate
           pro re-uso sub <a href="https://creativecommons.org/licenses/by/4.0/">CC
@@ -1518,8 +1533,8 @@ ia:
         trademarks_title_html: <span id="trademarks"></span>Marcas commercial
         trademarks_1_html: OpenStreetMap, le logotypo con le lupa e "State of the
           Map" es marcas registrate del Fundation OpenStreetMap. Si vos ha questiones
-          sur le uso de iste marcas, invia los al <a href="https://wiki.osmfoundation.org/wiki/Licensing_Working_Group">gruppo
-          de labor sur licentias</a>.
+          sur le uso de iste marcas, vide nostre <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">politica
+          sur le marcas registrate</a>.
     index:
       js_1: O tu usa un navigator que non supporta JavaScript, o tu ha disactivate
         JavaScript.
@@ -2202,7 +2217,7 @@ ia:
       email address: 'Adresse de e-mail:'
       created from: 'Create ex:'
       status: 'Stato:'
-      spam score: 'Punctuation de spam:'
+      spam score: 'Punctos de spam:'
       description: Description
       user location: Position del usator
       if_set_location_html: Defini tu position de origine in le %{settings_link} pro
@@ -2417,10 +2432,10 @@ ia:
     new:
       title: Crea blocada de %{name}
       heading_html: Crea blocada de %{name}
-      reason: Le motivo proque %{name} es blocate. Per favor sia si calme e rationabile
+      reason: Le motivo proque %{name} es blocate. Per favor sia tanto calme e rationabile
         como possibile, e da tante detalios super le situation como tu pote. Non oblida
         que le message essera publicamente visibile. Nota ben que non tote le usatores
-        comprende le jargon del communitate, alora usa terminos simple e precise.
+        comprende le jargon del communitate, dunque usa terminos simple e precise.
       period: Quante tempore, a partir de ora, essera le usator blocate del API?
       tried_contacting: Io ha contactate le usator pro demandar le/la de cessar.
       tried_waiting: Io ha date sufficiente tempore al usator pro responder a iste
@@ -2430,9 +2445,9 @@ ia:
     edit:
       title: Modification de un blocada super %{name}
       heading_html: Modification de un blocada super %{name}
-      reason: Le motivo proque %{name} es blocate. Per favor resta si calme e rationabile
-        como possibile, e da tante detalios como tu pote super le situation. Nota
-        ben que non tote le usatores comprende le jargon del communitate, alora usa
+      reason: Le motivo proque %{name} es blocate. Per favor sia tanto calme e rationabile
+        como possibile, e da tante detalios super le situation como tu pote. Nota
+        ben que non tote le usatores comprende le jargon del communitate, dunque usa
         terminos simple e precise.
       period: Quante tempore, a partir de ora, essera le usator blocate del API?
       show: Examinar iste blocada
@@ -2565,6 +2580,8 @@ ia:
         out: Zoom retro
       locate:
         title: Monstrar mi position
+        metersUnit: metros
+        feetUnit: pedes
         popup: Tu es intra {distance} {unit} de iste puncto
       base:
         standard: Standard
@@ -2724,33 +2741,33 @@ ia:
   redactions:
     edit:
       description: Description
-      heading: Modificar obscuration
+      heading: Modificar suppression
       title: Modificar obscuration
     index:
-      empty: Il non ha obscurationes a monstrar.
+      empty: Il non ha suppressiones a monstrar.
       heading: Lista de obscurationes
-      title: Lista de obscurationes
+      title: Lista de suppressiones
     new:
       description: Description
-      heading: Specifica information pro nove obscuration
+      heading: Specifica information pro nove suppression
       title: Creation de nove obscuration
     show:
       description: 'Description:'
-      heading: Es monstrate le obscuration "%{title}"
+      heading: Es monstrate le suppression "%{title}"
       title: Presentation de obscuration
       user: 'Creator:'
-      edit: Modificar iste obscuration
+      edit: Modificar iste suppression
       destroy: Remover iste obscuration
       confirm: Es tu secur?
     create:
-      flash: Obscuration create.
+      flash: Suppression create.
     update:
       flash: Cambios salveguardate.
     destroy:
-      not_empty: Le obscuration non es vacue. Per favor disobscura tote le versiones
-        pertinente a iste obscuration ante de destruer lo.
+      not_empty: Le suppression non es vacue. Per favor dis-supprime tote le versiones
+        pertinente a iste suppression ante de destruer lo.
       flash: Obscuration destruite.
-      error: Un error occurreva durante le destruction de iste obscuration.
+      error: Un error occurreva durante le destruction de iste suppression.
   validations:
     leading_whitespace: ha spatios al initio
     trailing_whitespace: ha spatios al fin
index 1dfdcdf171810123a936405ad0bfe022c629f1ac..d1a06d47100c5b48255afeb1d92cdf66131b570d 100644 (file)
@@ -2028,7 +2028,7 @@ it:
       allow_write_api: modifica la mappa.
       allow_read_gpx: Visualizza i tuoi tracciati GPS
       allow_write_gpx: carica tracciati GPS.
-      allow_write_notes: modificare le note.
+      allow_write_notes: modifica le note.
       grant_access: Concedi l'accesso
     authorize_success:
       title: Richiesta di autorizzazione consentita
@@ -2059,13 +2059,13 @@ it:
       delete: Eliminare Client
       confirm: Sei sicuro?
       requests: 'Richieste le seguenti autorizzazioni da parte dell''utente:'
-      allow_read_prefs: leggi le loro preferenze utente.
+      allow_read_prefs: leggi le sue preferenze utente.
       allow_write_prefs: modifica le sue preferenze utente.
       allow_write_diary: crea pagine di diario, commenti e fai amicizia.
       allow_write_api: modifica la mappa.
-      allow_read_gpx: leggi i loro tracciati GPS privati.
+      allow_read_gpx: leggi i suoi tracciati GPS privati.
       allow_write_gpx: carica tracciati GPS.
-      allow_write_notes: modificare le note.
+      allow_write_notes: modifica le note.
     index:
       title: I miei dettagli OAuth
       my_tokens: Le mie applicazioni autorizzate
@@ -2088,12 +2088,12 @@ it:
       support_url: Indirizzo URL di supporto
       requests: 'Richiedi le seguenti autorizzazioni da parte dell''utente:'
       allow_read_prefs: leggi le sue preferenze utente.
-      allow_write_prefs: modifica le loro preferenze utente.
+      allow_write_prefs: modifica le sue preferenze utente.
       allow_write_diary: crea pagine di diario, commenti e fai amicizia.
       allow_write_api: modifica la mappa.
-      allow_read_gpx: visualizza i loro tracciati GPS privati.
+      allow_read_gpx: leggi i suoi tracciati GPS privati.
       allow_write_gpx: carica tracciati GPS.
-      allow_write_notes: modificare le note.
+      allow_write_notes: modifica le note.
     not_found:
       sorry: Siamo dolenti, quel %{type} non è stato trovato.
     create:
index 1381f7bbf01152707fa54c0174cec1e098dd4acb..dd1203d2b3eceb8ec58e90d7084ed70cd5282389 100644 (file)
@@ -101,11 +101,11 @@ lb:
     created: Ugeluecht
     closed: Zou
     created_html: Ugeluecht <abbr title='%{title}'>viru(n) %{time}</abbr>
-    closed_html: Zougemaach <abbr title='%{title}'>viru(n) %{time}</abbr>
-    created_by_html: Ugeluecht <abbr title='%{title}'>viru(n) %{time}</abbr> vum %{user}
-    deleted_by_html: Geläscht <abbr title='%{title}'>viru(n) %{time}</abbr> vum %{user}
-    edited_by_html: Geännert <abbr title='%{title}'>viru(n) %{time}</abbr> vum %{user}
-    closed_by_html: Zougemaach <abbr title='%{title}'>viru(n) %{time}</abbr> vum %{user}
+    closed_html: Zougemaach <abbr title='%{title}'> %{time}</abbr>
+    created_by_html: Ugeluecht <abbr title='%{title}'>%{time}</abbr> vum %{user}
+    deleted_by_html: Geläscht <abbr title='%{title}'>%{time}</abbr> vum %{user}
+    edited_by_html: Geännert <abbr title='%{title}'>%{time}</abbr> vum %{user}
+    closed_by_html: Zougemaach <abbr title='%{title}'>%{time}</abbr> vum %{user}
     version: Versioun
     in_changeset: Set vun Ännerungen
     anonymous: anonym
@@ -125,9 +125,8 @@ lb:
       relation: Relatiounen (%{count})
       relation_paginated: Relatiounen (%{x}-%{y} vu(n) %{count})
       comment: Bemierkungen (%{count})
-      hidden_commented_by: Verstoppt Bemierkung vum %{user} <abbr title='%{exact_time}'>
-        viru(n) %{when}</abbr>
-      commented_by: Bemierkung vum %{user} <abbr title='%{exact_time}'> viru(n) %{when}</abbr>
+      hidden_commented_by: Verstoppt Bemierkung vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      commented_by: Bemierkung vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
       changesetxml: XML mam Set vun Ännerungen
       osmchangexml: osmChange XML
       feed:
@@ -192,16 +191,13 @@ lb:
       opened_by: Ugeluecht vum %{user} <abbr title='%{exact_time}'>viru(n) %{when}</abbr>
       opened_by_anonymous: Ugeluecht vun engem Anonymen <abbr title='%{exact_time}'>
         viru(n) %{when}</abbr>
-      commented_by: Bemierkung vum %{user} <abbr title='%{exact_time}'> viru(n) %{when}</abbr>
-      commented_by_anonymous: Bemierkung vun engem Anonymen <abbr title='%{exact_time}'>
-        viru(n) %{when}</abbr>
-      closed_by: Geléist vum %{user} <abbr title='%{exact_time}'>viru(n) %{when}</abbr>
-      closed_by_anonymous: Geléist vun engem Anonymen <abbr title='%{exact_time}'>
-        viru(n) %{when}</abbr>
-      reopened_by: Reaktivéiert vum %{user} <abbr title='%{exact_time}'>viru(n) %{when}</abbr>
-      reopened_by_anonymous: Reaktivéiert vun engem Anonymen <abbr title='%{exact_time}'>
-        viru(n) %{when}</abbr>
-      hidden_by: Verstoppt vum %{user} <abbr title='%{exact_time}'>viru(n) %{when}</abbr>
+      commented_by: Bemierkung vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      commented_by_anonymous: Bemierkung vun engem Anonymen <abbr title='%{exact_time}'>%{when}</abbr>
+      closed_by: Geléist vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      closed_by_anonymous: Geléist vun engem Anonymen <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by: Reaktivéiert vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
+      reopened_by_anonymous: Reaktivéiert vun engem Anonymen <abbr title='%{exact_time}'>%{when}</abbr>
+      hidden_by: Verstoppt vum %{user} <abbr title='%{exact_time}'>%{when}</abbr>
   changesets:
     changeset_paging_nav:
       showing_page: Säit %{page}
@@ -220,17 +216,17 @@ lb:
       title: Sette vun Ännerungen
       title_user: Sette vun Ännerunge vum %{user}
       title_friend: Ännerungs-Sette vu menge Frënn
-      title_nearby: Sette vun Ännerunge vu Benotzer déi nobäi sinn
-      empty: Keng Sette vun Ännerunge fonnt.
-      empty_area: Keng Sette vun Ännerungen an dëser Géigend.
-      empty_user: Keng Sette vun Ännerunge vun dësem Benotzer.
-      no_more: Soss keng Ännerungssätz fonnt.
-      no_more_area: Keng weider Sette vun Ännerungen an dëser Géigend.
-      no_more_user: Keng weider Sette vun Ännerunge vun dësem Benotzer.
+      title_nearby: Gruppe vun Ännerunge vu Benotzer nobäi
+      empty: Keng Gruppe vun Ännerunge fonnt.
+      empty_area: Keng Gruppe vun Ännerungen an dëser Géigend.
+      empty_user: Keng Gruppe vun Ännerunge vun dësem Benotzer.
+      no_more: Soss keng Gruppe vun Ännerunge fonnt.
+      no_more_area: Keng weider Grupp vun Ännerungen an dëser Géigend.
+      no_more_user: Keng weider Gruppe vun Ännerunge vun dësem Benotzer.
       load_more: Méi lueden
   changeset_comments:
     comment:
-      commented_at_by_html: Viru(n) %{when} vum %{user} aktualiséiert
+      commented_at_by_html: '%{when} vum %{user} aktualiséiert'
   diary_entries:
     form:
       subject: 'Sujet:'
@@ -1129,7 +1125,7 @@ lb:
       notes: Notizen op der Kaart
       remove as friend: Frënd ewechhuelen
       add as friend: Frënd derbäisetzen
-      latest edit: 'Lescht Ännerung %{ago}:'
+      latest edit: 'Lescht Ännerung (%{ago}):'
       email address: 'E-Mail-Adress:'
       status: 'Status:'
       description: Beschreiwung
index 92da1e102bfd2777f3b73cfe250c8abc4957daae..2800372c2bc8c59f19b624bf534a69e4355dcc42 100644 (file)
@@ -131,7 +131,7 @@ ne:
     closed: समापन भएको
     created_html: <abbr title='%{title}'>%{time} अगाडि</abbr> बनाइएको
     closed_html: <abbr title='%{title}'>%{time} अगाडि</abbr> समापन गरिएको
-    created_by_html: <abbr title='%{title}'>%{time} à¤\85à¤\97ाडि</abbr> %{user}दà¥\8dवारा à¤¸à¤¿à¤°à¥\8dजना
+    created_by_html: <abbr title='%{title}'>%{time} à¤\85à¤\97ाडि</abbr> %{user}दà¥\8dवारा à¤¸à¥\83जना
       गरिएको
     deleted_by_html: <abbr title='%{title}'>%{time} अगाडि</abbr> %{user}द्वारा हटाइएको
     edited_by_html: <abbr title='%{title}'>%{time} अगाडि</abbr> %{user}द्वारा सम्पादन
@@ -272,24 +272,24 @@ ne:
       view_changeset_details: परिवर्तनहरूको विवरण हेर्नुहोस्
     changesets:
       id: आईडी(ID)
-      saved_at: सुरक्षित गरिएको समय-
+      saved_at: सुरक्षित गरिएको समय
       user: प्रयोगकर्ता
       comment: टिप्पणी
       area: क्षेत्र
     index:
       title: परिवर्नहरू
       title_user: '%{user}द्वरा गरिएका परिवर्तनहरू'
-      title_friend: à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤®à¤¿à¤¤à¥\8dरहरà¥\82दà¥\8dवारा à¤\97रिà¤\8fà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82
-      title_nearby: तपाईनजिक हुनुभएका प्रयोगकर्ताहरूद्वारा गरिएका परिवर्तनहरू
-      empty: कुनै पनि परिवर्तनहरू भेटिएनन् 
-      empty_area: यो क्षेत्रमा कुनै परिवर्तनहरू छैनन् 
-      empty_user: यस प्रयोगकर्ताद्वारा कुनै परिवर्तनहरू गरिएका छैनन् 
-      no_more: अन्य कुनै परिवर्तनहरू भेटिएनन् 
-      no_more_area: यो क्षेत्रमा अन्य कुनै परिवर्तनहरू छैनन् 
+      title_friend: तपाईको मित्रहरूद्वारा गरिएका परिवर्तनहरू
+      title_nearby: तपाई नजिक हुनुभएका प्रयोगकर्ताहरूद्वारा गरिएका परिवर्तनहरू
+      empty: कुनै पनि परिवर्तनहरू भेटिएनन्।
+      empty_area: यो क्षेत्रमा कुनै परिवर्तनहरू छैनन्।
+      empty_user: यस प्रयोगकर्ताद्वारा कुनै परिवर्तनहरू गरिएका छैनन्।
+      no_more: अन्य कुनै परिवर्तनहरू भेटिएनन्।
+      no_more_area: यो क्षेत्रमा अन्य कुनै परिवर्तनहरू छैनन्।
       no_more_user: यस प्रयोगकर्तटद्वारा अन्य कुनै परिवर्तनहरू गरिएका छैनन् ।
-      load_more: à¤\85à¤\9dà¥\88 à¤²à¥\8bड à¤\97र्नुहोस्
+      load_more: à¤\85à¤\9dà¥\88 à¤¬à¤¢à¥\80 à¤\96à¥\8bल्नुहोस्
     timeout:
-      sorry: à¤®à¤¾à¤« à¤\97रà¥\8dनà¥\81हà¥\8bला, à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\96à¥\8bà¤\9cà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82à¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\8dरापà¥\8dत à¤\97रà¥\8dन à¤¨à¤¿à¤\95à¥\88
+      sorry: माफ गर्नुहोला, तपाईले खोज्नुभएको परिवर्तनहरूको सूची प्राप्त गर्न निकै
         समय लाग्यो ।
   changeset_comments:
     comment:
@@ -351,7 +351,7 @@ ne:
     diary_comment:
       comment_from_html: '%{link_user}द्वारा %{comment_created_at}मा गरिएको टिप्पणी'
       hide_link: यो टिप्पणी लुकाउनुहोस्
-      confirm: à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97रà¥\8dनà¥\87
+      confirm: à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
     location:
       location: 'स्थान:'
       view: अवलोकन गर्ने
@@ -810,7 +810,7 @@ ne:
     user_diaries_tooltip: प्रयोगकर्ता डायरीहरू हेर्नुहोस्
     edit_with: '%{editor} प्रयोग गरेर सम्पादन गर्नुहोस्'
     tag_line: स्वतन्त्र र खुला विकी विश्व म्याप
-    intro_header: OpenStreetMap मा स्वागत छ!
+    intro_header: ओपन स्ट्रिट म्यापमा स्वागत छ!
     partners_partners: समर्थकहरू
     help: सहायता
     about: बारेमा
index d1f7f892066ea9ac02e19b1ec4b91466adcb9a4f..3ee128564d8ad6f5cf9f03f3966edb7468871cc8 100644 (file)
@@ -33,6 +33,7 @@
 # Author: McDutchie
 # Author: MedShot
 # Author: MrLeopold
+# Author: Mvexel
 # Author: Optilete
 # Author: Pje335
 # Author: Robin van der Linde
@@ -93,11 +94,11 @@ nl:
       friend: Vriend
       language: Taal
       message: Bericht
-      node: Knooppunt
-      node_tag: Nodetag
-      notifier: verwittigen
-      old_node: Oud Knooppunt
-      old_node_tag: Oude nodetag
+      node: Node
+      node_tag: Node Tag
+      notifier: Notifier
+      old_node: Oude Node
+      old_node_tag: Oude Node Tag
       old_relation: Oude relatie
       old_relation_member: Oud relatielid
       old_relation_tag: Oude relatietag
@@ -1125,9 +1126,10 @@ nl:
     reopen:
       reopened: De status van het probleem is ingesteld op 'Open'
     comments:
+      comment_from_html: Reactie van %{user_link} op %{comment_created_at}
       reassign_param: Probleem opnieuw toewijzen?
     reports:
-      reported_by_html: Gerapporteerd als %{category} door %{user}
+      reported_by_html: Als %{category} gerapporteerd door %{user} op %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, commentaar #%{comment_id}'
@@ -1335,8 +1337,8 @@ nl:
           wijzigingensets'
         subject_other: '[OpenStreetMap] %{commenter} heeft gereageerd op een wijzigingenset
           waar u interesse in hebt'
-        your_changeset: '%{commenter} heeft gereageerd op een van uw wijzigingensets
-          om %{time}'
+        your_changeset: '%{commenter} heeft om %{time} op een van uw wijzigingensets
+          gereageerd'
         commented_changeset: '%{commenter} heeft gereageerd om %{time} op een wijzigingenset
           die u volgt van %{changeset_author}'
         partial_changeset_with_comment: met reactie "%{changeset_comment}"
@@ -1448,17 +1450,16 @@ nl:
         resultaat alleen onder dezelfde licentie verder verspreiden. Zie de <a href=''%{copyright_path}''>pagina
         over Auteursrechten en Licentie</a> voor details.'
       legal_title: Juridisch
-      legal_1_html: "Deze site en tal van andere diensten worden formeel beheerd door
-        \n<a href=\"https://osmfoundation.org/\">OpenStreetMap Foundation</a> (OSMF)
-        \nnamens de gemeenschap. Het gebruik van alle door OSMF aangeboden diensten
-        is onderworpen\naan onze <a href=\"https://wiki.osmfoundation.org/wiki/Terms_of_Use\">gebruiksvoorwaarden</a>,
+      legal_1_html: "Deze site en gerelateerde diensten worden namens de OpenStreetMap
+        community beheerd door de \n<a href=\"https://osmfoundation.org/\">OpenStreetMap
+        Foundation</a> (OSMF). Het gebruik van deze website en diensten is onderworpen\naan
+        onze <a href=\"https://wiki.osmfoundation.org/wiki/Terms_of_Use\">gebruiksvoorwaarden</a>,
         ons <a href=\"https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nbeleid
-        voor aanvaardbaar gebruik</a> en ons <a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\">privacybeleid</a>.\n<br>
-        \n<a href=\"https://osmfoundation.org/Contact\">Neem contact op met de OSMF</a>
-        \nals u vragen of problemen hebt in verband met licenties, auteursrechten
-        of andere juridische zaken.\n<br>\nHet OpenStreetMap-vergrootglaslogo en State
-        of the Map zijn <a href=\"https://wiki.osmfoundation.org/wiki/Trademark_Policy\">geregistreerde
-        handelsmerken van de OSMF</a>."
+        voor aanvaardbaar gebruik</a> en ons <a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\">privacybeleid</a>."
+      legal_2_html: |-
+        <a href='https://osmfoundation.org/Contact'>Neem contact op met OSMF</a> als u vragen heeft omtrent licenties, copyright of andere juridische zaken.
+        <br />
+        "OpenStreetMap", het OpenStreetMap beeldmerk en "State of the Map" zijn <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">geregistreerde handelsmerken</a> van OSMF.
       partners_title: Partners
     copyright:
       foreign:
@@ -2081,6 +2082,7 @@ nl:
       no_apps_html: Heeft u een toepassing die u wilt registreren met de %{oauth}-standaard?
         Dan moet u uw webtoepassing registreren voordat u OAuth-verzoeken naar deze
         dienst kunt maken.
+      oauth: OAuth
       registered_apps: 'U hebt de onderstaande clientapplicaties geregistreerd:'
       register_new: Uw toepassing registreren
     form:
@@ -2645,6 +2647,8 @@ nl:
         out: Uitzoomen
       locate:
         title: Uw locatie weergeven
+        metersUnit: meter
+        feetUnit: voet
         popup: U bent binnen {distance} {unit} van dit punt
       base:
         standard: Standaard
index 0f134cc2529979e7a65f9f0a9a14c04919b8f709..d5d5fe0a3689ffac8d7512b860f13fcc34cee3d0 100644 (file)
@@ -8,6 +8,7 @@
 # Author: Guilhelma
 # Author: Macofe
 # Author: OpenStreetMap-oc
+# Author: Quentí
 ---
 oc:
   time:
@@ -285,7 +286,9 @@ oc:
         tag: La descripcion de la balisa <code>%{key}=%{value}</code> sul wiki
       wikidata_link: L’element %{page} sus Wikidata
       wikipedia_link: L’article « %{page} » sus Wikipèdia
+      wikimedia_commons_link: L'element %{page} sus Wikimedia Commons
       telephone_link: Sonar %{phone_number}
+      colour_preview: Apercebut de la color %{colour_value}
     note:
       title: 'Nòta : %{id}'
       new_note: Nòta novèla
@@ -408,6 +411,7 @@ oc:
     diary_comment:
       comment_from_html: Comentari de %{link_user} lo %{comment_created_at}
       hide_link: Amagar aqueste comentari
+      unhide_link: Amagar pas mai aqueste comentari
       confirm: Confirmar
       report: Denonciar aqueste comentari
     location:
@@ -1084,9 +1088,10 @@ oc:
     reopen:
       reopened: L'estat de l'incidéncia s'es establit en 'Dobèrt'.
     comments:
+      comment_from_html: Comentari de %{user_link} sus %{comment_created_at}
       reassign_param: Reasignar l’Incidéncia?
     reports:
-      reported_by_html: Raportat coma %{category} per %{user}
+      reported_by_html: Raportat coma %{category} per %{user} lo %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, comentari #%{comment_id}'
@@ -1291,8 +1296,8 @@ oc:
           de cambiaments'
         subject_other: '[OpenStreetMap] %{commenter} a comentat un ensemble de cambiaments
           al qual vos interessatz'
-        your_changeset: '%{commenter} a daissat un comentari sus un de vòstres ensembles
-          de cambiament creat lo %{time}'
+        your_changeset: '%{commenter} daissèt un comentari lo %{time} sus un de vòstres
+          ensembles de cambiaments'
         commented_changeset: '%{commenter} a fach un comentari per un ensems de cambiaments
           de %{changeset_author} a %{time} e que seguissètz'
         partial_changeset_with_comment: amb lo comentari  «&nbsp;%{changeset_comment}'&nbsp;»
index 292dcf3724a01945484d1ebe1341b9ea1674ef06..7462b9c8476ea0228ad6d1456ac2b889e00adfc4 100644 (file)
@@ -864,14 +864,14 @@ pt-PT:
           city: Capital de distrito
           city_block: Quarteirão
           country: País
-          county: Condado
+          county: Concelho
           farm: Quinta
           hamlet: Aldeia
           house: Casa
           houses: Casas
           island: Ilha
           islet: Ilhéu
-          isolated_dwelling: Casa isolada
+          isolated_dwelling: Habitação isolada
           locality: Localidade desabitada
           municipality: Município
           neighbourhood: Bairro
@@ -885,7 +885,7 @@ pt-PT:
           suburb: Subúrbio
           town: Cidade / Vila
           unincorporated_area: Área não incorporada
-          village: Capital de freguesia
+          village: Sede de freguesia
           "yes": Localidade
         railway:
           abandoned: Ferrovia abandonada
@@ -906,14 +906,14 @@ pt-PT:
           station: Estação ferroviária
           stop: Paragem ferroviária
           subway: Metropolitano
-          subway_entrance: Entrada para estação metropolitana
+          subway_entrance: Entrada para estação de metro
           switch: Agulha ferroviária
           tram: Linha de elétrico
           tram_stop: Paragem de elétrico
         shop:
           alcohol: Loja de bebidas alcoólicas
-          antiques: Antiguidades
-          art: Galeria de arte
+          antiques: Loja de antiguidades
+          art: Loja de artigos de arte
           bakery: Padaria
           beauty: Centro de estética
           beverages: Loja de bebidas
@@ -932,12 +932,12 @@ pt-PT:
           computer: Loja de componentes informáticos
           confectionery: Confeitaria
           convenience: Loja de conveniência
-          copyshop: Centro de cópias
+          copyshop: Loja de fotocópias
           cosmetics: Loja de cosméticos
           deli: Loja gourmet
           department_store: Grande armazém
           discount: Loja de descontos
-          doityourself: Loja de bricolatge
+          doityourself: Loja de bricolage
           dry_cleaning: Limpeza a seco
           electronics: Loja de electrónica
           estate_agent: Imobiliária
@@ -991,29 +991,29 @@ pt-PT:
           toys: Loja de brinquedos
           travel_agency: Agência de viagens
           tyres: Loja de pneus
-          vacant: Lojas vagas
-          variety_store: Lojas de variedades
+          vacant: Loja desocupada
+          variety_store: Loja dos chineses
           video: Videoclube
-          wine: Venda de bebidas
+          wine: Loja de vinhos
           "yes": Loja
         tourism:
-          alpine_hut: Albergue de Montanha
+          alpine_hut: Albergue alpino
           apartment: Apartamento de férias
           artwork: Obra de arte
-          attraction: Atracção
+          attraction: Atração
           bed_and_breakfast: Cama com pequeno-almoço incluído
-          cabin: Cabana
+          cabin: Casa de madeira
           camp_site: Parque de campismo
           caravan_site: Parque de caravanas
           chalet: Chalé
           gallery: Galeria
-          guest_house: Casa de Hóspedes
-          hostel: Pousada / Hostel
+          guest_house: Casa de hóspedes
+          hostel: Hostel
           hotel: Hotel
           information: Informação
           motel: Motel
           museum: Museu
-          picnic_site: Parque de merendas / piqueniques
+          picnic_site: Parque de merendas
           theme_park: Parque temático
           viewpoint: Miradouro
           zoo: Jardim zoológico
@@ -1023,7 +1023,7 @@ pt-PT:
           "yes": Túnel
         waterway:
           artificial: Curso de água artificial
-          boatyard: Estaleiro Naval
+          boatyard: Estaleiro naval
           canal: Canal
           dam: Barragem
           derelict_canal: Canal abandonado
@@ -1031,7 +1031,7 @@ pt-PT:
           dock: Doca
           drain: Vala de drenagem
           lock: Eclusa
-          lock_gate: Comporta de Eclusa
+          lock_gate: Comporta de eclusa
           mooring: Ancoragem
           rapids: Rápidos
           river: Rio
@@ -1039,15 +1039,15 @@ pt-PT:
           wadi: Uádi
           waterfall: Queda de água
           weir: Represa
-          "yes": Curso de Ã\81gua
+          "yes": Curso de Ã¡gua
       admin_levels:
-        level2: Fronteira de País
-        level4: Região
-        level5: Sub-região / Ilha
-        level6: Distrito
-        level8: Freguesia
-        level9: Localidade
-        level10: Lugar
+        level2: Fronteira nacional
+        level4: Fronteira estadual
+        level5: Fronteira distrital
+        level6: Fronteira municipal
+        level8: Limite de freguesia
+        level9: Limite de localidade
+        level10: Limite de subúrbio
     description:
       title:
         osm_nominatim: Resultado de <a href="https://nominatim.openstreetmap.org/">OpenStreetMap
@@ -1063,50 +1063,50 @@ pt-PT:
   issues:
     index:
       title: Problemas
-      select_status: Selecionar Estado
-      select_type: Selecionar Tipo
-      select_last_updated_by: Selecionar Ã\9altimo Atualizado por
-      reported_user: Denunciar Utilizador
-      not_updated: Não Atualizado
+      select_status: Selecionar estado
+      select_type: Selecionar tipo
+      select_last_updated_by: Selecionar Ãºltima atualização por
+      reported_user: Utilizador denunciado
+      not_updated: Não atualizado
       search: Pesquisar
-      search_guidance: 'Pesquisar Problemas:'
+      search_guidance: 'Pesquisar problemas:'
       user_not_found: O utilizador não existe
-      issues_not_found: Não foi encontrado nenhum problema desse tipo
+      issues_not_found: Não se encontraram problemas desse tipo
       status: Estado
       reports: Denúncias
-      last_updated: Última Atualização
+      last_updated: Última atualização
       last_updated_time_html: <abbr title='%{title}'>%{time}</abbr>
       last_updated_time_user_html: <abbr title='%{title}'>%{time}</abbr> por %{user}
-      link_to_reports: Ver Denúncias
+      link_to_reports: Ver denúncias
       reports_count:
         one: 1 denúncia
         other: '%{count} denúncias'
-      reported_item: Item Denunciado
+      reported_item: Elemento denunciado
       states:
         ignored: Ignorado
-        open: Aberto
-        resolved: Resolvido
+        open: Abertos
+        resolved: Resolvidos
     update:
-      new_report: A sua denúncia por registada com sucesso
-      successful_update: A sua denúncia foi atualizada com sucesso
-      provide_details: Por favor forneça os detalhes necessários
+      new_report: A denúncia foi registada com sucesso
+      successful_update: A denúncia foi atualizada com sucesso
+      provide_details: Por favor, fornece os detalhes necessários
     show:
       title: '%{status} Denúncia #%{issue_id}'
       reports:
         zero: Sem denúncias
         one: 1 denúncia
         other: '%{count} denúncias'
-      report_created_at: Denunciado primeiro em %{datetime}
-      last_resolved_at: Último resolvido em %{datetime}
-      last_updated_at: Último atualizado em %{datetime} por %{displayname}
+      report_created_at: Denunciado pela primeira vez em %{datetime}
+      last_resolved_at: Resolvido pela última vez em %{datetime}
+      last_updated_at: Atualizado pela última vez em %{datetime} por %{displayname}
       resolve: Resolver
       ignore: Ignorar
       reopen: Reabrir
-      reports_of_this_issue: Denúncias deste Problema
-      read_reports: Ler Denúncias
-      new_reports: Novas Denúncias
-      other_issues_against_this_user: Outros problemas sobre este utilizador
-      no_other_issues: Nenhum outro problema com este utilizador.
+      reports_of_this_issue: Denúncias deste problema
+      read_reports: Ler denúncias
+      new_reports: Novas denúncias
+      other_issues_against_this_user: Outros problemas associados a este utilizador
+      no_other_issues: Não há mais problemas associados a este utilizador.
       comments_on_this_issue: Comentários sobre este problema
     resolve:
       resolved: O estado do problema foi alterado para 'Resolvido'
@@ -1115,104 +1115,104 @@ pt-PT:
     reopen:
       reopened: O estado do problema foi alterado para 'Aberto'
     comments:
-      comment_from_html: Comentário de %{user_link} no %{comment_created_at}
+      comment_from_html: Comentário de %{user_link} em %{comment_created_at}
       reassign_param: Reatribuir o problema?
     reports:
-      reported_by_html: Reportado como %{category} por %{user} em %{updated_at}
+      reported_by_html: Denunciado como %{category} por %{user} em %{updated_at}
     helper:
       reportable_title:
         diary_comment: '%{entry_title}, comentário #%{comment_id}'
-        note: 'Erro reportado #%{note_id}'
+        note: 'Nota #%{note_id}'
   issue_comments:
     create:
-      comment_created: O seu comentário foi criado com sucesso
+      comment_created: O comentário foi criado com sucesso
   reports:
     new:
       title_html: Denunciar %{link}
-      missing_params: Não foi possível criar uma denúncia
-      details: Por favor forneça mais alguns detalhes sobre o problema (obrigatório).
-      select: Selecione um motivo para a sua denúnciaː
+      missing_params: Não foi possível criar nova denúncia
+      details: Por favor, fornece mais alguns detalhes sobre o problema (obrigatório).
+      select: Seleciona um motivo para a tua denúnciaː
       disclaimer:
-        intro: Antes de enviar a sua denúncia aos moderadores, por favor certifique-se
-          queː
-        not_just_mistake: Tem a certeza que o problema não é um mero engano
-        unable_to_fix: Não consegue corrigir o problema por si próprio nem com a ajuda
-          dos membros da comunidade
-        resolve_with_user: Já tentou resolver o problema com o utilizador em questão
+        intro: Antes de enviares a denúncia aos moderadores, por favor, certifica-te
+          de queː
+        not_just_mistake: Tens a certeza que o problema não é um mero engano
+        unable_to_fix: Não consegues corrigir o problema sozinho nem com a ajuda dos
+          membros da tua comunidade
+        resolve_with_user: Já tentaste resolver o problema com o utilizador em questão
       categories:
         diary_entry:
-          spam_label: Esta entrada do diário é ou contém SPAM/publicidade
-          offensive_label: Esta entrada do diário é obscena ou ofensiva
-          threat_label: Esta entrada do diário contém uma ameaça
+          spam_label: Esta entrada de diário é/contém spam
+          offensive_label: Esta entrada de diário é obscena/ofensiva
+          threat_label: Esta entrada de diário contém uma ameaça
           other_label: Outro
         diary_comment:
-          spam_label: Este comentário na entrada do diário é ou contém SPAM/publicidade
-          offensive_label: Este comentário na entrada do diário é obsceno ou ofensivo
-          threat_label: Este comentário na entrada do diário contém uma ameaça
+          spam_label: Este comentário é/contém spam
+          offensive_label: Este comentário é obsceno/ofensivo
+          threat_label: Este comentário contém uma ameaça
           other_label: Outro
         user:
-          spam_label: Este perfil de utilizador é ou contém SOAM/publicidade
-          offensive_label: Este perfil de utilizador é obsceno ou ofensivo
+          spam_label: Este perfil de utilizador é/contém spam
+          offensive_label: Este perfil de utilizador é obsceno/ofensivo
           threat_label: Este perfil de utilizador contém uma ameaça
           vandal_label: Este utilizador é um vândalo
           other_label: Outro
         note:
-          spam_label: Este erro reportado é SPAM/publicidade
-          personal_label: Este erro reportado contém dados pessoais
-          abusive_label: Este erro reportado é abusivo
+          spam_label: Esta nota é spam
+          personal_label: Esta nota contém dados pessoais
+          abusive_label: Esta nota é abusiva
           other_label: Outro
     create:
-      successful_report: A sua denúncia foi registada com sucesso
-      provide_details: Por favor forneça os detalhes necessários
+      successful_report: A tua denúncia foi registada com sucesso
+      provide_details: Por favor, fornece os detalhes necessários
   layouts:
     logo:
-      alt_text: Logotipo do OpenStreetMap
-    home: Localização inicial
+      alt_text: Logótipo do OpenStreetMap
+    home: Localização base
     logout: Terminar sessão
-    log_in: Iniciar Sessão
+    log_in: Iniciar sessão
     log_in_tooltip: Entrar com uma conta existente
-    sign_up: Criar Conta
-    start_mapping: Começar a cartografar
-    sign_up_tooltip: Criar uma conta para poder editar o mapa
+    sign_up: Criar conta
+    start_mapping: Começar a mapear
+    sign_up_tooltip: Cria uma conta para editares o mapa
     edit: Editar
     history: Histórico
     export: Exportar
     issues: Problemas
     data: Dados
     export_data: Exportar dados
-    gps_traces: Trilhos GPS
-    gps_traces_tooltip: Gerir os trilhos GPS
+    gps_traces: Rotas GPS
+    gps_traces_tooltip: Gerir rotas GPS
     user_diaries: Diários do utilizador
-    user_diaries_tooltip: Ver diários dos utilizadores
+    user_diaries_tooltip: Ver diários do utilizador
     edit_with: Editar com %{editor}
-    tag_line: O Mapa Mundial Livre e Editável
-    intro_header: Bem vindo ao OpenStreetMap!
-    intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como você e
-      de uso livre sob uma licença aberta.
-    intro_2_create_account: Crie uma conta de utilizador
+    tag_line: O mapa mundial livre e editável
+    intro_header: Bem-vind@ ao OpenStreetMap!
+    intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como tu e de
+      uso livre sob uma licença aberta.
+    intro_2_create_account: Cria uma conta de utilizador
     hosting_partners_html: O alojamento é suportado por %{ucl}, %{bytemark} e outros
       %{partners}.
     partners_ucl: UCL
     partners_bytemark: Bytemark Hosting
     partners_partners: parceiros
     tou: Condições de utilização
-    osm_offline: A base de dados do OpenStreetMap não está disponível neste momento
-      enquanto decorrerem trabalhos de manutenção.
-    osm_read_only: A base de dados do OpenStreetMap encontra-se neste momento no modo
-      de leitura, enquanto decorrerem trabalhos de manutenção.
-    donate: Apoie o OpenStreetMap %{link} para o Fundo de Atualização do Hardware.
+    osm_offline: A base de dados do OpenStreetMap está indisponível devido a trabalhos
+      de manutenção.
+    osm_read_only: A base de dados do OpenStreetMap encontra-se em modo de leitura
+      devido a trabalhos de manutenção.
+    donate: Apoia o OpenStreetMap %{link} para o Fundo de Atualização do Hardware.
     help: Ajuda
-    about: Acerca de
+    about: Sobre
     copyright: Direitos de autor
     community: Comunidade
-    community_blogs: Blogues da Comunidade
+    community_blogs: Blogues da comunidade
     community_blogs_title: Blogues de membros da comunidade OpenStreetMap
     foundation: Fundação
     foundation_title: A Fundação OpenStreetMap
     make_a_donation:
-      title: Suporte o OpenStreetMap com um donativo monetário
-      text: Fazer um Donativo
-    learn_more: Mais Informações
+      title: Apoia o OpenStreetMap com um donativo monetário
+      text: Fazer donativo
+    learn_more: Mais informações
     more: Mais
   notifier:
     diary_comment_notification:
@@ -1220,125 +1220,121 @@ pt-PT:
       hi: Olá %{to_user},
       header: '%{from_user} comentou a entrada do diário OpenStreetMap com o assunto
         %{subject}:'
-      footer: Também pode ler o comentário em %{readurl} e comentar em %{commenturl}
+      footer: Também podes ler o comentário em %{readurl} e comentar em %{commenturl}
         ou responder em %{replyurl}
     message_notification:
       hi: Olá %{to_user},
-      header: '%{from_user} enviou-lhe uma mensagem através do OpenStreetMap com o
+      header: '%{from_user} enviou-te uma mensagem através do OpenStreetMap com o
         assunto %{subject}:'
-      footer_html: Também pode ler a mensagem em %{readurl} e pode responder em %{replyurl}
+      footer_html: Também podes ler a mensagem em %{readurl} e responder em %{replyurl}
     friend_notification:
       hi: Olá %{to_user},
-      subject: '[OpenStreetMap] %{user} adicionou-o como amigo'
-      had_added_you: '%{user} adicionou-o como amigo no OpenStreetMap.'
-      see_their_profile: Pode ver o perfil do editor em %{userurl}.
-      befriend_them: Também pode adicioná-lo como amigo em %{befriendurl}.
+      subject: '[OpenStreetMap] %{user} adicionou-te como amigo'
+      had_added_you: '%{user} adicionou-te como amigo no OpenStreetMap.'
+      see_their_profile: Podes ver o perfil dele em %{userurl}.
+      befriend_them: Também podes adicioná-lo como amigo em %{befriendurl}.
     gpx_notification:
       greeting: Olá,
-      your_gpx_file: Parece que seu ficheiro GPX
+      your_gpx_file: Parece que o teu ficheiro GPX
       with_description: com a descrição
       and_the_tags: 'e com as seguintes etiquetas:'
       and_no_tags: e sem etiquetas.
       failure:
-        subject: '[OpenStreetMap] Erro de importação GPX'
-        failed_to_import: 'falhou na importação. Erro:'
-        more_info_1: Pode encontrar mais informação sobre erros em importações GPX
-          e como evitar
+        subject: '[OpenStreetMap] Erro ao importar GPX'
+        failed_to_import: 'falhou na importação. Eis o erro:'
+        more_info_1: Podes encontrar mais informação sobre erros de importação de
+          GPX e como evitar
         more_info_2: 'que ocorram novamente em:'
       success:
-        subject: '[OpenStreetMap] Importação de GPX bem sucedida'
+        subject: '[OpenStreetMap] Importação de GPX bem-sucedida'
         loaded_successfully: foi carregado com sucesso com %{trace_points} de %{possible_points}
           pontos possíveis.
     signup_confirm:
-      subject: '[OpenStreetMap] Bem vindo(a) ao OpenStreetMap'
+      subject: '[OpenStreetMap] Bem-vind@ ao OpenStreetMap'
       greeting: Olá!
-      created: Alguém (provavelmente você) acaba de criar uma conta em %{site_url}.
-      confirm: 'Antes de fazermos outra coisa, necessitamos que confirme que o pedido
-        partiu de si. Se fez o pedido clique na ligação seguinte para confirmar a
-        conta:'
-      welcome: Depois de confirmar a sua conta, forneceremos algumas informações para
-        começar a editar.
+      created: Alguém (provavelmente tu) acabou de criar uma conta em %{site_url}.
+      confirm: 'Antes de avançarmos, precisamos de confirmar que este pedido foi feito
+        por ti. Se sim, clica na ligação seguinte para confirmares a tua conta:'
+      welcome: Depois de confirmares a tua conta, dar-te-emos algumas informações
+        para começares a editar.
     email_confirm:
-      subject: '[OpenStreetMap] Confirme o seu endereço de e-mail'
+      subject: '[OpenStreetMap] Confirma o teu endereço de e-mail'
     email_confirm_plain:
       greeting: Olá,
-      hopefully_you: Alguém (provavelmente você) pediu para alterar o endereço de
-        email registado na conta em %{server_url} para o endereço %{new_address}.
-      click_the_link: Se foi você que fez o pedido, clique na ligação seguinte para
-        confirmar o pedido.
+      hopefully_you: Alguém (provavelmente tu) pediu para alterar o endereço de e-mail
+        em %{server_url} para o endereço %{new_address}.
+      click_the_link: Se foste tu a fazer o pedido, clica na ligação seguinte para
+        confirmares o pedido.
     email_confirm_html:
       greeting: Olá,
-      hopefully_you: Foi feito um pedido no site do OpenStreetMap para alterar o endereço
-        de e-mail da sua conta de %{server_url} para %{new_address}.
-      click_the_link: Se foi você que fez o pedido, clique na ligação seguinte para
-        confirmar a alteração.
+      hopefully_you: Alguém (esperamos que sejas tu) pretende alterar o endereço de
+        e-mail em %{server_url} para %{new_address}.
+      click_the_link: Se foste tu, clica na ligação seguinte para confirmares a alteração.
     lost_password:
-      subject: '[OpenStreetMap] Pedido de uma nova palavra-passe'
+      subject: '[OpenStreetMap] Pedido de nova palavra-passe'
     lost_password_plain:
       greeting: Olá,
-      hopefully_you: Alguém (provavelmente você) pediu para ser enviada uma nova palavra-passe
-        da conta no openstreetmap.org
-      click_the_link: Se foi você que fez o pedido, clique na ligação seguinte para
-        lhe ser enviada uma nova palavra-passe, invalidando a anterior.
+      hopefully_you: Alguém (provavelmente tu) pediu para definir uma nova palavra-passe
+        para a conta em openstreetmap.org associada a este e-mail.
+      click_the_link: Se foste tu, clica na ligação seguinte para criares uma nova
+        palavra-passe.
     lost_password_html:
       greeting: Olá,
-      hopefully_you: Foi feito um pedido para obter uma nova palavra-passe nesta conta
-        do openstreetmap.org associada a este e-mail.
-      click_the_link: Se foi você que fez o pedido, clique na ligação seguinte para
-        lhe ser enviada uma nova palavra-passe, invalidando a anterior.
+      hopefully_you: Alguém (provavelmente tu) pediu para definir uma nova palavra-passe
+        para a conta em openstreetmap.org associada a este e-mail.
+      click_the_link: Se foste tu, clica na ligação seguinte para criares uma nova
+        palavra-passe.
     note_comment_notification:
       anonymous: Um utilizador anónimo
       greeting: Olá,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} deixou um comentário num erro do
-          mapa que você reportou'
-        subject_other: '[OpenStreetMap] %{commenter} deixou um comentário num erro
-          do mapa que você reportou'
-        your_note: '%{commenter} deixou um comentário num erro do mapa que você reportou
-          perto de %{place}.'
-        commented_note: '%{commenter} deixou um comentário num erro do mapa no mapa
-          que você reportou. O erro reportado encontra-se perto de %{place}.'
+        subject_own: '[OpenStreetMap] %{commenter} deixou um comentário numa das tuas
+          notas'
+        subject_other: '[OpenStreetMap] %{commenter} deixou um comentário numa nota
+          que estás a vigiar'
+        your_note: '%{commenter} deixou um comentário numa das tuas notas perto de
+          %{place}.'
+        commented_note: '%{commenter} deixou um comentário numa nota comentada por
+          ti. A nota fica perto de %{place}.'
       closed:
-        subject_own: '[OpenStreetMap] %{commenter} resolveu um erro do mapa que você
-          reportou'
-        subject_other: '[OpenStreetMap] %{commenter} resolveu um erro no mapa que
-          você está interessado'
-        your_note: '%{commenter} resolveu um erro do mapa perto de %{place}.'
-        commented_note: '%{commenter} resolveu um erro do mapa que você comentou.
-          O erro do mapa encontra-se perto de %{place}.'
+        subject_own: '[OpenStreetMap] %{commenter} resolveu uma das tuas notas'
+        subject_other: '[OpenStreetMap] %{commenter} resolveu uma nota que estás a
+          vigiar'
+        your_note: '%{commenter} resolveu uma das tuas notas perto de %{place}.'
+        commented_note: '%{commenter} resolveu uma nota comentada por ti. A nota fica
+          perto de %{place}.'
       reopened:
-        subject_own: '[OpenStreetMap] %{commenter} reabriu um dos erros no mapa reportados
-          por si'
-        subject_other: '[OpenStreetMap] %{commenter} reabriu um dos erros no mapa
-          em que você está interessado'
-        your_note: '%{commenter} reabriu um erro no mapa reportado por si perto de
-          %{place}.'
-        commented_note: '%{commenter} reabriu um erro no mapa em que você comentou.
-          O erro encontra-se perto de %{place}.'
-      details: Ver mais detalhes sobre o erro reportado em %{url}.
+        subject_own: '[OpenStreetMap] %{commenter} reabriu uma das tuas notas.'
+        subject_other: '[OpenStreetMap] %{commenter} reabriu uma nota que estás a
+          vigiar'
+        your_note: '%{commenter} reabriu uma das tuas notas perto de %{place}.'
+        commented_note: '%{commenter} reabriu uma nota comentada por ti. A nota fica
+          perto de %{place}.'
+      details: Podes ver mais detalhes sobre a nota em %{url}.
     changeset_comment_notification:
       hi: Olá %{to_user},
       greeting: Olá,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} comentou um dos seus conjuntos
+        subject_own: '[OpenStreetMap] %{commenter} comentou um dos teus conjuntos
           de alterações'
         subject_other: '[OpenStreetMap] %{commenter} comentou um conjunto de alterações
-          no qual você está interessado'
-        your_changeset: '%{commenter} deixou um comentário a %{time} num dos seus
+          que estás a vigiar'
+        your_changeset: '%{commenter} deixou um comentário a %{time} num dos teus
           conjuntos de alterações'
         commented_changeset: '%{commenter} deixou um comentário a %{time} num conjunto
-          de alterações em que está interessado, criado por %{changeset_author}'
+          de alterações vigiado por ti, criado por %{changeset_author}'
         partial_changeset_with_comment: com o comentário '%{changeset_comment}'
         partial_changeset_without_comment: sem comentários
-      details: Pode encontrar mais informações sobre a edição em %{url}.
-      unsubscribe: Para deixar de seguir as atualizações deste conjunto de alterações,
-        aceda a %{url} e clique em "Anular subscrição".
+      details: Podes encontrar mais informações sobre o conjunto de alterações em
+        %{url}.
+      unsubscribe: Para deixares de receber atualizações sobre este conjunto de alterações,
+        visita %{url} e clica em "Anular subscrição".
   messages:
     inbox:
       title: Caixa de Entrada
       my_inbox: Caixa de entrada
-      outbox: caixa de saída
-      messages: Tem %{new_messages} e %{old_messages}
+      outbox: Caixa de saída
+      messages: Tens %{new_messages} e %{old_messages}
       new_messages:
         one: '%{count} mensagem nova'
         other: '%{count} mensagens novas'
@@ -1348,12 +1344,12 @@ pt-PT:
       from: De
       subject: Assunto
       date: Data
-      no_messages_yet_html: Ainda não tem mensagens. Por que não entrar em contacto
+      no_messages_yet_html: Ainda não tens mensagens. Porque não entras em contacto
         com algumas %{people_mapping_nearby_link}?
-      people_mapping_nearby: pessoas a cartografar nas redondezas
+      people_mapping_nearby: pessoas que mapeiam perto de ti
     message_summary:
       unread_button: Marcar como não lida
-      read_button: Marcar como lido
+      read_button: Marcar como lida
       reply_button: Responder
       destroy_button: Eliminar
     new:
@@ -1364,26 +1360,26 @@ pt-PT:
       back_to_inbox: Voltar à caixa de entrada
     create:
       message_sent: Mensagem enviada
-      limit_exceeded: Enviou muitas mensagens recentemente. Por favor aguarde e envie
-        mais tarde.
+      limit_exceeded: Enviaste muitas mensagens num curto espaço de tempo. Por favor,
+        aguarda um pouco antes de enviares mais.
     no_such_message:
       title: Esta mensagem não existe
-      heading: Esta mensagem não existe.
-      body: Desculpe, não existe nenhuma mensagem com esse identificador (ID).
+      heading: Esta mensagem não existe
+      body: Lamentamos, não existe nenhuma mensagem com esse identificador (id).
     outbox:
       title: Caixa de saída
       my_inbox_html: A minha %{inbox_link}
       inbox: caixa de entrada
       outbox: caixa de saída
       messages:
-        one: Tem %{count} mensagem enviada
-        other: Tem %{count} mensagens enviadas
+        one: Tens %{count} mensagem enviada
+        other: Tens %{count} mensagens enviadas
       to: Para
       subject: Assunto
       date: Data
-      no_sent_messages_html: Ainda não tem mensagens enviadas. Por que não entrar
+      no_sent_messages_html: Ainda não tens mensagens enviadas. Porque não entras
         em contacto com algumas %{people_mapping_nearby_link}?
-      people_mapping_nearby: pessoas a cartografar nas redondezas
+      people_mapping_nearby: pessoas que mapeiam perto de ti
     reply:
       wrong_user: Está autenticado como o utilizador `%{user}' mas a mensagem que
         pediu para responder não foi enviada para esse utilizador. Por favor entre
@@ -1460,7 +1456,7 @@ pt-PT:
         html: Está a ver a versão em Inglês da página de direitos de autor. Pode voltar
           à %{native_link} desta página ou, se preferir, %{mapping_link}.
         native_link: Versão em português
-        mapping_link: começar a cartografar
+        mapping_link: começar a mapear
       legal_babble:
         title_html: Licença e Direitos de autor
         intro_1_html: |-
index 9dfa06604707ca520c20dca2413c4108728bf23b..54c7e32224642f952536fd9bfc9c05fb107ba32d 100644 (file)
@@ -209,14 +209,17 @@ ru:
         one: '%{count} секунда назад'
         few: '%{count} секунды назад'
         many: '%{count} секунд назад'
+        other: '%{count} секунд назад'
       x_minutes:
         one: '%{count} минута назад'
         few: '%{count} минуты назад'
         many: '%{count} минут назад'
+        other: '%{count} минут назад'
       x_days:
         one: '%{count} день назад'
         few: '%{count} дня назад'
         many: '%{count} дней назад'
+        other: '%{count} дней назад'
       x_months:
         one: 1 месяц назад
         few: '%{count} месяца назад'
@@ -1161,6 +1164,7 @@ ru:
     reopen:
       reopened: Статус проблемы был установлен в "Открыто"
     comments:
+      comment_from_html: Комментарий участника %{user_link}, созданный %{comment_created_at}
       reassign_param: Переназначить проблему?
     reports:
       reported_by_html: Указано как %{category} пользователем %{user} в %{updated_at}
@@ -1366,10 +1370,10 @@ ru:
           пакетов правок'
         subject_other: '[OpenStreetMap] %{commenter} прокомментировал пакет правок,
           который вас интересует'
-        your_changeset: '%{commenter} оставил комментарий %{time} к одному из ваших
+        your_changeset: '%{time} %{commenter} оставил комментарий к одному из ваших
           пакетов правок'
         commented_changeset: '%{time} участник %{commenter} оставил комментарий к
-          Ð¿Ð°ÐºÐµÑ\82Ñ\83 Ð¿Ñ\80авок, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð²Ñ\8b Ð¾Ñ\82Ñ\81леживаеÑ\82е, Ñ\81озданномÑ\83 участником %{changeset_author}'
+          Ð¾Ñ\82Ñ\81леживаемомÑ\83 Ð²Ð°Ð¼Ð¸ Ð¿Ð°ÐºÐµÑ\82Ñ\83 Ð¿Ñ\80авок, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð±Ñ\8bл Ñ\81оздан участником %{changeset_author}'
         partial_changeset_with_comment: с комментарием '%{changeset_comment}'
         partial_changeset_without_comment: без комментария
       details: Дополнительные сведения о пакете правок можно найти на %{url}.
@@ -2688,6 +2692,8 @@ ru:
         out: Отдалить
       locate:
         title: Показать мое местоположение
+        metersUnit: метры
+        feetUnit: футы
         popup: Вы находитесь в {distance} {unit} от этой точки
       base:
         standard: Стандартный
index 6c69837f9d086a922e1935cdfc2a26da7d80d573..c3bc1fd79933fa7cbb4760560bbfe8d210d0e832 100644 (file)
@@ -46,7 +46,7 @@
 tr:
   time:
     formats:
-      friendly: '%e %B %Y saat %H.%M'
+      friendly: '%e %B %Y saat %H:%M'
   helpers:
     submit:
       diary_comment:
@@ -78,7 +78,7 @@ tr:
     models:
       acl: Erişim Kontrol Listesi
       changeset: Değişiklik Kaydı
-      changeset_tag: Değişiklik kayıdının etiketi
+      changeset_tag: Değişiklik Kaydının Etiketi
       country: Ülke
       diary_comment: Günlük Yorumu
       diary_entry: Günlük Girdisi
@@ -1732,7 +1732,7 @@ tr:
           sayfasında bilmeniz gerekenleri bulun.
       wiki:
         url: https://wiki.openstreetmap.org/
-        title: OpenStreetMap Wiki
+        title: OpenStreetMap Viki
         description: Ayrıntılı OpenStreetMap belgeleri için wiki'ye göz atın.
     sidebar:
       search_results: Arama Sonuçları
@@ -1905,9 +1905,9 @@ tr:
       tags_help: virgül (,) ile ayır
       visibility: 'Görünürlük:'
       visibility_help: bu ne demek?
-      visibility_help_url: https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
+      visibility_help_url: https://wiki.openstreetmap.org/wiki/Tr:Visibility_of_GPS_traces
       help: Yardım
-      help_url: https://wiki.openstreetmap.org/wiki/Upload
+      help_url: https://wiki.openstreetmap.org/wiki/Tr:Upload
     create:
       upload_trace: GPS İzi Gönder
       trace_uploaded: GPX dosya yüklendi ve veritabanına eklemek için bekliyor. Bu
@@ -2220,7 +2220,7 @@ tr:
       terms accepted: Yeni katılımcı şartları kabul ettiğin için teşekkür ederiz!
       terms declined: Yeni Katılımcı Koşulları kabul etmediğiniz için üzgünüz. Daha
         fazla bilgi için lütfen <a href="%{url}">buradaki wiki sayfasına</a> bakınız.
-      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+      terms declined url: https://wiki.openstreetmap.org/wiki/Tr:Contributor_Terms_Declined
     terms:
       title: Koşullar
       heading: Koşullar
@@ -2238,14 +2238,12 @@ tr:
       consider_pd: Yukarıdakilere ek olarak katkılarınızın kamu malı olarak kabul
         edilmesini de seçebilirsiniz
       consider_pd_why: bu nedir?
-      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
+      consider_pd_why_url: https://wiki.openstreetmap.org/wiki/Tr:Why_would_I_want_my_contributions_to_be_public_domain
       guidance_html: 'Buradaki bilgileri anlamanıza yardımcı olabilecek bilgiler:  <a
         href="%{summary}">okunabilir bir özet</a> ve ayrıca <a href="%{translations}">genel
         çeviriler</a>'
       continue: Devam
-      declined: |2-
-
-        https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+      declined: https://wiki.openstreetmap.org/wiki/Tr:Contributor_Terms_Declined
       decline: Reddet
       you need to accept or decline: Lütfen katılımcı şartlarını okuyunuz ve şartları
         kabul ya da ret ediniz.
@@ -2337,12 +2335,12 @@ tr:
       email never displayed publicly: (hiçbir zaman görüntülenmez)
       external auth: 'Harici Kimlik Doğrulama:'
       openid:
-        link: https://wiki.openstreetmap.org/wiki/OpenID
+        link: https://wiki.openstreetmap.org/wiki/Tr:OpenID
         link text: bu nedir?
       public editing:
         heading: 'Herkese açık düzenleme modu:'
         enabled: Etkin. Anonim değil ve verileri düzenleyebilir.
-        enabled link: https://wiki.openstreetmap.org/wiki/Anonymous_edits
+        enabled link: https://wiki.openstreetmap.org/wiki/Tr:Anonymous_edits
         enabled link text: bu nedir?
         disabled: Devre dışı ve verileri düzenleyemez; önceki düzenlemeleri hepsi
           anonimdir.
@@ -2364,7 +2362,7 @@ tr:
         review link text: Yeni Katkıda Bulunma Şartlarını incelemek ve kabul etmek
           için lütfen bu bağlantıyı kolaylık sağlamak için izleyin.
         agreed_with_pd: Ayrıca düzenlediklerin Kamu Malı olsun diye kabul ettin.
-        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
+        link: https://wiki.openstreetmap.org/wiki/Tr:Open_Database_License/Contributor_Terms
         link text: bu nedir?
       profile description: 'Tanıtım:'
       preferred languages: 'Tercih Edilen Diller:'
@@ -2372,9 +2370,7 @@ tr:
       image: 'Resim:'
       gravatar:
         gravatar: Gravatar kullanın
-        link: |2-
-
-          https://wiki.openstreetmap.org/wiki/Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Tr:Gravatar
         link text: bu nedir?
         disabled: Gravatar devre dışı bırakıldı.
         enabled: Gravatarınızın görüntüsü etkinleştirildi.
index 787d71cad60fbe1c2bce8b4f98f579d8cc8d121e..3ab1f25f3d4694bc29abd0685cf651cb5162f180 100644 (file)
@@ -172,24 +172,29 @@ uk:
         few: більше ніж %{count} роки тому
         other: більше ніж %{count} років тому
       x_seconds:
-        one: '%{count}  секунду тому'
+        one: '%{count} секунду тому'
         few: '%{count} секунди тому'
+        many: '%{count} секунд тому'
         other: '%{count} секунд тому'
       x_minutes:
         one: '%{count} хвилину тому'
         few: '%{count} хвилини тому'
+        many: '%{count} хвилин тому'
         other: '%{count} хвилин тому'
       x_days:
         one: '%{count} день тому'
         few: '%{count} дні тому'
+        many: '%{count} днів тому'
         other: '%{count} днів тому'
       x_months:
         one: '%{count} місяць тому'
         few: '%{count} місяці тому'
+        many: '%{count} місяців тому'
         other: '%{count} місяців тому'
       x_years:
         one: '%{count} рік тому'
         few: '%{count} роки тому'
+        many: '%{count} років тому'
         other: '%{count} років тому'
   editor:
     default: Типовий (зараз %{name})
index 9bea091dc41f4c5fb9fc23383e78c09f967a21d4..f36cc97de1f40de865c87556dcc3d17c4b13da41 100644 (file)
@@ -1756,7 +1756,7 @@ zh-TW:
       description: 說明:
       tags: 標籤:
       tags_help: 以逗點分隔
-      visibility: 可見性:
+      visibility: 能見度
       visibility_help: 這是什麼意思?
       visibility_help_url: https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
       help: 說明
@@ -1780,7 +1780,7 @@ zh-TW:
       description: 描述:
       tags: 標籤:
       tags_help: 以逗號分隔
-      visibility: 可見性:
+      visibility: 能見度
       visibility_help: 這是什麼意思?
       visibility_help_url: https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
     update:
@@ -1805,7 +1805,7 @@ zh-TW:
       edit_trace: 編輯這個軌跡
       delete_trace: 刪除這個軌跡
       trace_not_found: 找不到軌跡!
-      visibility: 可見性:
+      visibility: 能見度
       confirm_delete: 刪除這個軌跡?
     trace_paging_nav:
       showing_page: 第 %{page} 頁
index 6afa03ad599e42c2ea08045209a86bece9a88f6c..964bda4c117109f19ba85f9be6bea76ad4720a7a 100644 (file)
@@ -3,6 +3,6 @@
   "private": true,
   "dependencies": {},
   "devDependencies": {
-    "eslint": "^6.0.1"
+    "eslint": "^6.8.0"
   }
 }
index 53964b2db0f4ebccfe36ba57ded0e80d8ac29e71..88c6fa90f82dbff3f885feaea1d73a32c7189792 100644 (file)
@@ -1,11 +1,21 @@
 require "test_helper"
-require "minitest/mock"
 
 module Api
   class TracesControllerTest < ActionController::TestCase
+    # Use temporary directories with unique names for each test
+    # This allows the tests to be run in parallel.
+    def setup
+      @gpx_trace_dir_orig = Settings.gpx_trace_dir
+      @gpx_image_dir_orig = Settings.gpx_image_dir
+      Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
+      Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
+    end
+
     def teardown
-      File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
-      File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
+      FileUtils.remove_dir(Settings.gpx_trace_dir)
+      FileUtils.remove_dir(Settings.gpx_image_dir)
+      Settings.gpx_trace_dir = @gpx_trace_dir_orig
+      Settings.gpx_image_dir = @gpx_image_dir_orig
     end
 
     ##
index e959133a0afb7c5ee44c829c5764528cfaf0ed69..0f071914e08190418a1a7180aec6ce677f9af3ff 100644 (file)
@@ -873,7 +873,7 @@ class DiaryEntriesControllerTest < ActionController::TestCase
     get :comments, :params => { :display_name => user.display_name }
     assert_response :success
     assert_template :comments
-    assert_select "table.messages" do
+    assert_select "table.table-striped" do
       assert_select "tr", :count => 1 # header, no comments
     end
 
@@ -883,7 +883,7 @@ class DiaryEntriesControllerTest < ActionController::TestCase
     get :comments, :params => { :display_name => other_user.display_name }
     assert_response :success
     assert_template :comments
-    assert_select "table.messages" do
+    assert_select "table.table-striped" do
       assert_select "tr", :count => 2 # header and one comment
     end
 
index af0a86028b111dfb3a84ee6c59302be666c17590..d16f664554117818c96539ebdee7a02ba2c75c29 100644 (file)
@@ -24,9 +24,9 @@ class IssuesControllerTest < ActionController::TestCase
     assert_response :success
   end
 
-  def test_show
+  def test_show_moderator
     target_user = create(:user)
-    issue = create(:issue, :reportable => target_user, :reported_user => target_user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "moderator")
 
     # Access issue without login
     get :show, :params => { :id => issue.id }
@@ -42,17 +42,43 @@ class IssuesControllerTest < ActionController::TestCase
     # Access issue as administrator
     session[:user] = create(:administrator_user).id
     get :show, :params => { :id => issue.id }
+    assert_response :not_found
+
+    # Access issue as moderator
+    session[:user] = create(:moderator_user).id
+    get :show, :params => { :id => issue.id }
     assert_response :success
+  end
+
+  def test_show_administrator
+    target_user = create(:user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "administrator")
+
+    # Access issue without login
+    get :show, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to login_path(:referer => issue_path(issue))
+
+    # Access issue as normal user
+    session[:user] = create(:user).id
+    get :show, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to :controller => :errors, :action => :forbidden
 
     # Access issue as moderator
     session[:user] = create(:moderator_user).id
     get :show, :params => { :id => issue.id }
+    assert_response :not_found
+
+    # Access issue as administrator
+    session[:user] = create(:administrator_user).id
+    get :show, :params => { :id => issue.id }
     assert_response :success
   end
 
-  def test_resolve
+  def test_resolve_moderator
     target_user = create(:user)
-    issue = create(:issue, :reportable => target_user, :reported_user => target_user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "moderator")
 
     # Resolve issue without login
     get :resolve, :params => { :id => issue.id }
@@ -68,21 +94,47 @@ class IssuesControllerTest < ActionController::TestCase
     # Resolve issue as administrator
     session[:user] = create(:administrator_user).id
     get :resolve, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.resolved?
+
+    # Resolve issue as moderator
+    session[:user] = create(:moderator_user).id
+    get :resolve, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.resolved?
+  end
 
-    issue.reopen!
+  def test_resolve_administrator
+    target_user = create(:user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "administrator")
+
+    # Resolve issue without login
+    get :resolve, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to login_path(:referer => resolve_issue_path(issue))
+
+    # Resolve issue as normal user
+    session[:user] = create(:user).id
+    get :resolve, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to :controller => :errors, :action => :forbidden
 
     # Resolve issue as moderator
     session[:user] = create(:moderator_user).id
     get :resolve, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.resolved?
+
+    # Resolve issue as administrator
+    session[:user] = create(:administrator_user).id
+    get :resolve, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.resolved?
   end
 
-  def test_ignore
+  def test_ignore_moderator
     target_user = create(:user)
-    issue = create(:issue, :reportable => target_user, :reported_user => target_user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "moderator")
 
     # Ignore issue without login
     get :ignore, :params => { :id => issue.id }
@@ -98,21 +150,47 @@ class IssuesControllerTest < ActionController::TestCase
     # Ignore issue as administrator
     session[:user] = create(:administrator_user).id
     get :ignore, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.ignored?
+
+    # Ignore issue as moderator
+    session[:user] = create(:moderator_user).id
+    get :ignore, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.ignored?
+  end
+
+  def test_ignore_administrator
+    target_user = create(:user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "administrator")
+
+    # Ignore issue without login
+    get :ignore, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to login_path(:referer => ignore_issue_path(issue))
 
-    issue.reopen!
+    # Ignore issue as normal user
+    session[:user] = create(:user).id
+    get :ignore, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to :controller => :errors, :action => :forbidden
 
     # Ignore issue as moderator
     session[:user] = create(:moderator_user).id
     get :ignore, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.ignored?
+
+    # Ignore issue as administrator
+    session[:user] = create(:administrator_user).id
+    get :ignore, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.ignored?
   end
 
-  def test_reopen
+  def test_reopen_moderator
     target_user = create(:user)
-    issue = create(:issue, :reportable => target_user, :reported_user => target_user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "moderator")
 
     issue.resolve!
 
@@ -130,14 +208,42 @@ class IssuesControllerTest < ActionController::TestCase
     # Reopen issue as administrator
     session[:user] = create(:administrator_user).id
     get :reopen, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.open?
+
+    # Reopen issue as moderator
+    session[:user] = create(:moderator_user).id
+    get :reopen, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.open?
+  end
+
+  def test_reopen_administrator
+    target_user = create(:user)
+    issue = create(:issue, :reportable => target_user, :reported_user => target_user, :assigned_role => "administrator")
 
     issue.resolve!
 
+    # Reopen issue without login
+    get :reopen, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to login_path(:referer => reopen_issue_path(issue))
+
+    # Reopen issue as normal user
+    session[:user] = create(:user).id
+    get :reopen, :params => { :id => issue.id }
+    assert_response :redirect
+    assert_redirected_to :controller => :errors, :action => :forbidden
+
     # Reopen issue as moderator
     session[:user] = create(:moderator_user).id
     get :reopen, :params => { :id => issue.id }
+    assert_response :not_found
+    assert_equal false, issue.reload.open?
+
+    # Reopen issue as administrator
+    session[:user] = create(:administrator_user).id
+    get :reopen, :params => { :id => issue.id }
     assert_response :redirect
     assert_equal true, issue.reload.open?
   end
index 312d451d7e328cc37ea8d052effada071d4a88e6..72a3759390850b0fdb743d133feda1a96e43ed5f 100644 (file)
@@ -1,10 +1,20 @@
 require "test_helper"
-require "minitest/mock"
 
 class TracesControllerTest < ActionController::TestCase
+  # Use temporary directories with unique names for each test
+  # This allows the tests to be run in parallel.
+  def setup
+    @gpx_trace_dir_orig = Settings.gpx_trace_dir
+    @gpx_image_dir_orig = Settings.gpx_image_dir
+    Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
+    Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
+  end
+
   def teardown
-    File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
-    File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
+    FileUtils.remove_dir(Settings.gpx_trace_dir)
+    FileUtils.remove_dir(Settings.gpx_image_dir)
+    Settings.gpx_trace_dir = @gpx_trace_dir_orig
+    Settings.gpx_image_dir = @gpx_image_dir_orig
   end
 
   ##
index 713a5be17ee9aa84fcd76c35de3ee486c5c64ae7..961d52988fc0595c841e9464e9f4028b23447ef6 100644 (file)
@@ -19,12 +19,12 @@ FactoryBot.define do
 
     after(:create) do |trace, evaluator|
       if evaluator.fixture
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"),
-                     Rails.root.join("test", "gpx", "traces", "#{trace.id}.gpx"))
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
-                     Rails.root.join("test", "gpx", "images", "#{trace.id}.gif"))
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
-                     Rails.root.join("test", "gpx", "images", "#{trace.id}_icon.gif"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"),
+                       File.join(Settings.gpx_trace_dir, "#{trace.id}.gpx"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
+                       File.join(Settings.gpx_image_dir, "#{trace.id}.gif"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
+                       File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif"))
       end
     end
   end
diff --git a/test/gpx/images/.gitkeep b/test/gpx/images/.gitkeep
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/test/gpx/traces/.gitkeep b/test/gpx/traces/.gitkeep
deleted file mode 100644 (file)
index e69de29..0000000
index e0c65e33eeb58884dd23a9ebdbc1d7a909a53660..2955be3ad67768103b26f3446b5cd63734a3c03c 100644 (file)
@@ -1,11 +1,21 @@
 require "test_helper"
 require "gpx"
-require "minitest/mock"
 
 class TraceTest < ActiveSupport::TestCase
+  # Use temporary directories with unique names for each test
+  # This allows the tests to be run in parallel.
+  def setup
+    @gpx_trace_dir_orig = Settings.gpx_trace_dir
+    @gpx_image_dir_orig = Settings.gpx_image_dir
+    Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
+    Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
+  end
+
   def teardown
-    File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
-    File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
+    FileUtils.remove_dir(Settings.gpx_trace_dir)
+    FileUtils.remove_dir(Settings.gpx_image_dir)
+    Settings.gpx_trace_dir = @gpx_trace_dir_orig
+    Settings.gpx_image_dir = @gpx_image_dir_orig
   end
 
   def test_visible
@@ -178,166 +188,116 @@ class TraceTest < ActiveSupport::TestCase
     trace.destroy
   end
 
-  # When testing the trace.import method, care needs to be taken regarding the icon
-  # fixture files, since the fixtures could be overwritten by newly generated files.
-  # We use FakeFS to temporarily protect the real fixture files from being overwritten.
-
   def test_import_removes_previous_tracepoints
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      # Tracepoints don't have a primary key, so we use a specific latitude to
-      # check for successful deletion
-      create(:tracepoint, :latitude => 54321, :trace => trace)
-      assert_equal 1, Tracepoint.where(:latitude => 54321).count
+    trace = create(:trace, :fixture => "a")
+    # Tracepoints don't have a primary key, so we use a specific latitude to
+    # check for successful deletion
+    create(:tracepoint, :latitude => 54321, :trace => trace)
+    assert_equal 1, Tracepoint.where(:latitude => 54321).count
 
-      trace.import
+    trace.import
 
-      assert_equal 0, Tracepoint.where(:latitude => 54321).count
-    end
+    assert_equal 0, Tracepoint.where(:latitude => 54321).count
   end
 
   def test_import_creates_tracepoints
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count
+    trace = create(:trace, :fixture => "a")
+    assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count
 
-      trace.import
+    trace.import
 
-      trace.reload
-      assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
+    trace.reload
+    assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
 
-      # Check that the tile has been set prior to the bulk import
-      # i.e. that the callbacks have been run correctly
-      assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile
-    end
+    # Check that the tile has been set prior to the bulk import
+    # i.e. that the callbacks have been run correctly
+    assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile
   end
 
   def test_import_creates_icon
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
-      FileUtils.rm(icon_path)
-      assert_equal false, File.exist?(icon_path)
+    trace = create(:trace, :fixture => "a")
+    icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
+    FileUtils.rm(icon_path)
+    assert_equal false, File.exist?(icon_path)
 
-      trace.import
+    trace.import
 
-      assert_equal true, File.exist?(icon_path)
-    end
+    assert_equal true, File.exist?(icon_path)
   end
 
   def test_import_creates_large_picture
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
-      FileUtils.rm(large_picture_path)
-      assert_equal false, File.exist?(large_picture_path)
+    trace = create(:trace, :fixture => "a")
+    large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
+    FileUtils.rm(large_picture_path)
+    assert_equal false, File.exist?(large_picture_path)
 
-      trace.import
+    trace.import
 
-      assert_equal true, File.exist?(large_picture_path)
-    end
+    assert_equal true, File.exist?(large_picture_path)
   end
 
   def test_import_handles_bz2
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "c")
+    trace = create(:trace, :fixture => "c")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_plain
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
+    trace = create(:trace, :fixture => "a")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_plain_with_bom
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "b")
+    trace = create(:trace, :fixture => "b")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_gz
     trace = create(:trace, :fixture => "d")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_zip
     trace = create(:trace, :fixture => "f")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar
     trace = create(:trace, :fixture => "g")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar_gz
     trace = create(:trace, :fixture => "h")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar_bz2
     trace = create(:trace, :fixture => "i")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   private
index 08b1acb3460d1f7a7135d4bb0980771a2b887a15..ebf1d272a5015a481679a680acd959c9e398e093 100644 (file)
@@ -72,7 +72,7 @@ class IssuesTest < ApplicationSystemTestCase
   end
 
   def test_commenting
-    issue = create(:issue)
+    issue = create(:issue, :assigned_role => "moderator")
     sign_in_as(create(:moderator_user))
 
     visit issue_path(issue)
index 08f01e8e7d488c21c2b9493ca74434b5a82516ee..c19b809ecbcd102e4f606afa29a395ecfd2d681a 100644 (file)
@@ -28,6 +28,9 @@ module ActiveSupport
     include FactoryBot::Syntax::Methods
     include ActiveJob::TestHelper
 
+    # Run tests in parallel with specified workers
+    parallelize(:workers => :number_of_processors)
+
     ##
     # takes a block which is executed in the context of a different
     # ActionController instance. this is used so that code can call methods
index 4f069628c1e438a8e3c43f926a73ca03e7f89aea..706b1ac11d6585aa01f814d34d4af12473692cc9 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -3,56 +3,63 @@
 
 
 "@babel/code-frame@^7.0.0":
-  version "7.5.5"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
-  integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+  integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
   dependencies:
-    "@babel/highlight" "^7.0.0"
+    "@babel/highlight" "^7.8.3"
 
-"@babel/highlight@^7.0.0":
-  version "7.5.0"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
-  integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+"@babel/highlight@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
+  integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
   dependencies:
     chalk "^2.0.0"
     esutils "^2.0.2"
     js-tokens "^4.0.0"
 
-acorn-jsx@^5.0.2:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
-  integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
+"@types/color-name@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+  integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 
-acorn@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
-  integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
+acorn-jsx@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+  integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
+  integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
 
 ajv@^6.10.0, ajv@^6.10.2:
-  version "6.10.2"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
-  integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+  version "6.12.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
+  integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==
   dependencies:
-    fast-deep-equal "^2.0.1"
+    fast-deep-equal "^3.1.1"
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-ansi-escapes@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
-  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
-
-ansi-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+ansi-escapes@^4.2.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+  integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+  dependencies:
+    type-fest "^0.11.0"
 
 ansi-regex@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
   integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
 
+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.0, ansi-styles@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -60,6 +67,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
   dependencies:
     color-convert "^1.9.0"
 
+ansi-styles@^4.1.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+  integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+  dependencies:
+    "@types/color-name" "^1.1.1"
+    color-convert "^2.0.1"
+
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -90,7 +105,7 @@ 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, chalk@^2.1.0, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.1.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==
@@ -99,17 +114,25 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
+chalk@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
 chardet@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
   integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
 
-cli-cursor@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
-  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+cli-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
   dependencies:
-    restore-cursor "^2.0.0"
+    restore-cursor "^3.1.0"
 
 cli-width@^2.0.0:
   version "2.2.0"
@@ -123,11 +146,23 @@ color-convert@^1.9.0:
   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"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  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"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -168,6 +203,11 @@ emoji-regex@^7.0.1:
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
   integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
 
+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==
+
 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"
@@ -181,22 +221,22 @@ eslint-scope@^5.0.0:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
-eslint-utils@^1.4.2:
-  version "1.4.2"
-  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
-  integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
+eslint-utils@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
   dependencies:
-    eslint-visitor-keys "^1.0.0"
+    eslint-visitor-keys "^1.1.0"
 
-eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+eslint-visitor-keys@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
   integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
 
-eslint@^6.0.1:
-  version "6.2.2"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.2.2.tgz#03298280e7750d81fcd31431f3d333e43d93f24f"
-  integrity sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw==
+eslint@^6.8.0:
+  version "6.8.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+  integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
   dependencies:
     "@babel/code-frame" "^7.0.0"
     ajv "^6.10.0"
@@ -205,19 +245,19 @@ eslint@^6.0.1:
     debug "^4.0.1"
     doctrine "^3.0.0"
     eslint-scope "^5.0.0"
-    eslint-utils "^1.4.2"
+    eslint-utils "^1.4.3"
     eslint-visitor-keys "^1.1.0"
-    espree "^6.1.1"
+    espree "^6.1.2"
     esquery "^1.0.1"
     esutils "^2.0.2"
     file-entry-cache "^5.0.1"
     functional-red-black-tree "^1.0.1"
     glob-parent "^5.0.0"
-    globals "^11.7.0"
+    globals "^12.1.0"
     ignore "^4.0.6"
     import-fresh "^3.0.0"
     imurmurhash "^0.1.4"
-    inquirer "^6.4.1"
+    inquirer "^7.0.0"
     is-glob "^4.0.0"
     js-yaml "^3.13.1"
     json-stable-stringify-without-jsonify "^1.0.1"
@@ -226,7 +266,7 @@ eslint@^6.0.1:
     minimatch "^3.0.4"
     mkdirp "^0.5.1"
     natural-compare "^1.4.0"
-    optionator "^0.8.2"
+    optionator "^0.8.3"
     progress "^2.0.0"
     regexpp "^2.0.1"
     semver "^6.1.2"
@@ -236,13 +276,13 @@ eslint@^6.0.1:
     text-table "^0.2.0"
     v8-compile-cache "^2.0.3"
 
-espree@^6.1.1:
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
-  integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
+espree@^6.1.2:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+  integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
   dependencies:
-    acorn "^7.0.0"
-    acorn-jsx "^5.0.2"
+    acorn "^7.1.1"
+    acorn-jsx "^5.2.0"
     eslint-visitor-keys "^1.1.0"
 
 esprima@^4.0.0:
@@ -251,9 +291,9 @@ esprima@^4.0.0:
   integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
 
 esquery@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
-  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48"
+  integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==
   dependencies:
     estraverse "^4.0.0"
 
@@ -283,25 +323,25 @@ external-editor@^3.0.3:
     iconv-lite "^0.4.24"
     tmp "^0.0.33"
 
-fast-deep-equal@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
-  integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+fast-deep-equal@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+  integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
 
 fast-json-stable-stringify@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-  integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
 
-fast-levenshtein@~2.0.4:
+fast-levenshtein@~2.0.6:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
   integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
 
-figures@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
-  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+figures@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
   dependencies:
     escape-string-regexp "^1.0.5"
 
@@ -337,16 +377,16 @@ functional-red-black-tree@^1.0.1:
   integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 
 glob-parent@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954"
-  integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
+  integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
   dependencies:
     is-glob "^4.0.1"
 
 glob@^7.1.3:
-  version "7.1.4"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
-  integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -355,16 +395,23 @@ glob@^7.1.3:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-globals@^11.7.0:
-  version "11.12.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
-  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^12.1.0:
+  version "12.4.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+  integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+  dependencies:
+    type-fest "^0.8.1"
 
 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"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
 iconv-lite@^0.4.24:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -378,9 +425,9 @@ ignore@^4.0.6:
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
 import-fresh@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
-  integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+  integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
   dependencies:
     parent-module "^1.0.0"
     resolve-from "^4.0.0"
@@ -403,23 +450,23 @@ inherits@2:
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 
-inquirer@^6.4.1:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
-  integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+inquirer@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
+  integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==
   dependencies:
-    ansi-escapes "^3.2.0"
-    chalk "^2.4.2"
-    cli-cursor "^2.1.0"
+    ansi-escapes "^4.2.1"
+    chalk "^3.0.0"
+    cli-cursor "^3.1.0"
     cli-width "^2.0.0"
     external-editor "^3.0.3"
-    figures "^2.0.0"
-    lodash "^4.17.12"
-    mute-stream "0.0.7"
-    run-async "^2.2.0"
-    rxjs "^6.4.0"
-    string-width "^2.1.0"
-    strip-ansi "^5.1.0"
+    figures "^3.0.0"
+    lodash "^4.17.15"
+    mute-stream "0.0.8"
+    run-async "^2.4.0"
+    rxjs "^6.5.3"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
     through "^2.3.6"
 
 is-extglob@^2.1.1:
@@ -432,6 +479,11 @@ is-fullwidth-code-point@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
   integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
 
+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"
@@ -480,15 +532,15 @@ levn@^0.3.0, levn@~0.3.0:
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
 
-lodash@^4.17.12, lodash@^4.17.14:
+lodash@^4.17.14, lodash@^4.17.15:
   version "4.17.15"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
   integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
 
-mimic-fn@^1.0.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
-  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
 
 minimatch@^3.0.4:
   version "3.0.4"
@@ -514,10 +566,10 @@ ms@^2.1.1:
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
 
-mute-stream@0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+mute-stream@0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
 
 natural-compare@^1.4.0:
   version "1.4.0"
@@ -536,24 +588,24 @@ once@^1.3.0:
   dependencies:
     wrappy "1"
 
-onetime@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
-  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+onetime@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+  integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
   dependencies:
-    mimic-fn "^1.0.0"
+    mimic-fn "^2.1.0"
 
-optionator@^0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
-  integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+optionator@^0.8.3:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
   dependencies:
     deep-is "~0.1.3"
-    fast-levenshtein "~2.0.4"
+    fast-levenshtein "~2.0.6"
     levn "~0.3.0"
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
-    wordwrap "~1.0.0"
+    word-wrap "~1.2.3"
 
 os-tmpdir@~1.0.2:
   version "1.0.2"
@@ -602,12 +654,12 @@ resolve-from@^4.0.0:
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 
-restore-cursor@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
-  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+restore-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
   dependencies:
-    onetime "^2.0.0"
+    onetime "^5.1.0"
     signal-exit "^3.0.2"
 
 rimraf@2.6.3:
@@ -617,17 +669,17 @@ rimraf@2.6.3:
   dependencies:
     glob "^7.1.3"
 
-run-async@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
-  integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+run-async@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
+  integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==
   dependencies:
     is-promise "^2.1.0"
 
-rxjs@^6.4.0:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
-  integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
+rxjs@^6.5.3:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
+  integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
   dependencies:
     tslib "^1.9.0"
 
@@ -677,14 +729,6 @@ sprintf-js@~1.0.2:
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
-string-width@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
-  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
-  dependencies:
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^4.0.0"
-
 string-width@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
@@ -694,12 +738,14 @@ string-width@^3.0.0:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^5.1.0"
 
-strip-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
-  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+string-width@^4.1.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:
-    ansi-regex "^3.0.0"
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.0"
 
 strip-ansi@^5.1.0, strip-ansi@^5.2.0:
   version "5.2.0"
@@ -708,6 +754,13 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0:
   dependencies:
     ansi-regex "^4.1.0"
 
+strip-ansi@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+  integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+  dependencies:
+    ansi-regex "^5.0.0"
+
 strip-json-comments@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
@@ -720,6 +773,13 @@ supports-color@^5.3.0:
   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"
+  integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+  dependencies:
+    has-flag "^4.0.0"
+
 table@^5.2.3:
   version "5.4.6"
   resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@@ -748,9 +808,9 @@ tmp@^0.0.33:
     os-tmpdir "~1.0.2"
 
 tslib@^1.9.0:
-  version "1.10.0"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
-  integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
+  integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
 
 type-check@~0.3.2:
   version "0.3.2"
@@ -759,6 +819,16 @@ type-check@~0.3.2:
   dependencies:
     prelude-ls "~1.1.2"
 
+type-fest@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+  integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+type-fest@^0.8.1:
+  version "0.8.1"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+  integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
 uri-js@^4.2.2:
   version "4.2.2"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
@@ -778,10 +848,10 @@ which@^1.2.9:
   dependencies:
     isexe "^2.0.0"
 
-wordwrap@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+word-wrap@~1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
 
 wrappy@1:
   version "1.0.2"