]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4226'
authorTom Hughes <tom@compton.nu>
Tue, 3 Oct 2023 18:39:41 +0000 (19:39 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 3 Oct 2023 18:39:41 +0000 (19:39 +0100)
82 files changed:
.rubocop.yml
Dockerfile
Gemfile
Gemfile.lock
Vendorfile
app/assets/images/banners/StateoftheMapEurope_2023.png [new file with mode: 0644]
app/assets/javascripts/leaflet.map.js
app/assets/javascripts/osm.js.erb
app/assets/stylesheets/common.scss
app/assets/stylesheets/print.scss
app/helpers/banner_helper.rb
app/helpers/issues_helper.rb
app/helpers/user_roles_helper.rb
app/views/account/deletions/show.html.erb
app/views/changesets/_changeset.html.erb
app/views/layouts/_flash.html.erb
app/views/layouts/_header.html.erb
app/views/layouts/_search.html.erb
app/views/layouts/error.html.erb
app/views/traces/index.html.erb
config/banners.yml
config/initializers/config.rb
config/initializers/secure_headers.rb
config/locales/ar.yml
config/locales/bg.yml
config/locales/br.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cs.yml
config/locales/cy.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/ia.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/nn.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sl.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/settings.yml
test/controllers/api/changesets_controller_test.rb
test/controllers/api/nodes_controller_test.rb
test/controllers/api/relations_controller_test.rb
test/controllers/api/users_controller_test.rb
test/controllers/api/ways_controller_test.rb
test/controllers/changesets_controller_test.rb
test/controllers/user_blocks_controller_test.rb
test/helpers/issues_helper_test.rb [new file with mode: 0644]
test/helpers/user_roles_helper_test.rb
test/lib/locale_test.rb
test/lib/password_hash_test.rb
test/lib/short_link_test.rb
test/system/account_deletion_test.rb
test/system/diary_entry_test.rb
test/system/issues_test.rb
test/system/preferences_test.rb
test/system/report_diary_comment_test.rb
test/system/report_diary_entry_test.rb
test/system/report_note_test.rb
test/system/report_user_test.rb
test/system/user_logout_test.rb
test/system/user_signup_test.rb
test/system/user_status_change_test.rb
test/system/view_communities_test.rb
test/test_helper.rb
vendor/assets/leaflet/leaflet.osm.js
yarn.lock

index f8060f9484cc72939fd84e9ac2f94a98804468b4..dc2a33a35b05d863e828a7afd5649ec8461534b4 100644 (file)
@@ -17,11 +17,6 @@ AllCops:
 Rails:
   Enabled: true
 
-# Config can be removed after https://github.com/rubocop/rubocop-factory_bot/issues/53
-FactoryBot/AssociationStyle:
-  Include:
-    - 'test/factories/**/*'
-
 Layout/ExtraSpacing:
   AllowForAlignment: true
 
index f3c56e1615c922c53a91dd5aaae86ea9a51c0d64..446f71ac32e8d25702a89c00d3af931400a2728b 100644 (file)
@@ -9,6 +9,7 @@ RUN apt-get update \
       curl \
       default-jre-headless \
       file \
+      git-core \
       gpg-agent \
       libarchive-dev \
       libffi-dev \
diff --git a/Gemfile b/Gemfile
index b738fa1592bae068fb49312e2cd5971fdc7c4c6d..724dd3beccac75ba929b6ac55fa144ad97696215 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -10,7 +10,9 @@ gem "json"
 gem "pg"
 
 # Use SCSS for stylesheets
-gem "sassc-rails"
+gem "dartsass-sprockets"
+# Pin the dependentent sass-embedded to avoid deprecation warnings in bootstrap
+gem "sass-embedded", "~> 1.64.0"
 
 # Use Terser as compressor for JavaScript assets
 gem "terser"
@@ -43,7 +45,7 @@ gem "sprockets-exporters_pack"
 gem "actionpack-page_caching", ">= 1.2.0"
 gem "activerecord-import"
 gem "active_record_union"
-gem "bootstrap", "~> 5.1.0"
+gem "bootstrap", :github => "gravitystorm/bootstrap-rubygem", :branch => "dartsass_5_2_3"
 gem "bootstrap_form", "~> 5.0"
 gem "cancancan"
 gem "composite_primary_keys", "~> 14.0.0"
index 35d67d32763a5aa5d880b811a6859219ff274246..c8784ed7c2d40195cd5c3f72c31d2a1f183fc4e0 100644 (file)
@@ -1,3 +1,12 @@
+GIT
+  remote: https://github.com/gravitystorm/bootstrap-rubygem.git
+  revision: 7bd2caa8a2897a55892915a789d4e020906adb60
+  branch: dartsass_5_2_3
+  specs:
+    bootstrap (5.2.3)
+      autoprefixer-rails (>= 9.1.0)
+      popper_js (>= 2.11.6, < 3)
+
 GEM
   remote: https://rubygems.org/
   specs:
@@ -86,16 +95,16 @@ GEM
     autoprefixer-rails (10.4.15.0)
       execjs (~> 2)
     aws-eventstream (1.2.0)
-    aws-partitions (1.820.0)
-    aws-sdk-core (3.181.0)
+    aws-partitions (1.831.0)
+    aws-sdk-core (3.185.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.5)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.71.0)
-      aws-sdk-core (~> 3, >= 3.177.0)
+    aws-sdk-kms (1.72.0)
+      aws-sdk-core (~> 3, >= 3.184.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.134.0)
+    aws-sdk-s3 (1.136.0)
       aws-sdk-core (~> 3, >= 3.181.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.6)
@@ -117,13 +126,9 @@ GEM
       debug_inspector (>= 0.0.1)
     bootsnap (1.16.0)
       msgpack (~> 1.2)
-    bootstrap (5.1.3)
-      autoprefixer-rails (>= 9.1.0)
-      popper_js (>= 2.9.3, < 3)
-      sassc-rails (>= 2.0.0)
-    bootstrap_form (5.2.3)
-      actionpack (>= 6.0)
-      activemodel (>= 6.0)
+    bootstrap_form (5.3.2)
+      actionpack (>= 6.1)
+      activemodel (>= 6.1)
     brakeman (6.0.1)
     brotli (0.4.0)
     browser (5.3.1)
@@ -152,7 +157,15 @@ GEM
     crack (0.4.5)
       rexml
     crass (1.0.6)
-    dalli (3.2.5)
+    dalli (3.2.6)
+    dartsass-ruby (3.0.1)
+      sass-embedded (~> 1.54)
+    dartsass-sprockets (3.0.0)
+      dartsass-ruby (~> 3.0)
+      railties (>= 4.0.0)
+      sprockets (> 3.0)
+      sprockets-rails
+      tilt
     date (3.3.3)
     debug_inspector (1.1.0)
     deep_merge (1.2.2)
@@ -164,7 +177,7 @@ GEM
     docile (1.4.0)
     doorkeeper (5.6.6)
       railties (>= 5)
-    doorkeeper-i18n (5.2.6)
+    doorkeeper-i18n (5.2.7)
       doorkeeper (>= 5.2)
     doorkeeper-openid_connect (1.8.7)
       doorkeeper (>= 5.5, < 5.7)
@@ -209,7 +222,7 @@ GEM
       rubocop
       smart_properties
     erubi (1.12.0)
-    execjs (2.9.0)
+    execjs (2.9.1)
     exifr (1.4.0)
     factory_bot (6.2.1)
       activesupport (>= 5.0.0)
@@ -221,11 +234,11 @@ GEM
       faraday-net_http (>= 2.0, < 3.1)
       ruby2_keywords (>= 0.0.4)
     faraday-net_http (3.0.2)
-    ffi (1.15.5)
+    ffi (1.16.2)
     ffi-compiler (1.0.1)
       ffi (>= 1.0.0)
       rake
-    ffi-libarchive (1.1.3)
+    ffi-libarchive (1.1.13)
       ffi (~> 1.0)
     frozen_record (0.27.0)
       activemodel
@@ -234,6 +247,7 @@ GEM
       ffi (>= 1.0.0)
     globalid (1.2.1)
       activesupport (>= 6.1)
+    google-protobuf (3.24.3)
     hashdiff (1.0.1)
     hashie (5.0.0)
     highline (2.1.0)
@@ -316,7 +330,7 @@ GEM
       net-protocol
     net-protocol (0.2.1)
       timeout
-    net-smtp (0.3.3)
+    net-smtp (0.4.0)
       net-protocol
     nio4r (2.5.9)
     nokogiri (1.15.4)
@@ -439,7 +453,7 @@ GEM
     rinku (2.0.6)
     rotp (6.3.0)
     rouge (4.1.3)
-    rubocop (1.56.3)
+    rubocop (1.56.4)
       base64 (~> 0.1.1)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
@@ -453,16 +467,16 @@ GEM
       unicode-display_width (>= 2.4.0, < 3.0)
     rubocop-ast (1.29.0)
       parser (>= 3.2.1.0)
-    rubocop-capybara (2.18.0)
+    rubocop-capybara (2.19.0)
       rubocop (~> 1.41)
-    rubocop-factory_bot (2.23.1)
+    rubocop-factory_bot (2.24.0)
       rubocop (~> 1.33)
-    rubocop-minitest (0.31.1)
+    rubocop-minitest (0.32.2)
       rubocop (>= 1.39, < 2.0)
-    rubocop-performance (1.19.0)
+    rubocop-performance (1.19.1)
       rubocop (>= 1.7.0, < 2.0)
       rubocop-ast (>= 0.4.0)
-    rubocop-rails (2.21.0)
+    rubocop-rails (2.21.2)
       activesupport (>= 4.2.0)
       rack (>= 1.1)
       rubocop (>= 1.33.0, < 2.0)
@@ -474,19 +488,14 @@ GEM
       ffi (~> 1.12)
     ruby2_keywords (0.0.5)
     rubyzip (2.3.2)
-    sanitize (6.0.2)
+    sanitize (6.1.0)
       crass (~> 1.0.2)
       nokogiri (>= 1.12.0)
-    sassc (2.4.0)
-      ffi (~> 1.9)
-    sassc-rails (2.1.2)
-      railties (>= 4.0.0)
-      sassc (>= 2.0)
-      sprockets (> 3.0)
-      sprockets-rails
-      tilt
+    sass-embedded (1.64.2)
+      google-protobuf (~> 3.23)
+      rake (>= 13.0.0)
     secure_headers (6.5.0)
-    selenium-webdriver (4.12.0)
+    selenium-webdriver (4.13.1)
       rexml (~> 3.2, >= 3.2.5)
       rubyzip (>= 1.2.2, < 3.0)
       websocket (~> 1.0)
@@ -511,18 +520,18 @@ GEM
       actionpack (>= 5.2)
       activesupport (>= 5.2)
       sprockets (>= 3.0.0)
-    strong_migrations (1.6.1)
+    strong_migrations (1.6.3)
       activerecord (>= 5.2)
     terminal-table (3.0.2)
       unicode-display_width (>= 1.1.1, < 3)
     terser (1.1.18)
       execjs (>= 0.3.0, < 3)
     thor (1.2.2)
-    tilt (2.2.0)
+    tilt (2.3.0)
     timeout (0.4.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
-    unicode-display_width (2.4.2)
+    unicode-display_width (2.5.0)
     validates_email_format_of (1.7.2)
       i18n
     vendorer (0.2.0)
@@ -531,13 +540,13 @@ GEM
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
-    websocket (1.2.9)
+    websocket (1.2.10)
     websocket-driver (0.7.6)
       websocket-extensions (>= 0.1.0)
     websocket-extensions (0.1.5)
     xpath (3.2.0)
       nokogiri (~> 1.8)
-    zeitwerk (2.6.11)
+    zeitwerk (2.6.12)
 
 PLATFORMS
   ruby
@@ -554,7 +563,7 @@ DEPENDENCIES
   better_errors
   binding_of_caller
   bootsnap (>= 1.4.2)
-  bootstrap (~> 5.1.0)
+  bootstrap!
   bootstrap_form (~> 5.0)
   brakeman
   browser
@@ -566,6 +575,7 @@ DEPENDENCIES
   config
   connection_pool
   dalli
+  dartsass-sprockets
   debug_inspector
   delayed_job_active_record
   doorkeeper
@@ -624,7 +634,7 @@ DEPENDENCIES
   rubocop-rails
   rubocop-rake
   sanitize
-  sassc-rails
+  sass-embedded (~> 1.64.0)
   secure_headers
   selenium-webdriver
   simplecov
@@ -637,4 +647,4 @@ DEPENDENCIES
   webmock
 
 BUNDLED WITH
-   2.3.26
+   2.4.19
index 680ed2225cc529bd167d03fe22bc9bd14f34185c..4c6a80839d9264fd60cfa760bdb4f12d0bf7b0ed 100644 (file)
@@ -15,7 +15,7 @@ folder 'vendor/assets' do
       folder 'img', 'src/img'
     end
 
-    from 'https://github.com/jfirebaugh/leaflet-osm.git' do
+    from 'https://github.com/openstreetmap/leaflet-osm.git' do
       file 'leaflet.osm.js', 'leaflet-osm.js'
     end
 
diff --git a/app/assets/images/banners/StateoftheMapEurope_2023.png b/app/assets/images/banners/StateoftheMapEurope_2023.png
new file mode 100644 (file)
index 0000000..33e9db9
Binary files /dev/null and b/app/assets/images/banners/StateoftheMapEurope_2023.png differ
index 6e61100f2effb01dbfdc7c255a1d51245c1f6741..e1e0e64fde0b58433a7cd204d570e50410c3ba27 100644 (file)
@@ -51,6 +51,13 @@ L.OSM.Map = L.Map.extend({
     }).prop("outerHTML");
     var thunderforest = I18n.t("javascripts.map.thunderforest_credit", { thunderforest_link: thunderforest_link });
 
+    var tracestrack_link = $("<a>", {
+      href: "https://www.tracestrack.com/",
+      target: "_blank",
+      text: I18n.t("javascripts.map.tracestrack")
+    }).prop("outerHTML");
+    var tracestrack = I18n.t("javascripts.map.tracestrack_credit", { tracestrack_link: tracestrack_link });
+
     var memomaps_link = $("<a>", {
       href: "https://memomaps.de/",
       target: "_blank",
@@ -99,6 +106,16 @@ L.OSM.Map = L.Map.extend({
       }));
     }
 
+    if (OSM.TRACESTRACK_KEY) {
+      this.baseLayers.push(new L.OSM.TracestrackTopo({
+        attribution: copyright + ". " + tracestrack + ". " + terms,
+        apikey: OSM.TRACESTRACK_KEY,
+        code: "P",
+        keyid: "tracestracktopo",
+        name: I18n.t("javascripts.map.base.tracestracktop_topo")
+      }));
+    }
+
     this.baseLayers.push(new L.OSM.OPNVKarte({
       attribution: copyright + ". " + memomaps + ". " + terms,
       code: "O",
index 0ffd35e2ceabfc922889ce572b727e8db3e272a2..0a0f5c67a7c5a9df678e3cb1e7168f46f90434ee 100644 (file)
@@ -25,6 +25,10 @@ OSM = {
   THUNDERFOREST_KEY:       <%= Settings.thunderforest_key.to_json %>,
 <% end %>
 
+<% if Settings.key?(:tracestrack_key) %>
+  TRACESTRACK_KEY:         <%= Settings.tracestrack_key.to_json %>,
+<% end %>
+
   MARKER_GREEN:            <%= image_path("marker-green.png").to_json %>,
   MARKER_RED:              <%= image_path("marker-red.png").to_json %>,
 
index b95d1fcd60202c5072d962d0520a45ac2f3e9106..6ff46c07ce5be5304b8d42d0cfc777bef7974b85 100644 (file)
@@ -143,7 +143,7 @@ header {
 
 
 nav.primary {
-  .btn-outline-primary {
+  & > .btn-group .btn-outline-primary {
     @include button-outline-variant($green, $color-hover: $white, $active-color: $white);
   }
 
@@ -729,14 +729,6 @@ tr.turn:hover {
     }
   }
 
-  .comments {
-    color: $darkgrey;
-  }
-
-  .comments-0 {
-    opacity: 0.5;
-  }
-
   .changeset_more .loader {
     display: none;
     width: 100%;
@@ -1055,11 +1047,12 @@ tr.turn:hover {
 .search_form {
   background-color: $lightgrey;
 
+  #query {
+    z-index: 0;
+  }
+
   .describe_location {
-    top: 6px;
-    right: 6px;
     font-size: 10px;
-    color: $blue;
   }
 }
 
@@ -1121,8 +1114,6 @@ div.secondary-actions {
   code {
     background: $lightgrey;
     padding: 2px 3px;
-    direction: inherit; /* fix for Bootstrap < 5.2 */
-    unicode-bidi: unset; /* fix for Bootstrap < 5.2 */
   }
 
   pre {
index 71fdf3978086dab10841e66ca4cb40615ed05810..a4afdf576e7e7261956fcd00345ac491bd432db2 100644 (file)
@@ -1,30 +1,58 @@
+html {
+  height: 100%;
+}
+
+body {
+  height: 100%;
+  margin: 0;
+}
+
+#content {
+  height: 100%;
+}
+
 header,
-#sidebar,
-#permalink,
 .leaflet-control {
   display: none;
 }
 
-html {
-  height: 100%;
+.map-layout .overlay-sidebar #sidebar {
+  display: none;
+}
+
+.map-layout #sidebar {
+  page-break-after: always;
+
+  & > * {
+    display: none;
+  }
+  #sidebar_content {
+    display: unset;
+  }
+
+  button,
+  input,
+  textarea,
+  .secondary-actions {
+    display: none;
+  }
+}
+
+#map-ui {
+  display: none !important;
 }
 
 #map {
-  position: absolute !important;
-  top: 0;
-  bottom: 40px;
-  left: 0;
-  right: 0;
+  position: relative;
+  height: calc(100% - 40px);
+  box-sizing: border-box;
   border: 1px solid black;
 }
 
 /* Rules for attribution text under the main map shown on printouts */
 
 #attribution {
-  position: absolute !important;
-  bottom: 0;
-  left: 0;
-  right: 0;
+  page-break-inside: avoid;
   height: 40px;
   font-size: 12px;
   text-align: center;
index 17c6eace3d4eb2cf4c4f24e5d208ab07925acdd7..9048d484001d2d5c12ef23591798bac65532302e 100644 (file)
@@ -1,13 +1,19 @@
 module BannerHelper
   def active_banners
     BANNERS.reject do |_k, v|
-      enddate = v[:enddate]
       begin
-        parsed = enddate && Date.parse(enddate)
+        startdate = v[:startdate] && Date.parse(v[:startdate])
       rescue StandardError
-        parsed = nil
+        startdate = nil
       end
-      !parsed.is_a?(Date) || (parsed.is_a?(Date) && parsed.past?)
+
+      begin
+        enddate = v[:enddate] && Date.parse(v[:enddate])
+      rescue StandardError
+        enddate = nil
+      end
+
+      startdate&.future? || enddate&.past?
     end
   end
 
index 7bc64cb83914d71fe4aa47fdbda94515c4c5e414..55bd0952f7ef27047117953f1010a833a161bfba 100644 (file)
@@ -26,9 +26,9 @@ module IssuesHelper
   end
 
   def open_issues_count
-    count = Issue.visible_to(current_user).open.limit(100).size
-    if count > 99
-      tag.span("99+", :class => "badge count-number")
+    count = Issue.visible_to(current_user).open.limit(Settings.max_issues_count).size
+    if count >= Settings.max_issues_count
+      tag.span(I18n.t("count.at_least_pattern", :count => Settings.max_issues_count), :class => "badge count-number")
     elsif count.positive?
       tag.span(count, :class => "badge count-number")
     end
index c9f8e2e6549e06429b23b024fd45717c927cac10..b870d0273427a2bba3abc63f1b24e4756e6c9b60 100644 (file)
@@ -25,9 +25,7 @@ module UserRolesHelper
     end
 
     if image
-      svg_icon = tag.source(:srcset => image_path("#{image}.svg"), :type => "image/svg+xml")
-      png_icon = image_tag("#{image}.png", :srcset => image_path("#{image}.svg"), :size => "20x20", :border => 0, :alt => alt, :title => title)
-      icon = tag.picture(svg_icon + png_icon)
+      icon = image_tag("#{image}.png", :srcset => image_path("#{image}.svg"), :size => "20x20", :border => 0, :alt => alt, :title => title)
       icon = link_to(icon, url, :method => :post, :data => { :confirm => confirm }) if url
     end
 
index 99c1686d85c0943c2aaec65293c1b0ac24ae3f48..ddc8216772878300b3348b5ff55fd4f6608dbcc0 100644 (file)
@@ -6,10 +6,7 @@
 
 <div class="alert alert-danger row mx-0 p-3 align-items-center">
   <div class="col-auto">
-    <picture>
-      <source srcset="<%= image_path "notice.svg" %>" type="image/svg+xml"></source>
-      <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
-    </picture>
+    <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
   </div>
   <div class="col">
     <p class="mb-0"><%= t ".warning" %></p>
index a59c85ec4ba18632e8d9a27dcfd4c0a1606d406d..a4357a3f5ae677e1a7a22f822d32f8574e0dd469 100644 (file)
@@ -24,7 +24,7 @@
         #<%= changeset.id %>
       </a>
     </div>
-    <div class="col-auto comments comments-<%= changeset.comments.length %>">
+    <div class="col-auto text-secondary<%= " opacity-50" if changeset.comments.empty? %>">
       <%= changeset.comments.length %>
       <span class="icon note grey"></span>
     </div>
index eaf3078fe6ba9bf3f4155bedb57aa215920ea03d..1d3bc34219bf6316ce8b16666b6587384d20451a 100644 (file)
@@ -1,10 +1,7 @@
 <% if flash[:error] %>
   <div class="alert alert-danger row mx-0 mb-0 p-3 rounded-0 align-items-center">
     <div class="col-auto">
-      <picture>
-        <source srcset="<%= image_path "notice.svg" %>" type="image/svg+xml" />
-        <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
-      </picture>
+      <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
     </div>
     <div class="col"><%= render_flash(flash[:error]) %></div>
   </div>
 <% if flash[:warning] %>
   <div class="alert alert-warning row mx-0 mb-0 p-3 rounded-0 align-items-center">
     <div class="col-auto">
-      <picture>
-        <source srcset="<%= image_path "notice.svg" %>" type="image/svg+xml"></source>
-        <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
-      </picture>
+      <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
     </div>
     <div class="col"><%= render_flash(flash[:warning]) %></div>
   </div>
 <% if flash[:notice] %>
   <div class="alert alert-success row mx-0 mb-0 p-3 rounded-0 align-items-center">
     <div class="col-auto">
-      <picture>
-        <source srcset="<%= image_path "notice.svg" %>" type="image/svg+xml"></source>
-        <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
-      </picture>
+      <%= image_tag("notice.png", :srcset => image_path("notice.svg")) %>
     </div>
     <div class="col"><%= render_flash(flash[:notice]) %></div>
   </div>
index fd2ae0a4a512b93bd95d32d7d46116a595828e26..8ff04536d19b6d4cbe99f41117b1448538c619f8 100644 (file)
@@ -1,10 +1,7 @@
 <header class="closed clearfix">
   <h1>
     <a href="<%= root_path %>" class="geolink">
-      <picture>
-        <source srcset="<%= image_path "osm_logo.svg" %>" type="image/svg+xml" />
-        <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :class => "logo" %>
-      </picture>
+      <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :class => "logo" %>
       <%= t "layouts.project_name.h1" %>
     </a>
   </h1>
index 31386b1ab291dc30408c8597a002bf7bd45b81ab..dc13414b70e4eea55e73e51c166ad5c909e3af14 100644 (file)
@@ -3,13 +3,11 @@
     <div class="row gx-2 mx-0">
       <div class="col">
         <div class="input-group flex-nowrap">
-          <div class='query_wrapper position-relative flex-grow-1'>
-            <%= link_to t("site.search.where_am_i"), "#", :class => "describe_location position-absolute", :title => t("site.search.where_am_i_title") %>
-            <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control form-control-sm", :dir => "auto" %>
-          </div>
-          <div class="input-group-append">
-            <%= submit_tag t("site.search.submit_text"), :class => "btn btn-sm btn-primary", :data => { :disable_with => false } %>
+          <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control form-control-sm", :dir => "auto" %>
+          <div class="input-group-text border-start-0 p-0 position-relative">
+            <%= button_tag t("site.search.where_am_i"), :type => "button", :class => "describe_location position-absolute end-0 me-1 btn btn-sm btn-outline-primary border-0 bg-transparent", :title => t("site.search.where_am_i_title") %>
           </div>
+          <%= submit_tag t("site.search.submit_text"), :class => "btn btn-sm btn-primary", :data => { :disable_with => false } %>
         </div>
       </div>
       <div class="col-auto">
index db6179769ded9e4c8a23d67812b6a40d5dd7e27b..435de3015346f97b9c8a72c1ff204acf0ba3ac4c 100644 (file)
@@ -8,10 +8,7 @@
   </head>
   <body>
     <a href="<%= root_path %>">
-      <picture>
-        <source srcset="<%= image_path "osm_logo.svg" %>" type="image/svg+xml" />
-        <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :class => "logo" %>
-      </picture>
+      <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :class => "logo" %>
     </a>
     <div class="details">
       <%= yield %>
index ddbaa9e940677cbd9e8b1d1617bf481cda03d5e9..63ade87d7dd6eb9445789d141d404c60da672dfa 100644 (file)
       </li>
     <% end %>
 
-    <li class="nav-item flex-sm-grow-1"></li>
-    <li class="nav-item">
-      <div class="px-3 py-2 py-sm-0">
-        <%= link_to({ :action => :georss, :display_name => @target_user&.display_name, :tag => params[:tag] }, { :class => "btn btn-secondary btn-sm" }) do %>
-          <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="white" viewBox="0 0 16 16">
-            <path d="M5.5 12a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-3-8.5a1 1 0 0 1 1-1c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1-1-1zm0 4a1 1 0 0 1 1-1 6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1-1-1z" />
-          </svg>
-        <% end -%>
-        <%= link_to t(".upload_trace"), new_trace_path, :class => "btn btn-secondary btn-sm" %>
+    <li class="nav-item ms-auto">
+      <div class="nav-link pe-0">
+        <%= link_to({ :action => :georss, :display_name => @target_user&.display_name, :tag => params[:tag] }, { :class => "btn btn-secondary btn-sm my-n2 align-baseline border-0" }) do %>
+          <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="align-text-bottom">
+            <circle cx="2" cy="14" r="2" fill="white" />
+            <path d="M 8 14 a 6 6 0 0 0 -6 -6 M 14 14 a 12 12 0 0 0 -12 -12" fill="none" stroke="white" stroke-width="3" stroke-linecap="round" />
+          </svg><% end -%>
+        <%= link_to t(".upload_trace"), new_trace_path, :class => "btn btn-secondary btn-sm my-n2 align-baseline border-0" %>
       </div>
     </li>
   </ul>
index c2a4df07b2ae4440186053193d6acb59c20a6cef..23256643d67965a158fccaf85bb24b2abbfc7bc1 100644 (file)
@@ -8,3 +8,10 @@ donate_2023:
     - [banners/donate_2023_1@2x.jpg, 2x]
   dark: true
   enddate: 2023-dec-31
+sotmeu_2023:
+  id: sotmeu_2023
+  alt: State of the Map Europe 2023
+  link: https://stateofthemap.eu/
+  img: banners/StateoftheMapEurope_2023.png
+  startdate: 2023-oct-05
+  enddate: 2023-nov-05
index 983f0226669327e394b8577e34ac9ab845fde488..c1cc522a5e13b24eef5b2bae373c512d403b82f6 100644 (file)
@@ -77,6 +77,7 @@ Config.setup do |config|
     required(:tracepoints_per_page).filled(:int?)
     required(:max_number_of_way_nodes).filled(:int?)
     required(:max_number_of_relation_members).filled(:int?)
+    required(:max_issues_count).filled(:int?)
     required(:api_timeout).filled(:int?)
     required(:imagery_blacklist).maybe(:array?)
     required(:status).filled(:str?, :included_in? => ALLOWED_STATUS)
index e710019da30b70fcc7e8b98e870b63573ccfb3cd..778b5b827aff877439565a0a322ddc1809f28678 100644 (file)
@@ -7,7 +7,7 @@ csp_policy = {
   :form_action => %w['self'],
   :frame_ancestors => %w['self'],
   :frame_src => %w['self'],
-  :img_src => %w['self' data: www.gravatar.com *.wp.com tile.openstreetmap.org *.tile.openstreetmap.org *.tile.thunderforest.com tileserver.memomaps.de *.openstreetmap.fr],
+  :img_src => %w['self' data: www.gravatar.com *.wp.com tile.openstreetmap.org *.tile.openstreetmap.org *.tile.thunderforest.com tileserver.memomaps.de tile.tracestrack.com *.openstreetmap.fr],
   :manifest_src => %w['self'],
   :media_src => %w['none'],
   :object_src => %w['self'],
index 7ba39bd48af77be5c59b5de9b57387396208731f..823be1ad61ce91b5dbb4d197ed6e318d40d9452d 100644 (file)
@@ -2342,6 +2342,7 @@ ar:
       public_traces_from: آثار جي بي إس عمومية من %{user}
       description: تصفح أحدث مسارات GPS المرفوعة
       tagged_with: بالوسم %{tags}
+      wiki_page: صفحة ويكي
       upload_trace: حمل أثر
       my_traces: أثري في GPS
     destroy:
index 384fb420225dba57839238efbf9e700747477f36..3c75867fe10ceaaae21fe2bd55db02b60963513b 100644 (file)
@@ -1088,8 +1088,8 @@ bg:
         level2: Държавна граница
         level4: Държавна граница
         level5: Граница на региона
-        level6: Ð\94Ñ\8aÑ\80жавна граница
-        level8: Ð\93Ñ\80аниÑ\86а Ð½Ð° Ð³Ñ\80ада
+        level6: Ð\9eблаÑ\81Ñ\82на граница
+        level8: Ð\93Ñ\80аниÑ\86а Ð½Ð° Ð·ÐµÐ¼Ð»Ð¸Ñ\89е
         level9: Граница на селото
         level10: Граница на предградията
       types:
index 21cd87eb61a4fe7612f6727f65bca31a16ce1099..dce891b2cef7a5d02db62f4c8c26b1a6987dea97 100644 (file)
@@ -21,6 +21,8 @@ br:
   time:
     formats:
       friendly: '%e %B %Y da %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Dibab ur restr
@@ -297,6 +299,7 @@ br:
         retain_caveats: 'Koulskoude, miret e vo un nebeut titouroù diwar ho penn e
           OpenStreetMap goude ma vefe bet dilamet ho kont:'
         retain_edits: Ho kemmoù degaset d'ar gartenn, ma'z eus anezho, a vo dalc'het.
+        retain_traces: Ar roudoù ho peus enporzhiet, ma'z eus anezho, a vo dalc'het.
         retain_diary_entries: Hoc'h enmonedoù hag evezhiadennoù en deiz-levr, ma'z
           eus anezho, a vo miret met kuzhet e vint.
         retain_changeset_discussions: Ho kaozeadennoù, ma'z eus anezho, a vo miret.
@@ -757,6 +760,7 @@ br:
           public_bath: Kibelldi foran
           public_bookcase: Levraoueg foran
           public_building: Savadur foran
+          ranger_station: Post gward-koad
           recycling: Lec'h adaozañ
           restaurant: Preti
           school: Skol
@@ -1987,6 +1991,8 @@ br:
           title: Skouer deverkadur
         more_title_html: Titouroù ouzhpenn
         more_1_1_osmf_licence_page: Pajenn aotre-implijout diazezadur OSM
+        more_2_1_api_usage_policy: Politikerezh implij an API
+        more_2_1_tile_usage_policy: Politikerezh implij an teol
         contributors_title_html: Hor c'henlabourerien
         contributors_intro_html: 'Miliadoù a hiniennoù a labour ganimp. Ebarzhiñ a
           reomp ivez roadennoù digor eus ajañsoù kartennañ hag eus mamennoù all, hag
@@ -2612,6 +2618,7 @@ br:
       remove as friend: Lemel eus ar vignoned
       add as friend: Ouzhpennañ d'ar vignoned
       mapper since: 'Kartennour abaoe :'
+      uid: 'Kod anaout an implijer:'
       ct status: 'Diferadennoù ar c''henlabourer :'
       ct undecided: En entremar
       ct declined: Nac'het
@@ -2816,7 +2823,7 @@ br:
     index:
       title: Notennoù kaset pe addispleget gant %{user}
       heading: notennoù %{user}
-      subheading_html: Notennoù kaset pe addispleget gant %{user}
+      subheading_html: Notennoù %{submitted} pe %{commented} gant %{user}
       subheading_submitted: kaset
       subheading_commented: skrivet war
       no_notes: Notenn ebet
@@ -2924,8 +2931,11 @@ br:
       make_a_donation: Ober un donezon
       website_and_api_terms: Termenoù-implij al lec'hien hag an API
       osm_france: OpenStreetMap Frañs
+      thunderforest_credit: Teol pourchaset gant %{thunderforest_link}
       andy_allan: Andy Allan
+      opnvkarte_credit: Teol pourchaset gant %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Teol pourchaset gant %{tracestrack_link}
     site:
       edit_tooltip: Kemmañ ar gartenn
       edit_disabled_tooltip: Zoumañ da zegas kemmoù war ar gartenn
index 580a997d6d7c889b2ba061a392ca990af1fc338e..c3212eab2488a4d5eedfa34e919ec03b05877a8f 100644 (file)
@@ -2059,9 +2059,12 @@ ca:
         contributors_at_stadt_wien: Ciutat de Viena
         contributors_at_cc_by: CC BY
         contributors_at_land_vorarlberg: Estat de Vorarlberg
+        contributors_at_cc_by_at_with_amendments: CC BY AT amb esmenes
         contributors_au_australia: Austràlia
         contributors_ca_canada: Canadà
         contributors_fi_finland: Finlàndia
+        contributors_fr_credit_html: '%{france}: Conté dades d''origen de la «Direction
+          Générale des Impôts».'
         contributors_fr_france: França
         contributors_nl_netherlands: Països Baixos
         contributors_nz_new_zealand: Nova Zelanda
@@ -2069,6 +2072,7 @@ ca:
         contributors_rs_serbia: Sèrbia
         contributors_rs_rgz: Autoritat geodèsica sèrbia
         contributors_si_slovenia: Eslovènia
+        contributors_si_gu: Autoritat de topografia i cartografia
         contributors_si_mkgp: Ministeri d'Agricultura, Forestal i Alimentació
         contributors_es_credit_html: |-
           %{spain}: conté dades procedents de
@@ -2752,6 +2756,7 @@ ca:
       remove as friend: Deixa l'amistat
       add as friend: Afegeix com a amic
       mapper since: 'Cartografiant des de:'
+      uid: 'ID d''usuari:'
       ct status: 'Termes de col·laboració:'
       ct undecided: No decidit
       ct declined: Rebutjat
@@ -3033,6 +3038,7 @@ ca:
         cyclosm: CyclOSM
         cycle_map: Mapa ciclista
         transport_map: Mapa de transports
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitari
         opnvkarte: ÖPNVKarte (mapa de transport públic)
       layers:
@@ -3051,6 +3057,8 @@ ca:
       andy_allan: Andy Allan
       opnvkarte_credit: Tessel·les cortesia de %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Tessel·les cortesia de %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Estil de tessel·les per %{hotosm_link}, hostatjades per %{osm_france_link}
       hotosm_name: Equip humanitari de l'OpenStreetMap
     site:
index e6b897d585a2277ae3e8eaa2b878c3c7dee458f8..2a3b9bacc7218e312f4a85a1c568506d50968f2f 100644 (file)
@@ -187,7 +187,7 @@ ce:
     closed: ДӀачӀагӀа
     version: Верси
     in_changeset: Нисдарш
-    anonymous: цӀе хьулйина
+    anonymous: аноним
     no_comment: (коммент йац)
     part_of: Дакъалоцу цу
     download_xml: Схьаэца XML
@@ -273,7 +273,7 @@ ce:
       telephone_link: Телпо тоха %{phone_number}
     query:
       title: ХӀун йу кхузахь?
-      introduction: Ð£Ð»Ð»ÐµÑ\80а Ð¾Ð±Ñ\8aекÑ\82аÑ\88 ÐºÐ°Ñ\80айан, ÐºÐ°Ñ\80Ñ\82ан Ñ\82Ó\80еÑ\82аÓ\80ае
+      introduction: Ð£Ð»Ð»ÐµÑ\80а Ð¾Ð±Ñ\8aекÑ\82аÑ\88 ÐºÐ°Ñ\80айан, ÐºÐ°Ñ\80Ñ\82ин Ñ\82Ó\80еÑ\82аÓ\80айe
       nearby: Уллера объекташ
       enclosing: Йолу меттиг
   changesets:
@@ -691,13 +691,13 @@ ce:
       title_html: Хаам %{link}
       categories:
         diary_entry:
-          other_label: Кхиерг
+          other_label: Ð\9aÑ\85ийеÑ\80г
         diary_comment:
-          other_label: Кхиерг
+          other_label: Ð\9aÑ\85ийеÑ\80г
         user:
-          other_label: Кхиерг
+          other_label: Ð\9aÑ\85ийеÑ\80г
         note:
-          other_label: Кхиерг
+          other_label: Ð\9aÑ\85ийеÑ\80г
   layouts:
     logout: Болх дӀаберзор
     log_in: ЧугӀо
@@ -706,7 +706,7 @@ ce:
     export: Экспорт
     issues: Проблемаш
     data: Хаамаш
-    export_data: Хаамаш экспортъян
+    export_data: Хаамаш экспортбан
     gps_traces: GPS-трекаш
     gps_traces_tooltip: Болхбе GPS-трекашца
     user_diaries: Декъашхочун дневник
@@ -968,7 +968,7 @@ ce:
       hidden_title: 'Къайлайаьккхина билгало #%{note_name}'
       report: Хаамбе хӀокху билгалонах
       hide: Къайлайаккха
-      resolve: Кечъян
+      resolve: Кечйан
       reactivate: Йуха йела
       comment_and_resolve: Жопделла кечъе
       comment: Жопдала
index ba372331cdd60ccb0d9e36bc51dd7a0d466d9f5f..494e3db258aa1e5345084fdda0601ea8df325b94 100644 (file)
@@ -7,6 +7,7 @@
 # Author: Bilykralik16
 # Author: Chmee2
 # Author: Cvanca
+# Author: Decamexd
 # Author: DemonioCZ
 # Author: DoubyCz
 # Author: Dvorapa
@@ -61,7 +62,7 @@ cs:
       prompt: Vyberte soubor
     submit:
       diary_comment:
-        create: Odeslat
+        create: Okomentovat
       diary_entry:
         create: Publikovat
         update: Aktualizovat
@@ -70,11 +71,11 @@ cs:
       message:
         create: Odeslat
       client_application:
-        create: Zaregistrovat
+        create: Registrovat
         update: Aktualizovat
       oauth2_application:
-        create: Zaregistrovat
-        update: Uložit
+        create: Registrovat
+        update: Aktualizovat
       redaction:
         create: Vytvořit redakci
         update: Uložit redakci
@@ -87,7 +88,7 @@ cs:
   activerecord:
     errors:
       messages:
-        invalid_email_address: nevypadá jako platná e-mailová adresa
+        invalid_email_address: ne platná e-mailová adresa
         email_address_not_routable: není routovatelná
     models:
       acl: Seznam přístupových práv
@@ -143,8 +144,8 @@ cs:
         user: Uživatel
         title: Nadpis
         body: Obsah
-        latitude: Šířka
-        longitude: Délka
+        latitude: Zeměpisná šířka
+        longitude: Zeměpisná délka
         language_code: Jazyk
       doorkeeper/application:
         name: Název
@@ -159,8 +160,8 @@ cs:
         visible: Viditelný
         name: Název souboru
         size: Velikost
-        latitude: Šířka
-        longitude: Délka
+        latitude: Zeměpisná šířka
+        longitude: Zeměpisná délka
         public: Veřejná
         description: Popis
         gpx_file: Nahrát GPX soubor
@@ -182,7 +183,7 @@ cs:
         auth_uid: Autentifikační UID
         email: E-mail
         email_confirmation: Potvrzení e-mailu
-        new_email: nová emailová adresa
+        new_email: Nová emailová adresa
         active: Aktivní
         display_name: Zobrazované jméno
         description: Popis profilu
@@ -302,6 +303,7 @@ cs:
         reopened_at_by_html: Reaktivováno %{when} od %{user}
       rss:
         title: Poznámky OpenStreetMap
+        description_all: Seznam nahlášených, komentovaných nebo uzavřených poznámek
         description_area: Seznam poznámek hlášených, komentovaných nebo uzavřených
           ve vaší oblasti [(%{min_lat}|%{min_lon}) – (%{max_lat}|%{max_lon})]
         description_item: RSS kanál k poznámce %{id}
@@ -1915,6 +1917,9 @@ cs:
       home location: Poloha domova
       no home location: Nezadali jste polohu svého bydliště.
       update home location on click: Upravit pozici domova při kliknutí na mapu?
+      show: Zobrazit
+      delete: Smazat
+      undelete: Vrátit smazání
     update:
       success: Profil nastaven.
       failure: Nepodařilo se nastavit profil.
@@ -1968,7 +1973,8 @@ cs:
       support: podporu
   shared:
     markdown_help:
-      heading_html: Analyzováno pomocí %{kramdown_link}
+      heading_html: Zpracovává se %{kramdown_link}
+      kramdown: kramdownem
       headings: Nadpisy
       heading: Nadpis
       subheading: Podnadpis
@@ -2105,6 +2111,7 @@ cs:
         contributors_at_austria: Rakousko
         contributors_at_stadt_wien: města Vídně
         contributors_at_cc_by: CC BY
+        contributors_at_cc_by_url: https://creativecommons.org/licenses/by/3.0/at/deed.cs
         contributors_at_land_vorarlberg: země Vorarlbersko
         contributors_at_cc_by_at_with_amendments: CC BY AT s dodatky
         contributors_au_credit_html: '%{australia}: Zahrnuje nebo využívá Administrative
@@ -2825,6 +2832,7 @@ cs:
       remove as friend: Odebrat z přátel
       add as friend: Přidat do přátel
       mapper since: 'Účastník projektu od:'
+      uid: 'ID uživatele:'
       ct status: 'Podmínky pro přispěvatele:'
       ct undecided: Nerozhodnuto
       ct declined: Odmítnuty
index 205b01f1a696fe00bd293f22cae53e5135bc7d6e..fe807d30c11fc59bd719c4ba91087ff23e9fcdc5 100644 (file)
@@ -11,6 +11,8 @@ cy:
   time:
     formats:
       friendly: '%e %B %Y am %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Dewiswch ffeil
@@ -31,8 +33,8 @@ cy:
         create: Cofrestru
         update: Diweddaru
       redaction:
-        create: Creu golygiadau
-        update: Cadw golygiadau
+        create: Creu gorchuddiad
+        update: Cadw gorchuddiad
       trace:
         create: Uwchlwytho
         update: Cadw newidiadau
@@ -42,7 +44,7 @@ cy:
   activerecord:
     errors:
       messages:
-        invalid_email_address: nid yw'n ymddangos ei fod yn gyfeiriad ebost dilys
+        invalid_email_address: nid yw'n ymddangos ei fod yn gyfeiriad e-bost dilys
         email_address_not_routable: nid yw'n gyrchadwy
     models:
       acl: Rhestr Rheoli Mynediad
@@ -52,7 +54,7 @@ cy:
       diary_comment: Nodyn Dyddiadur
       diary_entry: Cofnod Dyddiadur
       friend: Ffrind
-      issue: Mater
+      issue: Gwall
       language: Iaith
       message: Neges
       node: Nod
@@ -70,9 +72,9 @@ cy:
       relation_tag: Tag Perthynas
       report: Adrodd
       session: Sesiwn
-      trace: Dargopïo
-      tracepoint: Pwynt Dargopïo
-      tracetag: Tag Dargopïo
+      trace: Arllwybr
+      tracepoint: Pwynt Arllwybr
+      tracetag: Tag Arllwybr
       user: Defnyddiwr
       user_preference: Dewis Defnyddiwr
       user_token: Tocyn Defnyddiwr
@@ -89,8 +91,8 @@ cy:
         allow_write_prefs: addasu eu dewisiadau defnyddiwr
         allow_write_diary: creu cofnodion dyddiadur, sylwadau a gwneud ffrindiau
         allow_write_api: golygu'r map
-        allow_read_gpx: darllen eu dargopiadau GPS
-        allow_write_gpx: uwchlwytho dargopiadau GPS
+        allow_read_gpx: darllen eu harllwybrau GPS
+        allow_write_gpx: uwchlwytho arllwybrau GPS
         allow_write_notes: addasu nodiadau
       diary_comment:
         body: Corff
@@ -263,7 +265,7 @@ cy:
         commented_at_by_html: Diweddarwyd %{when} gan %{user}
         closed_at_html: Wedi datrys %{when}
         closed_at_by_html: Wedi datrys %{when} gan %{user}
-        reopened_at_html: Wedi ail-gychwyn %{when}
+        reopened_at_html: Wedi ailgychwyn %{when}
         reopened_at_by_html: Wedi ailgychwyn %{when} gan %{user}
       rss:
         title: Nodiadau OpenStreetMap
@@ -279,6 +281,8 @@ cy:
       show:
         title: Dileu fy nghyfrif
         delete_account: Dileu cyfrif
+        retain_edits: Bydd eich golygiadau i'r gronfa ddata mapiau, os ydynt yn bodoli,
+          yn cael eu cadw.
         retain_changeset_discussions: Bydd eich trafodaethau grwpiau newid, os ydynt
           yn bodoli, yn cael eu cadw.
         confirm_delete: Ydych chi'n siŵr?
@@ -323,7 +327,7 @@ cy:
     created_ago_by_html: Wedi creu %{time_ago} gan %{user}
     closed_ago_by_html: Wedi cau %{time_ago} gan %{user}
     deleted_ago_by_html: Wedi dileu %{time_ago} gan %{user}
-    edited_ago_by_html: Golgwyd %{time_ago} gan %{user}
+    edited_ago_by_html: Golygwyd %{time_ago} gan %{user}
     version: Fersiwn
     in_changeset: Grŵp newid
     anonymous: dienw
@@ -487,14 +491,14 @@ cy:
       nearby mapper: Mapiwr gerllaw
       friend: Ffrind
     show:
-      title: Fy Nashfwrdd
+      title: Fy Nangosfwrdd
       edit_your_profile: Golygu eich proffil
       my friends: Fy ffrindiau
       no friends: Nid ydych wedi ychwanegu unrhyw ffrindiau eto.
       nearby users: Defnyddwyr eraill gerllaw
       no nearby users: Nid oes defnyddwyr gerllaw sy'n datgelu eu bod yn mapio eto.
       friends_changesets: Grwpiau newid eich ffrindiau
-      friends_diaries: cofnodion dyddiaduron cyfeillion
+      friends_diaries: cofnodion dyddiaduron ffrindiau
       nearby_changesets: grwpiau newid defnyddwyr gerllaw
       nearby_diaries: cofnodion dyddiaduron defnyddwyr gerllaw
   diary_entries:
@@ -596,7 +600,7 @@ cy:
       failed: Ymddiheuriadau, methwyd ychwanegu %{name} fel ffrind.
       already_a_friend: Rydych chi eisoes yn ffrindiau gyda %{name}.
     remove_friend:
-      heading: Peidio bod yn ffrind i %{user}?
+      heading: Dad-ffrindio %{user}?
       button: Dad-ffrindio
       success: Tynnwyd %{name} o'ch ffrindiau.
       not_a_friend: Nid yw %{name} yn un o'ch ffrindiau.
@@ -834,7 +838,7 @@ cy:
           abandoned: Hen Briffordd
           bridleway: Llwybr Ceffyl
           bus_guideway: Lon Bysiau
-          bus_stop: Stop Bysiau
+          bus_stop: Safle Bws
           construction: Priffordd yn cael ei Adeiladu
           corridor: Coridor
           crossing: Croesfan
@@ -898,9 +902,9 @@ cy:
           house: Tŷ
           manor: Maenor
           memorial: Cofeb
-          mine: Mwynfa
-          mine_shaft: Siafft Mwynglawdd
-          monument: Cofadail
+          mine: Mwynglawdd
+          mine_shaft: Siafft Mwynglawdd
+          monument: Cofeb
           roman_road: Ffordd Rufeinig
           ruins: Adfeilion
           stone: Carreg
@@ -934,7 +938,7 @@ cy:
           orchard: Berllan
           quarry: Chwarel
           railway: Rheilffordd
-          recreation_ground: Maes Chwarae
+          recreation_ground: Ardal Chwarae
           reservoir: Cronfa Ddŵr
           reservoir_watershed: Gwahanfa Ddŵr
           residential: Ardal Breswyl
@@ -943,7 +947,7 @@ cy:
           vineyard: Gwinllan
           "yes": Defnydd Tir
         leisure:
-          beach_resort: Ardal Wyliau
+          beach_resort: Cyrchfan Traeth
           bird_hide: Cuddfan Adar
           common: Tir Comin
           dog_park: Parc Cwn
@@ -959,9 +963,9 @@ cy:
           miniature_golf: Golff Pitw
           nature_reserve: Gwarchodfa Natur
           park: Parc
-          pitch: Maes Chwarae
-          playground: Lle Chwarae
-          recreation_ground: Maes Hamdden
+          pitch: Cae Chwaraeon
+          playground: Ardal Chwarae
+          recreation_ground: Ardal Hamdden
           resort: Cyrchfan Gwyliau
           sauna: Sawna
           slipway: Llithrffordd
@@ -1003,7 +1007,7 @@ cy:
           surveillance: Gwyliadwraeth
           telescope: Telesgop
           tower: Tŵr
-          wastewater_plant: Gwaith Dŵr Budr
+          wastewater_plant: Gwaith Dŵr Gwastraff
           watermill: Melin Ddŵr
           water_tower: Tŵr Dŵr
           water_well: Ffynnon
@@ -1027,7 +1031,7 @@ cy:
           coastline: Arfordir
           crater: Crater
           dune: Twyn
-          fell: Rhostir
+          fell: Mynydd-dir
           fjord: Ffiord
           forest: Coedwig
           geyser: Geiser
@@ -1247,9 +1251,9 @@ cy:
           bed_and_breakfast: Gweldy a Brecwast
           cabin: Caban Twristiaeth
           camp_pitch: Gwersyll
-          camp_site: Man Gwersylla
+          camp_site: Gwersyll
           caravan_site: Parc Carafanau
-          chalet: Chalet
+          chalet: Sialet
           gallery: Galeri
           guest_house: Llety
           hostel: Hostel
@@ -1300,7 +1304,7 @@ cy:
       more_results: Mwy o ganlyniadau
   issues:
     index:
-      title: Materion
+      title: Gwallau
       select_status: Dewis statws
       select_type: Dewis math
       not_updated: Heb ei Ddiweddaru
@@ -1589,6 +1593,7 @@ cy:
       lost password link: Wedi anghofio eich cyfrinair?
       login_button: Mewngofnodi
       register now: Cofrestru nawr
+      with external: 'Fel arall, defnyddiwch drydydd parti i fewngofnodi:'
       no account: Dim cyfrif gennych?
       openid_logo_alt: Mewngofnodi gydag OpenID
       auth_providers:
@@ -1665,7 +1670,7 @@ cy:
         english_link: y Saesneg gwreiddiol
       native:
         title: Ynglŷn â'r dudalen hon
-        native_link: Cymraeg
+        native_link: fersiwn Cymraeg
         mapping_link: dechrau mapio
       legal_babble:
         title_html: Hawlfraint a Thrwydded
@@ -1739,6 +1744,7 @@ cy:
       not_public: Nid ydych wedi gosod eich golygiadau i fod yn gyhoeddus.
       user_page_link: tudalen defnyddiwr
       anon_edits_link_text: Gweld pam.
+      id_not_configured: iD heb ei ffurfweddu
     export:
       title: Allforio
       area_to_export: Ardal i'w Hallforio
@@ -1777,6 +1783,7 @@ cy:
       other_concerns:
         title: Gofidion eraill
         copyright: tudalen hawlfraint
+        working_group: Gweithgor OSMF
     help:
       title: Cael Cymorth
       welcome:
@@ -1795,9 +1802,13 @@ cy:
         title: IRC
       switch2osm:
         title: switch2osm
+      welcomemat:
+        title: Ar gyfer Sefydliadau
       wiki:
         title: Wici OpenStreetMap
         description: Archwiliwch y wici am ddogfennau manwl OpenStreetMap.
+    potlatch:
+      change_preferences: Newidiwch eich dewisiadau yma
     any_questions:
       title: Unrhyw gwestiynau?
     sidebar:
@@ -1824,61 +1835,64 @@ cy:
           secondary: Ffordd eilaidd
           unclassified: Ffordd annosbarthedig
           track: Trac
-          bridleway: Llwybr ceffyl
-          cycleway: Llwybr beicio
-          cycleway_national: Llwybr beicio cenedlaethol
-          cycleway_regional: Llwybr beicio rhanbarthol
-          cycleway_local: Llwybr beicio lleol
-          footway: Ffordd droed
+          bridleway: Llwybr ceffylau
+          cycleway: Llwybr beiciau
+          cycleway_national: Llwybr beiciau cenedlaethol
+          cycleway_regional: Llwybr beiciau rhanbarthol
+          cycleway_local: Llwybr beiciau lleol
+          footway: Troedffordd
           rail: Rheilffordd
-          subway: Trenau Tanddaearyddol
+          subway: Trenau tanddaear
           tram:
           - Rheilffordd ysgafn
-          - tram
+          - dram
           cable:
-          - Car codi
-          - Lifft cadair
+          - Car cebl
+          - lifft cadair
           runway:
-          - Llwybr glanio'r maes awyr
-          - atredfa
+          - Llwybr glanio
+          - thacsiffordd maes awyr
           apron:
-          - Ffedog (y maes awyr)
-          - terminws
+          - Llain
+          - therminws maes awyr
           admin: Ffin gweinyddol
           forest: Coedwig
-          wood: Coed
-          golf: Cwrs golff
+          wood: Coedlan
+          golf: Maes golff
           park: Parc
           resident: Ardal breswyl
           common:
           - Comin
-          - dôl
+          - gwaun
           - gardd
           retail: Ardal adwerthu
-          industrial: Ardal diwydiannol
-          commercial: Ardal masnachol
-          heathland: Rhostir
+          industrial: Ardal ddiwydiannol
+          commercial: Ardal fasnachol
+          heathland: Rhos
           lake:
           - Llyn
-          - cronfa ddŵr
+          - chronfa ddŵr
           farm: Fferm
+          brownfield: Safle tir llwyd
           cemetery: Mynwent
           allotments: Rhandiroedd
-          pitch: Maes chwarae
+          pitch: Cae chwaraeon
           centre: Canolfan chwaraeon
           reserve: Gwarchodfa natur
-          military: Ardal milwrol
+          military: Ardal filwrol
           school:
           - Ysgol
-          - prifysgol
-          building: Adeilad sylweddol
-          station: Gorsaf drenau
+          - phrifysgol
+          building: Adeilad arwyddocâol
+          station: Gorsaf drên
           summit:
           - Copa
-          - Crib
+          - chrib
+          tunnel: Border toredig = twnnel
+          bridge: Border du = pont
           private: Mynediad preifat
           destination: Mynediad cyrchfan
-          construction: Ffyrdd wrthi'n cael eu hadeiladu
+          construction: Ffyrdd yn cael eu hadeiladu
           bicycle_shop: Siop feiciau
           bicycle_parking: Man parcio beiciau
           toilets: Toiledau
@@ -1924,29 +1938,47 @@ cy:
       title: Cymunedau
       other_groups:
         title: Grwpiau Eraill
+        communities_wiki: Tudalen wici cymunedau
   traces:
     new:
+      upload_trace: Uwchlwytho Arllwybr GPS
       visibility_help: beth mae hyn yn golygu?
       help: Cymorth
+    create:
+      upload_trace: Uwchlwytho Arllwybr GPS
     edit:
       cancel: Canslo
+      title: Wrthi'n golygu Arllwybr %{name}
+      heading: Wrthi'n golygu Arllwybr %{name}
       visibility_help: beth mae hyn yn golygu?
+    update:
+      updated: Arllwybr wedi'i ddiweddaru
     trace_optionals:
       tags: Tagiau
     show:
+      title: Wrthi'n gweld Arllwybr %{name}
+      heading: Wrthi'n gweld Arllwybr %{name}
       pending: I DDOD
       filename: 'Enw ffeil:'
       download: lawrlwytho
       uploaded: 'Uwchlwythwyd:'
       points: 'Pwyntiau:'
       start_coordinates: 'Cyfesuryn cychwynnol:'
+      coordinates_html: '%{latitude}; %{longitude}'
       map: map
       edit: golygu
       owner: 'Perchennog:'
       description: 'Disgrifiad:'
       tags: 'Tagiau:'
       none: Dim
+      edit_trace: Golygu'r arllwybr hwn
+      delete_trace: Dileu'r arllwybr hwn
+      trace_not_found: Heb ganfod arllwybr!
       visibility: 'Gwelededd:'
+      confirm_delete: Dileu'r arllwybr hwn?
+    trace_paging_nav:
+      older: Arllwybrau Hŷn
+      newer: Arllwybrau Diweddarach
     trace:
       pending: I DDOD
       count_points:
@@ -1957,6 +1989,7 @@ cy:
         many: '%{count} pwynt'
         other: '%{count} pwynt'
       more: mwy
+      trace_details: Gweld Manylion Arllwybr
       view_map: Gweld Map
       edit_map: Golygu Map
       public: CYHOEDDUS
@@ -1966,15 +1999,27 @@ cy:
       by: gan
       in: mewn
     index:
+      public_traces: Arllwybrau GPS Cyhoeddus
+      my_gps_traces: Fy Arllwybrau GPS
+      public_traces_from: Arllwybrau GPS Cyhoeddus gan %{user}
+      description: Pori uwchlwythiadau arllwybrau GPS diweddar
       tagged_with: tagiwyd gyda %{tags}
+      empty_title: Dim byd yma eto
+      upload_new: Uwchlwytho arllwybr newydd
       wiki_page: tudalen wici
+      upload_trace: Uwchlwytho arllwybr
+      all_traces: Pob Arllwybr
+      my_traces: Fy Arllwybrau
+      traces_from: Arllwybrau Cyhoeddus gan %{user}
   application:
     settings_menu:
       account_settings: Gosodiadau Cyfrif
       oauth1_settings: Gosodiadau OAuth 1
       oauth2_applications: Ceisiadau OAuth 2
+      oauth2_authorizations: Awdurdodiadau OAuth 2
   oauth:
     authorize:
+      title: Awdurdodi mynediad i'ch cyfrif
       allow_to: 'Caniatáu''r rhaglen cleient i:'
       allow_read_prefs: ddarllen eich gosodiadau defnyddiwr.
       allow_write_prefs: addasu eich gosodiadau defnyddiwr.
@@ -2009,17 +2054,29 @@ cy:
       delete: Dileu Cleient
       confirm: Ydych chi'n siŵr?
     index:
+      title: Fy Manylion OAuth
+      application: Enw'r Ap
+      issued_at: Dyddiad awdurdodi
+      revoke: Dirymu!
+      my_apps: Fy Apiau Cleient
       oauth: OAuth
   oauth2_applications:
     index:
+      title: Fy Apiau Cleient
       name: Enw
       permissions: Caniatâd
     application:
       edit: Golygu
       delete: Dileu
+      confirm_delete: Dileu'r ap hwn?
+    new:
+      title: Cofrestru ap newydd
+    edit:
+      title: Golygu eich ap
     show:
       edit: Golygu
       delete: Dileu
+      confirm_delete: Dileu'r ap hwn?
       client_id: ID Cleient
       client_secret: Cyfrinach Cleient
       permissions: Caniatadau
@@ -2027,6 +2084,10 @@ cy:
     new:
       authorize: Awdurdodi
       deny: Gwrthod
+  oauth2_authorized_applications:
+    index:
+      application: Ap
+      permissions: Caniatadau
   users:
     new:
       title: Cofrestru
@@ -2035,6 +2096,7 @@ cy:
         header: Rhydd ac agored
       display name description: Eich enw defnyddiwr cyhoeddus. Gallwch newid hyn yn
         nes ymlaen yn eich dewisiadau.
+      use external auth: Fel arall, defnyddiwch drydydd parti i fewngofnodi
       continue: Cofrestru
       terms accepted: Diolch am dderbyn telerau newydd cyfranwyr!
       privacy_policy: polisi preifatrwydd
@@ -2043,9 +2105,11 @@ cy:
       heading: Telerau
       heading_ct: Telerau Cyfranwyr
       consider_pd_why: beth yw hwn?
+      readable_summary: crynodeb darllenadwy
       informal_translations: cyfieithiadau anffurfiol
       continue: Parhau
       decline: Gwrthod
+      legale_select: 'Gwlad breswyl:'
       legale_names:
         france: Ffrainc
         italy: Yr Eidal
@@ -2100,6 +2164,7 @@ cy:
       unhide_user: Datguddio'r Defnyddiwr
       delete_user: Dileu'r Defnyddiwr
       confirm: Cadarnhau
+      report: Adrodd y defnyddiwr hwn
     go_public:
       flash success: Mae eich holl olygiadau nawr yn gyhoeddus a gallech nawr parhau
         i olygu.
@@ -2124,6 +2189,8 @@ cy:
     edit:
       title: Wrthi'n golygu bloc ar %{name}
       heading_html: Wrthi'n golygu bloc ar %{name}
+    revoke:
+      revoke: Dad-flocio!
     helper:
       time_future_html: Yn dod i ben mewn %{time}.
       time_past_html: Wedi dod i ben %{time} yn ôl.
@@ -2175,11 +2242,17 @@ cy:
       status: 'Statws:'
       show: Dangos
       edit: Golygu
+      revoke: Dad-flocio!
       confirm: Ydych chi'n siŵr?
+      reason: 'Rheswm dros y bloc:'
+      back: Gweld pob bloc
+      revoker: 'Dad-flociwr:'
     block:
       show: Dangos
       edit: Golygu
+      revoke: Dad-flocio!
     blocks:
+      display_name: Defnyddwyr wedi'i blocio
       creator_name: Crëwr
       reason: Rheswm dros flocio
       status: Statws
@@ -2207,6 +2280,8 @@ cy:
       event_commented_by_anonymous_html: Sylw gan berson ddienw %{time_ago}
       event_closed_by_html: Datryswyd gan %{user} %{time_ago}
       event_closed_by_anonymous_html: Datryswyd gan berson ddienw %{time_ago}
+      event_reopened_by_html: Wedi'i ailysgogi gan %{user} %{time_ago}
+      event_reopened_by_anonymous_html: Wedi'i ailysgogi gan berson ddienw %{time_ago}
       event_hidden_by_html: Cuddiwyd gan %{user} %{time_ago}
       report: riportio'r nodyn hwn
       anonymous_warning: Mae'r nodyn hwn yn cynnwys sylwadau gan ddefnyddwyr dienw
@@ -2235,6 +2310,8 @@ cy:
       download: Lawrlwytho
       short_url: URL Byr
       include_marker: Cynnwys marciwr
+    embed:
+      report_problem: Adrodd am broblem
     key:
       title: Allwedd Map
       tooltip: Allwedd Map
@@ -2251,11 +2328,15 @@ cy:
         hot: Dyngarol
       layers:
         header: Haenau Mapiau
-        notes: Sylwadau Map
+        notes: Nodiadau Map
         data: Data Map
+        overlays: Galluogi troshaenau i ddatrys problemau map
         title: Haenau
+      openstreetmap_contributors: Cyfranwyr OpenStreetMap
       make_a_donation: Rhoi arian
       website_and_api_terms: Telerau'r gwefan ac API
+      memomaps: MeMoMaps
+      hotosm_name: Tîm Humanitarian OpenStreetMap
     site:
       edit_tooltip: Golygu'r map
       edit_disabled_tooltip: Chwyddwch mewn i olygu'r map
@@ -2263,6 +2344,7 @@ cy:
       createnote_disabled_tooltip: Chwyddwch mewn i ychwanegu nodyn i'r map
       map_notes_zoom_in_tooltip: Chwyddwch mewn i weld nodiadau'r map
       map_data_zoom_in_tooltip: Chwyddwch mewn i weld data'r map
+      queryfeature_tooltip: Manylion nodweddion
     changesets:
       show:
         comment: Sylw
@@ -2289,6 +2371,11 @@ cy:
         offramp_right: Cymerwch y ramp ar y dde
         offramp_right_with_exit: Cymerwch allanfa %{exit} ar y dde
         offramp_right_with_exit_name: Cymerwch allanfa %{exit} ar y dde i %{name}
+        via_point_without_exit: (trwy bwynt)
+        follow_without_exit: Dilynwch %{name}
+        start_without_exit: Dechreuwch ar %{name}
+        destination_without_exit: Wedi cyrraedd cyrchfan
+        unnamed: ffordd heb enw
         exit_counts:
           first: 1af
           second: 2il
@@ -2307,11 +2394,33 @@ cy:
       relation: Perthynas
       nothing_found: Ni ddarganfuwyd nodweddion
       error: 'Gwall cysyltlu gyda %{server}: %{error}'
+    context:
+      directions_from: Cyfarwyddiadau oddi yma
+      directions_to: Cyfarwyddiadau i yma
+      add_note: Ychwanegu nodyn yma
+      show_address: Dangos cyfeiriad
+      query_features: Manylion nodweddion
+      centre_map: Canoli'r map yma
   redactions:
+    edit:
+      heading: Golygu Gorchuddiad
+      title: Golygu Gorchuddiad
+    index:
+      empty: Dim gorchuddiadau i'w dangos.
+      heading: Rhestr Orchuddiadau
+      title: Rhestr Orchuddiadau
+    new:
+      title: Gorchuddiad Newydd
     show:
       description: 'Disgrifiad:'
+      heading: Gorchuddiad "%{title}"
+      title: Gorchuddiad
       user: 'Crëwr:'
+      edit: Golygu'r gorchuddiad hwn
+      destroy: Dileu'r gorchuddiad hwn
       confirm: Ydych chi'n siŵr?
+    create:
+      flash: Gorchuddiad wedi'i greu.
     update:
       flash: Newidiadau wedi'u cadw.
 ...
index b4b1b24aa99a663ac359b4cc255a240a281d4f98..8eff4d8060cf3ff18d94a714780295941082870a 100644 (file)
@@ -316,6 +316,7 @@ de:
       openid: OpenID
       google: Google
       facebook: Facebook
+      microsoft: Microsoft
       github: GitHub
       wikipedia: Wikipedia
   api:
@@ -331,6 +332,8 @@ de:
         reopened_at_by_html: '%{when} von %{user} reaktiviert'
       rss:
         title: OpenStreetMap-Hinweise
+        description_all: Eine Liste der gemeldeten, kommentierten oder geschlossenen
+          Notizen
         description_area: Übersicht der gemeldeten, kommentierten oder geschlossen
           Hinweise im Bereich [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})].
         description_item: Ein RSS-Feed für Hinweis %{id}
@@ -1946,6 +1949,9 @@ de:
       home location: Heimatstandort
       no home location: Du hast noch keinen Standort angegeben.
       update home location on click: Standort beim Klick auf die Karte aktualisieren
+      show: Anzeigen
+      delete: Löschen
+      undelete: Löschen rückgängig machen
     update:
       success: Profil aktualisiert.
       failure: Profil konnte nicht aktualisiert werden.
@@ -2448,6 +2454,7 @@ de:
           fehlt, dich einzuarbeiten, wie man in OSM Daten editiert, so gib einfach
           einen Hinweis/melde einen Fehler, dann kann sich ein anderer Mapper darum
           kümmern.
+        the_map: die Karte
     communities:
       title: Gemeinschaften
       lede_text: |-
@@ -2459,13 +2466,14 @@ de:
         about_text: Lokale Verbände sind Gruppen auf Landesebene oder Regionsebene,
           die den formellen Schritt unternommen haben, einen gemeinnützigen Rechtskörper
           zu gründen. Sie repräsentieren die Karte und Kartographen der Region, wenn
-          Sie mit der örtlichen Regierung, Wirtschaft oder den Medien zu tun haben.
+          sie mit der örtlichen Regierung, Wirtschaft oder den Medien zu tun haben.
           Sie haben auch eine Zusammengehörigkeit mit der OpenStreetMap Foundation
           (OSMF) gebildet, was ihnen eine Verbindung zu der Rechts- und Urheberrechtsabteilung
           gibt.
         list_text: 'Folgende Gemeinschaften sind offiziell als lokale Verbände eingetragen:'
       other_groups:
         title: Andere Gruppen
+        communities_wiki: Community-Wiki-Seite
   traces:
     visibility:
       private: Privat (werden nur als anonyme, unsortierte Punkte ohne Zeitangaben
@@ -2552,6 +2560,7 @@ de:
       empty_title: Noch nichts vorhanden
       empty_upload_html: '%{upload_link} oder erfahren Sie mehr über GPS-Tracks auf
         der %{wiki_link}.'
+      upload_new: Einen neuen Track hochladen
       wiki_page: Wiki-Seite
       upload_trace: Lade einen Track hoch
       all_traces: Alle Tracks
@@ -2820,6 +2829,7 @@ de:
       remove as friend: Freund entfernen
       add as friend: Freund hinzufügen
       mapper since: 'Mapper seit:'
+      uid: 'Benutzer-ID:'
       ct status: 'Bedingungen für Mitwirkende:'
       ct undecided: Unentschlossen
       ct declined: Abgelehnt
@@ -3020,7 +3030,9 @@ de:
     index:
       title: Hinweise/Fehler erstellt oder kommentiert von %{user}
       heading: Hinweise von %{user}
-      subheading_html: Hinweise/Fehler erstellt oder kommentiert von %{user}
+      subheading_html: Hinweise/Fehler %{submitted} oder %{commented} von %{user}
+      subheading_submitted: eingereicht
+      subheading_commented: kommentiert
       no_notes: Keine Hinweise
       id: ID
       creator: Ersteller
index fea612abb2e792e45d9f69fd2423e87d53f4d9ec..b570c6a17ffdc460c03f10d9a2a24524644939c1 100644 (file)
@@ -270,6 +270,7 @@ el:
         reopened_at_by_html: Επανενεργοποιήθηκε %{when} από τον %{user}
       rss:
         title: Σημειώσεις OpenStreetMap
+        description_all: Μια λίστα με αναφερόμενες, σχολιασμένες ή κλειστές σημειώσεις
         description_area: Μια λίστα με σημειώσεις, που αναφέρθηκαν, σχολιάστηκαν ή
           επιλύθηκαν στην περιοχή σας [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Μια τροφοδοσία rss για τη σημείωση %{id}
@@ -336,6 +337,10 @@ el:
       delete_account: Διαγραφή λογαριασμού...
     go_public:
       heading: Δημόσια επεξεργασία
+      currently_not_public: Προς το παρόν, οι αλλαγές σας είναι ανώνυμες και οι άνθρωποι
+        δεν μπορούν να σας στείλουν μηνύματα ή να δουν την τοποθεσία σας. Για να δείξετε
+        τι επεξεργαστήκατε και να επιτρέψετε στους άλλους να επικοινωνήσουν μαζί σας
+        μέσω του ιστότοπου, κάντε κλικ στο παρακάτω κουμπί.
       only_public_can_edit: Από την αλλαγή του API 0.6, μόνο οι δημόσιοι χρήστες μπορούν
         να επεξεργάζονται τα δεδομένα χάρτη.
       find_out_why: μάθετε γιατί
@@ -578,7 +583,6 @@ el:
       comment_link: Σχολιάστε την καταχώρηση
       reply_link: Αποστολή μηνύματος στον συγγραφέα
       comment_count:
-        zero: Χωρίς σχόλια
         one: '%{count} σχόλιο'
         other: '%{count} σχόλια'
       no_comments: Κανένα σχόλιο
@@ -1465,8 +1469,7 @@ el:
     show:
       title: '%{status} Ζήτημα #%{issue_id}'
       reports:
-        zero: Καμία αναφορά
-        one: 1 αναφορά
+        one: '%{count} αναφορά'
         other: '%{count} αναφορές'
       no_reports: Καμία αναφορά
       report_created_at: Αναφέρθηκε για πρώτη φορά στις %{datetime}
@@ -1540,7 +1543,7 @@ el:
   layouts:
     logo:
       alt_text: Λογότυπο OpenStreetMap
-    home: Î\9cεÏ\84άβαÏ\83η Ï\83Ï\84ο Î£Ï\80ίÏ\84ι
+    home: Î\94είξε Ï\84ο Ï\83Ï\80ίÏ\84ι Î¼Î¿Ï\85
     logout: Αποσύνδεση
     log_in: Σύνδεση
     sign_up: Εγγραφή
@@ -1876,7 +1879,7 @@ el:
       delete image: Αφαίρεση της τρέχουσας εικόνας
       replace image: Αντικατάσταση της τρέχουσας εικόνας
       image size hint: (τετράγωνες εικόνες τουλάχιστον 100 x 100 λειτουργούν καλύτερα)
-      home location: Τοποθεσία Σπιτιού
+      home location: Τοποθεσία σπιτιού
       no home location: Δεν έχετε εισάγει την τοποθεσία του σπιτιού σας.
       update home location on click: Ενημέρωση τοποθεσίας σπιτιού όταν κάνω κλικ στον
         χάρτη;
@@ -1968,11 +1971,22 @@ el:
         χρησιμοποιούν αεροφωτογραφίες, συσκευές GPS και τοπικούς χάρτες χαμηλής τεχνολογίας
         για να σιγουρευτούν πως το OSM είναι ακριβής και ενημερωμένο.
       community_driven_title: Βασίζεται στην κοινότητα
+      community_driven_1_html: |-
+        Η κοινότητα του OpenStreetMap είναι ποικίλη, παθιασμένη και αυξάνεται καθημερινά.
+        Οι συνεισφέροντες μας, περιλαμβάνουν ενθουσιώδεις χαρτογράφους, επαγγελματίες GIS, μηχανικούς
+        που τρέχουν τους διακομιστές OSM, ανθρωπιστές που χαρτογραφούν περιοχές που έχουν πληγεί από καταστροφές,
+        και πολλά άλλα.
+        Για να μάθετε περισσότερα σχετικά με την κοινότητα, δείτε στον ιστότοπο %{osm_blog_link}, %{user_diaries_link}, %{community_blogs_link} και στο %{osm_foundation_link}.
       community_driven_osm_blog: Ιστολόγιο OpenStreetMap
       community_driven_user_diaries: ημερολόγια χρηστών
       community_driven_community_blogs: ιστολόγια κοινότητας
       community_driven_osm_foundation: Ίδρυμα OSM
       open_data_title: Ανοικτά Δεδομένα
+      open_data_1_html: 'Το OpenStreetMap είναι %{open_data}: είστε ελεύθεροι να την
+        χρησιμοποιήστε για οποιονδήποτε σκοπό, εφόσον μνημονεύετε το OpenStreetMap
+        και τους συνεισφέροντές του. Εάν προσαρμόσετε ή αξιοποιήσετε αυτά τα δεδομένα
+        με συγκεκριμένους τρόπους, πρέπει να διανείμετε το αποτέλεσμα μόνο υπό την
+        ίδια άδεια χρήσης. Δείτε τη σελίδα %{copyright_license_link} για λεπτομέρειες.'
       open_data_open_data: ανοιχτά δεδομένα
       open_data_copyright_license: Σελίδα Πνευματικών Δικαιωμάτων και Άδειας Χρήσης
       legal_title: Νομικό
@@ -2704,7 +2718,7 @@ el:
       diary: Ημερολόγιο
       edits: Επεξεργασίες
       traces: Ίχνη
-      notes: Σημειώσεις Χάρτη
+      notes: Σημειώσεις χάρτη
       remove as friend: Αφαίρεση Φίλου
       add as friend: Προσθήκη Φίλου
       mapper since: 'Χαρτογράφος από:'
@@ -2902,7 +2916,7 @@ el:
     index:
       title: Σημειώσεις που υποβλήθηκαν ή σχολιάστηκαν από τον %{user}
       heading: σημειώσεις του %{user}
-      subheading_html: Σημειώσεις που υποβλήθηκαν ή σχολιάστηκαν από τον %{user}
+      subheading_html: Σημειώσεις που %{submitted} ή %{commented} από τον %{user}
       no_notes: Χωρίς σημειώσεις
       id: Αναγνωριστικό
       creator: Δημιουργός
@@ -2937,8 +2951,8 @@ el:
       other_problems_resolve: Για όλα τα άλλα προβλήματα με τη σημείωση, επιλύστε
         το μόνοι σας με ένα σχόλιο.
       other_problems_resolved: Για όλα τα άλλα προβλήματα, αρκεί η επίλυση.
-      disappear_date_html: Αυτή η επιλυμένη σημείωση θα εξαφανιστεί από τον χάρτη
-        στις %{disappear_in}.
+      disappear_date_html: Αυτή η επιλυμένη σημείωση θα εξαφανιστεί από το χάρτη σε
+        %{disappear_in}.
     new:
       title: Νέα σημείωση
       intro: Εντοπίσατε λάθος ή κάτι που λείπει; Πείτε το στους άλλους χαρτογράφους
@@ -2981,7 +2995,7 @@ el:
         in: Μεγέθυνση
         out: Σμίκρυνση
       locate:
-        title: Προβολή της Τοποθεσίας μου
+        title: Προβολή της τοποθεσίας μου
         metersPopup:
           one: Είστε εντός %{count} μέτρου από το σημείο
           other: Είστε εντός %{count} μέτρων από το σημείο
@@ -2990,18 +3004,18 @@ el:
           other: Είστε εντός %{count} ποδιών από το σημείο
       base:
         standard: Κανονικός
-        cyclosm: CyclOSM
-        cycle_map: Î§Î¬Ï\81Ï\84ηÏ\82 Î Î¿Î´Î·Î»Î±Ï\83ίαÏ\82
-        transport_map: Î£Ï\85γκοινÏ\89νιακÏ\8cÏ\82 Î§Î¬Ï\81Ï\84ηÏ\82
+        cyclosm: CyclOSM ποδηλασία
+        cycle_map: Î Î¿Î´Î·Î»Î±Ï\83ία
+        transport_map: Î£Ï\85γκοινÏ\89νία
         hot: Ανθρωπιστικός
-        opnvkarte: ÖPNVKarte
+        opnvkarte: ÖPNVKarte συγκοινωνίες
       layers:
-        header: Στρώματα Χάρτη
-        notes: Σημειώσεις Χάρτη
-        data: Δεδομένα Χάρτη
+        header: Στρώματα
+        notes: Σημειώσεις χάρτη
+        data: Δεδομένα χάρτη
         gps: Δημόσια ίχνη GPS
         overlays: Ενεργοποίηση επικαλύψεων για την αντιμετώπιση προβλημάτων του χάρτη
-        title: Στρώματα
+        title: Στρώματα χάρτη
       openstreetmap_contributors: Συνεισφέροντες OpenStreetMap
       make_a_donation: Κάντε μια δωρεά
       website_and_api_terms: Όροι ιστότοπου και API
index aca571d53a586a4b2975cde54188a892d2184131..cd7d67947b7b2127b5472fe58ff563597bc52770 100644 (file)
@@ -5,6 +5,8 @@ en:
     formats:
       friendly: "%e %B %Y at %H:%M"
       blog: "%e %B %Y"
+  count:
+    at_least_pattern: "%{count}+"
   helpers:
     file:
       prompt: Choose file
@@ -2988,6 +2990,7 @@ en:
         cyclosm: CyclOSM
         cycle_map: Cycle Map
         transport_map: Transport Map
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitarian
         opnvkarte: ÖPNVKarte
       layers:
@@ -3008,6 +3011,8 @@ en:
       andy_allan: Andy Allan
       opnvkarte_credit: "Tiles courtesy of %{memomaps_link}"
       memomaps: MeMoMaps
+      tracestrack_credit: "Tiles courtesy of %{tracestrack_link}"
+      tracestrack: Tracestrack
       hotosm_credit: "Tiles style by %{hotosm_link} hosted by %{osm_france_link}"
       hotosm_name: Humanitarian OpenStreetMap Team
     site:
index ed291ca35ab114fdc1e7c1fd822752f3dbf6475d..63341937e7adb159215fe43275d7e23cf499678a 100644 (file)
@@ -31,6 +31,8 @@ eo:
   time:
     formats:
       friendly: '%e %B %Y je %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Elektu dosieron
@@ -3014,6 +3016,7 @@ eo:
         cyclosm: CyclOSM
         cycle_map: Biciklada mapo
         transport_map: Transporta mapo
+        tracestracktop_topo: Topografia mapo
         hot: Hom-helpa mapo
         opnvkarte: ÖPNVKarte
       layers:
@@ -3032,6 +3035,8 @@ eo:
       andy_allan: Andy ALLAN
       opnvkarte_credit: Kaheloj danke al %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Kaheloj danke al %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: 'Stilo de kaheloj: %{hotosm_link}, retgastigo: %{osm_france_link}'
       hotosm_name: HOTOSM
     site:
index a7d9f8ea2960a6cc55fac310e44dd117378a8236..b84e74524429d8498cbe67db4cebdd59f558da41 100644 (file)
@@ -99,6 +99,8 @@ es:
   time:
     formats:
       friendly: '%e de %B de %Y a las %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Seleccionar archivo
@@ -357,7 +359,7 @@ es:
         retain_changeset_discussions: Tus discusiones sobre conjuntos de cambios,
           si las hay, se conservarán.
         retain_email: Tu dirección de correo electrónico se conservará.
-        confirm_delete: ¿Lo confirma?
+        confirm_delete: ¿Estás seguro?
         cancel: Cancelar
   accounts:
     edit:
@@ -506,7 +508,7 @@ es:
     redacted:
       redaction: Censura %{id}
       message_html: La versión %{version} de este %{type} no se puede mostrar porque
-        se ha censurado. Consúltese %{redaction_link} para obtener más detalles.
+        se ha censurado. Consulta %{redaction_link} para obtener más detalles.
       type:
         node: nodo
         way: vía
@@ -1795,7 +1797,7 @@ es:
       success: Cuenta confirmada, !gracias por registrarte!
       already active: Esta cuenta ya ha sido confirmada.
       unknown token: Ese código de confirmación ha caducado o no existe.
-      resend_html: Si necesita que le reenviemos el mensaje de confirmación, %{reconfirm_link}.
+      resend_html: Si necesitas que te reenviemos el mensaje de confirmación, %{reconfirm_link}.
       click_here: has clic aquí
     confirm_resend:
       failure: No se ha encontrado el usuario %{name}
@@ -2093,8 +2095,8 @@ es:
           2.0
         introduction_3_creative_commons_url: https://creativecommons.org/licenses/by-sa/2.0/deed.es
         credit_title_html: Cómo dar reconocimiento a OpenStreetMap
-        credit_1_html: 'Cuando utilice datos de OpenStreetMap, deberá hacer las dos
-          cosas siguientes:'
+        credit_1_html: 'Cuando utilices datos de OpenStreetMap, deberás hacer las
+          siguientes dos cosas:'
         credit_2_1: Proporciona crédito a OpenStreetMap mostrando nuestro aviso de
           derechos de autor.
         credit_2_2: Especifica que los datos están disponibles bajo la Licencia de
@@ -2673,7 +2675,7 @@ es:
       grant_access: Otorgar acceso
     authorize_success:
       title: Solicitud de autorización permitida
-      allowed_html: Has concedido acceso a tu cuenta a la aplicación %{app_name}.
+      allowed_html: Has otorgado acceso a tu cuenta a la aplicación %{app_name}.
       verification: El código de verificación es %{code}.
     authorize_failure:
       title: Falló la solicitud de autorización
@@ -2888,7 +2890,7 @@ es:
         administrator: Este usuario es un administrador
         moderator: Este usuario es un moderador
         grant:
-          administrator: Adjudicar acceso de administrador
+          administrator: Otorgar acceso de administrador
           moderator: Adjudicar acceso de moderador
         revoke:
           administrator: Revocar acceso de administrador
@@ -2952,7 +2954,7 @@ es:
       not_revoke_admin_current_user: No se pudo revocar el rol de administrador del
         usuario actual.
     grant:
-      title: Confirmar adjudicación de rol
+      title: Confirmar otorgamiento de rol
       heading: Confirmar adjudicación de rol
       are_you_sure: ¿Estás seguro de que deseas otorgar el rol `%{role}' al usuario
         `%{name}'?
@@ -2962,7 +2964,7 @@ es:
     revoke:
       title: Confirmar revocación de rol
       heading: Confirmar revocación de rol
-      are_you_sure: ¿Está seguro de que desea revocar el rol `%{role}' del usuario
+      are_you_sure: ¿Estás seguro de que deseas revocar el rol `%{role}' del usuario
         `%{name}'?
       confirm: Confirmar
       fail: No se pudo revocar el rol `%{role}' del usuario `%{name}'. Comprueba que
@@ -3006,7 +3008,7 @@ es:
       heading_html: Revocando el bloqueo sobre %{block_on} por %{block_by}
       time_future: Este bloqueo finalizará en %{time}.
       past: Este bloqueo terminó %{time} y no puede ser revocado ahora.
-      confirm: ¿Está seguro de que desea revocar este bloqueo?
+      confirm: ¿Estás seguro de que deseas revocar este bloqueo?
       revoke: ¡Revocar!
       flash: Este bloqueo ha sido revocado.
     helper:
@@ -3164,6 +3166,7 @@ es:
         cyclosm: CyclOSM
         cycle_map: Mapa ciclista
         transport_map: Mapa de transporte
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitario
         opnvkarte: ÖPNVKarte
       layers:
@@ -3183,6 +3186,8 @@ es:
       andy_allan: Andy Allan
       opnvkarte_credit: Teselas cortesía de %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Teselas cortesía de %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Estilo de teselas por %{hotosm_link} alojados por %{osm_france_link}
       hotosm_name: Equipo humanitario de OpenStreetMap
     site:
index 553f83479e77a62148b339d2708335fa9f9a19ab..2a9a4566d6e173ba1b001c6c397c5a359d90baa2 100644 (file)
@@ -100,6 +100,8 @@ fr:
     formats:
       friendly: '%e %B %Y à %-Hh%M'
       blog: '%e %B %Y'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Choisir un fichier
@@ -3215,6 +3217,7 @@ fr:
         cyclosm: CyclOSM
         cycle_map: Carte cyclable
         transport_map: Carte de transport
+        tracestracktop_topo: Topo de Tracestack
         hot: Humanitaire
         opnvkarte: ÖPNVKarte
       layers:
@@ -3233,6 +3236,8 @@ fr:
       andy_allan: Andy Allan
       opnvkarte_credit: Carreaux fournis aimablement par %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Carreaux fournis aimablement par %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Style de carreaux par %{hotosm_link} hébergé par %{osm_france_link}
       hotosm_name: L’Équipe OpenStreetMap Humanitaire
     site:
index ff0b9635cb77c3f6bc0ceec9bc5254f2bd651ea3..a058613249581b04272f753073a6ca08ff488c8d 100644 (file)
@@ -22,6 +22,8 @@ gl:
     formats:
       friendly: '%e de %B de %Y ás %H:%M'
       blog: '%e de %B de %Y'
+  count:
+    at_least_pattern: máis de %{count}
   helpers:
     file:
       prompt: Escoller un ficheiro
@@ -3068,6 +3070,7 @@ gl:
         cyclosm: CyclOSM (Ciclista)
         cycle_map: Ciclista
         transport_map: Transporte
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitario
         opnvkarte: ÖPNVKarte (Transporte)
       layers:
@@ -3086,6 +3089,8 @@ gl:
       andy_allan: Andy Allan
       opnvkarte_credit: Mosaicos cortesía de %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Mosaicos cortesía de %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Estilo de mosaicos do %{hotosm_link} aloxado por %{osm_france_link}
       hotosm_name: equipo humanitario do OpenStreetMap
     site:
index ab854d1e536c6c680895d13645691f3a2b60867e..c84719348b9d3f08ab42913743bef0851f2b4d79 100644 (file)
@@ -12,6 +12,8 @@ ia:
   time:
     formats:
       friendly: '%e de %B %Y a %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Selige file
@@ -3045,6 +3047,7 @@ ia:
         cyclosm: CyclOSM
         cycle_map: Carta cyclista
         transport_map: Carta de transporto
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitario
         opnvkarte: ÖPNVKarte
       layers:
@@ -3063,6 +3066,8 @@ ia:
       andy_allan: Andy Allan
       opnvkarte_credit: Tegulas fornite per %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Tegulas fornite per %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Stilo de tegulas per %{hotosm_link} albergate per %{osm_france_link}
       hotosm_name: le Equipa Humanitari de OpenStreetMap
     site:
index bd9cb3c7dc073960d8b415400ff69706f53fea49..2600c31f361a2b5c5024148759edd51012f796d2 100644 (file)
@@ -288,6 +288,7 @@ it:
         reopened_at_by_html: Riaperta %{when} da %{user}
       rss:
         title: Note di OpenStreetMap
+        description_all: Un elenco di note segnalate, commentate o chiuse
         description_area: Una lista di note inserite, commentate o chiuse nella tua
           area [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Feed rss per la nota %{id}
@@ -2126,6 +2127,7 @@ it:
           (informazioni pubbliche della Serbia), 2018.
         contributors_rs_serbia: Serbia
         contributors_rs_rgz: Autorità geodetica serba
+        contributors_rs_open_data_portal: Portale nazionale degli open data
         contributors_si_credit_html: |-
           %{slovenia}: Contiene i dati provenienti dall'%{gu_link} e dal %{mkgp_link}
           (informazioni pubbliche della Slovenia).
@@ -3121,6 +3123,7 @@ it:
       andy_allan: Andy Allan
       opnvkarte_credit: Tasselli per gentile concessione di %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Tasselli per gentile concessione di %{tracestrack_link}
       hotosm_credit: Stile tasselli di %{hotosm_link} ospitato da %{osm_france_link}
       hotosm_name: La squadra di OpenStreetMap Humanitarian
     site:
index 13ec9bc9fcd3aa18520cb1de94d207292a9b0c95..3166ddb4a899264d64d50352b7f173aa1f4ed401 100644 (file)
@@ -722,7 +722,7 @@ ja:
           nursing_home: 老人ホーム
           parking: 駐車場
           parking_entrance: 駐車場の入口
-          parking_space: é§\90è»\8aå ´
+          parking_space: é§\90è»\8aå\8cºç\94»
           payment_terminal: 決済端末
           pharmacy: 薬局
           place_of_worship: 宗教施設
@@ -2112,12 +2112,14 @@ ja:
         the_map: マップ
     communities:
       title: コミュニティ
+      local_chapters:
+        title: 地域支部
       other_groups:
         title: その他のグループ
         other_groups_html: |-
-          地方支部と同じように公式にグループを設立する必要はありません.
+          地域支部と同じように公式にグループを設立する必要はありません。
           実際に多くのグループが非公式な人々の集まりとして、または
-          コミュニティグループとして非常にうまく存在しています.誰でもこれらを設定または参加できます。 %{communities_wiki_link} で詳細をお読みください。
+          コミュニティグループとして非常にうまく存在しています誰でもこれらを設定または参加できます。 %{communities_wiki_link} で詳細をお読みください。
   traces:
     visibility:
       private: 非公開 (匿名、点は順不同)
index 4133eec391f12f7233f178329d0151d87d394c5e..3edc42d98c4a4b0e4cc727df3d7b01dcf4bc44e3 100644 (file)
@@ -7,6 +7,7 @@
 # Author: Cuu508
 # Author: Danieldegroot2
 # Author: Edgars2007
+# Author: Edgarsdna
 # Author: GreenZeb
 # Author: Jmg.cmdi
 # Author: Karlis
@@ -156,6 +157,10 @@ lv:
   datetime:
     distance_in_words_ago:
       half_a_minute: pirms pusminūtes
+      less_than_x_minutes:
+        zero: pirms mazāk nekā %{count} minūtēm
+        one: pirms mazāk nekā %{count} minūtes
+        other: pirms mazāk nekā %{count} minūtēm
   editor:
     default: Noklusējuma (pašlaik %{name})
     id:
@@ -253,6 +258,10 @@ lv:
     anonymous: anonīms
     no_comment: (nav komentāru)
     part_of: Daļa no
+    part_of_relations:
+      zero: '%{count} attiecības'
+      one: '%{count} attiecība'
+      other: '%{count} attiecības'
     download_xml: Lejupielādēt XML
     view_history: Skatīt vēsturi
     view_details: Skatīt detaļas
@@ -385,6 +394,9 @@ lv:
       nearby mapper: Kartētājs tuvējā apkārtnē
       friend: Draugs
     show:
+      title: Mans vadības panelis
+      no_home_location_html: '%{edit_profile_link} un iestatiet savu atrašanās vietu,
+        lai redzētu tuvumā esošos lietotājus.'
       my friends: Mani draugi
       no friends: Tu  vēl neesi pievienojis draugus.
       nearby users: Citi tuvumā esoši lietotāji
@@ -1195,6 +1207,7 @@ lv:
     help: Palīdzība
     about: Par
     copyright: Autortiesības
+    communities: Kopienas
     community: Kopiena
     community_blogs: Kopienas emuāri
     community_blogs_title: OpenStreetMap kopienas locekļu emuāri
@@ -1489,6 +1502,7 @@ lv:
   site:
     about:
       next: Tālāk
+      heading_html: '%{copyright}OpenStreetMap %{br} datu sniedzēji'
       used_by_html: '%{name} darbina kartes datus simtiem mājaslapu, mobilajās aplikācijās
         un aparatūras ierīcēs'
       lede_text: OpenStreetMap būvē kartētāju kopiena, kuri iegulda un uztur datus
@@ -1676,6 +1690,7 @@ lv:
       where_am_i: Kur tas ir?
       where_am_i_title: Aprakstiet pašreizējo atrašanās vietu izmantojot meklētāju
       submit_text: OK
+      reverse_directions_text: Apgriezt virzienu
     key:
       table:
         entry:
@@ -1769,6 +1784,20 @@ lv:
         para_1: Ja tu vēlies labot ko mazu un nav laika lai piereģistrētos vai iemācītos
           kā rediģēt, ir iespējams vienkārši atstāt piezīmi.
         the_map: karte
+    communities:
+      title: Kopienas
+      lede_text: |-
+        OpenStreetMap veido vai izmanto cilvēki no visas pasaules.
+        Daudzi piedalās individuāli, bet citi ir izveidojuši kopienas.
+        Šīs grupas ir dažāda lieluma un pārstāv dažādas ģeogrāfiskās teritorijas - no mazām pilsētām līdz lieliem daudzvalstu reģioniem.
+        Tās var būt arī formālas vai neformālas.
+      local_chapters:
+        list_text: 'Šādas kopienas ir oficiāli izveidotas kā vietējās nodaļas:'
+      other_groups:
+        other_groups_html: |-
+          Nav nepieciešams formāli izveidot grupu tādā pašā apjomā kā vietējās nodaļas.
+          Patiešām, daudzas grupas ļoti veiksmīgi pastāv kā neformāla cilvēku pulcēšanās vai kā
+          kopienas grupa. Tās var izveidot vai pievienoties ikviens. Vairāk lasiet %{communities_wiki_link}.
   traces:
     visibility:
       private: Privāts (kopīgots kā anonīms, nesakārtoti punkti)
@@ -1981,6 +2010,8 @@ lv:
       my profile: Mans profils
       my settings: Mani iestatījumi
       my comments: Mani komentāri
+      my_preferences: Mani iestatījumi
+      my_dashboard: Mans vadības panelis
       blocks on me: Bloki uz mani
       blocks by me: Manis piešķirtie Bloki
       send message: Nosūtīt ziņojumu
@@ -2166,6 +2197,7 @@ lv:
       open_title: 'Neatrisināta piezīme: #%{note_name}'
       closed_title: 'Atrisināta piezīme: #%{note_name}'
       hidden_title: 'Paslēpta piezīme #%{note_name}'
+      event_opened_by_html: Izveidoja %{user} %{time_ago}
       report: Ziņot par šo piezīmi
       anonymous_warning: Šī piezīme ietver komentārus no anonīmiem lietotājiem, kurus
         nepieciešams pārbaudīt neatkarīgi.
@@ -2174,6 +2206,10 @@ lv:
       reactivate: Atkal aktivizēt
       comment_and_resolve: Komentēt un atrisināt
       comment: Komentēt
+      report_link_html: Ja šajā piezīmē ir konfidenciāla informācija, kas jādzēš,
+        varat %{link}.
+      other_problems_resolve: Visas pārējās problēmas, kas saistītas ar piezīmi, lūdzu,
+        atrisiniet paši, pievienojot komentāru.
     new:
       title: Jauna piezīme
       intro: Piezīmes domātas, lai norādītu uz kartes kļūdām. Ja vēlies pamēģināt
@@ -2182,6 +2218,9 @@ lv:
         precīzāk un detalizētāk visu izklāsti, kā arī marķieri novieto pēc iespējas
         pareizākajā pozīcijā. (Lūdzu neizmantojiet personīgo informāciju vai arī informāciju
         no citām ar autortiesībām aizsargātām kartēm.)
+      advice: Jūsu piezīme ir publiska, un to var izmantot kartes atjaunināšanai,
+        tāpēc neievadiet personisku informāciju vai informāciju no kartēm vai direktoriju
+        sarakstiem, uz kuriem attiecas autortiesības.
       add: Pievienot piezīmi
   javascripts:
     close: Aizvērt
@@ -2197,6 +2236,7 @@ lv:
       custom_dimensions: Uzstādīt pielāgotus izmērus
       format: 'Formāts:'
       scale: 'Mērogs:'
+      image_dimensions: Attēlā būs redzams standarta slānis %{width} x %{height}
       download: Lejupielādēt
       short_url: Īsais URL
       include_marker: Iekļaut marķieri
@@ -2228,6 +2268,8 @@ lv:
         data: Kartes dati
         overlays: Iespējot pārklājumus, lai novērstu trūkumus kartei
         title: Slāņi
+      make_a_donation: Veikt ziedojumu
+      website_and_api_terms: Tīmekļa vietnes un API noteikumi
     site:
       edit_tooltip: Rediģēt karti
       edit_disabled_tooltip: Pietuvini, lai rediģētu karti
@@ -2246,10 +2288,12 @@ lv:
         unhide_comment: parādīt
     edit_help: Pārvieto karti un pietuvini vietai, kuru vēlies labot, tad spied šeit.
     directions:
+      ascend: Kāpums
       engines:
         fossgis_osrm_car: Ar mašīnu (OSRM)
         graphhopper_bicycle: Ar velosipēdu (GraphHopper)
         graphhopper_foot: Ar kājām (GraphHopper)
+      descend: Kritums
       directions: Norādes
       distance: Attālums
       errors:
@@ -2285,7 +2329,7 @@ lv:
         end_oneway_without_exit: Vienvirziena ceļa beigas pie %{name}
         roundabout_with_exit: Pēc apkārtceļa nogriezieties uz izejas %{exit} pie %{name}
         unnamed: nenosaukts ceļš
-        courtesy: Virzienos, pieklājīgi no %{link}
+        courtesy: Norādes no %{link}
         exit_counts:
           first: "1."
           second: "2."
index 9828a724543ffb0c23bd25bb0f458e1931b96b57..59f87fb2aa32d6b6e19f317c240a06f00b789e68 100644 (file)
@@ -13,6 +13,8 @@ mk:
     formats:
       friendly: '%e %B %Y г. во %H:%M ч.'
       blog: '%e %B %Y г.'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Одберете податотека
@@ -3032,6 +3034,7 @@ mk:
         cyclosm: CyclOSM
         cycle_map: Велосипедска
         transport_map: Сообраќајна
+        tracestracktop_topo: Tracestrack Топо
         hot: Хуманитарна
         opnvkarte: ÖPNVKarte
       layers:
@@ -3050,6 +3053,8 @@ mk:
       andy_allan: Енди Алан
       opnvkarte_credit: Полињата се доставени од %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Полињата се доставени од %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Стилот на полињата е од %{hotosm_link} вдомен од %{osm_france_link}
       hotosm_name: Екипа на Хуманитарната OpenStreetMap
     site:
index 4e140327aa901fc92014605253171a8204504864..2b594f0bbf5565b08c7d083cfd77b5be512b67d7 100644 (file)
@@ -413,7 +413,7 @@ nn:
     query:
       title: Finn objekt
       introduction: Klikk på kartet for å visa objekt i nærleiken.
-      nearby: Nærliggjande funksjonar
+      nearby: Nærliggjande objekt
       enclosing: Omgjevande objekt
   changesets:
     changeset_paging_nav:
index 3f1b8ee129eec9e09a6e1ecb36083f3b5f88b727..f290f65e46d93903bda685c7aea57bc1aa7d5555 100644 (file)
@@ -14,6 +14,7 @@
 # Author: Duke of Wikipädia
 # Author: EVinente
 # Author: Eduardoaddad
+# Author: Felipe L. Ewald
 # Author: Fmca
 # Author: FranciscoDS
 # Author: Ftrebien
@@ -286,6 +287,7 @@ pt:
         reopened_at_by_html: Reativado %{when} por %{user}
       rss:
         title: Notas do OpenStreetMap
+        description_all: Uma lista de notas relatadas, comentadas ou fechadas
         description_area: Uma lista de notas relatadas, comentadas ou encerradas na
           sua área [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Um feed RSS para a nota %{id}
@@ -2808,6 +2810,7 @@ pt:
       remove as friend: Desfazer amizade
       add as friend: Adicionar como amigo
       mapper since: 'Mapeador desde:'
+      uid: 'ID do usário:'
       ct status: 'Termos do contribuidor:'
       ct undecided: Não decidido
       ct declined: Discordo
@@ -3090,6 +3093,7 @@ pt:
         cyclosm: CyclOSM
         cycle_map: Ciclístico
         transport_map: Transporte Público
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitário
         opnvkarte: ÖPNVKarte
       layers:
@@ -3108,6 +3112,8 @@ pt:
       andy_allan: Andy Allan
       opnvkarte_credit: Mosaico cortesia de %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Mosaico cortesia de %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Estilo de mosaico por %{hotosm_link} hospedado por %{osm_france_link}
       hotosm_name: Humanitarian OpenStreetMap Team
     site:
index f9007390f026dd35fc23b7e5318124acfe86c364..8d330bf6b12cfae4d19246f489d19748252cd7f5 100644 (file)
@@ -24,6 +24,8 @@ ro:
   time:
     formats:
       friendly: '%e %B %Y la %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Selectează fișier
@@ -259,6 +261,7 @@ ro:
         reopened_at_by_html: Reactivat %{when} de %{user}
       rss:
         title: Note OpenStreetMap
+        description_all: O listă de note raportate, comentate sau închise
         description_area: O listă de note, raportate, comentate sau închise în zona
           dvs. [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Un feed RSS pentru nota %{id}
@@ -2806,6 +2809,7 @@ ro:
       remove as friend: Scoate din lista de prieteni
       add as friend: Adaugă Prieten
       mapper since: 'Cartograf din:'
+      uid: 'ID-ul de utilizator:'
       ct status: 'Termenii colaboratorului:'
       ct undecided: Nedefinit
       ct declined: Declinat
@@ -3100,6 +3104,7 @@ ro:
         cyclosm: CyclOSM
         cycle_map: Hartă de ciclism
         transport_map: Hartă de transport
+        tracestracktop_topo: Tracestrack Topo
         hot: Umanitară
         opnvkarte: ÖPNVKarte
       layers:
@@ -3118,6 +3123,8 @@ ro:
       andy_allan: Andy Allan
       opnvkarte_credit: Tile-uri prin amabilitatea lui %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Tile-uri prin amabilitatea lui %{tracestrack_link}
+      tracestrack: Tracetrack
       hotosm_credit: Stilul tile-urilor creat de %{hotosm_link} găzduit de %{osm_france_link}
       hotosm_name: Echipa Umanitară OpenStreetMap
     site:
index f96ebc04874d4e4cb0c124477477c95eac93d5e0..b3626cb1554a5474c31cc000f82677ba7d6fd1ed 100644 (file)
@@ -79,6 +79,7 @@
 # Author: Putnik
 # Author: Pvwww
 # Author: Redredsonia
+# Author: Rich Flight22
 # Author: Riliam
 # Author: Rivka Silinsky
 # Author: Ruila
@@ -964,6 +965,7 @@ ru:
           ambulance_station: Станция скорой медицинской помощи
           assembly_point: Место сбора
           defibrillator: Дефибриллятор
+          fire_extinguisher: Огнетушитель
           fire_water_pond: Пожарный водоём
           landing_site: Место аварийной посадки
           phone: Телефон экстренной связи
@@ -1019,6 +1021,7 @@ ru:
           unclassified: Дорога местного значения
           "yes": Дорога
         historic:
+          aircraft: Историческое воздушное судно
           archaeological_site: Раскопки
           battlefield: Поле боя
           boundary_stone: Пограничный камень
@@ -2109,6 +2112,7 @@ ru:
         contributors_nl_netherlands: Нидерланды
         contributors_nz_new_zealand: Новая Зеландия
         contributors_nz_cc_by: CC BY 4.0
+        contributors_rs_serbia: Сербия
         contributors_si_slovenia: Словения
         contributors_es_spain: Испания
         contributors_es_ign: IGN
index c80fdce462dbb9564139fc6cdc1777906c171570..24f1925ea2e2f6fda3ff3142a6388e03f858507e 100644 (file)
@@ -24,6 +24,8 @@ sl:
     formats:
       friendly: '%e. %B %Y ob %H:%M'
       blog: '%e %B %Y'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Izberi datoteko
@@ -3115,6 +3117,7 @@ sl:
         cyclosm: CyclOSM
         cycle_map: Kolesarska karta
         transport_map: Prometna karta
+        tracestracktop_topo: Tracestrack Topo
         hot: Humanitarno
         opnvkarte: ÖPNVKarte
       layers:
@@ -3133,6 +3136,8 @@ sl:
       andy_allan: Andy Allan
       opnvkarte_credit: Ploščice z dovoljenjem %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Ploščice z dovoljenjem %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Slog ploščic %{hotosm_link}, gosti jih %{osm_france_link}
       hotosm_name: Humanitarna ekipa OpenStreetMap
     site:
index 470019435c0f6b3fdea99edacb7f07f351c5b65c..a520582543154ffdaaf039b16a40f596ffc8746a 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Serbian (Latin script) (srpski (latinica))
+# Messages for srpski (latinica) (srpski (latinica))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Macofe
index d015c9baf3108f0d23de4a9a873ce907416bb9a7..ea60020c7de8b583f7d993278bb0619f1ec272b4 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Serbian (Cyrillic script) (српски (ћирилица))
+# Messages for српски (ћирилица) (српски (ћирилица))
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Acamicamacaraca
index 08a76ff6bed1c3c2a03f711ed245650992ae7b00..b6f09dd7365f59582ecd3aad6f2a7f8998a9620f 100644 (file)
@@ -49,6 +49,7 @@
 # Author: VickyC
 # Author: Westis
 # Author: WikiPhoenix
+# Author: Yupik
 # Author: Zvenzzon
 ---
 sv:
@@ -1844,6 +1845,7 @@ sv:
       home location: Hemposition
       no home location: Du har inte angivit någon hemposition.
       update home location on click: Uppdatera hemposition när jag klickar på kartan?
+      show: Visa
     update:
       success: Profil uppdaterad.
       failure: Kunde inte uppdatera profilen.
index 2e3dcf1f44775ddaaea6ad2b877459b6f3a24455..301b5d8cd29b973af586225673adb8671b98c005 100644 (file)
@@ -2731,7 +2731,7 @@ tr:
         paragraph_2: Katkıda bulunmaya başlamak için kaydolun. Hesabınızı onaylamak
           için bir e-posta göndereceğiz.
       display name description: Herkes tarafından görünecek bir kullanıcı adı. Bu
-        adı istediğin zaman 'tercihlerim' bölümünde değiştirebilirsin.
+        adı istediğiniz zaman ayarlar bölümünde değiştirebilirsiniz.
       external auth: 'Üçüncü Taraf Kimlik Doğrulaması:'
       use external auth: 'Alternatif olarak bir üçüncü parti uygulaması kullanarak
         oturum aç:'
index d6837960e4ffdba0f46674c98a0edebeac0f0b65..326c4a77b1878ae032b8e6b6997f6956c9d753fa 100644 (file)
@@ -52,6 +52,8 @@ uk:
   time:
     formats:
       friendly: '%e %B %Y о %H:%M'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Обрати файл
@@ -3152,6 +3154,7 @@ uk:
         cyclosm: ЦиклОСМ
         cycle_map: ВелоМапа
         transport_map: Мапа Транспорту
+        tracestracktop_topo: Tracestrack Топо
         hot: Humanitarian‎
         opnvkarte: ÖPNVKarte
       layers:
@@ -3170,6 +3173,8 @@ uk:
       andy_allan: Енді Аллан
       opnvkarte_credit: Тайли %{memomaps_link}
       memomaps: MeMoMaps
+      tracestrack_credit: Тайли надаються %{tracestrack_link}
+      tracestrack: Tracestrack
       hotosm_credit: Тайли %{hotosm_link} з %{osm_france_link}
       hotosm_name: Humanitarian OpenStreetMap Team
     site:
index 6d242234f9a64861e033a79f2b598f2c72f494d9..dca30d8e813375ca742442a1ddaab1bcfdc5f646 100644 (file)
@@ -39,6 +39,7 @@
 # Author: LaoShuBaby
 # Author: Lepus
 # Author: Liangent
+# Author: LittlePaw365
 # Author: Liuxinyu970226
 # Author: Mmyangfl
 # Author: Mywood
@@ -54,6 +55,7 @@
 # Author: StarrySky
 # Author: StephDC
 # Author: TianyinLee
+# Author: Tntchn
 # Author: TsuyaMarisa
 # Author: Vikarna
 # Author: VulpesVulpes825
@@ -85,6 +87,8 @@ zh-CN:
     formats:
       friendly: '%Y年%B%e日 %H:%M'
       blog: '%Y年%B%e日'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: 选择文件
@@ -303,6 +307,7 @@ zh-CN:
         reopened_at_by_html: '%{user}于%{when}重新激活'
       rss:
         title: OpenStreetMap 注记
+        description_all: 已报告、评论或关闭的注记列表
         description_area: 在您的区域 [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
           报告、评论或关闭的注记列表
         description_item: 注记 %{id} 的简易信息聚合馈送
@@ -1278,7 +1283,7 @@ zh-CN:
           carpet: 地毯店
           charity: 慈善商店
           cheese: 奶酪店
-          chemist: 化学品
+          chemist: 药妆
           chocolate: 巧克力店
           clothes: 服装店
           coffee: 咖啡店
@@ -2577,6 +2582,7 @@ zh-CN:
       remove as friend: 删除朋友
       add as friend: 添加朋友
       mapper since: 绘图者注册于:
+      uid: 用户ID:
       ct status: 贡献者条款:
       ct undecided: 未决定
       ct declined: 已拒绝
@@ -2839,6 +2845,7 @@ zh-CN:
         cyclosm: 自行车地图
         cycle_map: 骑行运动地图
         transport_map: 交通运输地图
+        tracestracktop_topo: 地形地貌地图
         hot: 人道救援地图
         opnvkarte: 公共交通地图
       layers:
@@ -2857,6 +2864,8 @@ zh-CN:
       andy_allan: Andy Allan
       opnvkarte_credit: '%{memomaps_link}提供的图块'
       memomaps: MeMoMaps
+      tracestrack_credit: '%{tracestrack_link}提供的图块'
+      tracestrack: 踪迹地图
       hotosm_credit: 由%{osm_france_link}托管的%{hotosm_link}图块风格
       hotosm_name: 人道主义开放街图团队
     site:
@@ -3005,8 +3014,8 @@ zh-CN:
       flash: 修订已销毁。
       error: 销毁该修订时出错。
   validations:
-    leading_whitespace: 具有领先的空白
-    trailing_whitespace: 具有尾随空白
+    leading_whitespace: 有前导空格
+    trailing_whitespace: 有尾随空格
     invalid_characters: 包含无效字符
     url_characters: 包含特殊URL字符 (%{characters})
 ...
index 17a708be0107d6a6cc8f3a7841e21ca61593d571..6ffdfedbb8b49cad94f9e0e1b620dd35420b891d 100644 (file)
@@ -37,6 +37,7 @@
 # Author: StarrySky
 # Author: StephDC
 # Author: SupaplexTW
+# Author: Tntchn
 # Author: TongcyDai
 # Author: Wehwei
 # Author: Winston Sung
@@ -60,7 +61,7 @@ zh-TW:
       diary_comment:
         create: 評論
       diary_entry:
-        create: 發
+        create: 發
         update: 更新
       issue_comment:
         create: 添加評論
@@ -1249,7 +1250,7 @@ zh-TW:
           carpet: 地毯店
           charity: 慈善商店
           cheese: 起士店鋪
-          chemist: 化學材料行
+          chemist: 藥妝店
           chocolate: 巧克力店鋪
           clothes: 服飾店
           coffee: 咖啡店
@@ -1698,7 +1699,7 @@ zh-TW:
       send_message_to_html: 寄出新訊息給 %{name}
       back_to_inbox: 回到收件匣
     create:
-      message_sent: 訊息已寄出
+      message_sent: 已傳送訊息
       limit_exceeded: 您最近寄出了大量的訊息。在嘗試寄出其他訊息之前請稍候。
     no_such_message:
       title: 沒有這個訊息
@@ -1931,7 +1932,7 @@ zh-TW:
           儘管 OpenStreetMap 是開放資料,我們不對第三方提供免費的地圖 API。
           請參閱我們的%{api_usage_policy_link}、%{tile_usage_policy_link}、和%{nominatim_usage_policy_link}。
         more_2_1_api_usage_policy: API 使用方針
-        more_2_1_tile_usage_policy: å½±å\83\8få¡\8a使用方針
+        more_2_1_tile_usage_policy: å\9c\96ç£\9a使用方針
         more_2_1_nominatim_usage_policy: 提名使用方針
         contributors_title_html: 我們的貢獻者
         contributors_intro_html: 我們的貢獻者為成千上萬的人。我們也收納了從國家測繪機構及其他來源等取得的開放版權資料,其中包括:
@@ -2823,6 +2824,7 @@ zh-TW:
         cyclosm: CyclOSM
         cycle_map: 自行車地圖
         transport_map: 交通運輸地圖
+        tracestracktop_topo: 蹤跡地圖地形
         hot: 人道救援
         opnvkarte: 公共交通地圖
       layers:
@@ -2835,13 +2837,15 @@ zh-TW:
       openstreetmap_contributors: OpenStreetMap 貢獻者
       make_a_donation: 捐款
       website_and_api_terms: 網站和 API 條款
-      cyclosm_credit: ç\94± %{osm_france_link} ä»£ç®¡ç\9a\84 %{cyclosm_link} æ\89\80æ\8f\90ä¾\9bå½±å\83\8få¡\8a樣式
+      cyclosm_credit: ç\94± %{osm_france_link} ä»£ç®¡ç\9a\84 %{cyclosm_link} æ\89\80æ\8f\90ä¾\9bå\9c\96ç£\9a樣式
       osm_france: OpenStreetMap 法國
-      thunderforest_credit: '%{thunderforest_link} æ\8f\90ä¾\9bç\9a\84å½±å\83\8få¡\8a'
+      thunderforest_credit: '%{thunderforest_link} æ\8f\90ä¾\9bç\9a\84å\9c\96ç£\9a'
       andy_allan: Andy Allan
-      opnvkarte_credit: '%{memomaps_link} æ\8f\90ä¾\9bç\9a\84å½±å\83\8få¡\8a'
+      opnvkarte_credit: '%{memomaps_link} æ\8f\90ä¾\9bç\9a\84å\9c\96ç£\9a'
       memomaps: MeMoMaps
-      hotosm_credit: 由 %{osm_france_link} 代管的 %{hotosm_link} 所提供影像塊樣式
+      tracestrack_credit: '%{tracestrack_link} 提供的圖磚'
+      tracestrack: 蹤跡地圖
+      hotosm_credit: 由 %{osm_france_link} 代管的 %{hotosm_link} 所提供圖磚樣式
       hotosm_name: OpenStreetMap 人道主義團隊
     site:
       edit_tooltip: 編輯地圖
index f30331b0713c9d555c29eec561f2b991600e2dd7..cffd3bd316e5f53fcf3e4a5b07eb4c04a15f0de6 100644 (file)
@@ -43,6 +43,8 @@ max_note_request_area: 25
 default_note_query_limit: 100
 # Maximum limit on the number of notes returned by the note search api method
 max_note_query_limit: 10000
+# Maximum value of open issues counter for moderators, anything equal or greater to this value "n" is shown as "n+"
+max_issues_count: 99
 # Zoom level to use for postcode results from the geocoder
 postcode_zoom: 15
 # Timeout for API calls in seconds
@@ -117,6 +119,8 @@ fossgis_valhalla_url: "https://valhalla1.openstreetmap.de/route"
 #wikipedia_auth_secret: ""
 # Thunderforest authentication details
 #thunderforest_key: ""
+# Tracestrack authentication details
+#tracestrack_key: ""
 # Key for generating TOTP tokens
 #totp_key: ""
 # Enforce Content-Security-Policy
index 4339844140e2df80bcc856a7cfff56137dacb031..b4bc4a5abd21345126dd08b75fe88381dfd940fc 100644 (file)
@@ -199,7 +199,7 @@ module Api
       assert_equal Settings.api_version, js["version"]
       assert_equal Settings.generator, js["generator"]
       assert_equal changeset.id, js["changeset"]["id"]
-      assert js["changeset"]["open"]
+      assert_operator js["changeset"], :[], "open"
       assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
       assert_nil js["changeset"]["closed_at"]
       assert_nil js["changeset"]["tags"]
@@ -215,7 +215,7 @@ module Api
       assert_equal Settings.api_version, js["version"]
       assert_equal Settings.generator, js["generator"]
       assert_equal changeset.id, js["changeset"]["id"]
-      assert js["changeset"]["open"]
+      assert_operator js["changeset"], :[], "open"
       assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
       assert_nil js["changeset"]["closed_at"]
       assert_nil js["changeset"]["tags"]
@@ -697,10 +697,10 @@ module Api
 
       # check that the changeset bbox is within bounds
       cs = Changeset.find(changeset_id)
-      assert cs.min_lon >= -180 * GeoRecord::SCALE, "Minimum longitude (#{cs.min_lon / GeoRecord::SCALE}) should be >= -180 to be valid."
-      assert cs.max_lon <= 180 * GeoRecord::SCALE, "Maximum longitude (#{cs.max_lon / GeoRecord::SCALE}) should be <= 180 to be valid."
-      assert cs.min_lat >= -90 * GeoRecord::SCALE, "Minimum latitude (#{cs.min_lat / GeoRecord::SCALE}) should be >= -90 to be valid."
-      assert cs.max_lat <= 90 * GeoRecord::SCALE, "Maximum latitude (#{cs.max_lat / GeoRecord::SCALE}) should be <= 90 to be valid."
+      assert_operator cs.min_lon, :>=, -180 * GeoRecord::SCALE, "Minimum longitude (#{cs.min_lon / GeoRecord::SCALE}) should be >= -180 to be valid."
+      assert_operator cs.max_lon, :<=, 180 * GeoRecord::SCALE, "Maximum longitude (#{cs.max_lon / GeoRecord::SCALE}) should be <= 180 to be valid."
+      assert_operator cs.min_lat, :>=, -90 * GeoRecord::SCALE, "Minimum latitude (#{cs.min_lat / GeoRecord::SCALE}) should be >= -90 to be valid."
+      assert_operator cs.max_lat, :<=, 90 * GeoRecord::SCALE, "Maximum latitude (#{cs.max_lat / GeoRecord::SCALE}) should be <= 90 to be valid."
     end
 
     ##
index 95658842b8e498212acf6610e3aaf92ef8d52866..9e680dd068cd9c8fa69fdcb37214aa4a137944cb 100644 (file)
@@ -258,8 +258,7 @@ module Api
 
       # valid delete should return the new version number, which should
       # be greater than the old version number
-      assert @response.body.to_i > node.version,
-             "delete request should return a new version number for node"
+      assert_operator @response.body.to_i, :>, node.version, "delete request should return a new version number for node"
 
       # deleting the same node twice doesn't work
       xml = xml_for_node(node)
index 7f2c196654476c6499f058728952e0e2a17348aa..7d011c17ff3678c76dce61c391cee4acf7ddaf4a 100644 (file)
@@ -612,8 +612,7 @@ module Api
 
       # valid delete should return the new version number, which should
       # be greater than the old version number
-      assert @response.body.to_i > multi_tag_relation.version,
-             "delete request should return a new version number for relation"
+      assert_operator @response.body.to_i, :>, multi_tag_relation.version, "delete request should return a new version number for relation"
 
       # this won't work since the relation is already deleted
       xml = update_changeset(xml_for_relation(deleted_relation), changeset.id)
index aa4bf1e9de85010ac51ba86793a421c6a2a39b84..8e7079b851a2cf7b79ae62bd3495e1dd7d8d43e2 100644 (file)
@@ -731,7 +731,7 @@ module Api
     def check_json_details(js, user, include_private, include_email)
       assert_equal user.id, js["user"]["id"]
       assert_equal user.description, js["user"]["description"]
-      assert js["user"]["contributor_terms"]["agreed"]
+      assert_operator js["user"]["contributor_terms"], :[], "agreed"
 
       if include_private
         assert_not js["user"]["contributor_terms"]["pd"]
index 0cf30e4fffb176fb1d34b931fcab7934f4cf1a37..2bed0e5d67e7644ad1165471c55c53501cbef515 100644 (file)
@@ -379,8 +379,7 @@ module Api
       # check the returned value - should be the new version number
       # valid delete should return the new version number, which should
       # be greater than the old version number
-      assert @response.body.to_i > way.version,
-             "delete request should return a new version number for way"
+      assert_operator @response.body.to_i, :>, way.version, "delete request should return a new version number for way"
 
       # this won't work since the way is already deleted
       xml = xml_for_way(deleted_way)
index a71b5e8feb615773063a7c435c3a23350f524d48..79fd7a571e5f7b919d85b796d5baa879588c2663 100644 (file)
@@ -321,7 +321,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
   ##
   # check the result of a feed
   def check_feed_result(changesets)
-    assert changesets.size <= 20
+    assert_operator changesets.size, :<=, 20
 
     assert_select "feed", :count => [changesets.size, 1].min do
       assert_select "> title", :count => 1, :text => /^Changesets/
index 16a77624c75ee8dabc02fb62bb85242e44ee6631..27022c973748deaa3b0f9937d728824b5532ca16 100644 (file)
@@ -356,7 +356,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "revoke"
     b = UserBlock.find(active_block.id)
-    assert b.ends_at - Time.now.utc > 100
+    assert_operator b.ends_at - Time.now.utc, :>, 100
 
     # Check that revoking a block works using POST
     post revoke_user_block_path(:id => active_block, :confirm => true)
diff --git a/test/helpers/issues_helper_test.rb b/test/helpers/issues_helper_test.rb
new file mode 100644 (file)
index 0000000..f0b7c88
--- /dev/null
@@ -0,0 +1,30 @@
+require "test_helper"
+
+class IssuesHelperTest < ActionView::TestCase
+  attr_accessor :current_user
+
+  def test_issues_count
+    target_user = create(:user)
+    self.current_user = create(:moderator_user)
+
+    n = (Settings.max_issues_count - 1)
+    n.times do
+      create(:note_with_comments) do |note|
+        create(:issue, :reportable => note, :reported_user => target_user, :assigned_role => "moderator")
+      end
+    end
+    expected = <<~HTML.delete("\n")
+      <span class="badge count-number">#{n}</span>
+    HTML
+    assert_dom_equal expected, open_issues_count
+
+    n += 1
+    create(:note_with_comments) do |note|
+      create(:issue, :reportable => note, :reported_user => target_user, :assigned_role => "moderator")
+    end
+    expected = <<~HTML.delete("\n")
+      <span class="badge count-number">#{n}+</span>
+    HTML
+    assert_dom_equal expected, open_issues_count
+  end
+end
index 287504cb46232239f80f0a00138e8997c259168b..7708d51150d9903b3b11755da34a5a3a45988b74 100644 (file)
@@ -11,10 +11,7 @@ class UserRolesHelperTest < ActionView::TestCase
 
     icon = role_icon(create(:moderator_user), "moderator")
     expected = <<~HTML.delete("\n")
-      <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
       <img srcset="/images/roles/moderator.svg" border="0" alt="This user is a moderator" title="This user is a moderator" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
     HTML
     assert_dom_equal expected, icon
   end
@@ -26,10 +23,7 @@ class UserRolesHelperTest < ActionView::TestCase
     icon = role_icon(user, "moderator")
     expected = <<~HTML.delete("\n")
       <a data-confirm="Are you sure you want to grant the role `moderator&#39; to the user `#{user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(user.display_name)}/role/moderator/grant">
-      <picture>
-      <source srcset="/images/roles/blank_moderator.svg" type="image/svg+xml">
       <img srcset="/images/roles/blank_moderator.svg" border="0" alt="Grant moderator access" title="Grant moderator access" src="/images/roles/blank_moderator.png" width="20" height="20" />
-      </picture>
       </a>
     HTML
     assert_dom_equal expected, icon
@@ -38,10 +32,7 @@ class UserRolesHelperTest < ActionView::TestCase
     icon = role_icon(moderator_user, "moderator")
     expected = <<~HTML.delete("\n")
       <a data-confirm="Are you sure you want to revoke the role `moderator&#39; from the user `#{moderator_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(moderator_user.display_name)}/role/moderator/revoke">
-      <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
       <img srcset="/images/roles/moderator.svg" border="0" alt="Revoke moderator access" title="Revoke moderator access" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
       </a>
     HTML
     assert_dom_equal expected, icon
@@ -55,23 +46,14 @@ class UserRolesHelperTest < ActionView::TestCase
 
     icons = role_icons(create(:moderator_user))
     expected = <<~HTML.delete("\n")
-      <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
       <img srcset="/images/roles/moderator.svg" border="0" alt="This user is a moderator" title="This user is a moderator" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
     HTML
     assert_dom_equal expected, icons
 
     icons = role_icons(create(:super_user))
     expected = <<~HTML.delete("\n")
-      <picture>
-      <source srcset="/images/roles/administrator.svg" type="image/svg+xml">
       <img srcset="/images/roles/administrator.svg" border="0" alt="This user is an administrator" title="This user is an administrator" src="/images/roles/administrator.png" width="20" height="20" />
-      </picture>
-       <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
       <img srcset="/images/roles/moderator.svg" border="0" alt="This user is a moderator" title="This user is a moderator" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
     HTML
     assert_dom_equal expected, icons
   end
@@ -83,16 +65,10 @@ class UserRolesHelperTest < ActionView::TestCase
     icons = role_icons(user)
     expected = <<~HTML.delete("\n")
       <a data-confirm="Are you sure you want to grant the role `administrator&#39; to the user `#{user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(user.display_name)}/role/administrator/grant">
-      <picture>
-      <source srcset="/images/roles/blank_administrator.svg" type="image/svg+xml">
       <img srcset="/images/roles/blank_administrator.svg" border="0" alt="Grant administrator access" title="Grant administrator access" src="/images/roles/blank_administrator.png" width="20" height="20" />
-      </picture>
       </a>
-       <a data-confirm="Are you sure you want to grant the role `moderator&#39; to the user `#{user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(user.display_name)}/role/moderator/grant">
-      <picture>
-      <source srcset="/images/roles/blank_moderator.svg" type="image/svg+xml">
+      <a data-confirm="Are you sure you want to grant the role `moderator&#39; to the user `#{user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(user.display_name)}/role/moderator/grant">
       <img srcset="/images/roles/blank_moderator.svg" border="0" alt="Grant moderator access" title="Grant moderator access" src="/images/roles/blank_moderator.png" width="20" height="20" />
-      </picture>
       </a>
     HTML
     assert_dom_equal expected, icons
@@ -101,16 +77,10 @@ class UserRolesHelperTest < ActionView::TestCase
     icons = role_icons(moderator_user)
     expected = <<~HTML.delete("\n")
       <a data-confirm="Are you sure you want to grant the role `administrator&#39; to the user `#{moderator_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(moderator_user.display_name)}/role/administrator/grant">
-      <picture>
-      <source srcset="/images/roles/blank_administrator.svg" type="image/svg+xml">
       <img srcset="/images/roles/blank_administrator.svg" border="0" alt="Grant administrator access" title="Grant administrator access" src="/images/roles/blank_administrator.png" width="20" height="20" />
-      </picture>
       </a>
-       <a data-confirm="Are you sure you want to revoke the role `moderator&#39; from the user `#{moderator_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(moderator_user.display_name)}/role/moderator/revoke">
-      <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
+      <a data-confirm="Are you sure you want to revoke the role `moderator&#39; from the user `#{moderator_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(moderator_user.display_name)}/role/moderator/revoke">
       <img srcset="/images/roles/moderator.svg" border="0" alt="Revoke moderator access" title="Revoke moderator access" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
       </a>
     HTML
     assert_dom_equal expected, icons
@@ -119,16 +89,10 @@ class UserRolesHelperTest < ActionView::TestCase
     icons = role_icons(super_user)
     expected = <<~HTML.delete("\n")
       <a data-confirm="Are you sure you want to revoke the role `administrator&#39; from the user `#{super_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(super_user.display_name)}/role/administrator/revoke">
-      <picture>
-      <source srcset="/images/roles/administrator.svg" type="image/svg+xml">
       <img srcset="/images/roles/administrator.svg" border="0" alt="Revoke administrator access" title="Revoke administrator access" src="/images/roles/administrator.png" width="20" height="20" />
-      </picture>
       </a>
-       <a data-confirm="Are you sure you want to revoke the role `moderator&#39; from the user `#{super_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(super_user.display_name)}/role/moderator/revoke">
-      <picture>
-      <source srcset="/images/roles/moderator.svg" type="image/svg+xml">
+      <a data-confirm="Are you sure you want to revoke the role `moderator&#39; from the user `#{super_user.display_name}&#39;?" rel="nofollow" data-method="post" href="/user/#{ERB::Util.u(super_user.display_name)}/role/moderator/revoke">
       <img srcset="/images/roles/moderator.svg" border="0" alt="Revoke moderator access" title="Revoke moderator access" src="/images/roles/moderator.png" width="20" height="20" />
-      </picture>
       </a>
     HTML
     assert_dom_equal expected, icons
index d842390388473757180b18ecd41118df0065d696..9aec035d1c45006b74cfb176dfbc85b08950c256 100644 (file)
@@ -80,7 +80,7 @@ class LocaleTest < ActiveSupport::TestCase
   end
 
   def test_available
-    assert Locale.available.count <= I18n.available_locales.count
+    assert_operator Locale.available.count, :<=, I18n.available_locales.count
   end
 
   def test_preferred
index 2a42de12366e0a58678859e73d17d947ecf3203e..9bfd734969d34aa548a13aac62bdb981c31da550 100644 (file)
@@ -61,6 +61,6 @@ class PasswordHashTest < ActiveSupport::TestCase
     format = Argon2::HashFormat.new(hash)
 
     assert_equal "argon2id", format.variant
-    assert format.version <= 19
+    assert_operator format.version, :<=, 19
   end
 end
index a0a1023bb5a558235350d3f2bb74f115acb5e239..a32e1ac205b14a29e67f2e3d47d9bb203385bb2a 100644 (file)
@@ -20,7 +20,7 @@ class ShortLinkTest < ActiveSupport::TestCase
       # smaller range.
       distance = Math.sqrt(((lat - lat2)**2) + ((lon - lon2)**2))
       max_distance = 360.0 / (1 << (zoom + 8)) * 0.5 * Math.sqrt(5)
-      assert max_distance > distance, "Maximum expected error exceeded: #{max_distance} <= #{distance} for (#{lat}, #{lon}, #{zoom})."
+      assert_operator max_distance, :>, distance, "Maximum expected error exceeded: #{max_distance} <= #{distance} for (#{lat}, #{lon}, #{zoom})."
     end
   end
 
index 5a55c5838cb6bda7cb6bb4ee776e3ac53cc7e1b6..87e981c6426500443bcbf6811cef581f8ffce9b1 100644 (file)
@@ -9,9 +9,9 @@ class AccountDeletionTest < ApplicationSystemTestCase
   test "the status is deleted and the personal data removed" do
     visit edit_account_path
 
-    click_on "Delete Account..."
+    click_link "Delete Account..."
     accept_confirm do
-      click_on "Delete Account"
+      click_link "Delete Account"
     end
 
     assert_current_path root_path
@@ -23,9 +23,9 @@ class AccountDeletionTest < ApplicationSystemTestCase
   test "the user is signed out after deletion" do
     visit edit_account_path
 
-    click_on "Delete Account..."
+    click_link "Delete Account..."
     accept_confirm do
-      click_on "Delete Account"
+      click_link "Delete Account"
     end
 
     assert_content "Log In"
@@ -34,9 +34,9 @@ class AccountDeletionTest < ApplicationSystemTestCase
   test "the user is shown a confirmation flash message" do
     visit edit_account_path
 
-    click_on "Delete Account..."
+    click_link "Delete Account..."
     accept_confirm do
-      click_on "Delete Account"
+      click_link "Delete Account"
     end
 
     assert_content "Account Deleted"
index 31e6d7b075e3ba3b9ebb07d6efc3177c0eedeca9..554b89a6db05a3ec2b3353acfe69d9b78c088cf9 100644 (file)
@@ -10,7 +10,7 @@ class DiaryEntrySystemTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit diary_entries_path
 
-    click_on "Send a message to the author"
+    click_link "Send a message to the author"
 
     assert_content "Send a new message"
     assert_equal "Re: #{@diary_entry.title}", page.find_field("Subject").value
index b9b989c075132a9604d01c911dc2017f2613538f..a40306e3c7b1a5064770d8bdbd345eff47750672 100644 (file)
@@ -80,21 +80,21 @@ class IssuesTest < ApplicationSystemTestCase
     # No issues against the user
     visit issues_path
     fill_in "search_by_user", :with => good_user.display_name
-    click_on "Search"
+    click_button "Search"
     assert_no_content I18n.t("issues.index.user_not_found")
     assert_content I18n.t("issues.index.issues_not_found")
 
     # User doesn't exist
     visit issues_path
     fill_in "search_by_user", :with => "Nonexistent User"
-    click_on "Search"
+    click_button "Search"
     assert_content I18n.t("issues.index.user_not_found")
     assert_content I18n.t("issues.index.issues_not_found")
 
     # Find Issue against bad_user
     visit issues_path
     fill_in "search_by_user", :with => bad_user.display_name
-    click_on "Search"
+    click_button "Search"
     assert_no_content I18n.t("issues.index.user_not_found")
     assert_no_content I18n.t("issues.index.issues_not_found")
   end
@@ -106,7 +106,7 @@ class IssuesTest < ApplicationSystemTestCase
     visit issue_path(issue)
 
     fill_in :issue_comment_body, :with => "test comment"
-    click_on "Add Comment"
+    click_button "Add Comment"
     assert_content I18n.t("issue_comments.create.comment_created")
     assert_content "test comment"
 
@@ -123,7 +123,7 @@ class IssuesTest < ApplicationSystemTestCase
 
     fill_in :issue_comment_body, :with => "reassigning to moderators"
     check :reassign
-    click_on "Add Comment"
+    click_button "Add Comment"
 
     assert_content "and the issue was reassigned"
     assert_current_path issues_path(:status => "open")
@@ -140,7 +140,7 @@ class IssuesTest < ApplicationSystemTestCase
 
     fill_in :issue_comment_body, :with => "reassigning to moderators"
     check :reassign
-    click_on "Add Comment"
+    click_button "Add Comment"
 
     assert_content "and the issue was reassigned"
     assert_current_path issue_path(issue)
index 59a7209f5b4d3728fbb8f3049e4db4a03f0326f4..b071b1f73842663839dd9ad81c670d6d333fa1dd 100644 (file)
@@ -5,7 +5,7 @@ class PreferencesTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
 
     visit edit_preferences_path
-    click_on "Update Preferences"
+    click_button "Update Preferences"
 
     assert_content "Preferences updated"
   end
@@ -15,7 +15,7 @@ class PreferencesTest < ApplicationSystemTestCase
 
     visit edit_preferences_path
     fill_in "Preferred Languages", :with => "fr"
-    click_on "Update Preferences"
+    click_button "Update Preferences"
 
     assert_content "Préférences mises à jour"
   end
index 3504ab061fdeb5c4270036efa49807b1a9c9427f..15ef1ad3c5177f8ff0e01cf8d689395dc08bb8a4 100644 (file)
@@ -19,14 +19,14 @@ class ReportDiaryCommentTest < ApplicationSystemTestCase
     visit diary_entry_path(@diary_entry.user.display_name, @diary_entry)
     assert_content @diary_entry.title
 
-    click_on I18n.t("diary_entries.diary_comment.report")
+    click_link I18n.t("diary_entries.diary_comment.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.diary_comment.spam_label")
     fill_in "report_details", :with => "This comment is spam"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
index efb1070653de48b766cdaf7c5dc6221cdd5bbf97..d4e49b714ffd32b9e2d4077926863eae7fc41efc 100644 (file)
@@ -18,14 +18,14 @@ class ReportDiaryEntryTest < ApplicationSystemTestCase
     visit diary_entry_path(@diary_entry.user.display_name, @diary_entry)
     assert_content @diary_entry.title
 
-    click_on I18n.t("diary_entries.diary_entry.report")
+    click_link I18n.t("diary_entries.diary_entry.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.diary_entry.spam_label")
     fill_in "report_details", :with => "This is advertising"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
@@ -42,14 +42,14 @@ class ReportDiaryEntryTest < ApplicationSystemTestCase
     visit diary_entry_path(@diary_entry.user.display_name, @diary_entry)
     assert_content @diary_entry.title
 
-    click_on I18n.t("diary_entries.diary_entry.report")
+    click_link I18n.t("diary_entries.diary_entry.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.diary_entry.spam_label")
     fill_in "report_details", :with => "This is advertising"
     assert_no_difference "Issue.count" do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     issue.reload
index 79894eb897d4a514e3ebb94b5a89a680a1bcedf5..b7e1bfc9eaebd4c7252e383871d31b9cd28a6e40 100644 (file)
@@ -14,14 +14,14 @@ class ReportNoteTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit note_path(note)
 
-    click_on I18n.t("notes.show.report")
+    click_link I18n.t("notes.show.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.note.spam_label")
     fill_in "report_details", :with => "This is spam"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
@@ -35,14 +35,14 @@ class ReportNoteTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit note_path(note)
 
-    click_on I18n.t("notes.show.report")
+    click_link I18n.t("notes.show.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.note.spam_label")
     fill_in "report_details", :with => "This is spam"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
index 7a9e800c8c0da99ebf7351d6a863d9c8cec8ba7a..9a0abe9ea2e5920a78cc8e87f706f661f328c207 100644 (file)
@@ -14,14 +14,14 @@ class ReportUserTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit user_path(user)
 
-    click_on I18n.t("users.show.report")
+    click_link I18n.t("users.show.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.user.vandal_label")
     fill_in "report_details", :with => "This user is a vandal"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
@@ -35,14 +35,14 @@ class ReportUserTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit user_path(user)
 
-    click_on I18n.t("users.show.report")
+    click_link I18n.t("users.show.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.user.vandal_label")
     fill_in "report_details", :with => "This user is a vandal"
     assert_difference "Issue.count", 1 do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
@@ -52,14 +52,14 @@ class ReportUserTest < ApplicationSystemTestCase
 
     visit user_path(user)
 
-    click_on I18n.t("users.show.report")
+    click_link I18n.t("users.show.report")
     assert_content "Report"
     assert_content I18n.t("reports.new.disclaimer.intro")
 
     choose I18n.t("reports.new.categories.user.spam_label")
     fill_in "report_details", :with => "This user is a spammer"
     assert_no_difference "Issue.count" do
-      click_on "Create Report"
+      click_button "Create Report"
     end
 
     assert_content "Your report has been registered successfully"
index a097b63747a1281f82ee7e1b658580bbad7c42e9..fc27b7c1884ed606823f660d9c2ec73f5059bfa5 100644 (file)
@@ -6,8 +6,8 @@ class UserLogoutTest < ApplicationSystemTestCase
     sign_in_as(user)
     assert_no_content "Log In"
 
-    click_on user.display_name
-    click_on "Log Out"
+    click_button user.display_name
+    click_link "Log Out"
     assert_content "Log In"
   end
 
@@ -17,8 +17,8 @@ class UserLogoutTest < ApplicationSystemTestCase
     visit traces_path
     assert_no_content "Log In"
 
-    click_on user.display_name
-    click_on "Log Out"
+    click_button user.display_name
+    click_link "Log Out"
     assert_content "Log In"
     assert_content "Public GPS Traces"
   end
index 5bd88f5a445cadba27891cb62a4af897a4445710..88899d7105b2fc2b74a896c7291a017c7f080701 100644 (file)
@@ -4,7 +4,7 @@ class UserSignupTest < ApplicationSystemTestCase
   test "Sign up from login page" do
     visit login_path
 
-    click_on "Register now"
+    click_link "Register now"
 
     assert_content "Confirm Password"
   end
@@ -13,7 +13,7 @@ class UserSignupTest < ApplicationSystemTestCase
     user = build(:user)
 
     visit root_path
-    click_on "Sign Up"
+    click_link "Sign Up"
     fill_in "Email", :with => user.email
     fill_in "Email Confirmation", :with => user.email
     fill_in "Display Name", :with => user.display_name
@@ -22,7 +22,7 @@ class UserSignupTest < ApplicationSystemTestCase
     click_button "Sign Up"
 
     assert_content "Contributor terms"
-    click_on "Cancel"
+    click_button "Cancel"
 
     assert_current_path "https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined"
   end
index 30b923732414805ffa98ec08f7c3e409cd24596d..e4cca1eab5bba38a97fefb866aeb4a0b626a3ca3 100644 (file)
@@ -10,7 +10,7 @@ class UserStatusChangeTest < ApplicationSystemTestCase
     user = create(:user, :suspended)
     visit user_path(user)
     accept_confirm do
-      click_on "Unsuspend"
+      click_link "Unsuspend"
     end
 
     assert_no_content "Unsuspend"
@@ -22,7 +22,7 @@ class UserStatusChangeTest < ApplicationSystemTestCase
     user = create(:user, :suspended)
     visit user_path(user)
     accept_confirm do
-      click_on "Confirm"
+      click_link "Confirm"
     end
 
     assert_no_content "Unsuspend"
index 349d0a5bf742c4c97faf980f6055118a4ea10dad..539daaa30933c5e9c8fb3fd3aac278d6cca3cba8 100644 (file)
@@ -13,7 +13,7 @@ class ViewCommunitiesTest < ApplicationSystemTestCase
 
     visit edit_preferences_path
     fill_in "Preferred Languages", :with => "fr"
-    click_on "Update Preferences"
+    click_button "Update Preferences"
 
     visit "/communities"
     assert_link "OpenStreetMap États-Unis", :href => "https://www.openstreetmap.us/"
index 7157abf5a71ed0ef153b70c50c3436a6b99c00c2..68749c0f70f595e00b322b21acee0215b7d46b51 100644 (file)
@@ -245,7 +245,7 @@ module ActiveSupport
       visit login_path
       fill_in "username", :with => user.email
       fill_in "password", :with => "test"
-      click_on "Login", :match => :first
+      click_button "Login", :match => :first
     end
 
     def session_for(user)
index 6e8e20ba68fe5deac22fbfa09a2e5b61a49f9e2f..0e51f34086a974478e44550921495494ba9f5359 100644 (file)
@@ -61,6 +61,14 @@ L.OSM.HOT = L.OSM.TileLayer.extend({
   }
 });
 
+L.OSM.TracestrackTopo = L.OSM.TileLayer.extend({
+  options: {
+    url: 'https://tile.tracestrack.com/topo__/{z}/{x}/{y}.png?key={apikey}',
+    maxZoom: 19,
+    attribution: '© <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors. Tiles courtesy of <a href="https://www.tracestrack.com/" target="_blank">Tracestrack Maps</a>'
+  }
+});
+
 L.OSM.GPS = L.OSM.TileLayer.extend({
   options: {
     url: 'https://gps.tile.openstreetmap.org/lines/{z}/{x}/{y}.png',
index c2b53e18b346acb9d7a4360295402bcfb61b5271..bde99b23e26e3c4564fb8a8ff9de0f5da3601c09 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@8.49.0":
-  version "8.49.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333"
-  integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==
+"@eslint/js@8.50.0":
+  version "8.50.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484"
+  integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==
 
 "@humanwhocodes/config-array@^0.11.11":
   version "0.11.11"
@@ -224,14 +224,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
 eslint@^8.0.0:
-  version "8.49.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42"
-  integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==
+  version "8.50.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2"
+  integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.6.1"
     "@eslint/eslintrc" "^2.1.2"
-    "@eslint/js" "8.49.0"
+    "@eslint/js" "8.50.0"
     "@humanwhocodes/config-array" "^0.11.11"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"