]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4225'
authorTom Hughes <tom@compton.nu>
Wed, 6 Sep 2023 17:42:29 +0000 (18:42 +0100)
committerTom Hughes <tom@compton.nu>
Wed, 6 Sep 2023 17:42:29 +0000 (18:42 +0100)
47 files changed:
.github/workflows/docker.yml
.github/workflows/lint.yml
.github/workflows/tests.yml
.rubocop.yml
Gemfile.lock
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/leaflet.share.js
app/assets/javascripts/leaflet.sidebar-pane.js
app/assets/stylesheets/common.scss
app/views/changesets/index.html.erb
app/views/diary_entries/comments.html.erb
app/views/site/key.html.erb
app/views/users/show.html.erb
config/locales/ca.yml
config/locales/cy.yml
config/locales/en.yml
config/locales/es.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/lb.yml
config/locales/mk.yml
config/locales/pl.yml
config/locales/pt.yml
config/locales/sc.yml
config/locales/sl.yml
config/locales/tr.yml
config/locales/zh-TW.yml
test/controllers/users_controller_test.rb
test/factories/changeset_comments.rb
test/factories/friendships.rb
test/factories/issues.rb
test/factories/messages.rb
test/factories/oauth_access_grant.rb
test/factories/oauth_access_token.rb
test/factories/oauth_applications.rb
test/factories/old_node.rb
test/factories/old_relation.rb
test/factories/old_relation_member.rb
test/factories/old_way.rb
test/factories/relation_member.rb
test/factories/user_blocks.rb
test/factories/user_role.rb
test/lib/password_hash_test.rb

index 74d03b31c982c3e90ff2bb1d55c3aa05209312e0..df617d4fbf2cd992db2842f9b7118b8a25df0714 100644 (file)
@@ -11,7 +11,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
     - name: Checkout source
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Poke config
       run: |
         cp config/example.storage.yml config/storage.yml
index e762df4454263d928e570ce04cb108f137cf2019..685937b034ea026708e29bb1edc2ebcb5b02ec4f 100644 (file)
@@ -14,7 +14,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
     - name: Check out code
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Setup ruby
       uses: ruby/setup-ruby@v1
       with:
@@ -27,7 +27,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
     - name: Check out code
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Setup ruby
       uses: ruby/setup-ruby@v1
       with:
@@ -40,7 +40,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
     - name: Check out code
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Setup ruby
       uses: ruby/setup-ruby@v1
       with:
@@ -64,7 +64,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
     - name: Check out code
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Setup ruby
       uses: ruby/setup-ruby@v1
       with:
index 1d5c947e0ff2154bdfd1a9dc8987a0b959265bcb..2b9dae62eef75f1220ed4b9c7de9fa1de98b23d6 100644 (file)
@@ -18,7 +18,7 @@ jobs:
       OPENSTREETMAP_MEMCACHE_SERVERS: 127.0.0.1
     steps:
     - name: Checkout source
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Setup ruby
       uses: ruby/setup-ruby@v1
       with:
@@ -60,7 +60,7 @@ jobs:
     - name: Run tests
       run: bundle exec rails test:all
     - name: Report completion to Coveralls
-      uses: coverallsapp/github-action@v2.2.1
+      uses: coverallsapp/github-action@v2.2.2
       with:
         github-token: ${{ secrets.github_token }}
         flag-name: ubuntu-${{ matrix.ubuntu }}-ruby-${{ matrix.ruby }}
@@ -72,7 +72,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - name: Report completion to Coveralls
-      uses: coverallsapp/github-action@v2.2.1
+      uses: coverallsapp/github-action@v2.2.2
       with:
         github-token: ${{ secrets.github_token }}
         parallel-finished: true
index dc2a33a35b05d863e828a7afd5649ec8461534b4..f8060f9484cc72939fd84e9ac2f94a98804468b4 100644 (file)
@@ -17,6 +17,11 @@ 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 e58f26e1a2e09683d4526d521feb79ce8b887744..13c1a59277ff1351c15fd8991267737500e55b39 100644 (file)
@@ -79,14 +79,14 @@ GEM
     annotate (3.2.0)
       activerecord (>= 3.2, < 8.0)
       rake (>= 10.4, < 14.0)
-    argon2 (2.2.0)
+    argon2 (2.3.0)
       ffi (~> 1.15)
       ffi-compiler (~> 1.0)
     ast (2.4.2)
     autoprefixer-rails (10.4.13.0)
       execjs (~> 2)
     aws-eventstream (1.2.0)
-    aws-partitions (1.813.0)
+    aws-partitions (1.816.0)
     aws-sdk-core (3.181.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.651.0)
@@ -228,8 +228,8 @@ GEM
     fspath (3.1.2)
     gd2-ffij (0.4.0)
       ffi (>= 1.0.0)
-    globalid (1.1.0)
-      activesupport (>= 5.0)
+    globalid (1.2.0)
+      activesupport (>= 6.1)
     hashdiff (1.0.1)
     hashie (5.0.0)
     highline (2.1.0)
@@ -368,7 +368,7 @@ GEM
     parser (3.2.2.3)
       ast (~> 2.4.1)
       racc
-    pg (1.5.3)
+    pg (1.5.4)
     popper_js (2.11.8)
     progress (3.6.0)
     public_suffix (5.0.3)
@@ -433,7 +433,7 @@ GEM
       rack (>= 1.4)
     rexml (3.2.6)
     rinku (2.0.6)
-    rotp (6.2.2)
+    rotp (6.3.0)
     rouge (4.1.3)
     rubocop (1.56.2)
       base64 (~> 0.1.1)
@@ -453,7 +453,7 @@ GEM
       rubocop (~> 1.41)
     rubocop-factory_bot (2.23.1)
       rubocop (~> 1.33)
-    rubocop-minitest (0.31.0)
+    rubocop-minitest (0.31.1)
       rubocop (>= 1.39, < 2.0)
     rubocop-performance (1.19.0)
       rubocop (>= 1.7.0, < 2.0)
@@ -482,7 +482,7 @@ GEM
       sprockets-rails
       tilt
     secure_headers (6.5.0)
-    selenium-webdriver (4.11.0)
+    selenium-webdriver (4.12.0)
       rexml (~> 3.2, >= 3.2.5)
       rubyzip (>= 1.2.2, < 3.0)
       websocket (~> 1.0)
@@ -523,7 +523,7 @@ GEM
       i18n
     vendorer (0.2.0)
     version_gem (1.1.3)
-    webmock (3.19.0)
+    webmock (3.19.1)
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
index 020876c470c71f134ab5e2543e29a73be8c7b7b8..27311f7c1441c3d22acde08cbcc526702b0e7e4e 100644 (file)
@@ -8,11 +8,12 @@ L.OSM.layers = function (options) {
       .attr("class", "section base-layers")
       .appendTo($ui);
 
-    var baseLayers = $("<ul class='list-unstyled'>")
+    var baseLayers = $("<ul class='list-unstyled mb-0'>")
       .appendTo(baseSection);
 
     layers.forEach(function (layer) {
       var item = $("<li>")
+        .attr("class", "rounded-3")
         .appendTo(baseLayers);
 
       if (map.hasLayer(layer)) {
index 7b1c995c2d1a45fe03cc6fe9e6fe3dffcd13f620..c096a92fcf725b4d2ce3e2d144416cfcdfe726fc 100644 (file)
@@ -23,17 +23,15 @@ L.OSM.share = function (options) {
     $("<div>")
       .attr("class", "form-check mb-3")
       .appendTo($form)
-      .append(
-        $("<label>")
-          .attr("for", "link_marker")
-          .attr("class", "form-check-label")
-          .append(
-            $("<input>")
-              .attr("id", "link_marker")
-              .attr("type", "checkbox")
-              .attr("class", "form-check-input")
-              .bind("change", toggleMarker))
-          .append(I18n.t("javascripts.share.include_marker")));
+      .append($("<label>")
+        .attr("for", "link_marker")
+        .attr("class", "form-check-label")
+        .text(I18n.t("javascripts.share.include_marker")))
+      .append($("<input>")
+        .attr("id", "link_marker")
+        .attr("type", "checkbox")
+        .attr("class", "form-check-input")
+        .bind("change", toggleMarker));
 
     $("<div class='btn-group btn-group-sm mb-2'>")
       .appendTo($form)
@@ -70,6 +68,8 @@ L.OSM.share = function (options) {
       .append($("<input>")
         .attr("id", "long_input")
         .attr("type", "text")
+        .attr("class", "form-control form-control-sm font-monospace")
+        .attr("readonly", true)
         .on("click", select));
 
     $("<div>")
@@ -79,6 +79,8 @@ L.OSM.share = function (options) {
       .append($("<input>")
         .attr("id", "short_input")
         .attr("type", "text")
+        .attr("class", "form-control form-control-sm font-monospace")
+        .attr("readonly", true)
         .on("click", select));
 
     $("<div>")
@@ -88,6 +90,8 @@ L.OSM.share = function (options) {
       .append(
         $("<textarea>")
           .attr("id", "embed_html")
+          .attr("class", "form-control form-control-sm font-monospace")
+          .attr("readonly", true)
           .on("click", select))
       .append(
         $("<p>")
@@ -131,46 +135,61 @@ L.OSM.share = function (options) {
       .attr("method", "post")
       .appendTo($imageSection);
 
-    $("<div>")
-      .attr("class", "mb-3 form-check")
-      .appendTo($form)
-      .append(
-        $("<label>")
-          .attr("for", "image_filter")
-          .attr("class", "form-check-label")
-          .append(
-            $("<input>")
-              .attr("id", "image_filter")
-              .attr("type", "checkbox")
-              .attr("class", "form-check-input")
-              .bind("change", toggleFilter))
-          .append(I18n.t("javascripts.share.custom_dimensions")));
-
     $("<div>")
       .appendTo($form)
-      .append(
-        $("<label>")
-          .attr("for", "mapnik_format")
-          .text(I18n.t("javascripts.share.format")))
-      .append($("<select>")
-        .attr("name", "mapnik_format")
-        .attr("id", "mapnik_format")
-        .append($("<option>").val("png").text("PNG").prop("selected", true))
-        .append($("<option>").val("jpeg").text("JPEG"))
-        .append($("<option>").val("svg").text("SVG"))
-        .append($("<option>").val("pdf").text("PDF")));
+      .attr("class", "row mb-3")
+      .append($("<label>")
+        .attr("for", "mapnik_format")
+        .attr("class", "col-auto col-form-label")
+        .text(I18n.t("javascripts.share.format")))
+      .append($("<div>")
+        .attr("class", "col-auto")
+        .append($("<select>")
+          .attr("name", "mapnik_format")
+          .attr("id", "mapnik_format")
+          .attr("class", "form-select w-auto")
+          .append($("<option>").val("png").text("PNG").prop("selected", true))
+          .append($("<option>").val("jpeg").text("JPEG"))
+          .append($("<option>").val("svg").text("SVG"))
+          .append($("<option>").val("pdf").text("PDF"))));
 
     $("<div>")
       .appendTo($form)
+      .attr("class", "row mb-3")
       .append($("<label>")
         .attr("for", "mapnik_scale")
+        .attr("class", "col-auto col-form-label")
         .text(I18n.t("javascripts.share.scale")))
-      .append("1 : ")
-      .append($("<input>")
-        .attr("name", "mapnik_scale")
-        .attr("id", "mapnik_scale")
-        .attr("type", "text")
-        .on("change", update));
+      .append($("<div>")
+        .attr("class", "col-auto")
+        .append($("<div>")
+          .attr("class", "input-group flex-nowrap")
+          .append($("<span>")
+            .attr("class", "input-group-text")
+            .text("1 : "))
+          .append($("<input>")
+            .attr("name", "mapnik_scale")
+            .attr("id", "mapnik_scale")
+            .attr("type", "text")
+            .attr("class", "form-control")
+            .on("change", update))));
+
+    $("<div>")
+      .attr("class", "row mb-3")
+      .appendTo($form)
+      .append($("<div>")
+        .attr("class", "col-auto")
+        .append($("<div>")
+          .attr("class", "form-check")
+          .append($("<label>")
+            .attr("for", "image_filter")
+            .attr("class", "form-check-label")
+            .text(I18n.t("javascripts.share.custom_dimensions")))
+          .append($("<input>")
+            .attr("id", "image_filter")
+            .attr("type", "checkbox")
+            .attr("class", "form-check-input")
+            .bind("change", toggleFilter))));
 
     ["minlon", "minlat", "maxlon", "maxlat"].forEach(function (name) {
       $("<input>")
index d8213a3767a948aee2c0a9cdadc5498cbf1d4208..516a446c38811994cf4343b8b507340f3b709efa 100644 (file)
@@ -20,9 +20,9 @@ L.OSM.sidebarPane = function (options, uiClass, buttonTitle, paneTitle) {
     var $ui = $("<div>")
       .attr("class", uiClass + "-ui");
 
-    $("<div class='sidebar_heading d-flex'>")
+    $("<div class='d-flex p-3 pb-0'>")
       .appendTo($ui)
-      .append($("<h4 class='flex-grow-1 text-break'>")
+      .append($("<h2 class='flex-grow-1 text-break'>")
         .text(I18n.t(paneTitle)))
       .append($("<div>")
         .append($("<button type='button' class='btn-close'>")
index 60a4bd59c331b94abaa4d737b039bc6c1f8708a3..2cd357845929be2bdff8dfe9947ee3ddfb2ad992 100644 (file)
@@ -486,7 +486,7 @@ body.small-nav {
 
     .section {
       border-bottom: 1px solid $grey;
-      padding: 10px 20px;
+      padding: $spacer;
     }
   }
 }
@@ -573,29 +573,13 @@ body.small-nav {
 }
 
 .share-ui {
-  .share-link {
-    input[type=text],
-    textarea {
-      width: 100%;
-      font-family: monospace;
-      font-size: small;
-      line-height: 1.3;
-    }
-  }
-
-  .share-image {
-    label {
-      margin-right: 10px;
-    }
-  }
-
   #mapnik_scale {
     width: 100px;
   }
 }
 
 .leaflet-top {
-  top: $lineheight/2 !important;
+  top: 10px !important;
   .leaflet-control {
     margin-right: 0px !important;
     margin-top: 0px !important;
@@ -622,13 +606,6 @@ body.small-nav {
 
 /* Rules for the sidebar */
 
-.sidebar_heading {
-  position: relative;
-  padding: $lineheight/2 $lineheight;
-  // background: $offwhite;
-  // border-bottom: 1px solid $grey;
-}
-
 #browse_status {
   input {
     display: block;
@@ -647,6 +624,9 @@ form {
   label {
     font-size: 16px;
   }
+  .col-form-label {
+    font-size: 16px;
+  }
 }
 
 /* Stop bootstrap 5 from floating legends when they don't need to be */
index 43f194522e1c3426ac1de750a85c3efddf67e90a..97e6351a0a108561ac495534a8e30c75ab13cb11 100644 (file)
@@ -13,9 +13,9 @@
   </div>
 <% end -%>
 <% elsif params[:bbox] %>
-  <p><%= t(params[:max_id] ? ".no_more_area" : ".empty_area") %></p>
+  <p class="mx-3"><%= t(params[:max_id] ? ".no_more_area" : ".empty_area") %></p>
 <% elsif params[:display_name] %>
-  <p><%= t(params[:max_id] ? ".no_more_user" : ".empty_user") %></p>
+  <p class="mx-3"><%= t(params[:max_id] ? ".no_more_user" : ".empty_user") %></p>
 <% else %>
-  <p><%= t(params[:max_id] ? ".no_more" : ".empty") %></p>
+  <p class="mx-3"><%= t(params[:max_id] ? ".no_more" : ".empty") %></p>
 <% end %>
index e3a7ff23e12f8f8f5baf7012874d8745ff4d2724..0d6ddfb01c7c007aab216b1a05ceda51486d9334 100644 (file)
       </tr>
     </thead>
     <% @comments.each do |comment| -%>
-    <tr class="<%= "text-muted" unless comment.visible? %>">
-      <td width="25%"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
-      <td width="25%"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :"datetime.distance_in_words_ago") %></span></td>
-      <td width="50%" class="richtext text-break"><%= comment.body.to_html %></td>
+    <tr>
+      <td width="25%" class="<%= "text-muted" unless comment.visible? %>"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
+      <td width="25%" class="<%= "text-muted" unless comment.visible? %>"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :"datetime.distance_in_words_ago") %></span></td>
+      <td width="50%" class="richtext text-break<%= " text-muted" unless comment.visible? %>"><%= comment.body.to_html %></td>
     </tr>
     <% end -%>
   </table>
index 370ae3b645b3ee68e069f365a225f8ef302892cc..949121d96f2f64aae1b325d473bbde2f59baa6db 100644 (file)
@@ -1,5 +1,5 @@
 <div id="mapkey">
-  <table class="table table-sm table-borderless mapkey-table">
+  <table class="table table-sm table-borderless mapkey-table mb-0">
     <% YAML.load_file(Rails.root.join("config/key.yml")).each do |name,data| %>
       <% data.each do |entry| %>
         <tr class="mapkey-table-entry" data-layer="<%= name %>" data-zoom-min="<%= entry["min_zoom"] %>" data-zoom-max="<%= entry["max_zoom"] %>">
index 6335b06d9895371bb4479105f5447495528c3992..81fda926b7a081b333add6d07f6d3aaa87989668 100644 (file)
                 <% end -%>
               </dd>
             <% end -%>
+            <% if current_user&.moderator? || current_user&.administrator? %>
+              <dt class="list-inline-item m-0"><%= t ".uid" %></dt>
+              <dd class="list-inline-item"><%= link_to @user.id, api_user_path(:id => @user.id) %></dd>
+            <% end -%>
           </dl>
         </small>
       </div>
index 4f61e799e40760d5e361846dca30dfbb5de9a572..580a997d6d7c889b2ba061a392ca990af1fc338e 100644 (file)
@@ -273,6 +273,7 @@ ca:
         reopened_at_by_html: Reactivat %{when} per %{user}
       rss:
         title: Notes d'OpenStreetMap
+        description_all: Una llista de notes denunciades, comentades o tancades
         description_area: Una llista de notes reportades, comentades o bé tancades
           a la teva àrea [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Un agregador RSS per a la nota %{id}
@@ -2008,6 +2009,7 @@ ca:
           OpenStreetMap%{registered_trademark_link} són %{open_data}, sota la llicència
           %{odc_odbl_link} (ODbL) per la %{osm_foundation_link} (OSMF).
         introduction_1_open_data: dades obertes
+        introduction_1_odc_odbl: Llicència de base de dades oberta d'Open Data Commons
         introduction_1_osm_foundation: Fundació OpenStreetMap
         introduction_2_html: "Sou lliure de copiar, distribuir, transmetre i adaptar
           les nostres dades, sempre que especifiqueu que són obra d'OpenStreetMap
@@ -2054,7 +2056,9 @@ ca:
           També incloem dades amb llicència oberta de les agències públiques de cartografia
           i d''altres fonts, entre elles:'
         contributors_at_austria: Àustria
+        contributors_at_stadt_wien: Ciutat de Viena
         contributors_at_cc_by: CC BY
+        contributors_at_land_vorarlberg: Estat de Vorarlberg
         contributors_au_australia: Austràlia
         contributors_ca_canada: Canadà
         contributors_fi_finland: Finlàndia
@@ -2065,10 +2069,21 @@ ca:
         contributors_rs_serbia: Sèrbia
         contributors_rs_rgz: Autoritat geodèsica sèrbia
         contributors_si_slovenia: Eslovènia
+        contributors_si_mkgp: Ministeri d'Agricultura, Forestal i Alimentació
+        contributors_es_credit_html: |-
+          %{spain}: conté dades procedents de
+          l'Institut Geogràfic Nacional d'Espanya (%{ign_link}) i el
+          Sistema Cartogràfic Nacional (%{scne_link}) amb llicència per a la reutilització sota %{cc_by_link}.
         contributors_es_spain: Espanya
         contributors_es_ign: IGN
         contributors_es_cc_by: CC BY 4.0
+        contributors_za_credit_html: '%{south_africa}: conté dades procedents de %{ngi_link},
+          drets d''autor reservats de l''estat.'
         contributors_za_south_africa: Sud-àfrica
+        contributors_za_ngi: 'Direcció General: Informació Geoespacial Nacional'
+        contributors_gb_credit_html: |-
+          %{united_kingdom}: conté dades d'Ordnance Survey &copy; Drets d'autor i base de dades de la Corona
+          2010-2023.
         contributors_gb_united_kingdom: Regne Unit
         contributors_2_html: Per a més detalls sobre aquestes i altres fonts que s'han
           usat per ajudar a millorar OpenStreetMap, vegeu %{contributors_page_link}
@@ -2125,6 +2140,7 @@ ca:
       licence: Llicència
       licence_details_html: Les dades d'OpenStreetMap estan sota la llicència %{odbl_link}
         (ODbL).
+      odbl: Llicència de base de dades oberta d'Open Data Commons
       too_large:
         advice: 'Si l''exportació anterior falla, proveu-ho amb alguna de les fonts
           incloses a la llista següent:'
index 58351acf1ba31ede504d86f7582a5811de4966c6..92c2f1a245f96f47e4892e993ba3e6b4b6c9e55d 100644 (file)
@@ -238,6 +238,7 @@ cy:
       openid: OpenID
       google: Google
       facebook: Facebook
+      microsoft: Microsoft
       github: GitHub
       wikipedia: Wicipedia
   api:
@@ -512,6 +513,7 @@ cy:
       no_comments: Dim sylwadau
       edit_link: Golygu'r cofnod hwn
       hide_link: Cuddio'r cofnod hwn
+      unhide_link: Datguddio'r cofnod hwn
       confirm: Cadarnhau
       report: Adrodd y cofnod hwn
     diary_comment:
@@ -578,6 +580,7 @@ cy:
           pylon: Peilon
           station: Gorsaf Awyr
           t-bar: Lifft T-Bar
+          "yes": Awyrffordd
         aeroway:
           aerodrome: Maesawyr
           airstrip: Llain Codi
@@ -586,8 +589,10 @@ cy:
           hangar: Hangar
           helipad: Pad Hofrennydd
           holding_position: Man aros
+          navigationaid: Cymorth Cyfeiriadu Hedfan
           parking_position: Lle Parcio
           runway: Rhedfa Awyr
+          taxilane: Safle Tacsis
           taxiway: Safle tacsi
           terminal: Terfynell Maes Awyr
           windsock: Hosan wynt
@@ -649,7 +654,9 @@ cy:
           loading_dock: Doc Llwytho
           love_hotel: Gwesty Cariad
           marketplace: Marchnad
+          mobile_money_agent: Asiant Arian Symudol
           monastery: Mynachdy
+          money_transfer: Trosglwyddo Arian
           motorcycle_parking: Man Parcio Beiciau Modur
           music_school: Ysgol Gerddoriaeth
           nightclub: Clwb Nôs
@@ -657,6 +664,7 @@ cy:
           parking: Parcio
           parking_entrance: Mynedfa Man Parcio
           parking_space: Man Parcio
+          payment_terminal: Terfynell Talu
           pharmacy: Fferyllfa
           place_of_worship: Man addoli
           police: Heddlu
@@ -664,7 +672,10 @@ cy:
           post_office: Swyddfa Bost
           prison: Carchar
           pub: Tafarn
+          public_bath: Bath Cyhoeddus
+          public_bookcase: Silff Lyfrau Gyhoeddus
           public_building: Adeilad Cyhoeddus
+          ranger_station: Gorsaf Ceidwad
           recycling: Pwynt Ailgylchu
           restaurant: Bwyty
           school: Ysgol
@@ -1157,6 +1168,8 @@ cy:
           stationery: Siop Offer Swyddfa
           supermarket: Archfarchnad
           tailor: Teiliwr
+          tattoo: Siop Tatŵ
+          tea: Siop De
           ticket: Siop Docynau
           tobacco: Siop Dybaco
           toys: Siop Degannau
@@ -1165,6 +1178,7 @@ cy:
           vacant: Siop Wag
           video: Siop Fideos
           video_games: Siop Gemau Fideo
+          wholesale: Siop Gyfanwerthu
           wine: Siop Win
           "yes": Siop
         tourism:
@@ -1258,6 +1272,8 @@ cy:
       resolve: Datrys
       ignore: Anwybyddu
       reopen: Ailagor
+      read_reports: Darllen Adroddiadau
+      new_reports: Adroddiadau Newydd
     helper:
       reportable_title:
         note: 'Nodyn #%{note_id}'
@@ -1367,6 +1383,7 @@ cy:
     inbox:
       title: Mewnflwch
       my_inbox: Fy Mewnflwch
+      my_outbox: Fy Mlwch Allan
       messages: Mae gennych %{new_messages} a %{old_messages}
       from: Gan
       subject: Pwnc
@@ -1453,6 +1470,12 @@ cy:
       image size hint: (delweddau sgwâr o leiaf 100x100 yw'r gorau)
       home location: Lleoliad Cartref
       no home location: Nid ydych wedi gosod eich lleoliad cartref.
+      show: Dangos
+      delete: Dileu
+      undelete: Dadwneud dileu
+    update:
+      success: Proffil wedi'i ddiweddaru.
+      failure: Ni ellir diweddaru'r proffil.
   sessions:
     new:
       title: Mewngofnodi
@@ -1522,7 +1545,9 @@ cy:
       open_data_title: Data Agored
       open_data_open_data: data agored
       legal_title: Cyfreithiol
+      legal_1_1_openstreetmap_foundation: OpenStreetMap Foundation
       legal_1_1_terms_of_use: Telerau Gwasanaeth
+      legal_1_1_aup: Polisïau Defnydd Derbyniol
       legal_1_1_privacy_policy: Polisi Preifatrwydd
       legal_2_1_contact_the_osmf: cysylltwch â'r OSMF
       partners_title: Partneriaid
@@ -1810,6 +1835,8 @@ cy:
       invalid: Nid yw'r tocyn awdurdodiad yn ddilys.
     revoke:
       flash: Rydych wedi diddymu'r tocyn ar gyfer %{application}.
+    scopes:
+      write_notes: Addasu nodiadau
   oauth_clients:
     new:
       title: Cofrestru rhaglen newydd
index 2fc8f8196a75a8607b98494e5b8ef1d268cf4e52..ec845dc7c412426cae4875c7ee7d56fe84f30619 100644 (file)
@@ -2697,6 +2697,7 @@ en:
       remove as friend: Unfriend
       add as friend: Add Friend
       mapper since: "Mapper since:"
+      uid: "User id:"
       ct status: "Contributor terms:"
       ct undecided: Undecided
       ct declined: Declined
index 1e08e1fbfe8017147b270bfd64ad7bcd2ea930c3..f06b00d2221585020ae8d2c77ca2c77c2e743459 100644 (file)
@@ -321,6 +321,7 @@ es:
         reopened_at_by_html: Reactivado %{when} por %{user}
       rss:
         title: Notas de OpenStreetMap
+        description_all: Una lista de notas denunciadas, comentadas o cerradas.
         description_area: Una lista de notas, informadas, comentadas o cerradas en
           tu área [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Un suministro RSS para notas %{id}
@@ -1933,6 +1934,9 @@ es:
       no home location: No has introducido tu ubicación de casa.
       update home location on click: ¿Actualizar tu lugar de origen cuando hagas clic
         sobre el mapa?
+      show: Mostrar
+      delete: Eliminar
+      undelete: Deshacer eliminación
     update:
       success: Perfil actualizado.
       failure: No se pudo actualizar el perfil.
@@ -2487,8 +2491,8 @@ es:
       start_mapping: Comenzar a mapear
       add_a_note:
         title: ¿No tienes tiempo para editar? ¡Añade una nota!
-        para_1: Si sólo deseas corregir algo pequeño y no tienes tiempo para registrarse
-          y aprender a editar, es fácil añadir una nota.
+        para_1: Si sólo deseas corregir algo pequeño y no tienes tiempo para registrarte
+          y aprender a editar, añadir una nota es fácil.
         para_2_html: |-
           Basta con ir a %{map_link} y pulsar en el icono de nota: %{note_icon}.
           Esto añadirá un marcador al mapa que se puede mover al arrastrarlo.
@@ -3064,7 +3068,9 @@ es:
     index:
       title: Notas remitidas o comentadas por %{user}
       heading: Notas de %{user}
-      subheading_html: Notas remitidas o comentadas por %{user}
+      subheading_html: Notas %{submitted} o %{commented} por %{user}
+      subheading_submitted: creadas
+      subheading_commented: comentada
       no_notes: Ninguna nota
       id: Identificador
       creator: Creador
index ce8569c48a0e70fa129ea5b941e09d8f11645cda..8f4549d5d0944cca2186b82dc2c63c79ad825392 100644 (file)
@@ -327,6 +327,7 @@ fr:
         reopened_at_by_html: Réactivé à %{when} par %{user}
       rss:
         title: Notes OpenStreetMap
+        description_all: Une liste de notes rapportées, commentées ou fermées
         description_area: Une liste de notes, signalées, commentées ou fermées dans
           votre zone [(%{min_lat} ; %{min_lon}) – (%{max_lat} ; %{max_lon})]
         description_item: Un fil RSS pour la note %{id}
index e241bf3878c4a1ccb78bd5d55b6edef16d274b52..f80ed10fafc0b2d6b1112fd52a9fc3b966175564 100644 (file)
@@ -245,7 +245,8 @@ gl:
         reopened_at_by_html: Reactivado %{when} por %{user}
       rss:
         title: Notas do OpenStreetMap
-        description_area: Unha listaxe das notas, denunciadas, comentadas ou pechadas
+        description_all: Unha lista das notas denunciadas, comentadas ou pechadas
+        description_area: Unha lista das notas denunciadas, comentadas ou pechadas
           na túa zona [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Unha fonte de novas RSS para a nota %{id}
         opened: nota nova (preto de %{place})
index d059fcec69b29f69efc9309df28356407aa4b768..e95195d899ba1f8813d298bb0eabc62f91a3e9f8 100644 (file)
@@ -289,6 +289,7 @@ he:
         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}
index b7605977e3136486cc442e021d7ddb6613307547..f916c38e921658199cfac3b93f21a5d5d65fc5c8 100644 (file)
@@ -852,7 +852,7 @@ hr:
         place:
           city: Grad
           country: Država
-          county: Županija/grofovija
+          county: Županija
           farm: Farma
           hamlet: Zaseok
           house: Kuća
index 7bc4abbc7c38debcf61ff010d37a5a4b796c3879..242aa3ae4d59872cdf913255cf720d8f3de969c7 100644 (file)
@@ -263,6 +263,7 @@ hu:
         reopened_at_by_html: 'Újraaktiválta %{user} ekkor: %{when}'
       rss:
         title: OpenStreetMap jegyzetek
+        description_all: Jelentett, kommentált vagy lezárt feljegyzések listája
         description_area: Bejelentett, hozzászólással ellátott vagy lezárt jegyzetek
           a területeden [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: RSS hírcsatorna a %{id} jegyzethez
index 8bc1c60869f661c600b1e0206e57727a70314d0e..a33a87b3527d99b5cec559d102ac59f2f6166512 100644 (file)
@@ -234,6 +234,7 @@ ia:
         reopened_at_by_html: Reactivate %{when} per %{user}
       rss:
         title: Notas de OpenStreetMap
+        description_all: Un lista de notas reportate, commentate o claudite
         description_area: Un lista de notas reportate, commentate o claudite in tu
           area [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Syndication RSS pro le nota %{id}
index 7d04b25fb7840b32ad0ab00f3e367040070a8f9d..824f8fce1f80bb9cd4469d4cc496decb0ddf92c5 100644 (file)
@@ -48,7 +48,7 @@ lb:
     errors:
       messages:
         invalid_email_address: schéngt keng valabel E-Mail-Adress ze sinn
-        email_address_not_routable: ass net routingfäheg
+        email_address_not_routable: ass net routingfäeg
     models:
       acl: Zougrëffssteierlëscht
       changeset: Set vun Ännerungen
@@ -96,7 +96,7 @@ lb:
         allow_write_api: d'Kaart änneren
         allow_read_gpx: Zougrëff op hir privat GPS-Spueren
         allow_write_gpx: GPS-Spueren eroplueden
-        allow_write_notes: Notizë beaarbechten
+        allow_write_notes: Notize beaarbechten
       diary_comment:
         body: Text
       diary_entry:
@@ -108,7 +108,7 @@ lb:
         language_code: Sprooch
       doorkeeper/application:
         name: Numm
-        redirect_uri: Weiderleedungs-URIën
+        redirect_uri: Weiderleedungs-URIen
         confidential: Confidentiel Applikatioun?
         scopes: Autorisatiounen
       friend:
@@ -155,14 +155,14 @@ lb:
     help:
       doorkeeper/application:
         confidential: Et gëtt eng Applikatioun verwent, bei där d'Clientsgeheimnis
-          vertraulech behandelt ka ginn (nativ- an eesäiteg Appë sinn net vertraulech)
+          vertraulech behandelt ka ginn (nativ- an eesäiteg Appe sinn net vertraulech)
         redirect_uri: Pro URI eng Zeil benotzen
       trace:
         tagstring: Mat Komma getrennt
       user_block:
         reason: De Grond, firwat de Benotzer / d'Benotzerin gespaart ass. Sief wannechgelift
           esou roueg a sachlech wéi méiglech. Beschreif d'Lag méiglechst detailléiert
-          an denk dorun, datt déng Noriicht ëffentlech siichtbar ass. Denk och dorun,
+          an denk dorun, datt deng Noriicht ëffentlech siichtbar ass. Denk och dorun,
           datt net all d'Benotzer de Jargon vum Gemeinschaftsprojet verstinn a benotz
           wannechgelift Formuléierungen, déi fir Laie verständlech sinn.
         needs_view: Muss sech de Benotzer umellen, ier dës Spär opgehuewe gëtt?
index 7fbd32b4fdb5dc83f904bd9b38e0984287296681..b4e458453466ea1cf3804868ee34adc7d4fd940f 100644 (file)
@@ -236,6 +236,7 @@ mk:
         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}
index 51285dae14400fdcf6bb20fc87db83f68b4ecf24..e04ad6625b443ff6e9c572957365f6f803748ce5 100644 (file)
@@ -303,6 +303,7 @@ pl:
       openid: OpenID
       google: Google
       facebook: Facebook
+      microsoft: Microsoft
       github: GitHub
       wikipedia: Wikipedia
   api:
@@ -1929,6 +1930,9 @@ pl:
       home location: 'Położenie domu:'
       no home location: Nie wpisałeś swojej lokalizacji domowej.
       update home location on click: Uaktualnianie położenia kliknięciem na mapie
+      show: Pokaż
+      delete: Usuń
+      undelete: Cofnij usunięcie
     update:
       success: Zaktualizowano profil użytkownika.
       failure: Nie udało się zaktualizować profilu.
@@ -2017,6 +2021,7 @@ pl:
       legal_title: Pytania prawne
       legal_1_1_openstreetmap_foundation: Fundacja OpenStreetMap
       legal_1_1_terms_of_use: Warunki użytkowania
+      legal_1_1_aup: Zasady dozwolonego użytku
       legal_1_1_privacy_policy: Polityka prywatności
       legal_2_1_contact_the_osmf: skontaktuj się z OSM
       partners_title: Partnerzy
@@ -2963,6 +2968,7 @@ pl:
       title: Uwagi utworzone lub skomentowane przez %{user}
       heading: Uwagi użytkownika %{user}
       subheading_html: Uwagi utworzone lub skomentowane przez %{user}
+      subheading_commented: skomentował
       no_notes: Brak uwag
       id: Identyfikator
       creator: Autor
index 5247428bbf746e18b87e3c0564b742c3f3154747..3f1b8ee129eec9e09a6e1ecb36083f3b5f88b727 100644 (file)
@@ -270,6 +270,7 @@ pt:
       openid: OpenID
       google: Google
       facebook: Facebook
+      microsoft: Microsoft
       github: GitHub
       wikipedia: Wikipédia
   api:
@@ -421,7 +422,7 @@ pt:
       history_title_html: 'Histórico da linha: %{name}'
       nodes: Pontos
       nodes_count:
-        one: 1 nó
+        one: '%{count} nó'
         other: '%{count} nós'
       also_part_of_html:
         one: parte da linha %{related_ways}
@@ -593,8 +594,8 @@ pt:
       reply_link: Enviar uma mensagem ao autor
       comment_count:
         one: '%{count} comentário'
-        zero: Nenhum comentário
         other: '%{count} comentários'
+      no_comments: Sem comentários
       edit_link: Editar esta postagem
       hide_link: Ocultar essa postagem
       unhide_link: Mostrar esta entrada
@@ -1482,9 +1483,9 @@ pt:
     show:
       title: '%{status} Problema #%{issue_id}'
       reports:
-        zero: Sem denúncias
-        one: '%{count} denúncia'
-        other: '%{count} denúncias'
+        one: '%{count} relatório'
+        other: '%{count} relatórios'
+      no_reports: Sem relatórios
       report_created_at: Primeiro relatado em %{datetime}
       last_resolved_at: Resolvido pela última vez em %{datetime}
       last_updated_at: Última atualização em %{datetime} por %{displayname}
@@ -1885,6 +1886,9 @@ pt:
       home location: Local principal
       no home location: Você ainda não definiu o seu local principal.
       update home location on click: Atualizar local principal ao clicar no mapa?
+      show: Exibir
+      delete: Excluir
+      undelete: Desfazer eliminação
     update:
       success: Perfil atualizado.
       failure: Não foi possível atualizar o perfil.
@@ -1914,8 +1918,8 @@ pt:
           title: Entrar com o Facebook
           alt: Entrar com uma conta do Facebook
         microsoft:
-          title: Entrar com o Windows Live
-          alt: Entrar com uma conta do Windows Live
+          title: Entrar com o Microsoft
+          alt: Entrar com uma conta do Microsoft
         github:
           title: Entrar com o GitHub
           alt: Entrar com conta do GitHub
@@ -2107,6 +2111,11 @@ pt:
         contributors_nz_new_zealand: Nova Zelândia
         contributors_nz_linz_data_service: LINZ Data Service
         contributors_nz_cc_by: CC BY 4.0
+        contributors_rs_credit_html: '%{serbia}%{open_data_portal}: Contém dados de
+          %{rgz_link} e %{open_data_portal} (informações públicas da Sérvia), 2018.'
+        contributors_rs_serbia: Sérvia
+        contributors_rs_rgz: Autoridade Geodésica da Sérvia
+        contributors_rs_open_data_portal: Portal Nacional de Dados Abertos
         contributors_si_credit_html: |-
           %{slovenia}: Contém dados da %{gu_link} e %{mkgp_link}
           (informação pública da Eslovénia).
@@ -2989,7 +2998,9 @@ pt:
     index:
       title: Notas postadas ou comentadas por %{user}
       heading: Notas de %{user}
-      subheading_html: Notas postadas ou comentadas por %{user}
+      subheading_html: Notas %{submitted} or %{commented} por %{user}
+      subheading_submitted: submetido
+      subheading_commented: comentado
       no_notes: Sem notas
       id: ID
       creator: Criador
index 11a947a05f8b06f372aa89671d548fa9171b8745..4efe44d8a16f02ad0b7abee25e3c85ed45072c73 100644 (file)
@@ -237,6 +237,7 @@ sc:
         reopened_at_by_html: Torrada a ativare %{when} dae %{user}
       rss:
         title: Notas de OpenStreetMap
+        description_all: Una lista de notas sinnaladas, cummentadas o tancadas
         description_area: Una lista de notas, cummentadas o tancadas in s'àrea tua
           [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: Unu flussu de informatziones rss pro sa nota %{id}
index 9d0554c8b5ef6544df8af9baf6aeb916d9209cdc..f6b6dac1cfdb1fc5d04328dc3e9bd59deb269679 100644 (file)
@@ -270,6 +270,7 @@ sl:
         reopened_at_by_html: Znova aktiviral_a %{user} %{when}
       rss:
         title: OpenStreetMap opombe
+        description_all: Seznam sporočenih, komentiranih ali zaprtih opomb
         description_area: Seznam opomb, prijavljenih, komentiranih ali zaprtih na
           vašem območju [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: RSS vir za opombo %{id}
index 4eed00e2525977deaa7b70de32eec594c76a2248..02f506eb2e699a6ae6c5a7d411f7f06ffac642c1 100644 (file)
@@ -1967,14 +1967,29 @@ tr:
         OpenStreetMap, piyasa bilgisi üzerinde durmaktadır. Katkıda bulunanlar,
         OSM'nin doğru ve güncel olduğunu doğrulamak için havadan görüntüler, GPS cihazları ve düşük teknoloji alan haritaları kullanmaktadır.
       community_driven_title: Katılım Kaynaklı
+      community_driven_1_html: "OpenStreetMap topluluğu çeşitlidir, tutkuludur ve
+        her geçen gün büyümektedir.\nKatkıda bulunanlarımız arasında meraklı haritacılar,
+        GIS uzmanları, OSM sunucularını çalıştıran mühendisler, felaketten etkilenen
+        alanların haritasını çıkaran insani yardım görevlileri ve çok daha fazlası
+        yer alıyor.\nTopluluk hakkında daha fazla bilgi edinmek için %{osm_blog_link},\n%{user_diaries_link},
+        %{community_blogs_link} ve \n%{osm_foundation_link} web sayfalarına göz atın."
       community_driven_osm_blog: OpenStreetMap Blogu
       community_driven_user_diaries: kullanıcı günlükleri
       community_driven_community_blogs: topluluk blogları
       community_driven_osm_foundation: OSM Vakfı
       open_data_title: Açık Veri
+      open_data_1_html: 'OpenStreetMap, bir %{open_data}dir: OpenStreetMap''e ve katkıda
+        bulunanlara atıf yaptığınız sürece onu herhangi bir amaç için kullanmakta
+        özgürsünüz. Verileri belirli şekillerde değiştirir veya verilerden yararlanırsanız
+        sonucu yalnızca aynı lisans kapsamında dağıtabilirsiniz. Ayrıntılar için %{copyright_license_link}na
+        bakınız.'
       open_data_open_data: açık veri
       open_data_copyright_license: Telif Hakkı ve Lisans sayfası
       legal_title: Yasal
+      legal_1_1_html: Bu site ve diğer birçok ilgili hizmet, topluluk adına %{openstreetmap_foundation_link}
+        (OSMF) tarafından resmî olarak işletilmektedir. OSMF tarafından işletilen
+        tüm hizmetlerin kullanımı %{terms_of_use_link}, %{aup_link} ve %{privacy_policy_link}na
+        tabidir.
       legal_1_1_openstreetmap_foundation: OpenStreetMap Vakfı
       legal_1_1_terms_of_use: Kullanım Şartları
       legal_1_1_aup: Kabul Edilebilir Kullanım Politikaları
@@ -2023,25 +2038,50 @@ tr:
           bulunun.
         credit_2_2: Verilerin Açık Veritabanı Lisansı kapsamında mevcut olduğunu açıkça
           belirtin.
+        credit_3_html: Telif hakkı bildirimi açısından, verilerimizi nasıl kullandığınıza
+          bağlı olarak bunun nasıl görüntülenmesi gerektiği konusunda farklı gereksinimlerimiz
+          vardır. Örneğin, göz atılabilir bir harita, basılı bir harita veya statik
+          bir resim oluşturmanıza bağlı olarak telif hakkı bildiriminin nasıl gösterileceği
+          konusunda farklı kurallar geçerlidir. Gereksinimlere ilişkin tüm ayrıntıları  %{attribution_guidelines_link}
+          kısmında bulabilirsiniz.
+        credit_3_attribution_guidelines: İlişkilendirme Kuralları
+        credit_4_1_html: Verilerin Açık Veritabanı Lisansı kapsamında mevcut olduğunu
+          açıkça belirtmek için %{this_copyright_page_link}na bağlantı verebilirsiniz.
+          Alternatif olarak ve OSM'yi bir veri formunda dağıtıyorsanız bir gereklilik
+          olarak lisansları doğrudan adlandırabilir ve bunlara bağlantı verebilirsiniz.
+          Bağlantıların mümkün olmadığı ortamlarda (örneğin basılı eserlerde), okuyucularınızı
+          openstreetmap.org'a (belki 'OpenStreetMap'i bu tam adrese genişleterek)
+          ve opendatacommons.org'a yönlendirmenizi öneririz. Bu örnekte atıf haritanın
+          köşesinde görünür.
         credit_4_1_this_copyright_page: bu telif hakkı sayfası
         attribution_example:
           alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek
           title: Atıf örneği
         more_title_html: Daha fazlasını öğrenin
+        more_1_1_html: Verilerimizin kullanımı ve bize nasıl atıfta bulunacağınız
+          hakkında daha fazla bilgiyi  %{osmf_licence_page_link}nda bulabilirsiniz.
         more_1_1_osmf_licence_page: OSMF Lisans sayfası
+        more_2_1_html: OpenStreetMap açık veri olmasına rağmen üçüncü taraflara ücretsiz
+          bir harita API'si sağlayamıyoruz. %{api_usage_policy_link}, %{tile_usage_policy_link}
+          ve %{nominatim_usage_policy_link} sayfalarına bakınız.
         more_2_1_api_usage_policy: API Kullanım Politikası
         more_2_1_tile_usage_policy: Karo Kullanım Politikası
+        more_2_1_nominatim_usage_policy: İsmen Kullanım Politikası
         contributors_title_html: Katkıda Bulunanlar
         contributors_intro_html: |-
           Binlerce kişi projemize katkıda bulunmaktadır. Ulusal
           haritalama ajanslarından ve diğer kaynaklardan
           açık-lisanslı veriler de içeriyoruz:
+        contributors_at_credit_html: '%{austria}: %{stadt_wien_link} (%{cc_by_link}
+          kapsamında), %{land_vorarlberg_link} ve Land Tirol''den (%{cc_by_at_with_amendments_link}
+          kapsamında) verileri içerir.'
         contributors_at_austria: Avusturya
         contributors_at_stadt_wien: Stadt Wien
         contributors_at_cc_by: CC-BY
         contributors_at_land_vorarlberg: |-
           Land
            Vorarlberg
+        contributors_at_cc_by_at_with_amendments: değişikliklerle birlikte CC BY AT
         contributors_au_australia: Avustralya
         contributors_au_geoscape_australia: Geoscape Australia
         contributors_au_cc_licence: Creative Commons Atıf 4.0 Uluslararası lisansı
@@ -2061,6 +2101,7 @@ tr:
           %{slovenia}: %{gu_link} ve %{mkgp_link}
           (Slovenya'nın kamuya açık bilgileri) verilerini içerir.
         contributors_si_slovenia: Slovenya
+        contributors_si_gu: Etüt ve Harita Kurumu
         contributors_si_mkgp: Tarım, Orman ve Gıda Bakanlığı
         contributors_es_spain: İspanya
         contributors_es_ign: IGN
@@ -2415,7 +2456,7 @@ tr:
     trace:
       pending: BEKLEMEDE
       count_points:
-        one: 1 puan
+        one: '%{count} puan'
         other: '%{count} puan'
       more: daha fazla
       trace_details: İz Ayrıntılarını Görüntüle
@@ -2832,19 +2873,19 @@ tr:
       time_past_html: '%{time} bitti.'
       block_duration:
         hours:
-          one: 1 saat
+          one: '%{count} saat'
           other: '%{count} saat'
         days:
-          one: 1 gün
+          one: '%{count} gün'
           other: '%{count} gün'
         weeks:
-          one: 1 hafta
+          one: '%{count} hafta'
           other: '%{count} hafta'
         months:
-          one: 1 ay
+          one: '%{count} ay'
           other: '%{count} ay'
         years:
-          one: 1 yıl
+          one: '%{count} yıl'
           other: '%{count} yıl'
     blocks_on:
       title: '%{name} kişisinin engelleri'
@@ -2994,6 +3035,7 @@ tr:
       osm_france: OpenStreetMap Fransa
       andy_allan: Andy Allan
       memomaps: MeMo Haritaları
+      hotosm_name: İnsani OpenStreetMap Ekibi
     site:
       edit_tooltip: Haritayı düzenle
       edit_disabled_tooltip: Haritayı düzenlemek için yakınlaştırın
index ac484938d1871109e6eb3731d7636c627c59782f..23b26e02a90f74be9b7f656d357464362036d3fa 100644 (file)
@@ -271,6 +271,7 @@ zh-TW:
         reopened_at_by_html: 於%{when}由%{user}重新開啟
       rss:
         title: OpenStreetMap 註記
+        description_all: 已報告、評論、或是關閉註記的清單
         description_area: 在你的區域[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]所報告、評論或關閉的註記的清單
         description_item: 註記 %{id} 的 RSS feed
         opened: 新的註記 (在 %{place} 附近)
index 9358a5948ce205cc1e38bc11dc659b0c5e1a6fb6..402129d326e19908ba57feaf74c5f18a48acf9db 100644 (file)
@@ -495,6 +495,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
       assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 0
+      assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 0
     end
 
     # Login as a moderator
@@ -512,6 +513,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
       assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 1
+      assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 1
     end
   end
 
index 673a0a9d6798c58940b14b6ac00fd4c099604b1a..911e7c1b5d33fa8b397c0862fbcfad1fb2ec2a0f 100644 (file)
@@ -5,6 +5,6 @@ FactoryBot.define do
 
     changeset
 
-    association :author, :factory => :user
+    author :factory => :user
   end
 end
index 4879373a8de63ee47dd042d145a124e079dfede4..12df2a9456e9143dffb5fa729cc42ed927aab3bb 100644 (file)
@@ -1,6 +1,6 @@
 FactoryBot.define do
   factory :friendship do
-    association :befriender, :factory => :user
-    association :befriendee, :factory => :user
+    befriender :factory => :user
+    befriendee :factory => :user
   end
 end
index bb6b2dd5222d517fbe95ca35a812991dc95d2b38..cc6b4c3671576cd241f07732939068cf730107eb 100644 (file)
@@ -1,8 +1,8 @@
 FactoryBot.define do
   factory :issue do
     # Default to reporting users
-    association :reportable, :factory => :user
-    association :reported_user, :factory => :user
+    reportable :factory => :user
+    reported_user :factory => :user
 
     # Default to assigning to an administrator
     assigned_role { "administrator" }
index cd148c7896a2f80720258ab27262a66127a767a4..4f8ee5437fc8a86bcb1897ebbe03b4722da3e78a 100644 (file)
@@ -4,8 +4,8 @@ FactoryBot.define do
     sequence(:body) { |n| "Body text for message #{n}" }
     sent_on { Time.now.utc }
 
-    association :sender, :factory => :user
-    association :recipient, :factory => :user
+    sender :factory => :user
+    recipient :factory => :user
 
     trait :unread do
       message_read { false }
index caddea8155c6abc4a1b35c8478783117e1146541..b9f53890b9afc7876377c6ed2cfdc53dd89b75a5 100644 (file)
@@ -1,7 +1,7 @@
 FactoryBot.define do
   factory :oauth_access_grant, :class => "Doorkeeper::AccessGrant" do
-    association :resource_owner_id, :factory => :user
-    association :application, :factory => :oauth_application
+    resource_owner_id :factory => :user
+    application :factory => :oauth_application
 
     expires_in { 86400 }
     redirect_uri { application.redirect_uri }
index 5b39cb400cf62267a046bc16787ca95e58173c20..3f862fbca752e9887cbf63df02491ea493c83f10 100644 (file)
@@ -1,5 +1,5 @@
 FactoryBot.define do
   factory :oauth_access_token, :class => "Doorkeeper::AccessToken" do
-    association :application, :factory => :oauth_application
+    application :factory => :oauth_application
   end
 end
index 1e62d2c973eaff522ae26cc26aba99cad5b5add3..c865e0237383a0cded35c28064dc73e53adc05be 100644 (file)
@@ -3,6 +3,6 @@ FactoryBot.define do
     sequence(:name) { |n| "OAuth application #{n}" }
     sequence(:redirect_uri) { |n| "https://example.com/app/#{n}" }
 
-    association :owner, :factory => :user
+    owner :factory => :user
   end
 end
index a2ca0a2ee3c7780389d2f11ead22ba60455574a8..985093fad28e0e56c625edc5af60f0b6046d43c8 100644 (file)
@@ -4,7 +4,7 @@ FactoryBot.define do
     longitude { 1 * GeoRecord::SCALE }
 
     changeset
-    association :current_node, :factory => :node
+    current_node :factory => :node
 
     visible { true }
     timestamp { Time.now.utc }
index 1bc1b36cf0c94e7fe2ee2978d10e0df88eaca640..facf06dc0486027086ae1042a50044d9c0203899 100644 (file)
@@ -5,6 +5,6 @@ FactoryBot.define do
     version { 1 }
 
     changeset
-    association :current_relation, :factory => :relation
+    current_relation :factory => :relation
   end
 end
index 17495d7ea862703017f0124ed3506ee533407783..99305cd98bfff94126522bf6df200a51c15f6a72 100644 (file)
@@ -4,6 +4,6 @@ FactoryBot.define do
 
     old_relation
     # Default to creating nodes, but could be ways or relations as members
-    association :member, :factory => :node
+    member :factory => :node
   end
 end
index 265a477d3022c278a5ee11fbd93a2b69397980b5..b91bf8bf53973289c48dc54845891e8defd82073 100644 (file)
@@ -5,6 +5,6 @@ FactoryBot.define do
     version { 1 }
 
     changeset
-    association :current_way, :factory => :way
+    current_way :factory => :way
   end
 end
index b4498a28d1ad780784a8f81b10186a5b9b09be03..bba2e76330d93cadedf45ae41cabd613fbe98a69 100644 (file)
@@ -4,6 +4,6 @@ FactoryBot.define do
 
     relation
     # Default to creating nodes, but could be ways or relations as members
-    association :member, :factory => :node
+    member :factory => :node
   end
 end
index fefbba45ace1b61fbd3932ea1851ba6e5a69fd67..2f68dc8dc6c1162512cee03a7859e22ba91ffba0 100644 (file)
@@ -4,7 +4,7 @@ FactoryBot.define do
     ends_at { Time.now.utc + 1.day }
 
     user
-    association :creator, :factory => :moderator_user
+    creator :factory => :moderator_user
 
     trait :needs_view do
       needs_view { true }
@@ -15,7 +15,7 @@ FactoryBot.define do
     end
 
     trait :revoked do
-      association :revoker, :factory => :moderator_user
+      revoker :factory => :moderator_user
     end
   end
 end
index 6523342f70b1acb0d54fe9aa4b91d1d39a21b633..1916d9b2e9769759477cef313bc17061f191e694 100644 (file)
@@ -1,6 +1,6 @@
 FactoryBot.define do
   factory :user_role do
     user
-    association :granter, :factory => :user
+    granter :factory => :user
   end
 end
index 54450b186d01a178c9a00c5a5dbd2c8b20e58d6b..2a42de12366e0a58678859e73d17d947ecf3203e 100644 (file)
@@ -28,16 +28,18 @@ class PasswordHashTest < ActiveSupport::TestCase
     assert PasswordHash.upgrade?("3wYbPiOxk/tU0eeIDjUhdvi8aDP3AbFtwYKKxF1IhGg=", "sha512!10000!OUQLgtM7eD8huvanFT5/WtWaCwdOdrir8QOtFwxhO0A=")
   end
 
-  def test_argon2_upgradeable
-    assert PasswordHash.check("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil, "password")
-    assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil, "wrong")
-    assert PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil)
-  end
-
-  def test_argon2
+  def test_argon2_t2_m16_p1
     assert PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "password")
     assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "wrong")
-    assert_not PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil)
+    assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvwrong5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "password")
+    assert PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil)
+  end
+
+  def test_argon2_t3_m16_p4
+    assert PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "password")
+    assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "wrong")
+    assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYwrongr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "password")
+    assert_not PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil)
   end
 
   def test_default