]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4559'
authorTom Hughes <tom@compton.nu>
Fri, 12 Apr 2024 16:56:15 +0000 (17:56 +0100)
committerTom Hughes <tom@compton.nu>
Fri, 12 Apr 2024 16:56:15 +0000 (17:56 +0100)
315 files changed:
Gemfile
Gemfile.lock
app/abilities/ability.rb
app/abilities/api_ability.rb
app/abilities/api_capability.rb
app/assets/images/avatar.svg [new file with mode: 0644]
app/assets/images/avatars.svg [deleted file]
app/assets/images/microsoft.svg
app/assets/javascripts/application.js
app/assets/javascripts/leaflet.key.js
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/leaflet.share.js
app/assets/javascripts/messages.js
app/assets/stylesheets/common.scss
app/assets/stylesheets/parameters.scss
app/controllers/api/changeset_comments_controller.rb
app/controllers/api/changesets_controller.rb
app/controllers/api/nodes_controller.rb
app/controllers/api/old_elements_controller.rb [moved from app/controllers/api/old_controller.rb with 93% similarity]
app/controllers/api/old_nodes_controller.rb
app/controllers/api/old_relations_controller.rb
app/controllers/api/old_ways_controller.rb
app/controllers/api/relations_controller.rb
app/controllers/api/users_controller.rb
app/controllers/api/ways_controller.rb
app/controllers/api_controller.rb
app/controllers/application_controller.rb
app/controllers/browse_controller.rb
app/controllers/changesets_controller.rb
app/controllers/concerns/pagination_methods.rb [new file with mode: 0644]
app/controllers/confirmations_controller.rb
app/controllers/diary_entries_controller.rb
app/controllers/messages_controller.rb
app/controllers/nodes_controller.rb [new file with mode: 0644]
app/controllers/old_nodes_controller.rb
app/controllers/old_relations_controller.rb
app/controllers/old_ways_controller.rb
app/controllers/passwords_controller.rb
app/controllers/relations_controller.rb [new file with mode: 0644]
app/controllers/traces/icons_controller.rb [new file with mode: 0644]
app/controllers/traces/pictures_controller.rb [new file with mode: 0644]
app/controllers/traces_controller.rb
app/controllers/user_blocks_controller.rb
app/controllers/users_controller.rb
app/controllers/ways_controller.rb [new file with mode: 0644]
app/helpers/application_helper.rb
app/helpers/browse_helper.rb
app/helpers/browse_tags_helper.rb
app/helpers/changesets_helper.rb
app/helpers/geocoder_helper.rb
app/helpers/user_helper.rb
app/mailers/user_mailer.rb
app/models/concerns/consistency_validations.rb
app/models/node.rb
app/models/old_node.rb
app/models/old_relation.rb
app/models/old_way.rb
app/models/redaction.rb
app/models/relation.rb
app/models/user.rb
app/models/user_block.rb
app/models/user_token.rb [deleted file]
app/models/way.rb
app/views/api/changesets/index.json.jbuilder [moved from app/views/api/changesets/changesets.json.jbuilder with 100% similarity]
app/views/api/changesets/index.xml.builder [moved from app/views/api/changesets/changesets.xml.builder with 100% similarity]
app/views/api/changesets/show.json.jbuilder [moved from app/views/api/changesets/changeset.json.jbuilder with 100% similarity]
app/views/api/changesets/show.xml.builder [moved from app/views/api/changesets/changeset.xml.builder with 100% similarity]
app/views/api/old_nodes/show.json.jbuilder [moved from app/views/api/old_nodes/version.json.jbuilder with 100% similarity]
app/views/api/old_nodes/show.xml.builder [moved from app/views/api/old_nodes/version.xml.builder with 100% similarity]
app/views/api/old_relations/show.json.jbuilder [moved from app/views/api/old_relations/version.json.jbuilder with 100% similarity]
app/views/api/old_relations/show.xml.builder [moved from app/views/api/old_relations/version.xml.builder with 100% similarity]
app/views/api/old_ways/show.json.jbuilder [moved from app/views/api/old_ways/version.json.jbuilder with 100% similarity]
app/views/api/old_ways/show.xml.builder [moved from app/views/api/old_ways/version.xml.builder with 100% similarity]
app/views/browse/_containing_relation.html.erb
app/views/browse/_node.html.erb
app/views/browse/_relation.html.erb
app/views/browse/_relation_member.html.erb
app/views/browse/_tag.html.erb
app/views/browse/_tag_details.html.erb
app/views/browse/_version_actions.erb
app/views/browse/_way.html.erb
app/views/browse/feature.html.erb
app/views/browse/history.html.erb
app/views/changeset_comments/_comment.rss.builder [new file with mode: 0644]
app/views/changeset_comments/_comments.rss.builder [deleted file]
app/views/changeset_comments/index.rss.builder
app/views/changesets/_heading.html.erb
app/views/changesets/history.html.erb
app/views/changesets/show.html.erb
app/views/dashboards/_contact.html.erb
app/views/dashboards/_popup.html.erb
app/views/dashboards/show.html.erb
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/_diary_entry_heading.html.erb
app/views/diary_entries/_form.html.erb
app/views/diary_entries/_location.html.erb
app/views/diary_entries/comments.html.erb
app/views/diary_entries/show.html.erb
app/views/diary_entries/subscribe.html.erb
app/views/diary_entries/unsubscribe.html.erb
app/views/issues/_comments.html.erb
app/views/issues/_reports.html.erb
app/views/issues/index.html.erb
app/views/issues/show.html.erb
app/views/layouts/_content.html.erb
app/views/layouts/_head.html.erb
app/views/layouts/_header.html.erb
app/views/layouts/_meta.html.erb
app/views/layouts/_search.html.erb
app/views/layouts/map.html.erb
app/views/messages/_inbox_count.html.erb [deleted file]
app/views/messages/_message_summary.html.erb
app/views/messages/_messages_table.html.erb
app/views/messages/_muted_count.html.erb [deleted file]
app/views/messages/_outbox_count.html.erb [deleted file]
app/views/messages/_sent_message_summary.html.erb
app/views/messages/destroy.json.jbuilder [deleted file]
app/views/messages/inbox.html.erb
app/views/messages/mark.json.jbuilder [deleted file]
app/views/messages/muted.html.erb
app/views/messages/new.html.erb
app/views/messages/outbox.html.erb
app/views/messages/show.html.erb
app/views/notes/index.html.erb
app/views/oauth/authorize.html.erb
app/views/profiles/edit.html.erb
app/views/redactions/show.html.erb
app/views/sessions/new.html.erb
app/views/shared/_richtext_field.html.erb
app/views/site/about.html.erb
app/views/site/export.html.erb
app/views/traces/_description.html.erb
app/views/traces/_trace.html.erb
app/views/traces/edit.html.erb
app/views/traces/georss.rss.builder
app/views/traces/index.html.erb
app/views/traces/show.html.erb
app/views/user_blocks/_block.html.erb
app/views/user_blocks/_blocks.html.erb
app/views/user_blocks/_navigation.html.erb [new file with mode: 0644]
app/views/user_blocks/blocks_by.html.erb
app/views/user_blocks/blocks_on.html.erb
app/views/user_blocks/edit.html.erb
app/views/user_blocks/index.html.erb
app/views/user_blocks/new.html.erb
app/views/user_blocks/revoke.html.erb
app/views/user_blocks/revoke_all.html.erb
app/views/user_blocks/show.html.erb
app/views/user_mutes/index.html.erb
app/views/users/_user.html.erb
app/views/users/blocked.html.erb
app/views/users/index.html.erb
app/views/users/show.html.erb
app/views/users/terms.html.erb
config/eslint.js [new file with mode: 0644]
config/eslint.json [deleted file]
config/locales/af.yml
config/locales/aln.yml
config/locales/ar.yml
config/locales/arz.yml
config/locales/ast.yml
config/locales/az.yml
config/locales/ba.yml
config/locales/be-Tarask.yml
config/locales/be.yml
config/locales/bg.yml
config/locales/bn.yml
config/locales/br.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cs.yml
config/locales/cy.yml
config/locales/da.yml
config/locales/de.yml
config/locales/diq.yml
config/locales/dsb.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/et.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fit.yml
config/locales/fr.yml
config/locales/fur.yml
config/locales/fy.yml
config/locales/ga.yml
config/locales/gcf.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/gsw.yml
config/locales/he.yml
config/locales/hi.yml
config/locales/hr.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/id.yml
config/locales/is.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ka.yml
config/locales/kab.yml
config/locales/kk-cyrl.yml
config/locales/km.yml
config/locales/kn.yml
config/locales/ko.yml
config/locales/ksh.yml
config/locales/ku-Latn.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mo.yml
config/locales/mr.yml
config/locales/ms.yml
config/locales/my.yml
config/locales/nb.yml
config/locales/nds.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/nn.yml
config/locales/nqo.yml
config/locales/oc.yml
config/locales/pa.yml
config/locales/pl.yml
config/locales/pnb.yml
config/locales/ps.yml
config/locales/pt-PT.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sat.yml
config/locales/sc.yml
config/locales/scn.yml
config/locales/sco.yml
config/locales/sh.yml
config/locales/sk.yml
config/locales/skr-arab.yml
config/locales/sl.yml
config/locales/sq.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/ta.yml
config/locales/te.yml
config/locales/th.yml
config/locales/tl.yml
config/locales/tr.yml
config/locales/tt.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/xmf.yml
config/locales/yi.yml
config/locales/zh-CN.yml
config/locales/zh-HK.yml
config/locales/zh-TW.yml
config/routes.rb
db/migrate/20240228205723_drop_user_tokens.rb [new file with mode: 0644]
db/migrate/20240307180830_add_check_constraint_to_redaction_title_and_description.rb [new file with mode: 0644]
db/migrate/20240307181018_validate_and_modify_redaction_title_and_description.rb [new file with mode: 0644]
db/migrate/20240405083825_add_creator_index_to_user_blocks.rb [new file with mode: 0644]
db/structure.sql
lib/diff_reader.rb
lib/tasks/eslint.rake
package.json
script/cleanup
test/application_system_test_case.rb
test/controllers/api/changesets_controller_test.rb
test/controllers/api/nodes_controller_test.rb
test/controllers/api/notes_controller_test.rb
test/controllers/api/old_nodes_controller_test.rb
test/controllers/api/old_relations_controller_test.rb
test/controllers/api/old_ways_controller_test.rb
test/controllers/api/relations_controller_test.rb
test/controllers/api/ways_controller_test.rb
test/controllers/browse_controller_test.rb
test/controllers/changesets_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/controllers/friendships_controller_test.rb
test/controllers/messages_controller_test.rb
test/controllers/nodes_controller_test.rb [new file with mode: 0644]
test/controllers/notes_controller_test.rb
test/controllers/oauth_clients_controller_test.rb
test/controllers/old_nodes_controller_test.rb
test/controllers/old_relations_controller_test.rb
test/controllers/old_ways_controller_test.rb
test/controllers/redactions_controller_test.rb
test/controllers/relations_controller_test.rb [new file with mode: 0644]
test/controllers/site_controller_test.rb
test/controllers/traces/icons_controller_test.rb [new file with mode: 0644]
test/controllers/traces/pictures_controller_test.rb [new file with mode: 0644]
test/controllers/traces_controller_test.rb
test/controllers/user_blocks_controller_test.rb
test/controllers/user_mutes_controller_test.rb
test/controllers/user_roles_controller_test.rb
test/controllers/users_controller_test.rb
test/controllers/ways_controller_test.rb [new file with mode: 0644]
test/factories/user_blocks.rb
test/helpers/application_helper_test.rb
test/helpers/user_helper_test.rb
test/mailers/user_mailer_test.rb
test/models/node_test.rb
test/models/redaction_test.rb
test/models/relation_test.rb
test/models/user_token_test.rb [deleted file]
test/models/way_test.rb
test/system/messages_test.rb
test/system/user_email_change_test.rb
yarn.lock

diff --git a/Gemfile b/Gemfile
index 0b7e25ec99cdffb9750d1b5160c5d868410917a0..13daf82676bb95bb735ba4daee79cf5f1a7f6cc1 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -2,6 +2,7 @@ source "https://rubygems.org"
 
 # Require rails
 gem "rails", "~> 7.1.0"
+gem "turbo-rails"
 
 # Require json for multi_json
 gem "json"
index d57b4c5e5cb4f15b9ec3484c4589828c93d00b55..f3e39e829b05a57e1749b4075761c3ee43f0e535 100644 (file)
@@ -65,7 +65,7 @@ GEM
       activemodel (= 7.1.3.2)
       activesupport (= 7.1.3.2)
       timeout (>= 0.4.0)
-    activerecord-import (1.5.1)
+    activerecord-import (1.6.0)
       activerecord (>= 4.2)
     activestorage (7.1.3.2)
       actionpack (= 7.1.3.2)
@@ -95,16 +95,16 @@ GEM
     autoprefixer-rails (10.4.16.0)
       execjs (~> 2)
     aws-eventstream (1.3.0)
-    aws-partitions (1.895.0)
-    aws-sdk-core (3.191.3)
+    aws-partitions (1.910.0)
+    aws-sdk-core (3.191.6)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.77.0)
+    aws-sdk-kms (1.78.0)
       aws-sdk-core (~> 3, >= 3.191.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.143.0)
+    aws-sdk-s3 (1.146.1)
       aws-sdk-core (~> 3, >= 3.191.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.8)
@@ -115,16 +115,16 @@ GEM
       erubi (>= 1.0.0)
       rack (>= 0.9.0)
       rouge (>= 1.0.0)
-    better_html (2.0.2)
+    better_html (2.1.1)
       actionview (>= 6.0)
       activesupport (>= 6.0)
       ast (~> 2.0)
       erubi (~> 1.4)
       parser (>= 2.4)
       smart_properties
-    bigdecimal (3.1.6)
-    binding_of_caller (1.0.0)
-      debug_inspector (>= 0.0.1)
+    bigdecimal (3.1.7)
+    binding_of_caller (1.0.1)
+      debug_inspector (>= 1.2.0)
     bootsnap (1.18.3)
       msgpack (~> 1.2)
     bootstrap (5.3.2)
@@ -153,7 +153,7 @@ GEM
       regexp_parser (>= 1.5, < 3.0)
       xpath (~> 3.2)
     concurrent-ruby (1.2.3)
-    config (5.3.0)
+    config (5.4.0)
       deep_merge (~> 1.2, >= 1.2.1)
     connection_pool (2.4.1)
     crack (1.0.0)
@@ -239,8 +239,8 @@ GEM
     faraday-net_http (3.1.0)
       net-http
     ffi (1.16.3)
-    ffi-compiler (1.0.1)
-      ffi (>= 1.0.0)
+    ffi-compiler (1.3.2)
+      ffi (>= 1.15.5)
       rake
     ffi-libarchive (1.1.14)
       ffi (~> 1.0)
@@ -258,7 +258,7 @@ GEM
     highline (3.0.1)
     htmlentities (4.3.4)
     http_accept_language (2.1.1)
-    i18n (1.14.1)
+    i18n (1.14.4)
       concurrent-ruby (~> 1.0)
     i18n-js (3.9.2)
       i18n (>= 0.6.6)
@@ -289,7 +289,7 @@ GEM
     image_size (3.4.0)
     in_threads (1.6.0)
     io-console (0.7.2)
-    irb (1.11.2)
+    irb (1.12.0)
       rdoc
       reline (>= 0.4.2)
     jbuilder (2.11.5)
@@ -300,15 +300,15 @@ GEM
       rails-dom-testing (>= 1, < 3)
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
-    json (2.7.1)
+    json (2.7.2)
     jwt (2.8.1)
       base64
     kgio (2.11.4)
     kramdown (2.4.0)
       rexml
     language_server-protocol (3.17.0.3)
-    libv8-node (18.16.0.0)
-    libxml-ruby (5.0.2)
+    libv8-node (18.19.0.0)
+    libxml-ruby (5.0.3)
     listen (3.9.0)
       rb-fsevent (~> 0.10, >= 0.10.3)
       rb-inotify (~> 0.9, >= 0.9.10)
@@ -329,9 +329,9 @@ GEM
     mini_magick (4.12.0)
     mini_mime (1.1.5)
     mini_portile2 (2.8.5)
-    mini_racer (0.8.0)
-      libv8-node (~> 18.16.0.0)
-    minitest (5.22.2)
+    mini_racer (0.9.0)
+      libv8-node (~> 18.19.0.0)
+    minitest (5.22.3)
     minitest-focus (1.4.0)
       minitest (>= 4, < 6)
     msgpack (1.7.2)
@@ -347,10 +347,10 @@ GEM
       net-protocol
     net-protocol (0.2.2)
       timeout
-    net-smtp (0.4.0.1)
+    net-smtp (0.5.0)
       net-protocol
-    nio4r (2.7.0)
-    nokogiri (1.16.2)
+    nio4r (2.7.1)
+    nokogiri (1.16.3)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     oauth (0.4.7)
@@ -375,11 +375,11 @@ GEM
     omniauth-github (2.0.1)
       omniauth (~> 2.0)
       omniauth-oauth2 (~> 1.8)
-    omniauth-google-oauth2 (1.1.1)
+    omniauth-google-oauth2 (1.1.2)
       jwt (>= 2.0)
-      oauth2 (~> 2.0.6)
+      oauth2 (~> 2.0)
       omniauth (~> 2.0)
-      omniauth-oauth2 (~> 1.8.0)
+      omniauth-oauth2 (~> 1.8)
     omniauth-mediawiki (0.0.4)
       jwt (~> 2.0)
       omniauth-oauth (~> 1.0)
@@ -409,12 +409,12 @@ GEM
     progress (3.6.0)
     psych (5.1.2)
       stringio
-    public_suffix (5.0.4)
+    public_suffix (5.0.5)
     puma (5.6.8)
       nio4r (~> 2.0)
     quad_tile (1.0.1)
     racc (1.7.3)
-    rack (2.2.8.1)
+    rack (2.2.9)
     rack-cors (2.0.2)
       rack (>= 2.0.0)
     rack-openid (1.4.2)
@@ -456,7 +456,7 @@ GEM
     rails-html-sanitizer (1.6.0)
       loofah (~> 2.21)
       nokogiri (~> 1.14)
-    rails-i18n (7.0.8)
+    rails-i18n (7.0.9)
       i18n (>= 0.7, < 2)
       railties (>= 6.0.0, < 8)
     railties (7.1.3.2)
@@ -468,24 +468,24 @@ GEM
       thor (~> 1.0, >= 1.2.2)
       zeitwerk (~> 2.6)
     rainbow (3.1.1)
-    rake (13.1.0)
+    rake (13.2.1)
     rb-fsevent (0.11.2)
     rb-inotify (0.10.1)
       ffi (~> 1.0)
-    rdoc (6.6.2)
+    rdoc (6.6.3.1)
       psych (>= 4.0.0)
     regexp_parser (2.9.0)
-    reline (0.4.3)
+    reline (0.5.1)
       io-console (~> 0.5)
     request_store (1.6.0)
       rack (>= 1.4)
     rexml (3.2.6)
     rinku (2.0.6)
     rotp (6.3.0)
-    rouge (4.2.0)
+    rouge (4.2.1)
     rtlcss (0.2.1)
       mini_racer (>= 0.6.3)
-    rubocop (1.61.0)
+    rubocop (1.63.0)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
@@ -493,22 +493,22 @@ GEM
       rainbow (>= 2.2.2, < 4.0)
       regexp_parser (>= 1.8, < 3.0)
       rexml (>= 3.2.5, < 4.0)
-      rubocop-ast (>= 1.30.0, < 2.0)
+      rubocop-ast (>= 1.31.1, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 2.4.0, < 3.0)
-    rubocop-ast (1.31.1)
+    rubocop-ast (1.31.2)
       parser (>= 3.3.0.4)
     rubocop-capybara (2.20.0)
       rubocop (~> 1.41)
     rubocop-factory_bot (2.25.1)
       rubocop (~> 1.41)
-    rubocop-minitest (0.34.5)
-      rubocop (>= 1.39, < 2.0)
-      rubocop-ast (>= 1.30.0, < 2.0)
-    rubocop-performance (1.20.2)
+    rubocop-minitest (0.35.0)
+      rubocop (>= 1.61, < 2.0)
+      rubocop-ast (>= 1.31.1, < 2.0)
+    rubocop-performance (1.21.0)
       rubocop (>= 1.48.1, < 2.0)
-      rubocop-ast (>= 1.30.0, < 2.0)
-    rubocop-rails (2.24.0)
+      rubocop-ast (>= 1.31.1, < 2.0)
+    rubocop-rails (2.24.1)
       activesupport (>= 4.2.0)
       rack (>= 1.1)
       rubocop (>= 1.33.0, < 2.0)
@@ -527,7 +527,7 @@ GEM
       google-protobuf (~> 3.23)
       rake (>= 13.0.0)
     secure_headers (6.5.0)
-    selenium-webdriver (4.18.1)
+    selenium-webdriver (4.19.0)
       base64 (~> 0.2)
       rexml (~> 3.2, >= 3.2.5)
       rubyzip (>= 1.2.2, < 3.0)
@@ -554,15 +554,19 @@ GEM
       activesupport (>= 5.2)
       sprockets (>= 3.0.0)
     stringio (3.1.0)
-    strong_migrations (1.7.0)
+    strong_migrations (1.8.0)
       activerecord (>= 5.2)
     terminal-table (3.0.2)
       unicode-display_width (>= 1.1.1, < 3)
-    terser (1.2.0)
+    terser (1.2.2)
       execjs (>= 0.3.0, < 3)
     thor (1.3.1)
     tilt (2.3.0)
     timeout (0.4.1)
+    turbo-rails (2.0.5)
+      actionpack (>= 6.0.0)
+      activejob (>= 6.0.0)
+      railties (>= 6.0.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
     unicode-display_width (2.5.0)
@@ -570,7 +574,7 @@ GEM
     validates_email_format_of (1.7.2)
       i18n
     vendorer (0.2.0)
-    version_gem (1.1.3)
+    version_gem (1.1.4)
     webmock (3.23.0)
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
@@ -680,6 +684,7 @@ DEPENDENCIES
   sprockets-exporters_pack
   strong_migrations
   terser
+  turbo-rails
   unicode-display_width
   validates_email_format_of (>= 1.5.1)
   vendorer
index ef4c0a778dc487dcadf7a5b014340599869d2c7d..3aba63c330b080bdb5b23ab9088499929ab45a86 100644 (file)
@@ -4,10 +4,9 @@ class Ability
   include CanCan::Ability
 
   def initialize(user)
-    can [:relation, :relation_history, :way, :way_history, :node, :node_history, :query], :browse
-    can [:show], OldNode
-    can [:show], OldWay
-    can [:show], OldRelation
+    can :query, :browse
+    can :show, [Node, Way, Relation]
+    can [:index, :show], [OldNode, OldWay, OldRelation]
     can [:show, :new], Note
     can :search, :direction
     can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :communities, :preview, :copyright, :key, :id], :site
@@ -24,7 +23,7 @@ class Ability
       can [:new, :create, :edit, :update], :password
       can [:index, :show], Redaction
       can [:new, :create, :destroy], :session
-      can [:index, :show, :data, :georss, :picture, :icon], Trace
+      can [:index, :show, :data, :georss], Trace
       can [:terms, :new, :create, :save, :suspended, :show, :auth_success, :auth_failure], User
       can [:index, :show, :blocks_on, :blocks_by], UserBlock
     end
index 0eae46f824294aab6a703987cc80a3d2091c9768..96ed9b080fa3b79f4692aab8c52c21aa1c4efe5d 100644 (file)
@@ -10,16 +10,14 @@ class ApiAbility
     can :show, :version
 
     if Settings.status != "database_offline"
-      can [:show, :download, :query], Changeset
+      can [:index, :show, :download], Changeset
       can [:index, :create, :feed, :show, :search], Note
       can :index, Tracepoint
       can [:index, :show], User
       can [:index, :show], Node
       can [:index, :show, :full, :ways_for_node], Way
       can [:index, :show, :full, :relations_for_node, :relations_for_way, :relations_for_relation], Relation
-      can [:history, :version], OldNode
-      can [:history, :version], OldWay
-      can [:history, :version], OldRelation
+      can [:history, :show], [OldNode, OldWay, OldRelation]
       can [:show], UserBlock
 
       if user&.active?
@@ -31,20 +29,14 @@ class ApiAbility
         if user.terms_agreed?
           can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset
           can :create, ChangesetComment
-          can [:create, :update, :delete], Node
-          can [:create, :update, :delete], Way
-          can [:create, :update, :delete], Relation
+          can [:create, :update, :delete], [Node, Way, Relation]
         end
 
         if user.moderator?
           can [:destroy, :restore], ChangesetComment
           can :destroy, Note
 
-          if user.terms_agreed?
-            can :redact, OldNode
-            can :redact, OldWay
-            can :redact, OldRelation
-          end
+          can :redact, [OldNode, OldWay, OldRelation] if user.terms_agreed?
         end
       end
     end
index 95d7ab9ab92d2145b90f11373a69416aacc9f959..f27dd2e63a515d0a0bf51571b6a49d6a5032c954 100644 (file)
@@ -23,19 +23,13 @@ class ApiCapability
         if user.terms_agreed?
           can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset if scope?(token, :write_api)
           can :create, ChangesetComment if scope?(token, :write_api)
-          can [:create, :update, :delete], Node if scope?(token, :write_api)
-          can [:create, :update, :delete], Way if scope?(token, :write_api)
-          can [:create, :update, :delete], Relation if scope?(token, :write_api)
+          can [:create, :update, :delete], [Node, Way, Relation] if scope?(token, :write_api)
         end
 
         if user.moderator?
           can [:destroy, :restore], ChangesetComment if scope?(token, :write_api)
           can :destroy, Note if scope?(token, :write_notes)
-          if user&.terms_agreed?
-            can :redact, OldNode if scope?(token, :write_api) || scope?(token, :write_redactions)
-            can :redact, OldWay if scope?(token, :write_api) || scope?(token, :write_redactions)
-            can :redact, OldRelation if scope?(token, :write_api) || scope?(token, :write_redactions)
-          end
+          can :redact, [OldNode, OldWay, OldRelation] if user&.terms_agreed? && (scope?(token, :write_api) || scope?(token, :write_redactions))
         end
       end
     end
diff --git a/app/assets/images/avatar.svg b/app/assets/images/avatar.svg
new file mode 100644 (file)
index 0000000..46d761b
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+  <path
+    d="m 50,11 c -8,0 -12,5 -14,9 -2,4 -2,13 -1,19 0.98639,5.918364 3.9723,8.164584 5,12 0,0 0,3 0,4 l -14,3 c -9.47814,2.03103 -13.23303,8.02944 -14,18 l -1,13 78,0 -1,-13 c -0.76697,-9.97056 -4.40411,-16.62916 -14,-18 L 60,55 l -0,-4 c 0,-4 4.01361,-6.081636 5,-12 1,-6 1,-15 -1,-19 -2.0728,-4.145608 -6,-9 -14,-9 z"
+    fill="#dadaff" />
+</svg>
diff --git a/app/assets/images/avatars.svg b/app/assets/images/avatars.svg
deleted file mode 100644 (file)
index 85288b2..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   id="svg54671"
-   version="1.1"
-   inkscape:version="0.48.2 r9819"
-   width="99.999969"
-   height="155"
-   sodipodi:docname="new-user-icon.svg">
-  <metadata
-     id="metadata54677">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs54675">
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath55579">
-      <rect
-         y="701"
-         x="157"
-         height="23.000002"
-         width="49.999985"
-         id="rect55581"
-         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-    </clipPath>
-  </defs>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1280"
-     inkscape:window-height="756"
-     id="namedview54673"
-     showgrid="true"
-     inkscape:zoom="4.3320463"
-     inkscape:cx="28.49301"
-     inkscape:cy="111.46394"
-     inkscape:window-x="11"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg54671"
-     inkscape:object-nodes="true"
-     inkscape:object-paths="true"
-     showguides="false"
-     inkscape:guide-bbox="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid54700"
-       empspacing="5"
-       visible="true"
-       enabled="true"
-       snapvisiblegridlinesonly="true" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="1000,117.39694"
-       id="guide54708" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="830,101"
-       id="guide55315" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="815,99.000004"
-       id="guide55317" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="845,99.000004"
-       id="guide55319" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="832,88.000004"
-       id="guide55321" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="805,67.000004"
-       id="guide55323" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="855,73.000004"
-       id="guide55325" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="990,95.000004"
-       id="guide55476" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="1020,73.000004"
-       id="guide55478" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="970,74.000004"
-       id="guide55480" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="1030,76.000004"
-       id="guide55482" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="978,45.000004"
-       id="guide55484" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="960,64.000004"
-       id="guide55486" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="1040,63.000004"
-       id="guide55488" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="980,81.000004"
-       id="guide55490" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="1010,92.518344"
-       id="guide55492" />
-  </sodipodi:namedview>
-  <g
-     id="g55329"
-     transform="translate(-785,-42)">
-    <rect
-       y="42"
-       x="785"
-       height="100.00001"
-       width="99.999969"
-       id="rect54702"
-       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-    <path
-       sodipodi:nodetypes="sssscssccsscssss"
-       inkscape:connector-curvature="0"
-       id="path54704"
-       d="m 834.99998,53.000004 c -8,0 -12,5 -14,9 -2,4 -2,13 -1,19 0.98639,5.918364 3.9723,8.164584 5,12 0,0 0,3 0,4 l -14,2.999996 c -9.47814,2.03103 -13.23303,8.02944 -14,18 l -1,13 78,0 -1,-13 c -0.76697,-9.97056 -4.40411,-16.62916 -14,-18 L 845,97 l -2e-5,-3.999996 c -2e-5,-4.000002 4.01361,-6.081636 5,-12 1,-6 1,-15 -1,-19 -2.0728,-4.145608 -6,-9 -14,-9 z"
-       style="color:#000000;fill:#dadaff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-  </g>
-  <g
-     id="g3048"
-     transform="translate(-157,-258)">
-    <g
-       transform="matrix(0.5,0,0,0.5,-236.5,342)"
-       id="g55329-6">
-      <rect
-         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-         id="rect54702-3"
-         width="99.999969"
-         height="100.00001"
-         x="787"
-         y="42" />
-    </g>
-    <path
-       style="color:#000000;fill:#dadaff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-       d="m 181.99999,368.5 c -4,0 -6.5,2.5 -7.5,4.5 -1,2 -1,7 -0.5,10 0.4932,2.95918 2,3.43845 2,5.5 0,0.5 0,1 0,1.5 0,0.4714 -1,1 -1,1 l -5,1.5 c -4.64225,1.39267 -6.58477,4.01726 -7,9 l -0.5,6 39,0 -0.5,-6 c -0.41523,-4.98274 -2.35775,-7.60733 -7,-9 l -5,-1.5 c 0,0 -1,-0.5286 -1,-1 0,-0.5 0,-1 0,-1.5 0,-2 1.5068,-2.54082 2,-5.5 0.5,-3 0.5,-8 -0.5,-10 -1.0364,-2.07281 -3.5,-4.5 -7.5,-4.5 z"
-       id="path54704-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ssssscssccsscsssss" />
-  </g>
-</svg>
index fdc0cbd76383cb999464247d3ce78ca2a3d8b22a..1f739764834586f6940428a24b87510d29425deb 100644 (file)
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#575352;}.b{fill:#f25022;}.c{fill:#7fba00;}.d{fill:#00a4ef;}.e{fill:#ffb900;}</style></defs><rect class="a" width="36" height="36"/><rect class="b" x="4" y="3.99" width="13.31" height="13.31"/><rect class="c" x="18.69" y="3.99" width="13.31" height="13.31"/><rect class="d" x="4" y="18.69" width="13.31" height="13.3"/><rect class="e" x="18.69" y="18.69" width="13.31" height="13.3"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="21" height="21" viewBox="0 0 21 21"><title>MS-SymbolLockup</title><rect x="1" y="1" width="9" height="9" fill="#f25022"/><rect x="1" y="11" width="9" height="9" fill="#00a4ef"/><rect x="11" y="1" width="9" height="9" fill="#7fba00"/><rect x="11" y="11" width="9" height="9" fill="#ffb900"/></svg>
\ No newline at end of file
index 0bfff869ebcc87186c1aec12c4a0ff75949a923f..c71c0652dad9b652dc34caa44e9392d8013a5f91 100644 (file)
@@ -69,6 +69,10 @@ window.updateLinks = function (loc, zoom, layers, object) {
 };
 
 $(document).ready(function () {
+  // NB: Turns Turbo Drive off by default. Turbo Drive must be opt-in on a per-link and per-form basis
+  // See https://turbo.hotwired.dev/reference/drive#turbo.session.drive
+  Turbo.session.drive = false;
+
   var headerWidth = 0,
       compactWidth = 0;
 
@@ -108,6 +112,7 @@ $(document).ready(function () {
     updateHeader();
 
     $(window).resize(updateHeader);
+    $(document).on("turbo:render", updateHeader);
   }, 0);
 
   $("#menu-icon").on("click", function (e) {
index 088d0f9d3ea0fcf71cd36f10dd44090f8df35745..f89ae0c3d96ff05ae496f8e309c6cd12c2544dfd 100644 (file)
@@ -3,7 +3,7 @@ L.OSM.key = function (options) {
 
   control.onAddPane = function (map, button, $ui) {
     var $section = $("<div>")
-      .attr("class", "section")
+      .attr("class", "p-3")
       .appendTo($ui);
 
     $ui
index 27311f7c1441c3d22acde08cbcc526702b0e7e4e..1a34b05c24f80522d6d323e123d31a691c58845c 100644 (file)
@@ -5,26 +5,30 @@ L.OSM.layers = function (options) {
     var layers = options.layers;
 
     var baseSection = $("<div>")
-      .attr("class", "section base-layers")
+      .attr("class", "base-layers d-grid gap-3 p-3 border-bottom border-secondary-subtle")
       .appendTo($ui);
 
-    var baseLayers = $("<ul class='list-unstyled mb-0'>")
-      .appendTo(baseSection);
+    layers.forEach(function (layer, i) {
+      var id = "map-ui-layer-" + i;
 
-    layers.forEach(function (layer) {
-      var item = $("<li>")
-        .attr("class", "rounded-3")
-        .appendTo(baseLayers);
+      var buttonContainer = $("<div class='position-relative'>")
+        .appendTo(baseSection);
 
-      if (map.hasLayer(layer)) {
-        item.addClass("active");
-      }
+      var mapContainer = $("<div class='position-absolute top-0 start-0 bottom-0 end-0 z-0'>")
+        .appendTo(buttonContainer);
 
-      var div = $("<div>")
-        .appendTo(item);
+      var input = $("<input type='radio' class='btn-check' name='layer'>")
+        .prop("id", id)
+        .prop("checked", map.hasLayer(layer))
+        .appendTo(buttonContainer);
+
+      var item = $("<label class='btn btn-outline-primary border-4 rounded-3 bg-transparent position-absolute top-0 start-0 bottom-0 end-0 m-n1 overflow-hidden'>")
+        .prop("for", id)
+        .append($("<span class='badge position-absolute top-0 start-0 rounded-top-0 rounded-start-0 py-1 px-2 bg-body bg-opacity-75 text-body text-wrap text-start fs-6 lh-base'>").append(layer.options.name))
+        .appendTo(buttonContainer);
 
       map.whenReady(function () {
-        var miniMap = L.map(div[0], { attributionControl: false, zoomControl: false, keyboard: false })
+        var miniMap = L.map(mapContainer[0], { attributionControl: false, zoomControl: false, keyboard: false })
           .addLayer(new layer.constructor({ apikey: layer.options.apikey }));
 
         miniMap.dragging.disable();
@@ -55,17 +59,7 @@ L.OSM.layers = function (options) {
         }
       });
 
-      var label = $("<label>")
-        .appendTo(item);
-
-      var input = $("<input>")
-        .attr("type", "radio")
-        .prop("checked", map.hasLayer(layer))
-        .appendTo(label);
-
-      label.append(layer.options.name);
-
-      item.on("click", function () {
+      input.on("click", function () {
         layers.forEach(function (other) {
           if (other === layer) {
             map.addLayer(other);
@@ -79,14 +73,13 @@ L.OSM.layers = function (options) {
       item.on("dblclick", toggle);
 
       map.on("layeradd layerremove", function () {
-        item.toggleClass("active", map.hasLayer(layer));
         input.prop("checked", map.hasLayer(layer));
       });
     });
 
     if (OSM.STATUS !== "api_offline" && OSM.STATUS !== "database_offline") {
       var overlaySection = $("<div>")
-        .attr("class", "section overlay-layers")
+        .attr("class", "overlay-layers p-3")
         .appendTo($ui);
 
       $("<p>")
index eb351fa026ac6aa3f85f66461155e2ade36e4dc1..69db10ad78ae80069a8c64f8d1c7329942e151f9 100644 (file)
@@ -10,7 +10,7 @@ L.OSM.share = function (options) {
     // Link / Embed
 
     var $linkSection = $("<div>")
-      .attr("class", "section share-link")
+      .attr("class", "share-link p-3 border-bottom border-secondary-subtle")
       .appendTo($ui);
 
     $("<h4>")
@@ -104,7 +104,7 @@ L.OSM.share = function (options) {
     // Geo URI
 
     var $geoUriSection = $("<div>")
-      .attr("class", "section share-geo-uri")
+      .attr("class", "share-geo-uri p-3 border-bottom border-secondary-subtle")
       .appendTo($ui);
 
     $("<h4>")
@@ -119,7 +119,7 @@ L.OSM.share = function (options) {
     // Image
 
     var $imageSection = $("<div>")
-      .attr("class", "section share-image")
+      .attr("class", "share-image p-3")
       .appendTo($ui);
 
     $("<h4>")
index cc86da05ea38365abaaa39a75f7dd25f94007dc6..eef06457b3f8e70e43eaa87d07ef55d6eab1f351 100644 (file)
@@ -1,36 +1,16 @@
 $(document).ready(function () {
-  $(".inbox-mark-unread").on("ajax:success", function (event, data) {
-    updateHtml(data);
-    updateReadState(this, false);
+  $(".messages-table .destroy-message").on("turbo:submit-end", function (event) {
+    if (event.detail.success) {
+      event.target.dataset.isDestroyed = true;
+    }
   });
 
-  $(".inbox-mark-read").on("ajax:success", function (event, data) {
-    updateHtml(data);
-    updateReadState(this, true);
+  $(".messages-table .message-summary").on("turbo:before-morph-element", function (event) {
+    if ($(event.target).find("[data-is-destroyed]").length > 0) {
+      event.preventDefault(); // NB: prevent Turbo from morhping/removing this element
+      $(event.target).fadeOut(800, "linear", function () {
+        $(this).remove();
+      });
+    }
   });
-
-  $(".inbox-destroy").on("ajax:success", function (event, data) {
-    updateHtml(data);
-
-    $(this).closest("tr").fadeOut(800, "linear", function () {
-      $(this).remove();
-    });
-  });
-
-  function updateHtml(data) {
-    $("#inboxanchor").remove();
-    $(".user-button").before(data.inboxanchor);
-
-    $("#inbox-count").replaceWith(data.inbox_count);
-    $("#outbox-count").replaceWith(data.outbox_count);
-    $("#muted-count").replaceWith(data.muted_count);
-  }
-
-  function updateReadState(target, isRead) {
-    $(target).closest("tr")
-      .toggleClass("inbox-row", isRead)
-      .toggleClass("inbox-row-unread", !isRead)
-      .find(".inbox-mark-unread").prop("hidden", !isRead).end()
-      .find(".inbox-mark-read").prop("hidden", isRead);
-  }
 });
index 35c5ba845f0d0085b135d4efead8af8f71e89fa7..1ccdc7871454547b94623c1f393e469a1c222e1f 100644 (file)
@@ -66,12 +66,6 @@ time[title] {
   color: $blue;
 }
 
-/* Rules for borders */
-/* These add additional colours to those provided by bootstrap */
-.border-grey {
-  border-color: $grey !important;
-}
-
 /* Rules for the header */
 
 #menu-icon {
@@ -87,6 +81,12 @@ time[title] {
   opacity: 0.6;
 }
 
+@include color-mode(dark) {
+  #menu-icon {
+    filter: invert(1);
+  }
+}
+
 header {
   height: $headerHeight;
   position: relative;
@@ -156,11 +156,6 @@ nav.primary {
 nav.secondary {
   .nav-link {
     padding: 0.2rem;
-    color: $darkgrey;
-  }
-
-  > ul li.current a {
-    color: darken($darkgrey, 25%);
   }
 
   #inboxanchor {
@@ -199,7 +194,6 @@ body.small-nav {
     flex-direction: column;
     height: auto;
     min-height: $headerHeight;
-    background: #fff;
 
     &.closed nav {
       display: none;
@@ -327,7 +321,6 @@ body.small-nav {
   #sidebar {
     float: left;
     width: $sidebarWidth;
-    background: #fff;
 
     #sidebar_loader {
       display: none;
@@ -389,13 +382,7 @@ body.small-nav {
     float: right;
     width: 250px;
     height: 100%;
-    background: white;
     overflow: auto;
-
-    .section {
-      border-bottom: 1px solid $grey;
-      padding: $spacer;
-    }
   }
 }
 
@@ -431,43 +418,14 @@ body.small-nav {
 }
 
 .layers-ui {
-  .base-layers {
-    .leaflet-container {
-      width: 100%;
-      height: 50px;
-      cursor: pointer;
-    }
-
-    li  {
-      overflow: hidden;
-      border-radius: 3px;
-      border: 2px solid #fff;
-      margin-bottom: 8px;
-      position: relative;
-      transition: border-color 0.08s ease-in;
+  .base-layers > * {
+    height: 56px;
 
-      label {
-        position: absolute;
-        top: 0;
-        left: 0;
-        padding: 2px 6px;
-        border-bottom-right-radius: 3px;
-        cursor: pointer;
-        font-weight: 600;
-        font-size: 16px;
-        text-stroke: 2px #fff;
-        background: rgba(255,255,255,.9);
-        z-index: 1000;
-        input[type="radio"] {
-          display: none;
-        }
-      }
-
-      &.active { border-color: darken($green, 10%); }
-      &:hover {
-        border-color: $grey;
-        &.active { border-color: darken($green, 20%); }
-      }
+    > .btn {
+      --bs-btn-border-color: var(--bs-body-bg);
+    }
+    > .btn:hover {
+      --bs-btn-border-color: var(--bs-primary-border-subtle);
     }
   }
 
@@ -582,6 +540,12 @@ div.direction {
 div.direction.i#{$i} { background-position: #{($i)*-20}px 0px; }
 }
 
+@include color-mode(dark) {
+  div.direction {
+    filter: invert(1);
+  }
+}
+
 td.distance {
     font-size: x-small;
 }
@@ -698,18 +662,15 @@ tr.turn:hover {
   }
 
   .export_boxy {
-    background: $lightgrey;
-
-    #maxlat { margin-top: -1px; }
+    > * {
+        margin: -1px;
+    }
     #minlon {
-      float: left;
-      /*rtl:ignore*/ margin-left: -1px;
+      /*rtl:ignore*/ float: left;
     }
     #maxlon {
-      float: right;
-      /*rtl:ignore*/ margin-right: -1px;
+      /*rtl:ignore*/ float: right;
     }
-    #minlat { margin-bottom: -1px; }
   }
 }
 
@@ -726,10 +687,6 @@ tr.turn:hover {
 
 /* Rules for non-map content pages */
 
-.content-heading {
-  background: $lightgrey;
-}
-
 .content-inner {
   position: relative;
   max-width: 960px;
@@ -858,8 +815,6 @@ tr.turn:hover {
 }
 
 .search_form {
-  background-color: $lightgrey;
-
   #query {
     z-index: 0;
   }
@@ -869,10 +824,6 @@ tr.turn:hover {
   }
 }
 
-.directions_form {
-  background-color: $lightgrey;
-}
-
 /* Rules for user images */
 
 img.user_image {
@@ -924,12 +875,12 @@ div.secondary-actions {
 .richtext,
 .prose {
   code {
-    background: $lightgrey;
+    background: var(--bs-secondary-bg);
     padding: 2px 3px;
   }
 
   pre {
-    background: $lightgrey;
+    background: var(--bs-secondary-bg);
     padding: 2px 3px;
     white-space: pre-wrap;
 
@@ -940,17 +891,17 @@ div.secondary-actions {
 
   img {
     padding: $lineheight;
-    background-color: $offwhite;
+    background-color: var(--bs-tertiary-bg);
     display: block;
     max-width: 100%;
     margin: auto;
   }
 
   blockquote {
-    border-left: $lineheight solid $offwhite;
+    border-left: $lineheight solid var(--bs-tertiary-bg);
     padding-left: $lineheight;
     margin: 0;
-    color: $darkgrey;
+    color: var(--bs-secondary-color);
   }
 }
 
@@ -1007,8 +958,6 @@ div.secondary-actions {
 }
 
 .site-about #content {
-  background-color: $lightgrey;
-
   .content-inner {
     max-width: 760px;
   }
@@ -1074,4 +1023,25 @@ div.secondary-actions {
   }
 }
 
+/* Rules for tabs inside secondary background sections */
+
+.bg-body-secondary .nav-tabs {
+  --bs-border-color: var(--bs-secondary-border-subtle);
+  --bs-secondary-bg: var(--bs-secondary-border-subtle);
+  margin-bottom: -1px;
+}
+
+/* Rules for traces */
+
+img.trace_image {
+  mix-blend-mode: darken;
+}
+
+@include color-mode(dark) {
+  img.trace_image {
+    filter: invert(1);
+    mix-blend-mode: lighten;
+  }
+}
+
 @import 'browse';
index e0082a26aa0cf354564bfb1e734e740b00a88f9b..e6c15a92014f8afc10fd25b7e61a2b202ee39dd7 100644 (file)
@@ -14,13 +14,10 @@ $darkgrey: #888;
 $headerHeight: 55px;
 $sidebarWidth: 350px;
 $list-highlight: #FFFFC0;
-$border: 1px solid $grey;
 
 $link-color: #24d;
 $link-hover-color: #24d;
 $link-decoration: none;
 $link-hover-decoration: underline;
 
-$table-striped-bg: $offwhite;
-
 $enable-negative-margins: true;
index bb77e1106609b2cea7b0190a61fcb160fd4032b0..756e56dccdfb706d8d6e7c4456683fcc232eb08c 100644 (file)
@@ -42,7 +42,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = changeset
-      render "api/changesets/changeset"
+      render "api/changesets/show"
 
       respond_to do |format|
         format.xml
@@ -67,7 +67,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = comment.changeset
-      render "api/changesets/changeset"
+      render "api/changesets/show"
 
       respond_to do |format|
         format.xml
@@ -92,7 +92,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = comment.changeset
-      render "api/changesets/changeset"
+      render "api/changesets/show"
 
       respond_to do |format|
         format.xml
index 8676d16d3699192698aa2e7fe37e566463a37811..616d3fdec9d5360232740ed876d17e4a30bd8bcb 100644 (file)
@@ -2,10 +2,8 @@
 
 module Api
   class ChangesetsController < ApiController
-    require "xml/libxml"
-
     before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
-    before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :subscribe, :unsubscribe]
+    before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe]
     before_action :setup_user_auth, :only => [:show]
     before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
 
@@ -20,6 +18,44 @@ module Api
     # Helper methods for checking consistency
     include ConsistencyValidations
 
+    ##
+    # query changesets by bounding box, time, user or open/closed status.
+    def index
+      raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest"
+
+      # find any bounding box
+      bbox = BoundingBox.from_bbox_params(params) if params["bbox"]
+
+      # create the conditions that the user asked for. some or all of
+      # these may be nil.
+      changesets = Changeset.all
+      changesets = conditions_bbox(changesets, bbox)
+      changesets = conditions_user(changesets, params["user"], params["display_name"])
+      changesets = conditions_time(changesets, params["time"])
+      changesets = conditions_from_to(changesets, params["from"], params["to"])
+      changesets = conditions_open(changesets, params["open"])
+      changesets = conditions_closed(changesets, params["closed"])
+      changesets = conditions_ids(changesets, params["changesets"])
+
+      # sort the changesets
+      changesets = if params[:order] == "oldest"
+                     changesets.order(:created_at => :asc)
+                   else
+                     changesets.order(:created_at => :desc)
+                   end
+
+      # limit the result
+      changesets = changesets.limit(result_limit)
+
+      # preload users, tags and comments, and render result
+      @changesets = changesets.preload(:user, :changeset_tags, :comments)
+
+      respond_to do |format|
+        format.xml
+        format.json
+      end
+    end
+
     ##
     # Return XML giving the basic info about the changeset. Does not
     # return anything about the nodes, ways and relations in the changeset.
@@ -30,7 +66,6 @@ module Api
         @comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:restore, ChangesetComment)
         @comments = @comments.includes(:author)
       end
-      render "changeset"
 
       respond_to do |format|
         format.xml
@@ -40,8 +75,6 @@ module Api
 
     # Create a changeset from XML.
     def create
-      assert_method :put
-
       cs = Changeset.from_xml(request.raw_post, :create => true)
 
       # Assume that Changeset.from_xml has thrown an exception if there is an error parsing the xml
@@ -58,8 +91,6 @@ module Api
     # marks a changeset as closed. this may be called multiple times
     # on the same changeset, so is idempotent.
     def close
-      assert_method :put
-
       changeset = Changeset.find(params[:id])
       check_changeset_consistency(changeset, current_user)
 
@@ -85,12 +116,6 @@ module Api
     # Returns: a diffResult document, as described in
     # http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6
     def upload
-      # only allow POST requests, as the upload method is most definitely
-      # not idempotent, as several uploads with placeholder IDs will have
-      # different side-effects.
-      # see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2
-      assert_method :post
-
       changeset = Changeset.find(params[:id])
       check_changeset_consistency(changeset, current_user)
 
@@ -130,13 +155,7 @@ module Api
       # almost sensible ordering available. this would be much nicer if
       # global (SVN-style) versioning were used - then that would be
       # unambiguous.
-      elements.sort! do |a, b|
-        if a.timestamp == b.timestamp
-          a.version <=> b.version
-        else
-          a.timestamp <=> b.timestamp
-        end
-      end
+      elements.sort_by! { |e| [e.timestamp, e.version] }
 
       # generate an output element for each operation. note: we avoid looking
       # at the history because it is simpler - but it would be more correct to
@@ -163,45 +182,6 @@ module Api
       end
     end
 
-    ##
-    # query changesets by bounding box, time, user or open/closed status.
-    def query
-      raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest"
-
-      # find any bounding box
-      bbox = BoundingBox.from_bbox_params(params) if params["bbox"]
-
-      # create the conditions that the user asked for. some or all of
-      # these may be nil.
-      changesets = Changeset.all
-      changesets = conditions_bbox(changesets, bbox)
-      changesets = conditions_user(changesets, params["user"], params["display_name"])
-      changesets = conditions_time(changesets, params["time"])
-      changesets = conditions_from_to(changesets, params["from"], params["to"])
-      changesets = conditions_open(changesets, params["open"])
-      changesets = conditions_closed(changesets, params["closed"])
-      changesets = conditions_ids(changesets, params["changesets"])
-
-      # sort the changesets
-      changesets = if params[:order] == "oldest"
-                     changesets.order(:created_at => :asc)
-                   else
-                     changesets.order(:created_at => :desc)
-                   end
-
-      # limit the result
-      changesets = changesets.limit(result_limit)
-
-      # preload users, tags and comments, and render result
-      @changesets = changesets.preload(:user, :changeset_tags, :comments)
-      render "changesets"
-
-      respond_to do |format|
-        format.xml
-        format.json
-      end
-    end
-
     ##
     # updates a changeset's tags. none of the changeset's attributes are
     # user-modifiable, so they will be ignored.
@@ -211,15 +191,12 @@ module Api
     #
     # after succesful update, returns the XML of the changeset.
     def update
-      # request *must* be a PUT.
-      assert_method :put
-
       @changeset = Changeset.find(params[:id])
       new_changeset = Changeset.from_xml(request.raw_post)
 
       check_changeset_consistency(@changeset, current_user)
       @changeset.update_from(new_changeset, current_user)
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml
@@ -245,7 +222,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = changeset
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml
@@ -271,7 +248,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = changeset
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml
index fb808828c80a221d794b205cd256d28f34b7af7c..dc7d04dc5792d93698aa7ddc8b899a0592485c86 100644 (file)
@@ -2,8 +2,6 @@
 
 module Api
   class NodesController < ApiController
-    require "xml/libxml"
-
     before_action :check_api_writable, :only => [:create, :update, :delete]
     before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
@@ -52,8 +50,6 @@ module Api
 
     # Create a node from XML.
     def create
-      assert_method :put
-
       node = Node.from_xml(request.raw_post, :create => true)
 
       # Assume that Node.from_xml has thrown an exception if there is an error parsing the xml
similarity index 93%
rename from app/controllers/api/old_controller.rb
rename to app/controllers/api/old_elements_controller.rb
index ceed10978d9b614dbab6fa16298189ee9b5565ea..6a468a900631953247414ecee55145745c393e62 100644 (file)
@@ -2,12 +2,10 @@
 # into one place. as it turns out, the API methods for historical
 # nodes, ways and relations are basically identical.
 module Api
-  class OldController < ApiController
-    require "xml/libxml"
-
+  class OldElementsController < ApiController
     before_action :check_api_readable
     before_action :check_api_writable, :only => [:redact]
-    before_action :setup_user_auth, :only => [:history, :version]
+    before_action :setup_user_auth, :only => [:history, :show]
     before_action :authorize, :only => [:redact]
 
     authorize_resource
@@ -38,7 +36,7 @@ module Api
       end
     end
 
-    def version
+    def show
       if @old_element.redacted? && !show_redactions?
         head :forbidden
 
index 7d0d340f7928cc38883d9cb5edb25912454b5aa3..c2831c48ba558e34b0b937f0a423d1818d571591 100644 (file)
@@ -1,5 +1,5 @@
 module Api
-  class OldNodesController < OldController
+  class OldNodesController < OldElementsController
     private
 
     def lookup_old_element
index ddc1684efbd10829efe24229e7ef62d7f3ed5b1e..4679384dd3877084ad9378a8e17b6aa75e9c606d 100644 (file)
@@ -1,5 +1,5 @@
 module Api
-  class OldRelationsController < OldController
+  class OldRelationsController < OldElementsController
     private
 
     def lookup_old_element
index 66f3ce38bbce861d3b798ccb2331e7fbab6c9dcb..0afa3059ccfce9a9ff1b350e7fbe1f5c3f41b82d 100644 (file)
@@ -1,5 +1,5 @@
 module Api
-  class OldWaysController < OldController
+  class OldWaysController < OldElementsController
     private
 
     def lookup_old_element
index e833ae8307bc48bb8898cafde4cf2bf9d3c1df63..e82ac6368a371fb43bb2bfaa6e7db071f3f0ddef 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class RelationsController < ApiController
-    require "xml/libxml"
-
     before_action :check_api_writable, :only => [:create, :update, :delete]
     before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
@@ -45,8 +43,6 @@ module Api
     end
 
     def create
-      assert_method :put
-
       relation = Relation.from_xml(request.raw_post, :create => true)
 
       # Assume that Relation.from_xml has thrown an exception if there is an error parsing the xml
index ab48a518979427aba4e676b08238c025c838fda7..6fa47095a16f9c062ba246100bea989ff7dd9ecb 100644 (file)
@@ -8,7 +8,7 @@ module Api
     authorize_resource
 
     around_action :api_call_handle_error
-    before_action :lookup_user_by_id, :only => [:show]
+    load_resource :only => :show
 
     before_action :set_request_formats, :except => [:gpx_files]
 
@@ -56,14 +56,6 @@ module Api
 
     private
 
-    ##
-    # ensure that there is a "user" instance variable
-    def lookup_user_by_id
-      @user = User.find(params[:id])
-    end
-
-    ##
-    #
     def disable_terms_redirect
       # this is necessary otherwise going to the user terms page, when
       # having not agreed already would cause an infinite redirect loop.
index 5e72cfe209db66c29e5666bc2af744722acc40b6..f8254d8027bacbd43fe8e0c6c641c78b8b04e338 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class WaysController < ApiController
-    require "xml/libxml"
-
     before_action :check_api_writable, :only => [:create, :update, :delete]
     before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
@@ -47,8 +45,6 @@ module Api
     end
 
     def create
-      assert_method :put
-
       way = Way.from_xml(request.raw_post, :create => true)
 
       # Assume that Way.from_xml has thrown an exception if there is an error parsing the xml
index 75db7f73bc757ff600bb59b0d9608c4ccdadaebd..e4e156ee85a78fd2b6b23cf29e27bbf5910ddb85 100644 (file)
@@ -112,8 +112,6 @@ class ApiController < ApplicationController
       # authenticate per-scheme
       self.current_user = if username.nil?
                             nil # no authentication provided - perhaps first connect (client should retry after 401)
-                          elsif username == "token"
-                            User.authenticate(:token => passwd) # preferred - random token for user from db, passed in basic auth
                           else
                             User.authenticate(:username => username, :password => passwd) # basic auth
                           end
@@ -166,14 +164,6 @@ class ApiController < ApplicationController
     report_error "#{e.class}: #{e.message}", :internal_server_error
   end
 
-  ##
-  # asserts that the request method is the +method+ given as a parameter
-  # or raises a suitable error. +method+ should be a symbol, e.g: :put or :get.
-  def assert_method(method)
-    ok = request.send(:"#{method.to_s.downcase}?")
-    raise OSM::APIBadMethodError, method unless ok
-  end
-
   ##
   # wrap an api call in a timeout
   def api_call_timeout(&block)
index 0a7df0994c9fc23f5c452ed2bb62dfc291b88aa6..488e6a8189cbb41c5b389f34cb9c8b48c8777783 100644 (file)
@@ -44,8 +44,6 @@ class ApplicationController < ActionController::Base
           redirect_to :controller => "users", :action => "terms", :referer => request.fullpath
         end
       end
-    elsif session[:token]
-      session[:user] = current_user.id if self.current_user = User.authenticate(:token => session[:token])
     end
 
     session[:fingerprint] = current_user.fingerprint if current_user && session[:fingerprint].nil?
index db291f6eb89a8fc5900cd8c4da953f987473c55e..a3e65a1b7bec4f2352ce11c5e72a144977dd8903 100644 (file)
@@ -6,63 +6,8 @@ class BrowseController < ApplicationController
   before_action -> { check_database_readable(:need_api => true) }
   before_action :require_oauth
   before_action :update_totp, :only => [:query]
-  before_action :require_moderator_for_unredacted_history, :only => [:relation_history, :way_history, :node_history]
   around_action :web_timeout
   authorize_resource :class => false
 
-  def relation
-    @type = "relation"
-    @feature = Relation.preload(:relation_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :relation_members => :member).find(params[:id])
-    render "feature"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
-  def relation_history
-    @type = "relation"
-    @feature = Relation.preload(:relation_tags, :old_relations => [:old_tags, { :changeset => [:changeset_tags, :user], :old_members => :member }]).find(params[:id])
-    render "history"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
-  def way
-    @type = "way"
-    @feature = Way.preload(:way_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :nodes => [:node_tags, { :ways => :way_tags }]).find(params[:id])
-    render "feature"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
-  def way_history
-    @type = "way"
-    @feature = Way.preload(:way_tags, :old_ways => [:old_tags, { :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] } }]).find(params[:id])
-    render "history"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
-  def node
-    @type = "node"
-    @feature = Node.preload(:node_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :ways => :way_tags).find(params[:id])
-    render "feature"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
-  def node_history
-    @type = "node"
-    @feature = Node.preload(:node_tags, :old_nodes => [:old_tags, { :changeset => [:changeset_tags, :user] }]).find(params[:id])
-    render "history"
-  rescue ActiveRecord::RecordNotFound
-    render :action => "not_found", :status => :not_found
-  end
-
   def query; end
-
-  private
-
-  def require_moderator_for_unredacted_history
-    deny_access(nil) if params[:show_redactions] && !current_user&.moderator?
-  end
 end
index 613a3ee2a9f919522a060361c063052c020ea879..3ea5fb64e96288551aac8169b5dfaaecc5630087 100644 (file)
@@ -4,7 +4,6 @@ class ChangesetsController < ApplicationController
   include UserMethods
 
   layout "site"
-  require "xml/libxml"
 
   before_action :authorize_web
   before_action :set_locale
@@ -16,9 +15,6 @@ class ChangesetsController < ApplicationController
 
   around_action :web_timeout
 
-  # Helper methods for checking consistency
-  include ConsistencyValidations
-
   ##
   # list non-empty changesets in reverse chronological order
   def index
diff --git a/app/controllers/concerns/pagination_methods.rb b/app/controllers/concerns/pagination_methods.rb
new file mode 100644 (file)
index 0000000..3dc9f52
--- /dev/null
@@ -0,0 +1,27 @@
+module PaginationMethods
+  extend ActiveSupport::Concern
+
+  private
+
+  ##
+  # limit selected items to one page, get ids of first item before/after the page
+  def get_page_items(items, includes: [], limit: 20)
+    id_column = "#{items.table_name}.id"
+    page_items = if params[:before]
+                   items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
+                 elsif params[:after]
+                   items.where("#{id_column} > ?", params[:after]).order(:id => :asc)
+                 else
+                   items.order(:id => :desc)
+                 end
+
+    page_items = page_items.limit(limit)
+    page_items = page_items.includes(includes)
+    page_items = page_items.sort.reverse
+
+    newer_items_id = page_items.first.id if page_items.count.positive? && items.exists?(["#{id_column} > ?", page_items.first.id])
+    older_items_id = page_items.last.id if page_items.count.positive? && items.exists?(["#{id_column} < ?", page_items.last.id])
+
+    [page_items, newer_items_id, older_items_id]
+  end
+end
index 48b8dabf2d9ec770b460d8c3f8ee025a4958c892..7bbb3a0937b538ef95abffd014c58bab7443418c 100644 (file)
@@ -15,10 +15,7 @@ class ConfirmationsController < ApplicationController
 
   def confirm
     if request.post?
-      token = params[:confirm_string]
-
-      user = User.find_by_token_for(:new_user, token) ||
-             UserToken.unexpired.find_by(:token => token)&.user
+      user = User.find_by_token_for(:new_user, params[:confirm_string])
 
       if !user
         flash[:error] = t(".unknown token")
@@ -34,7 +31,6 @@ class ConfirmationsController < ApplicationController
         flash[:notice] = gravatar_status_message(user) if gravatar_enable(user)
         user.save!
         referer = safe_referer(params[:referer]) if params[:referer]
-        UserToken.delete_by(:token => token)
 
         pending_user = session.delete(:pending_user)
 
@@ -70,10 +66,7 @@ class ConfirmationsController < ApplicationController
 
   def confirm_email
     if request.post?
-      token = params[:confirm_string]
-
-      self.current_user = User.find_by_token_for(:new_email, token) ||
-                          UserToken.unexpired.find_by(:token => params[:confirm_string])&.user
+      self.current_user = User.find_by_token_for(:new_email, params[:confirm_string])
 
       if current_user&.new_email?
         current_user.email = current_user.new_email
@@ -89,7 +82,6 @@ class ConfirmationsController < ApplicationController
         else
           flash[:errors] = current_user.errors
         end
-        current_user.tokens.delete_all
         session[:user] = current_user.id
         session[:fingerprint] = current_user.fingerprint
       elsif current_user
index 1a3d648f460a4f089ca362ac00c9ac88efc7915e..8da0842eb09cbee7942cf28d725d5ee6b49e9308 100644 (file)
@@ -1,5 +1,6 @@
 class DiaryEntriesController < ApplicationController
   include UserMethods
+  include PaginationMethods
 
   layout "site", :except => :rss
 
@@ -57,7 +58,7 @@ class DiaryEntriesController < ApplicationController
 
     @params = params.permit(:display_name, :friends, :nearby, :language)
 
-    @entries, @newer_entries_id, @older_entries_id = get_page_items(entries, [:user, :language])
+    @entries, @newer_entries_id, @older_entries_id = get_page_items(entries, :includes => [:user, :language])
   end
 
   def show
@@ -246,7 +247,7 @@ class DiaryEntriesController < ApplicationController
 
     @params = params.permit(:display_name, :before, :after)
 
-    @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, [:user])
+    @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user])
   end
 
   private
@@ -282,24 +283,4 @@ class DiaryEntriesController < ApplicationController
       @zoom = 12
     end
   end
-
-  def get_page_items(items, includes)
-    id_column = "#{items.table_name}.id"
-    page_items = if params[:before]
-                   items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
-                 elsif params[:after]
-                   items.where("#{id_column} > ?", params[:after]).order(:id => :asc)
-                 else
-                   items.order(:id => :desc)
-                 end
-
-    page_items = page_items.limit(20)
-    page_items = page_items.includes(includes)
-    page_items = page_items.sort.reverse
-
-    newer_items_id = page_items.first.id if page_items.count.positive? && items.exists?(["#{id_column} > ?", page_items.first.id])
-    older_items_id = page_items.last.id if page_items.count.positive? && items.exists?(["#{id_column} < ?", page_items.last.id])
-
-    [page_items, newer_items_id, older_items_id]
-  end
 end
index 2ca86fc028dca2dbe9af4c0a8ec14b71665c3ca9..d231fddde32945eff8a7454e3d7a09d37318bfc6 100644 (file)
@@ -60,12 +60,12 @@ class MessagesController < ApplicationController
     @message = Message.where(:recipient => current_user).or(Message.where(:sender => current_user.id)).find(params[:id])
     @message.from_user_visible = false if @message.sender == current_user
     @message.to_user_visible = false if @message.recipient == current_user
-    if @message.save && !request.xhr?
+    if @message.save
       flash[:notice] = t ".destroyed"
 
       referer = safe_referer(params[:referer]) if params[:referer]
 
-      redirect_to referer || { :action => :inbox }
+      redirect_to referer || { :action => :inbox }, :status => :see_other
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
@@ -125,9 +125,9 @@ class MessagesController < ApplicationController
       notice = t ".as_read"
     end
     @message.message_read = message_read
-    if @message.save && !request.xhr?
+    if @message.save
       flash[:notice] = notice
-      redirect_to :action => :inbox
+      redirect_back_or_to inbox_messages_path, :status => :see_other
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb
new file mode 100644 (file)
index 0000000..a05fa8c
--- /dev/null
@@ -0,0 +1,20 @@
+class NodesController < ApplicationController
+  layout :map_layout
+
+  before_action :authorize_web
+  before_action :set_locale
+  before_action -> { check_database_readable(:need_api => true) }
+  before_action :require_oauth
+
+  authorize_resource
+
+  around_action :web_timeout
+
+  def show
+    @type = "node"
+    @feature = Node.preload(:node_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :ways => :way_tags).find(params[:id])
+    render "browse/feature"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+end
index 9ef2ef881671550281858e5d8d967760646eb456..596b579673649c4bcd806c628dd8a8218a8344ed 100644 (file)
@@ -11,6 +11,14 @@ class OldNodesController < ApplicationController
   before_action :require_moderator_for_unredacted_history
   around_action :web_timeout
 
+  def index
+    @type = "node"
+    @feature = Node.preload(:node_tags, :old_nodes => [:old_tags, { :changeset => [:changeset_tags, :user] }]).find(params[:id])
+    render "browse/history"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+
   def show
     @type = "node"
     @feature = OldNode.preload(:old_tags, :changeset => [:changeset_tags, :user]).find([params[:id], params[:version]])
index b9e151a4fd8b9cc702bf753bc700efcb60528afc..d57cf25fe070dc3d3a278650ede0c2d049c67e89 100644 (file)
@@ -11,6 +11,14 @@ class OldRelationsController < ApplicationController
   before_action :require_moderator_for_unredacted_history
   around_action :web_timeout
 
+  def index
+    @type = "relation"
+    @feature = Relation.preload(:relation_tags, :old_relations => [:old_tags, { :changeset => [:changeset_tags, :user], :old_members => :member }]).find(params[:id])
+    render "browse/history"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+
   def show
     @type = "relation"
     @feature = OldRelation.preload(:old_tags, :changeset => [:changeset_tags, :user], :old_members => :member).find([params[:id], params[:version]])
index dd3c3279fd41fa54928bbe13362da0e7468e2055..de60de317fde2ed5c89e5e6d675b51e545d69ebe 100644 (file)
@@ -11,6 +11,14 @@ class OldWaysController < ApplicationController
   before_action :require_moderator_for_unredacted_history
   around_action :web_timeout
 
+  def index
+    @type = "way"
+    @feature = Way.preload(:way_tags, :old_ways => [:old_tags, { :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] } }]).find(params[:id])
+    render "browse/history"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+
   def show
     @type = "way"
     @feature = OldWay.preload(:old_tags, :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] }).find([params[:id], params[:version]])
index 25b2b96075bb2d24e79a8e21f4170a2e89756a65..26b21b6d9180e0f1737ab7b9afe5a03b01f40153 100644 (file)
@@ -19,8 +19,7 @@ class PasswordsController < ApplicationController
     @title = t ".title"
 
     if params[:token]
-      self.current_user = User.find_by_token_for(:password_reset, params[:token]) ||
-                          UserToken.unexpired.find_by(:token => params[:token])&.user
+      self.current_user = User.find_by_token_for(:password_reset, params[:token])
 
       if current_user.nil?
         flash[:error] = t ".flash token bad"
@@ -51,8 +50,7 @@ class PasswordsController < ApplicationController
 
   def update
     if params[:token]
-      self.current_user = User.find_by_token_for(:password_reset, params[:token]) ||
-                          UserToken.unexpired.find_by(:token => params[:token])&.user
+      self.current_user = User.find_by_token_for(:password_reset, params[:token])
 
       if current_user
         if params[:user]
@@ -62,7 +60,6 @@ class PasswordsController < ApplicationController
           current_user.email_valid = true
 
           if current_user.save
-            UserToken.delete_by(:token => params[:token])
             session[:fingerprint] = current_user.fingerprint
             flash[:notice] = t ".flash changed"
             successful_login(current_user)
diff --git a/app/controllers/relations_controller.rb b/app/controllers/relations_controller.rb
new file mode 100644 (file)
index 0000000..8aeefd6
--- /dev/null
@@ -0,0 +1,20 @@
+class RelationsController < ApplicationController
+  layout :map_layout
+
+  before_action :authorize_web
+  before_action :set_locale
+  before_action -> { check_database_readable(:need_api => true) }
+  before_action :require_oauth
+
+  authorize_resource
+
+  around_action :web_timeout
+
+  def show
+    @type = "relation"
+    @feature = Relation.preload(:relation_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :relation_members => :member).find(params[:id])
+    render "browse/feature"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+end
diff --git a/app/controllers/traces/icons_controller.rb b/app/controllers/traces/icons_controller.rb
new file mode 100644 (file)
index 0000000..ec67a6b
--- /dev/null
@@ -0,0 +1,29 @@
+module Traces
+  class IconsController < ApplicationController
+    before_action :authorize_web
+    before_action :check_database_readable
+
+    authorize_resource :trace
+
+    def show
+      trace = Trace.visible.find(params[:trace_id])
+
+      if trace.inserted?
+        if trace.public? || (current_user && current_user == trace.user)
+          if trace.icon.attached?
+            redirect_to rails_blob_path(trace.icon, :disposition => "inline")
+          else
+            expires_in 7.days, :private => !trace.public?, :public => trace.public?
+            send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => "image/gif", :disposition => "inline")
+          end
+        else
+          head :forbidden
+        end
+      else
+        head :not_found
+      end
+    rescue ActiveRecord::RecordNotFound
+      head :not_found
+    end
+  end
+end
diff --git a/app/controllers/traces/pictures_controller.rb b/app/controllers/traces/pictures_controller.rb
new file mode 100644 (file)
index 0000000..0e0d588
--- /dev/null
@@ -0,0 +1,29 @@
+module Traces
+  class PicturesController < ApplicationController
+    before_action :authorize_web
+    before_action :check_database_readable
+
+    authorize_resource :trace
+
+    def show
+      trace = Trace.visible.find(params[:trace_id])
+
+      if trace.inserted?
+        if trace.public? || (current_user && current_user == trace.user)
+          if trace.icon.attached?
+            redirect_to rails_blob_path(trace.image, :disposition => "inline")
+          else
+            expires_in 7.days, :private => !trace.public?, :public => trace.public?
+            send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => "image/gif", :disposition => "inline")
+          end
+        else
+          head :forbidden
+        end
+      else
+        head :not_found
+      end
+    rescue ActiveRecord::RecordNotFound
+      head :not_found
+    end
+  end
+end
index df6337147566538b89d9fa7b3c76f36b127ce182..5bee44886716448fbcd715dc893c981341b5984b 100644 (file)
@@ -1,5 +1,6 @@
 class TracesController < ApplicationController
   include UserMethods
+  include PaginationMethods
 
   layout "site", :except => :georss
 
@@ -60,30 +61,16 @@ class TracesController < ApplicationController
 
     @params = params.permit(:display_name, :tag, :before, :after)
 
-    @traces = if params[:before]
-                traces.where("gpx_files.id < ?", params[:before]).order(:id => :desc)
-              elsif params[:after]
-                traces.where("gpx_files.id > ?", params[:after]).order(:id => :asc)
-              else
-                traces.order(:id => :desc)
-              end
-
-    @traces = @traces.limit(20)
-    @traces = @traces.includes(:user, :tags)
-    @traces = @traces.sort.reverse
-
-    @newer_traces = @traces.count.positive? && traces.exists?(["gpx_files.id > ?", @traces.first.id])
-    @older_traces = @traces.count.positive? && traces.exists?(["gpx_files.id < ?", @traces.last.id])
+    @traces, @newer_traces_id, @older_traces_id = get_page_items(traces, :includes => [:user, :tags])
 
     # final helper vars for view
     @target_user = target_user
   end
 
   def show
-    @trace = Trace.find(params[:id])
+    @trace = Trace.visible.find(params[:id])
 
-    if @trace&.visible? &&
-       (@trace&.public? || @trace&.user == current_user)
+    if @trace.public? || @trace.user == current_user
       @title = t ".title", :name => @trace.name
     else
       flash[:error] = t ".trace_not_found"
@@ -100,11 +87,9 @@ class TracesController < ApplicationController
   end
 
   def edit
-    @trace = Trace.find(params[:id])
+    @trace = Trace.visible.find(params[:id])
 
-    if !@trace.visible?
-      head :not_found
-    elsif current_user.nil? || @trace.user != current_user
+    if current_user.nil? || @trace.user != current_user
       head :forbidden
     else
       @title = t ".title", :name => @trace.name
@@ -148,11 +133,9 @@ class TracesController < ApplicationController
   end
 
   def update
-    @trace = Trace.find(params[:id])
+    @trace = Trace.visible.find(params[:id])
 
-    if !@trace.visible?
-      head :not_found
-    elsif current_user.nil? || @trace.user != current_user
+    if current_user.nil? || @trace.user != current_user
       head :forbidden
     elsif @trace.update(trace_params)
       flash[:notice] = t ".updated"
@@ -166,11 +149,9 @@ class TracesController < ApplicationController
   end
 
   def destroy
-    trace = Trace.find(params[:id])
+    trace = Trace.visible.find(params[:id])
 
-    if !trace.visible?
-      head :not_found
-    elsif current_user.nil? || (trace.user != current_user && !current_user.administrator? && !current_user.moderator?)
+    if current_user.nil? || (trace.user != current_user && !current_user.administrator? && !current_user.moderator?)
       head :forbidden
     else
       trace.visible = false
@@ -188,9 +169,9 @@ class TracesController < ApplicationController
   end
 
   def data
-    trace = Trace.find(params[:id])
+    trace = Trace.visible.find(params[:id])
 
-    if trace.visible? && (trace.public? || (current_user && current_user == trace.user))
+    if trace.public? || (current_user && current_user == trace.user)
       if Acl.no_trace_download(request.remote_ip)
         head :forbidden
       elsif request.format == Mime[:xml]
@@ -220,48 +201,6 @@ class TracesController < ApplicationController
     @traces = @traces.includes(:user)
   end
 
-  def picture
-    trace = Trace.find(params[:id])
-
-    if trace.visible? && trace.inserted?
-      if trace.public? || (current_user && current_user == trace.user)
-        if trace.icon.attached?
-          redirect_to rails_blob_path(trace.image, :disposition => "inline")
-        else
-          expires_in 7.days, :private => !trace.public?, :public => trace.public?
-          send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => "image/gif", :disposition => "inline")
-        end
-      else
-        head :forbidden
-      end
-    else
-      head :not_found
-    end
-  rescue ActiveRecord::RecordNotFound
-    head :not_found
-  end
-
-  def icon
-    trace = Trace.find(params[:id])
-
-    if trace.visible? && trace.inserted?
-      if trace.public? || (current_user && current_user == trace.user)
-        if trace.icon.attached?
-          redirect_to rails_blob_path(trace.icon, :disposition => "inline")
-        else
-          expires_in 7.days, :private => !trace.public?, :public => trace.public?
-          send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => "image/gif", :disposition => "inline")
-        end
-      else
-        head :forbidden
-      end
-    else
-      head :not_found
-    end
-  rescue ActiveRecord::RecordNotFound
-    head :not_found
-  end
-
   private
 
   def do_create(file, tags, description, visibility)
index 07d0bc43c0bf2e64138a24ad2b0af41cbcf9bb2b..9ee3712265701fc336f6d8ed86d94aa770ca6a8f 100644 (file)
@@ -1,5 +1,6 @@
 class UserBlocksController < ApplicationController
   include UserMethods
+  include PaginationMethods
 
   layout "site"
 
@@ -16,10 +17,10 @@ class UserBlocksController < ApplicationController
 
   def index
     @params = params.permit
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.all
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   def show
@@ -103,22 +104,20 @@ class UserBlocksController < ApplicationController
   # shows a list of all the blocks on the given user
   def blocks_on
     @params = params.permit(:display_name)
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :conditions => { :user_id => @user.id },
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.where(:user => @user)
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   ##
   # shows a list of all the blocks by the given user.
   def blocks_by
     @params = params.permit(:display_name)
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :conditions => { :creator_id => @user.id },
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.where(:creator => @user)
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   private
index fbf49ecbe6835cb1ba99ce52193d96c2f835a8e3..c55a177b48bdb0529f08c4d174da56d64ca5ce81 100644 (file)
@@ -2,6 +2,7 @@ class UsersController < ApplicationController
   include EmailMethods
   include SessionMethods
   include UserMethods
+  include PaginationMethods
 
   layout "site"
 
@@ -29,16 +30,14 @@ class UsersController < ApplicationController
 
       redirect_to url_for(:status => params[:status], :ip => params[:ip], :page => params[:page])
     else
-      @params = params.permit(:status, :ip)
+      @params = params.permit(:status, :ip, :before, :after)
 
-      conditions = {}
-      conditions[:status] = @params[:status] if @params[:status]
-      conditions[:creation_ip] = @params[:ip] if @params[:ip]
+      users = User.all
+      users = users.where(:status => @params[:status]) if @params[:status]
+      users = users.where(:creation_ip => @params[:ip]) if @params[:ip]
 
-      @user_pages, @users = paginate(:users,
-                                     :conditions => conditions,
-                                     :order => :id,
-                                     :per_page => 50)
+      @users_count = users.count
+      @users, @newer_users_id, @older_users_id = get_page_items(users, :limit => 50)
     end
   end
 
diff --git a/app/controllers/ways_controller.rb b/app/controllers/ways_controller.rb
new file mode 100644 (file)
index 0000000..d4abe2d
--- /dev/null
@@ -0,0 +1,20 @@
+class WaysController < ApplicationController
+  layout :map_layout
+
+  before_action :authorize_web
+  before_action :set_locale
+  before_action -> { check_database_readable(:need_api => true) }
+  before_action :require_oauth
+
+  authorize_resource
+
+  around_action :web_timeout
+
+  def show
+    @type = "way"
+    @feature = Way.preload(:way_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :nodes => [:node_tags, { :ways => :way_tags }]).find(params[:id])
+    render "browse/feature"
+  rescue ActiveRecord::RecordNotFound
+    render "browse/not_found", :status => :not_found
+  end
+end
index 17c36bdfe043066b81c518c9602546f3013af212..368668a9bbf4fbb5c82637595ab0a09560032d56 100644 (file)
@@ -41,8 +41,8 @@ module ApplicationHelper
     end
   end
 
-  def current_page_class(path)
-    :current if current_page?(path)
+  def header_nav_link_class(path)
+    ["nav-link", current_page?(path) ? "text-secondary-emphasis" : "text-secondary"]
   end
 
   def application_data
index 53e980fdceb8d090a22378fea2f3815e6954421a..d3e8f10f900174119adf34a9b023774fe734c4dc 100644 (file)
@@ -1,6 +1,6 @@
 module BrowseHelper
-  def element_single_current_link(type, object, url)
-    link_to url, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
+  def element_single_current_link(type, object)
+    link_to object, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
       element_strikethrough object do
         printable_element_name object
       end
index bbe4c63b14722793db32e963bb0d5449686695de..6d3bf5e91245cb247b9ea71dc5786d5a699286d8 100644 (file)
@@ -1,7 +1,7 @@
 module BrowseTagsHelper
   # https://wiki.openstreetmap.org/wiki/Key:wikipedia#Secondary_Wikipedia_links
   # https://wiki.openstreetmap.org/wiki/Key:wikidata#Secondary_Wikidata_links
-  SECONDARY_WIKI_PREFIXES = "architect|artist|brand|buried|flag|genus|name:etymology|network|operator|species|subject".freeze
+  SECONDARY_WIKI_PREFIXES = "architect|artist|brand|buried|flag|genus|manufacturer|model|name:etymology|network|operator|species|subject".freeze
 
   def format_key(key)
     if url = wiki_link("key", key)
index dbee08c507f175e691fffae849b45b357f3515f7..9705221607cddd6a9180b1533d59d61579fcec7f 100644 (file)
@@ -3,7 +3,7 @@ module ChangesetsHelper
     if changeset.user.status == "deleted"
       t("users.no_such_user.deleted")
     elsif changeset.user.data_public?
-      link_to(changeset.user.display_name, user_path(changeset.user))
+      link_to changeset.user.display_name, changeset.user
     else
       t("browse.anonymous")
     end
index f819c1ac5ca665607218f671512988a7d7466b12..882f2c8354eb73e2415371b54a8871d0b1359386 100644 (file)
@@ -3,7 +3,7 @@ module GeocoderHelper
     html_options = { :class => "set_position stretched-link", :data => {} }
 
     url = if result[:type] && result[:id]
-            url_for(:controller => :browse, :action => result[:type], :id => result[:id])
+            url_for(:controller => result[:type].pluralize, :action => :show, :id => result[:id])
           elsif result[:min_lon] && result[:min_lat] && result[:max_lon] && result[:max_lat]
             "/?bbox=#{result[:min_lon]},#{result[:min_lat]},#{result[:max_lon]},#{result[:max_lat]}"
           else
index 3554980b84fc37fa53e7f23f797c2a401f364455..19bb8e0d6fb2d9da218c3cd3e67d17cfcec3319d 100644 (file)
@@ -2,7 +2,7 @@ module UserHelper
   # User images
 
   def user_image(user, options = {})
-    options[:class] ||= "user_image border border-grey"
+    options[:class] ||= "user_image border border-secondary-subtle bg-body"
     options[:alt] ||= ""
 
     if user.image_use_gravatar
@@ -10,12 +10,12 @@ module UserHelper
     elsif user.avatar.attached?
       user_avatar_variant_tag(user, { :resize_to_limit => [100, 100] }, options)
     else
-      image_tag "avatar_large.png", options.merge(:width => 100, :height => 100)
+      image_tag "avatar.svg", options.merge(:width => 100, :height => 100)
     end
   end
 
   def user_thumbnail(user, options = {})
-    options[:class] ||= "user_thumbnail border border-grey"
+    options[:class] ||= "user_thumbnail border border-secondary-subtle bg-body"
     options[:alt] ||= ""
 
     if user.image_use_gravatar
@@ -23,12 +23,12 @@ module UserHelper
     elsif user.avatar.attached?
       user_avatar_variant_tag(user, { :resize_to_limit => [50, 50] }, options)
     else
-      image_tag "avatar_small.png", options.merge(:width => 50, :height => 50)
+      image_tag "avatar.svg", options.merge(:width => 50, :height => 50)
     end
   end
 
   def user_thumbnail_tiny(user, options = {})
-    options[:class] ||= "user_thumbnail_tiny border border-grey"
+    options[:class] ||= "user_thumbnail_tiny border border-secondary-subtle bg-body"
     options[:alt] ||= ""
 
     if user.image_use_gravatar
@@ -36,7 +36,7 @@ module UserHelper
     elsif user.avatar.attached?
       user_avatar_variant_tag(user, { :resize_to_limit => [50, 50] }, options)
     else
-      image_tag "avatar_small.png", options.merge(:width => 50, :height => 50)
+      image_tag "avatar.svg", options.merge(:width => 50, :height => 50)
     end
   end
 
@@ -46,7 +46,7 @@ module UserHelper
     elsif user.avatar.attached?
       polymorphic_url(user_avatar_variant(user, :resize_to_limit => [100, 100]), :host => Settings.server_url)
     else
-      image_url("avatar_large.png")
+      image_url("avatar.svg")
     end
   end
 
@@ -58,7 +58,10 @@ module UserHelper
 
   def auth_button(name, provider, options = {})
     link_to(
-      image_tag("#{name}.svg", :alt => t("sessions.new.auth_providers.#{name}.alt"), :class => "rounded-3"),
+      image_tag("#{name}.svg",
+                :alt => t("sessions.new.auth_providers.#{name}.alt"),
+                :class => "rounded-3",
+                :size => "36"),
       auth_path(options.merge(:provider => provider)),
       :method => :post,
       :class => "auth_button",
index 33abc66f9102f7fcf5a62c299d34a8ce5a019f24..86e77703b697569f021e281e575349c8595753b2 100644 (file)
@@ -177,7 +177,7 @@ class UserMailer < ApplicationMailer
       @changeset_comment = comment.changeset.tags["comment"].presence
       @time = comment.created_at
       @changeset_author = comment.changeset.user.display_name
-      @unsubscribe_url = changeset_unsubscribe_url(comment.changeset)
+      @unsubscribe_url = unsubscribe_changeset_url(comment.changeset)
       @author = @commenter
 
       subject = if @owner
@@ -193,7 +193,7 @@ class UserMailer < ApplicationMailer
       set_list_headers(
         "#{comment.changeset.id}.changeset.www.openstreetmap.org",
         t(".description", :id => comment.changeset.id),
-        :subscribe => changeset_subscribe_url(comment.changeset),
+        :subscribe => subscribe_changeset_url(comment.changeset),
         :unsubscribe => @unsubscribe_url,
         :archive => @changeset_url
       )
index 101fd43103955a024eb57c676ff69a3f356bffc8..2df85f2ac17962ebb4ff72e006693e50f8ba0188 100644 (file)
@@ -4,32 +4,21 @@ module ConsistencyValidations
   # Generic checks that are run for the updates and deletes of
   # node, ways and relations. This code is here to avoid duplication,
   # and allow the extension of the checks without having to modify the
-  # code in 6 places for all the updates and deletes. Some of these tests are
-  # needed for creates, but are currently not run :-(
+  # code in 6 places for all the updates and deletes.
   # This will throw an exception if there is an inconsistency
-  def check_consistency(old, new, user)
+  def check_update_element_consistency(old, new, user)
     if new.id != old.id || new.id.nil? || old.id.nil?
       raise OSM::APIPreconditionFailedError, "New and old IDs don't match on #{new.class}. #{new.id} != #{old.id}."
     elsif new.version != old.version
       raise OSM::APIVersionMismatchError.new(new.id, new.class.to_s, new.version, old.version)
-    elsif new.changeset.nil?
-      raise OSM::APIChangesetMissingError
-    elsif new.changeset.user_id != user.id
-      raise OSM::APIUserChangesetMismatchError
-    elsif !new.changeset.open?
-      raise OSM::APIChangesetAlreadyClosedError, new.changeset
     end
+
+    check_changeset_consistency(new.changeset, user)
   end
 
   # This is similar to above, just some validations don't apply
-  def check_create_consistency(new, user)
-    if new.changeset.nil?
-      raise OSM::APIChangesetMissingError
-    elsif new.changeset.user_id != user.id
-      raise OSM::APIUserChangesetMismatchError
-    elsif !new.changeset.open?
-      raise OSM::APIChangesetAlreadyClosedError, new.changeset
-    end
+  def check_create_element_consistency(new, user)
+    check_changeset_consistency(new.changeset, user)
   end
 
   ##
index ad4318487b722839771e0a94b9cfc62561a966bd..825336d16e684ac25fb15c5f4f3294cd652d281d 100644 (file)
@@ -145,7 +145,7 @@ class Node < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Node.transaction do
       lock!
-      check_consistency(self, new_node, user)
+      check_update_element_consistency(self, new_node, user)
       ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id)
       raise OSM::APIPreconditionFailedError, "Node #{id} is still used by ways #{ways.collect(&:id).join(',')}." unless ways.empty?
 
@@ -166,7 +166,7 @@ class Node < ApplicationRecord
   def update_from(new_node, user)
     Node.transaction do
       lock!
-      check_consistency(self, new_node, user)
+      check_update_element_consistency(self, new_node, user)
 
       # update changeset first
       self.changeset_id = new_node.changeset_id
@@ -189,7 +189,7 @@ class Node < ApplicationRecord
   end
 
   def create_with_history(user)
-    check_create_consistency(self, user)
+    check_create_element_consistency(self, user)
     self.version = 0
     self.visible = true
 
index 3ec5cd4152939a24bf1816045dfe66bc23b4a262..b323f0b4f0eb65bef77b0750008d6a3d95d326cf 100644 (file)
@@ -26,7 +26,6 @@
 
 class OldNode < ApplicationRecord
   include GeoRecord
-  include ConsistencyValidations
 
   self.table_name = "nodes"
 
index 5ff12fd586bfb742d2f523bacbf6602df384cec9..7d5a3fbb4096e3c8e077a9595d8ec067ef969638 100644 (file)
@@ -21,8 +21,6 @@
 #
 
 class OldRelation < ApplicationRecord
-  include ConsistencyValidations
-
   self.table_name = "relations"
 
   # NOTE: this needs to be included after the table name changes, or
index a55d3ed004a72bc678b959022e60ac33661ec199..8577330c52823dd808e5128b7047f7a17dcd9c5a 100644 (file)
@@ -21,8 +21,6 @@
 #
 
 class OldWay < ApplicationRecord
-  include ConsistencyValidations
-
   self.table_name = "ways"
 
   # NOTE: this needs to be included after the table name changes, or
index f4eedde0a2daddb172843d910507494261c1b4ae..5e9e0decde935a87b1514e3a8ffec16085026b79 100644 (file)
@@ -3,8 +3,8 @@
 # Table name: redactions
 #
 #  id                 :integer          not null, primary key
-#  title              :string
-#  description        :text
+#  title              :string           not null
+#  description        :text             not null
 #  created_at         :datetime
 #  updated_at         :datetime
 #  user_id            :bigint(8)        not null
index 0a4a660a6fa536c52a025a4b337c521e85ab59be..f09647320004f99dc1734964a3e265ffb97b272e 100644 (file)
@@ -166,7 +166,7 @@ class Relation < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Relation.transaction do
       lock!
-      check_consistency(self, new_relation, user)
+      check_update_element_consistency(self, new_relation, user)
       # This will check to see if this relation is used by another relation
       rel = RelationMember.joins(:relation).find_by("visible = ? AND member_type = 'Relation' and member_id = ? ", true, id)
       raise OSM::APIPreconditionFailedError, "The relation #{new_relation.id} is used in relation #{rel.relation.id}." unless rel.nil?
@@ -182,7 +182,7 @@ class Relation < ApplicationRecord
   def update_from(new_relation, user)
     Relation.transaction do
       lock!
-      check_consistency(self, new_relation, user)
+      check_update_element_consistency(self, new_relation, user)
       raise OSM::APIPreconditionFailedError, "Cannot update relation #{id}: data or member data is invalid." unless new_relation.preconditions_ok?(members)
 
       self.changeset_id = new_relation.changeset_id
@@ -195,7 +195,7 @@ class Relation < ApplicationRecord
   end
 
   def create_with_history(user)
-    check_create_consistency(self, user)
+    check_create_element_consistency(self, user)
     raise OSM::APIPreconditionFailedError, "Cannot create relation: data or member data is invalid." unless preconditions_ok?
 
     self.version = 0
index 125e5e97372c87c539540b682e805f5909d0611f..45ecbcc1b1360476b549285d51171f286c57f148 100644 (file)
@@ -57,7 +57,6 @@ class User < ApplicationRecord
   has_many :muted_messages, -> { where(:to_user_visible => true, :muted => true).order(:sent_on => :desc).preload(:sender, :recipient) }, :class_name => "Message", :foreign_key => :to_user_id
   has_many :friendships, -> { joins(:befriendee).where(:users => { :status => %w[active confirmed] }) }
   has_many :friends, :through => :friendships, :source => :befriendee
-  has_many :tokens, :class_name => "UserToken", :dependent => :destroy
   has_many :preferences, :class_name => "UserPreference"
   has_many :changesets, -> { order(:created_at => :desc) }, :inverse_of => :user
   has_many :changeset_comments, :foreign_key => :author_id, :inverse_of => :author
@@ -165,9 +164,6 @@ class User < ApplicationRecord
       else
         user = nil
       end
-    elsif options[:token]
-      token = UserToken.find_by(:token => options[:token])
-      user = token.user if token
     end
 
     if user &&
@@ -177,8 +173,6 @@ class User < ApplicationRecord
       user = nil
     end
 
-    token.update(:expiry => 1.week.from_now) if token && user
-
     user
   end
 
@@ -366,9 +360,9 @@ class User < ApplicationRecord
     diary_comment_score = diary_comments.visible.inject(0) { |acc, elem| acc + elem.body.spam_score }
 
     score = description.spam_score / 4.0
-    score += diary_entries.where("created_at > ?", 1.day.ago).count * 10
-    score += diary_entry_score / diary_entries.length unless diary_entries.empty?
-    score += diary_comment_score / diary_comments.length unless diary_comments.empty?
+    score += diary_entries.visible.where("created_at > ?", 1.day.ago).count * 10
+    score += diary_entry_score / diary_entries.visible.length unless diary_entries.visible.empty?
+    score += diary_comment_score / diary_comments.visible.length unless diary_comments.visible.empty?
     score -= changeset_score
     score -= trace_score
 
index 7af1f9bdc2d009a562bb910a6d560c6e7ae1846a..4fe50d921219320f04426eb82394d6e2a7d0cffc 100644 (file)
@@ -15,7 +15,8 @@
 #
 # Indexes
 #
-#  index_user_blocks_on_user_id  (user_id)
+#  index_user_blocks_on_creator_id_and_id  (creator_id,id)
+#  index_user_blocks_on_user_id            (user_id)
 #
 # Foreign Keys
 #
diff --git a/app/models/user_token.rb b/app/models/user_token.rb
deleted file mode 100644 (file)
index fbd276a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# == Schema Information
-#
-# Table name: user_tokens
-#
-#  id      :bigint(8)        not null, primary key
-#  user_id :bigint(8)        not null
-#  token   :string           not null
-#  expiry  :datetime         not null
-#  referer :text
-#
-# Indexes
-#
-#  user_tokens_token_idx    (token) UNIQUE
-#  user_tokens_user_id_idx  (user_id)
-#
-# Foreign Keys
-#
-#  user_tokens_user_id_fkey  (user_id => users.id)
-#
-
-class UserToken < ApplicationRecord
-  belongs_to :user
-
-  scope :unexpired, -> { where("expiry >= now()") }
-
-  after_initialize :set_defaults
-
-  def expired?
-    expiry < Time.now.utc
-  end
-
-  private
-
-  def set_defaults
-    self.token = OSM.make_token if token.blank?
-    self.expiry = 1.week.from_now if expiry.blank?
-  end
-end
index b11c225ddb1cfd0a6fb604174d4e39354eab0276..203d3b7036f4c78d4b844b8219f14acfd73e59e6 100644 (file)
@@ -142,7 +142,7 @@ class Way < ApplicationRecord
   def update_from(new_way, user)
     Way.transaction do
       lock!
-      check_consistency(self, new_way, user)
+      check_update_element_consistency(self, new_way, user)
       raise OSM::APIPreconditionFailedError, "Cannot update way #{id}: data is invalid." unless new_way.preconditions_ok?(nds)
 
       self.changeset_id = new_way.changeset_id
@@ -155,7 +155,7 @@ class Way < ApplicationRecord
   end
 
   def create_with_history(user)
-    check_create_consistency(self, user)
+    check_create_element_consistency(self, user)
     raise OSM::APIPreconditionFailedError, "Cannot create way: data is invalid." unless preconditions_ok?
 
     self.version = 0
@@ -193,7 +193,7 @@ class Way < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Way.transaction do
       lock!
-      check_consistency(self, new_way, user)
+      check_update_element_consistency(self, new_way, user)
       rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id)
       raise OSM::APIPreconditionFailedError, "Way #{id} is still used by relations #{rels.collect(&:id).join(',')}." unless rels.empty?
 
index 2547ff7aa6a7cbcae116c43300b68bfc3c30c045..febb3e129fcbdd4575a80cc4d024cab458415b42 100644 (file)
@@ -1,4 +1,4 @@
-<li><%= linked_name = link_to printable_element_name(containing_relation.relation), :action => "relation", :id => containing_relation.relation.id.to_s
+<li><%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
         if containing_relation.member_role.blank?
           t ".entry_html", :relation_name => linked_name
         else
index e395a4283832c99054de1f2829f37ed025795218..4e2ae0343d2e57f5ba7a460b5701892ed0d923b3 100644 (file)
@@ -17,7 +17,7 @@
           <summary><%= t "browse.part_of_ways", :count => node.ways.uniq.count %></summary>
           <ul class="list-unstyled">
             <% node.ways.uniq.each do |way| %>
-              <li><%= element_single_current_link "way", way, way_path(way) %></li>
+              <li><%= element_single_current_link "way", way %></li>
             <% end %>
           </ul>
         </details>
index 922e642cc76b18f2942f1b1eb9387256b35baf3f..a987fe4d8e179bdedd701197e80e1a8c22a45302 100644 (file)
@@ -15,7 +15,7 @@
       <details <%= "open" if relation.containing_relation_members.count < 10 %>>
         <summary><%= t "browse.part_of_relations", :count => relation.containing_relation_members.uniq.count %></summary>
         <ul class="list-unstyled">
-          <%= render :partial => "containing_relation", :collection => relation.containing_relation_members.uniq %>
+          <%= render :partial => "browse/containing_relation", :collection => relation.containing_relation_members.uniq %>
         </ul>
       </details>
     <% end %>
index 16842f56922c97d9bd03f25ee6aa0a3936ffb283..d122f0edfed8f327f2c81893a317cbfb588073d8 100644 (file)
@@ -1,4 +1,4 @@
-<% linked_name = link_to printable_element_name(relation_member.member), { :controller => :browse, :action => relation_member.member_type.downcase, :id => relation_member.member_id.to_s }, { :rel => link_follow(relation_member.member) }
+<% linked_name = link_to printable_element_name(relation_member.member), relation_member.member, { :rel => link_follow(relation_member.member) }
    type_str = t ".type.#{relation_member.member_type.downcase}" %>
 <%= element_list_item relation_member.member_type.downcase, relation_member.member do %>
   <%= if relation_member.member_role.blank?
index c0cdb5f9ae0def826762437953076a17982b1529..578dc8b59e3332b404ec1ce202afe1030054bc70 100644 (file)
@@ -1,4 +1,4 @@
 <tr>
-  <th class='py-1 border-grey table-light fw-normal' dir='auto'><%= format_key(tag[0]) %></th>
-  <td class='py-1 border-grey border-start' dir='auto'><%= format_value(tag[0], tag[1]) %></td>
+  <th class='py-1 border-secondary-subtle table-light fw-normal' dir='auto'><%= format_key(tag[0]) %></th>
+  <td class='py-1 border-secondary-subtle border-start' dir='auto'><%= format_value(tag[0], tag[1]) %></td>
 </tr>
index cc08fe16af7fb76de94d39e6b86d10c2ce9e3f5c..2b4ec1bb0708b8b8be8f17be931b9a023aaca45f 100644 (file)
@@ -1,6 +1,6 @@
 <% unless tag_details.empty? %>
   <h4><%= t ".tags" %></h4>
-  <div class='mb-3 border border-grey rounded overflow-hidden'>
+  <div class='mb-3 border border-secondary-subtle rounded overflow-hidden'>
     <table class='mb-0 browse-tag-list table align-middle text-break'>
       <%= render :partial => "browse/tag", :collection => tag_details.sort %>
     </table>
index 46bfd0dc2c1628e7ea1536743ad4ed3f8fc7a13e..94e18e45777bb27e950f573b7d86039634fe0b4a 100644 (file)
@@ -1,8 +1,8 @@
 <div class='secondary-actions'>
-  <%= link_to t("browse.view_details"), :controller => :browse, :action => @type %>
+  <%= link_to t("browse.view_details"), :controller => @type.pluralize, :action => :show %>
   <% if !@feature.redacted? %>
     &middot;
-    <%= link_to t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => :version %>
+    <%= link_to t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => :show %>
   <% elsif current_user&.moderator? %>
     &middot;
     <% if !params[:show_redactions] %>
@@ -21,7 +21,7 @@
     <% end %>
     &middot;
   <% end %>
-  <%= link_to t("browse.view_history"), :controller => :browse, :action => "#{@type}_history" %>
+  <%= link_to t("browse.view_history"), :action => :index %>
   <% unless @feature.latest_version? %>
     &middot;
     <%= link_to({ :version => @feature.version + 1 }, { :class => "icon-link" }) do %>
index d93321a0fab98f3b14a93cbf23d3f9267d7076fa..d015438fe998568ae45c1a454ff63f8e6ef0b2d7 100644 (file)
@@ -15,7 +15,7 @@
       <details <%= "open" if way.containing_relation_members.count < 10 %>>
         <summary><%= t "browse.part_of_relations", :count => way.containing_relation_members.uniq.count %></summary>
         <ul class="list-unstyled">
-          <%= render :partial => "containing_relation", :collection => way.containing_relation_members.uniq %>
+          <%= render :partial => "browse/containing_relation", :collection => way.containing_relation_members.uniq %>
         </ul>
       </details>
     <% end %>
         <ul class="list-unstyled">
           <% way.way_nodes.each do |wn| %>
             <li>
-              <%= element_single_current_link "node", wn.node, node_path(wn.node) %>
+              <%= element_single_current_link "node", wn.node %>
               <% related_ways = wn.node.ways.reject { |w| w.id == wn.way_id } %>
               <% if related_ways.size > 0 then %>
                 (<%= t ".also_part_of_html",
                        :count => related_ways.size,
-                       :related_ways => to_sentence(related_ways.map { |w| element_single_current_link "way", w, way_path(w) }) %>)
+                       :related_ways => to_sentence(related_ways.map { |w| element_single_current_link "way", w }) %>)
               <% end %>
             </li>
           <% end %>
index 9ee9f807fb1899f395b2bd0fd9529209bd6ee050..29f911f799302c703aafd6d66a90116032177d18 100644 (file)
@@ -2,7 +2,7 @@
 
 <%= render "sidebar_header", :title => t("browse.#{@type}.title_html", :name => printable_element_name(@feature)) %>
 
-<%= render :partial => @type, :object => @feature %>
+<%= render :partial => "browse/#{@type}", :object => @feature %>
 
 <% if @feature.visible? %>
   <div class='secondary-actions'>
     <% end %>
     &middot;
   <% end %>
-    <%= link_to t("browse.view_history"), :action => "#{@type}_history" %>
+    <%= link_to t("browse.view_history"), :controller => "old_#{@type.pluralize}" %>
   <% if current_user&.moderator? %>
     &middot;
-    <%= link_to(t("browse.view_unredacted_history"), :action => "#{@type}_history", :params => { :show_redactions => true }) %>
+    <%= link_to(t("browse.view_unredacted_history"), :controller => "old_#{@type.pluralize}", :params => { :show_redactions => true }) %>
   <% end %>
   <% if @feature.version > 1 %>
     &middot;
index b557c339b172a9eb5e1c66f5df9e0b961f3f859f..1595df0216d129772d953d07c5a5923d85f32fa8 100644 (file)
@@ -2,17 +2,17 @@
 
 <%= render "sidebar_header", :title => t("browse.#{@type}.history_title_html", :name => printable_element_name(@feature)) %>
 
-<%= render :partial => @type, :collection => @feature.send(:"old_#{@type}s").reverse %>
+<%= render :partial => "browse/#{@type}", :collection => @feature.send(:"old_#{@type}s").reverse %>
 
 <div class='secondary-actions'>
-  <%= link_to(t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => "history") %>
+  <%= link_to t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => "history" %>
   &middot;
-  <%= link_to(t("browse.view_details"), :action => @type) %>
+  <%= link_to t("browse.view_details"), :controller => @type.pluralize, :action => :show %>
   <% if params[:show_redactions] %>
     &middot;
-    <%= link_to(t("browse.view_history"), :action => "#{@type}_history") %>
+    <%= link_to t("browse.view_history") %>
   <% elsif current_user&.moderator? %>
     &middot;
-    <%= link_to(t("browse.view_unredacted_history"), :action => "#{@type}_history", :params => { :show_redactions => true }) %>
+    <%= link_to t("browse.view_unredacted_history"), :params => { :show_redactions => true } %>
   <% end %>
 </div>
diff --git a/app/views/changeset_comments/_comment.rss.builder b/app/views/changeset_comments/_comment.rss.builder
new file mode 100644 (file)
index 0000000..83dfadd
--- /dev/null
@@ -0,0 +1,14 @@
+xml.item do
+  xml.title t(".comment", :author => comment.author.display_name, :changeset_id => comment.changeset.id.to_s)
+
+  xml.link changeset_url(comment.changeset, :anchor => "c#{comment.id}")
+  xml.guid changeset_url(comment.changeset, :anchor => "c#{comment.id}")
+
+  xml.description do
+    xml.cdata! render(:partial => "comment", :object => comment, :formats => [:html])
+  end
+
+  xml.dc :creator, comment.author.display_name if comment.author
+
+  xml.pubDate comment.created_at.to_fs(:rfc822)
+end
diff --git a/app/views/changeset_comments/_comments.rss.builder b/app/views/changeset_comments/_comments.rss.builder
deleted file mode 100644 (file)
index b1344b4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-comments.each do |comment|
-  xml.item do
-    xml.title t(".comment", :author => comment.author.display_name, :changeset_id => comment.changeset.id.to_s)
-
-    xml.link changeset_url(comment.changeset, :anchor => "c#{comment.id}")
-    xml.guid changeset_url(comment.changeset, :anchor => "c#{comment.id}")
-
-    xml.description do
-      xml.cdata! render(:partial => "comment", :object => comment, :formats => [:html])
-    end
-
-    xml.dc :creator, comment.author.display_name if comment.author
-
-    xml.pubDate comment.created_at.to_fs(:rfc822)
-  end
-end
index acaa54727279e21a7a6816c5f8d39fad26b5bce8..f055c20144c6c9e257552a66d5e7c4bac5fa6e70 100644 (file)
@@ -8,6 +8,6 @@ xml.rss("version" => "2.0",
     end
     xml.link url_for(:controller => "site", :action => "index", :only_path => false)
 
-    xml << render(:partial => "comments", :object => @comments)
+    xml << render(:partial => "comment", :collection => @comments)
   end
 end
index 33bc7169693e17ac894a0ef67ba059e7eee62868..a125a135a5ff34c315f47cde4e4f0781492ee771 100644 (file)
@@ -5,11 +5,11 @@
       <%= user_thumbnail changeset.user %>
     </div>
     <div class="col">
-      <h2><%= link_to title, changeset_path(changeset) %></h2>
+      <h2><%= link_to title, changeset %></h2>
     </div>
   </div>
 
   <small class='text-muted'>
-    <%= t(".created_by_html", :link_user => link_to(changeset.user.display_name, user_path(changeset.user)), :created => l(changeset.created_at, :format => :blog)) %>
+    <%= t(".created_by_html", :link_user => link_to(changeset.user.display_name, changeset.user), :created => l(changeset.created_at, :format => :blog)) %>
   </small>
 </div>
index a9970e652dae24da2542bf32fddfc9e15a2f9035..a536677b08b727fc304414ba8b5571c29e2618b7 100644 (file)
@@ -6,7 +6,7 @@
 
 <% set_title(changeset_index_title(params, current_user))
    @heading = if params[:display_name]
-                t("changesets.index.title_user_link_html", :user_link => link_to(params[:display_name], user_path(:display_name => params[:display_name])))
+                t("changesets.index.title_user_link_html", :user_link => link_to(params[:display_name], user_path(params[:display_name])))
               else
                 @title
               end %>
index 57a3fdb56b61f2b280597037f93f3eab8f2c1d88..3ba3968f704b20626496e189676fec7e9e831994 100644 (file)
@@ -34,7 +34,7 @@
           <small class='text-muted'>
             <%= t comment.visible ? ".comment_by_html" : ".hidden_comment_by_html",
                   :time_ago => friendly_date_ago(comment.created_at),
-                  :user => link_to(comment.author.display_name, user_path(comment.author)) %>
+                  :user => link_to(comment.author.display_name, comment.author) %>
             <% if current_user&.moderator? %>
               —
               <%= tag.button t("javascripts.changesets.show.#{comment.visible ? 'hide' : 'unhide'}_comment"),
     <%= render :partial => "paging_nav", :locals => { :type => "way", :pages => @way_pages } %>
     <ul class="list-unstyled">
       <% @ways.each do |way| %>
-        <%= element_list_item "way", way do %>
-          <%= t "printable_name.current_and_old_links_html",
+        <%= element_list_item "way", way do
+              t "printable_name.current_and_old_links_html",
                 :current_link => link_to(printable_element_name(way), way_path(way.way_id)),
-                :old_link => link_to(printable_element_version(way), old_way_path(way.way_id, way.version)) %>
-        <% end %>
+                :old_link => link_to(printable_element_version(way), old_way_path(way.way_id, way.version))
+            end %>
       <% end %>
     </ul>
   <% end %>
     <%= render :partial => "paging_nav", :locals => { :type => "relation", :pages => @relation_pages } %>
     <ul class="list-unstyled">
       <% @relations.each do |relation| %>
-        <%= element_list_item "relation", relation do %>
-          <%= t "printable_name.current_and_old_links_html",
+        <%= element_list_item "relation", relation do
+              t "printable_name.current_and_old_links_html",
                 :current_link => link_to(printable_element_name(relation), relation_path(relation.relation_id)),
-                :old_link => link_to(printable_element_version(relation), old_relation_path(relation.relation_id, relation.version)) %>
-        <% end %>
+                :old_link => link_to(printable_element_version(relation), old_relation_path(relation.relation_id, relation.version))
+            end %>
       <% end %>
     </ul>
   <% end %>
     <%= render :partial => "paging_nav", :locals => { :type => "node", :pages => @node_pages } %>
     <ul class="list-unstyled">
       <% @nodes.each do |node| %>
-        <%= element_list_item "node", node do %>
-          <%= t "printable_name.current_and_old_links_html",
+        <%= element_list_item "node", node do
+              t "printable_name.current_and_old_links_html",
                 :current_link => link_to(printable_element_name(node), node_path(node.node_id), { :rel => link_follow(node) }),
-                :old_link => link_to(printable_element_version(node), old_node_path(node.node_id, node.version), { :rel => link_follow(node) }) %>
-        <% end %>
+                :old_link => link_to(printable_element_version(node), old_node_path(node.node_id, node.version), { :rel => link_follow(node) })
+            end %>
       <% end %>
     </ul>
   <% end %>
 <% if @next_by_user || @prev_by_user %>
   <div class='secondary-actions'>
     <% if @prev_by_user %>
-      <%= link_to({ :id => @prev_by_user.id }, :class => "icon-link") do %>
+      <%= link_to @prev_by_user, :class => "icon-link" do %>
         <%= previous_page_svg_tag :height => 11 %>
         <%= @prev_by_user.id %>
       <% end %>
         link_to tag.bdi(user), :controller => "changesets", :action => "index", :display_name => user %>
     <% if @next_by_user %>
       &middot;
-      <%= link_to({ :id => @next_by_user.id }, :class => "icon-link") do %>
+      <%= link_to @next_by_user, :class => "icon-link" do %>
         <%= @next_by_user.id %>
         <%= next_page_svg_tag :height => 11 %>
       <% end %>
index b789f721bc828eec29bbc7fc7da2303b6b6eb753..b28a28a26770ead4a7ffd029bcab072d8bf63a5e 100644 (file)
@@ -10,7 +10,7 @@
   </div>
   <div class="col">
     <p class='text-muted mb-0'>
-      <%= link_to contact.display_name, user_path(contact) %>
+      <%= link_to contact.display_name, contact %>
       <% if @user.home_location? and contact.home_location? %>
         <% distance = @user.distance(contact) %>
         <% if distance < 1 %>
@@ -25,7 +25,7 @@
       <% if changeset %>
         <%= t(".latest_edit_html", :ago => friendly_date_ago(changeset.created_at)) %>
         <% comment = changeset.tags["comment"].to_s == "" ? t("browse.no_comment") : changeset.tags["comment"] %>
-        <q><%= link_to comment, changeset_path(changeset), :title => t("changesets.changeset.view_changeset_details") %></q>
+        <q><%= link_to comment, changeset, :title => t("changesets.changeset.view_changeset_details") %></q>
       <% else %>
        <%= t "changesets.changeset.no_edits" %>
       <% end %>
index c4f8b627a153d7ab4fc854518e2d67e64cbea2cd..de90a117b236fc90de1490c0ba435a6cfb0b0ab9 100644 (file)
@@ -4,6 +4,6 @@
   </div>
   <div class="col mx-1">
     <p><%= t(".#{type}") %></p>
-    <p><%= link_to popup.display_name, user_path(popup) %></p>
+    <p><%= link_to popup.display_name, popup %></p>
   </div>
 </div>
index 744661dfdbeb7bbd53a5ff812bfcf2a81b209030..d3e6dbcb3eb1153df59ec35369965f97688cfd62 100644 (file)
@@ -6,7 +6,7 @@
   <% if current_user and @user.id == current_user.id %>
     <div class="col-md order-md-last">
       <% if !@user.home_location? %>
-        <div id="map" class="content_map border border-grey">
+        <div id="map" class="content_map border border-secondary-subtle">
           <p class="m-3"><%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %></p>
         </div>
       <% else %>
@@ -19,7 +19,7 @@
              :icon => image_path("marker-red.png"),
              :description => render(:partial => "popup", :object => current_user, :locals => { :type => "your location" })
            } %>
-        <%= tag.div "", :id => "map", :class => "content_map border border-grey rounded", :data => { :user => user_data } %>
+        <%= tag.div "", :id => "map", :class => "content_map border border-secondary-subtle rounded", :data => { :user => user_data } %>
       <% end %>
 
       <% friends = @user.friends %>
index 04e01157460ac38cf82ac54f30b2fd771a17f758..5ade361aa1ac66ff90f0f70f1981a0e94a5f4637 100644 (file)
@@ -3,7 +3,7 @@
     <%= user_thumbnail diary_comment.user %>
   </div>
   <div class="col">
-    <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
+    <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, diary_comment.user), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
       <% if current_user and diary_comment.user.id != current_user.id %>
         | <%= report_link(t(".report"), diary_comment) %>
       <% end %>
@@ -13,9 +13,9 @@
     <% if can? :hidecomment, DiaryEntry %>
       <span>
         <% if diary_comment.visible? %>
-          <%= link_to t(".hide_link"), hide_diary_comment_path(:display_name => diary_comment.diary_entry.user.display_name, :id => diary_comment.diary_entry.id, :comment => diary_comment.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+          <%= link_to t(".hide_link"), hide_diary_comment_path(diary_comment.diary_entry.user, diary_comment.diary_entry, diary_comment), :method => :post, :data => { :confirm => t(".confirm") } %>
         <% else %>
-          <%= link_to t(".unhide_link"), unhide_diary_comment_path(:display_name => diary_comment.diary_entry.user.display_name, :id => diary_comment.diary_entry.id, :comment => diary_comment.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+          <%= link_to t(".unhide_link"), unhide_diary_comment_path(diary_comment.diary_entry.user, diary_comment.diary_entry, diary_comment), :method => :post, :data => { :confirm => t(".confirm") } %>
         <% end %>
       </span>
     <% end %>
index 8bd4dc57fd652b78c6dc2a9d70abd332f1f1e537..9c7d7b2dc297bc211c6772d3902048eb60f9e0f0 100644 (file)
@@ -1,4 +1,4 @@
-<article class='diary_post border-top border-grey py-3<%= " text-muted px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
+<article class='diary_post border-top border-secondary-subtle py-3<%= " text-muted px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
   <%= render :partial => "diary_entry_heading", :object => diary_entry, :as => "diary_entry" %>
 
   <div class="richtext text-break" xml:lang="<%= diary_entry.language_code %>" lang="<%= diary_entry.language_code %>">
@@ -24,7 +24,7 @@
       <% end %>
 
       <% if current_user && current_user == diary_entry.user %>
-        <li><%= link_to t(".edit_link"), :action => "edit", :display_name => diary_entry.user.display_name, :id => diary_entry.id %></li>
+        <li><%= link_to t(".edit_link"), edit_diary_entry_path(diary_entry.user, diary_entry) %></li>
       <% end %>
 
       <% if current_user and diary_entry.user != current_user %>
@@ -36,9 +36,9 @@
       <% if can? :hide, DiaryEntry %>
         <li>
           <% if diary_entry.visible %>
-            <%= link_to t(".hide_link"), hide_diary_entry_path(:display_name => diary_entry.user.display_name, :id => diary_entry.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+            <%= link_to t(".hide_link"), hide_diary_entry_path(diary_entry.user, diary_entry), :method => :post, :data => { :confirm => t(".confirm") } %>
           <% else %>
-            <%= link_to t(".unhide_link"), unhide_diary_entry_path(:display_name => diary_entry.user.display_name, :id => diary_entry.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+            <%= link_to t(".unhide_link"), unhide_diary_entry_path(diary_entry.user, diary_entry), :method => :post, :data => { :confirm => t(".confirm") } %>
           <% end %>
         </li>
       <% end %>
index ef924ffddcc816017f237a762bb92e0b9b8a3af1..30f7bc03baf2a13a27e4827901a1d1849dffc35d 100644 (file)
@@ -13,7 +13,7 @@
   <% end %>
 
   <small class='text-muted'>
-    <%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
+    <%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, diary_entry.user), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
     <% if (l(diary_entry.updated_at, :format => :blog) != l(diary_entry.created_at, :format => :blog)) %>
       <%= t("diary_entries.diary_entry.updated_at_html", :updated => l(diary_entry.updated_at, :format => :blog)) %>
     <% end %>
index 0b38e3ea6b5b373008aca9c6bb015f394e98b464..291e8e33b647955d0d999f6f39b9c551b667638b 100644 (file)
@@ -5,7 +5,7 @@
 <fieldset>
   <legend><%= t ".location" -%></legend>
 
-  <%= tag.div "", :id => "map", :class => "border border-grey rounded mb-3", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
+  <%= tag.div "", :id => "map", :class => "border border-secondary-subtle rounded mb-3", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
 
   <div class="row mb-3">
     <%= f.text_field :latitude, :wrapper_class => "col-sm-4 d-flex flex-column", :class => "mt-auto", :id => "latitude" %>
index d5860f11d8e4db5e549b331d0dd3be2ca52754d2..ae48e86b9f7694f4eb40f8e1fd343964004db34c 100644 (file)
@@ -1,7 +1,9 @@
 <%= t ".location" %>
 
-<a href="<%= url_for :controller => "site", :action => "index", :anchor => "map=14/#{location.latitude}/#{location.longitude}" %>">
-<abbr class="geo" title="<%= t ".coordinates", :latitude => number_with_precision(location.latitude, :precision => 4), :longitude => number_with_precision(location.longitude, :precision => 4) %>">
-<%= describe_location location.latitude, location.longitude, 14, location.language_code %>
-</abbr>
-</a>
+<%= link_to root_path(:anchor => "map=14/#{location.latitude}/#{location.longitude}") do
+      tag.abbr :class => "geo",
+               :title => t(".coordinates", :latitude => number_with_precision(location.latitude, :precision => 4),
+                                           :longitude => number_with_precision(location.longitude, :precision => 4)) do
+        describe_location location.latitude, location.longitude, 14, location.language_code
+      end
+    end %>
index 61ceccdc06635cc07ffd2a0f317cc51a2fe2a8e2..aa0fceb95c921046bb962547c7a5816f8089692b 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :heading do %>
   <h1><%= t ".heading", :user => @user.display_name %></h1>
-  <p><%= t ".subheading_html", :user => link_to(@user.display_name, user_path(@user)) %></p>
+  <p><%= t ".subheading_html", :user => link_to(@user.display_name, @user) %></p>
 <% end %>
 
 <% if @comments.empty? %>
index 63ab89b8f376006a7a52f348648dbd19da5811f9..6c0895380d55d0c0e2024c15a00164a3a33110d1 100644 (file)
 <%= render @entry %>
 
 <div id="comments" class="comments mb-3 overflow-hidden">
-  <div class="row border-bottom border-grey">
+  <div class="row border-bottom border-secondary-subtle">
     <h2 class="col"><%= t(".discussion") %></h2>
 
     <% if current_user %>
       <div class="col-auto">
         <% if @entry.subscribers.exists?(current_user.id) %>
-          <%= link_to t("javascripts.changesets.show.unsubscribe"), diary_entry_unsubscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
+          <%= link_to t("javascripts.changesets.show.unsubscribe"), diary_entry_unsubscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %>
         <% else %>
-          <%= link_to t("javascripts.changesets.show.subscribe"), diary_entry_subscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
+          <%= link_to t("javascripts.changesets.show.subscribe"), diary_entry_subscribe_path(@entry.user, @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
         <% end %>
       </div>
     <% end %>
index e18be2b6d31b334b86b842a660ad2f71c4561d85..62d734ff2f017e5ada3ddbdb8283ee3f11687015 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
+  <h1><%= t ".heading" %></h1>
 <% end %>
 
 <%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
index e18be2b6d31b334b86b842a660ad2f71c4561d85..62d734ff2f017e5ada3ddbdb8283ee3f11687015 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
+  <h1><%= t ".heading" %></h1>
 <% end %>
 
 <%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
index 7776d9ee398a89077a3899b1bbe9a79d83ece820..9200b4cec6246b8feebcc7dbaab1eee77fe19a43 100644 (file)
@@ -2,11 +2,11 @@
   <% comments.each do |comment| %>
     <div class="row">
       <div class="col-auto">
-        <%= link_to user_thumbnail(comment.user), user_path(comment.user) %>
+        <%= link_to user_thumbnail(comment.user), comment.user %>
       </div>
       <div class="col">
         <p class="text-muted">
-          <%= t ".comment_from_html", :user_link => link_to(comment.user.display_name, user_path(comment.user)),
+          <%= t ".comment_from_html", :user_link => link_to(comment.user.display_name, comment.user),
                                       :comment_created_at => tag.time(l(comment.created_at.to_datetime, :format => :friendly),
                                                                       :datetime => comment.created_at.xmlschema) %>
         </p>
index 9ef28f1c29007c06664aed58894350b90fcc0081..2d1b78800688bcb17d024b1d603c83fed890dd36 100644 (file)
@@ -1,12 +1,12 @@
 <% reports.each do |report| %>
   <div class="row">
     <div class="col-auto">
-      <%= link_to user_thumbnail(report.user), user_path(report.user) %>
+      <%= link_to user_thumbnail(report.user), report.user %>
     </div>
     <div class="col">
       <p class="text-muted">
         <%= t ".reported_by_html", :category => report.category,
-                                   :user => link_to(report.user.display_name, user_path(report.user)),
+                                   :user => link_to(report.user.display_name, report.user),
                                    :updated_at => tag.time(l(report.updated_at.to_datetime, :format => :friendly),
                                                            :datetime => report.updated_at.xmlschema) %>
       </p>
index 12ddf2b32a162f6e77c909eb4458dbd9a771571f..523f90846a1a35a4e459dddce6a445c72fca0ad9 100644 (file)
           <td><%= t ".states.#{issue.status}" %></td>
           <td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
           <td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
-          <td><%= link_to issue.reported_user.display_name, user_path(issue.reported_user) if issue.reported_user %></td>
+          <td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
           <td>
             <% if issue.user_updated %>
-              <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, user_path(issue.user_updated)),
+              <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
                                                         :time_ago => friendly_date_ago(issue.updated_at) %>
             <% else %>
               <%= friendly_date_ago(issue.updated_at) %>
index e2099f8e6878cab075faf7657940676d408bfb42..ad463c259320daa443ac57d4836a2faf30d4059a 100644 (file)
@@ -21,7 +21,7 @@
       | <%= t ".last_updated_at_html",
               :datetime => tag.time(l(@issue.updated_at.to_datetime, :format => :friendly),
                                     :datetime => @issue.updated_at.xmlschema),
-              :displayname => link_to(@issue.user_updated.display_name, user_path(@issue.user_updated)) %>
+              :displayname => link_to(@issue.user_updated.display_name, @issue.user_updated) %>
     <% end %>
   </small>
 </p>
@@ -45,7 +45,7 @@
     <h3><%= t ".reports_of_this_issue" %></h3>
 
     <% if @read_reports.present? %>
-    <div class="bg-light text-muted">
+    <div class="bg-body-tertiary text-muted">
       <h4><%= t ".read_reports" %></h4>
       <%= render "reports", :reports => @read_reports %>
     </div>
index cfb8d712cc7ebef8873640b03c6f1ebb151a467a..9e28c0771b867d49122a178f181aed49bbd962b3 100644 (file)
@@ -4,7 +4,7 @@
   <% else %>
     <%= render :partial => "layouts/flash", :locals => { :flash => flash } %>
     <% if content_for? :heading %>
-      <div class="content-heading">
+      <div class="content-heading bg-body-secondary border-bottom border-secondary-subtle">
         <div class="content-inner <%= yield :heading_class %>">
           <%= yield :heading %>
         </div>
index 0ee5bf9c0f5c56ae7a3f4bf70eaf166fe05cfda1..724ca552635e4582313d043070a85b3077a5faa7 100644 (file)
@@ -2,6 +2,7 @@
   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <%= javascript_include_tag "es6" unless browser.es6? %>
+  <%= javascript_include_tag "turbo", :type => "module" %>
   <%= javascript_include_tag "application" %>
   <%= javascript_include_tag "i18n/#{I18n.locale}" %>
   <%= stylesheet_link_tag "screen-#{dir}", :media => "screen" %>
@@ -11,6 +12,6 @@
   <%= yield :head %>
   <%= yield :auto_discovery_link_tag %>
   <%= csrf_meta_tag %>
-  <%= csp_meta_tag %>
+  <meta name="csp-nonce" content="<%= content_security_policy_style_nonce %>" />
   <title><%= "#{@title} | " if @title %><%= t "layouts.project_name.title" %></title>
 <% end %>
index e9ded0f75c7f68cda1aec81000512bbf5e9c4d01..d5b6a9e01a4e303b7637f38681dbea1c6190553c 100644 (file)
@@ -1,6 +1,6 @@
-<header class="d-flex text-nowrap closed">
+<header class="d-flex bg-body text-nowrap closed">
   <h1 class="m-0 fw-semibold">
-    <a href="<%= root_path %>" class="text-black text-decoration-none geolink">
+    <a href="<%= root_path %>" class="text-body-emphasis text-decoration-none geolink">
       <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :width => 30, :height => 30, :class => "logo" %>
       <%= t "layouts.project_name.h1" %>
     </a>
   <nav class='secondary'>
     <ul class='mx-1 px-0'>
       <% if Settings.status != "database_offline" && can?(:index, Issue) %>
-        <li class="compact-hide nav-item <%= current_page_class(issues_path) %>">
-          <%= link_to issues_path(:status => "open"), :class => "nav-link" do %>
+        <li class="compact-hide nav-item">
+          <%= link_to issues_path(:status => "open"), :class => header_nav_link_class(issues_path) do %>
             <%= t("layouts.issues") %>
             <%= open_issues_count %>
           <% end -%>
         </li>
       <% end %>
-      <li class="compact-hide nav-item <%= current_page_class(traces_path) %>">
-        <%= link_to t("layouts.gps_traces"), traces_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.gps_traces"), traces_path, :class => header_nav_link_class(traces_path) %>
       </li>
-      <li class="compact-hide nav-item <%= current_page_class(diary_entries_path) %>">
-        <%= link_to t("layouts.user_diaries"), diary_entries_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.user_diaries"), diary_entries_path, :class => header_nav_link_class(diary_entries_path) %>
       </li>
-      <li class="compact-hide nav-item <%= current_page_class(communities_path) %>">
-        <%= link_to t("layouts.communities"), communities_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.communities"), communities_path, :class => header_nav_link_class(communities_path) %>
       </li>
-      <li class="compact-hide nav-item <%= current_page_class(copyright_path) %>">
-        <%= link_to t("layouts.copyright"), copyright_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.copyright"), copyright_path, :class => header_nav_link_class(copyright_path) %>
       </li>
-      <li class="compact-hide nav-item <%= current_page_class(help_path) %>">
-        <%= link_to t("layouts.help"), help_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.help"), help_path, :class => header_nav_link_class(help_path) %>
       </li>
-      <li class="compact-hide nav-item <%= current_page_class(about_path) %>">
-        <%= link_to t("layouts.about"), about_path, :class => "nav-link" %>
+      <li class="compact-hide nav-item">
+        <%= link_to t("layouts.about"), about_path, :class => header_nav_link_class(about_path) %>
       </li>
       <li id="compact-secondary-nav" class="dropdown nav-item">
-        <button class="dropdown-toggle nav-link btn btn-outline-secondary border-0 bg-white text-secondary" type="button" data-bs-toggle="dropdown"><%= t "layouts.more" %></button>
+        <button class="dropdown-toggle nav-link btn btn-outline-secondary border-0 bg-body text-secondary" type="button" data-bs-toggle="dropdown"><%= t "layouts.more" %></button>
         <ul class="dropdown-menu">
           <% if Settings.status != "database_offline" && can?(:index, Issue) %>
-            <li class="<%= current_page_class(issues_path) %>">
+            <li>
               <%= link_to issues_path(:status => "open"), :class => "dropdown-item" do %>
                 <%= t("layouts.issues") %>
                 <%= open_issues_count %>
               <% end -%>
             </li>
           <% end %>
-          <li class="<%= current_page_class(traces_path) %>"><%= link_to t("layouts.gps_traces"), traces_path, :class => "dropdown-item" %></li>
-          <li class="<%= current_page_class(diary_entries_path) %>"><%= link_to t("layouts.user_diaries"), diary_entries_path, :class => "dropdown-item" %></li>
-          <li class="<%= current_page_class(communities_path) %>"><%= link_to t("layouts.communities"), communities_path, :class => "dropdown-item" %></li>
-          <li class="<%= current_page_class(copyright_path) %>"><%= link_to t("layouts.copyright"), copyright_path, :class => "dropdown-item" %></li>
-          <li class="<%= current_page_class(help_path) %>"><%= link_to t("layouts.help"), help_path, :class => "dropdown-item" %></li>
-          <li class="<%= current_page_class(about_path) %>"><%= link_to t("layouts.about"), about_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.gps_traces"), traces_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.user_diaries"), diary_entries_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.communities"), communities_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.copyright"), copyright_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.help"), help_path, :class => "dropdown-item" %></li>
+          <li><%= link_to t("layouts.about"), about_path, :class => "dropdown-item" %></li>
         </ul>
       </li>
     </ul>
     <% if current_user && current_user.id %>
       <div class='d-inline-flex dropdown user-menu logged-in'>
-        <button class='dropdown-toggle btn btn-outline-secondary border-grey bg-white text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
-          <%= user_thumbnail_tiny(current_user, :width => 25, :height => 25, :class => "user_thumbnail_tiny rounded-1") %>
+        <button class='dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
+          <%= user_thumbnail_tiny(current_user, :width => 25, :height => 25, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
           <%= render :partial => "layouts/inbox" %>
           <span class="user-button">
             <span class='username'>
@@ -96,7 +96,7 @@
             <%= t("users.show.my messages") %>
             <span class='badge count-number'><%= number_with_delimiter(current_user.new_messages.size) %></span>
           <% end %>
-          <%= link_to t("users.show.my profile"), user_path(current_user), :class => "dropdown-item" %>
+          <%= link_to t("users.show.my profile"), current_user, :class => "dropdown-item" %>
           <%= link_to t("users.show.my settings"), edit_account_path, :class => "dropdown-item" %>
           <%= link_to t("users.show.my_preferences"), preferences_path, :class => "dropdown-item" %>
           <div class="dropdown-divider"></div>
index 3517673ac6ba085624da2f3ce0a26b01d98a3b87..2352ad0b6931993eb488bb5e5e257b869241d7e9 100644 (file)
@@ -13,6 +13,8 @@
 <%= tag.meta :name => "msapplication-TileColor", :content => "#00a300" %>
 <%= tag.meta :name => "msapplication-TileImage", :content => image_path("mstile-144x144.png") %>
 <%= tag.meta :name => "theme-color", :content => "#ffffff" %>
+<%= turbo_refresh_method_tag :morph %>
+<%= turbo_refresh_scroll_tag :preserve %>
 <%= canonical_tag %>
 <% if Settings.key?(:publisher_url) -%>
 <%= tag.link :rel => "publisher", :href => Settings.publisher_url %>
index 397fdb8289b16fe3b4249d47ae787c4806685af3..c7939aa01c955975688a24a7b37ed851bfbbf83d 100644 (file)
@@ -1,5 +1,5 @@
 <div class="search_forms">
-  <form method="GET" action="<%= search_path %>" class="search_form px-1 py-2">
+  <form method="GET" action="<%= search_path %>" class="search_form bg-body-secondary px-1 py-2">
     <div class="row gx-2 mx-0">
       <div class="col">
         <div class="input-group flex-nowrap">
@@ -16,7 +16,7 @@
     </div>
   </form>
 
-  <form method="GET" action="<%= directions_path %>" class="directions_form pb-3">
+  <form method="GET" action="<%= directions_path %>" class="directions_form bg-body-secondary pb-3">
     <div class="d-flex flex-row-reverse px-3 py-3"><button type="button" class="btn-close" aria-label="<%= t("javascripts.close") %>"></button></div>
 
     <div class="row gx-2 m-1">
index f6a7473a4f6f777d3977a4c4026a19de0efbb12d..65ba2ee6afcf6cdf7dabfef0cd6153f2782d6a75 100644 (file)
@@ -21,7 +21,7 @@
 <% end %>
 
 <% content_for :content do %>
-  <div id="sidebar">
+  <div id="sidebar" class="bg-body">
     <%= render :partial => "layouts/search", :locals => { :autofocus => true } %>
 
     <div id="flash">
       <div class="welcome p-3" hidden>
         <%= render "sidebar_header", :title => t("layouts.intro_header") %>
         <p class="fs-6 fw-light"><%= t "layouts.intro_text" %></p>
-        <p class="fs-6 fw-light"><%= t "layouts.hosting_partners_html",
-                                       :ucl => link_to(t("layouts.partners_ucl"), "https://www.ucl.ac.uk"),
+        <p class="fs-6 fw-light"><%= t "layouts.hosting_partners_2024_html",
                                        :fastly => link_to(t("layouts.partners_fastly"), "https://www.fastly.com/"),
-                                       :bytemark => link_to(t("layouts.partners_bytemark"), "https://www.bytemark.co.uk"),
+                                       :corpmembers => link_to(t("layouts.partners_corpmembers"), "https://osmfoundation.org/wiki/Corporate_Members"),
                                        :partners => link_to(t("layouts.partners_partners"), "https://hardware.openstreetmap.org/thanks/") %>
         </p>
         <div class="d-flex gap-2">
@@ -67,7 +66,7 @@
     </div>
   </noscript>
 
-  <div id="map-ui">
+  <div id="map-ui" class="bg-body">
   </div>
 
   <div id="map" tabindex="2">
diff --git a/app/views/messages/_inbox_count.html.erb b/app/views/messages/_inbox_count.html.erb
deleted file mode 100644 (file)
index 86bb2c4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<h4 id="inbox-count">
-<%= t "messages.inbox.messages",
-      :new_messages => t("messages.inbox.new_messages",
-                         :count => current_user.new_messages.size),
-      :old_messages => t("messages.inbox.old_messages",
-                         :count => current_user.messages.size - current_user.new_messages.size) %>
-</h4>
index 4a552e83e05479a7d6df58d9cd0f23311c3742ef..81ef48402e74bf8630ed33e1fcf19047dd0627b3 100644 (file)
@@ -1,13 +1,13 @@
-<tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" unless message_summary.message_read? %>">
-  <td><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
-  <td><%= link_to message_summary.title, message_path(message_summary) %></td>
-  <td class="text-nowrap"><%= l message_summary.sent_on, :format => :friendly %></td>
+<tr id="inbox-<%= message.id %>" class="message-summary inbox-row<%= "-unread" unless message.message_read? %>">
+  <td><%= link_to message.sender.display_name, user_path(message.sender) %></td>
+  <td><%= link_to message.title, message_path(message) %></td>
+  <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap d-flex justify-content-end gap-1">
-    <%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-unread", :hidden => !message_summary.message_read? } %>
-    <%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-read", :hidden => message_summary.message_read? } %>
-    <%= button_to t(".destroy_button"), message_path(message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
-    <% if message_summary.muted? %>
-      <%= button_to t(".unmute_button"), message_unmute_path(message_summary), :method => :patch, :class => "btn btn-sm btn-secondary" %>
+    <%= button_to t(".unread_button"), message_mark_path(message, :mark => "unread"), :class => "btn btn-sm btn-primary", :form => { :data => { :turbo => true }, :class => "inbox-mark-unread", :hidden => !message.message_read? } %>
+    <%= button_to t(".read_button"), message_mark_path(message, :mark => "read"), :class => "btn btn-sm btn-primary", :form => { :data => { :turbo => true }, :class => "inbox-mark-read", :hidden => message.message_read? } %>
+    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :class => "btn btn-sm btn-danger", :form => { :data => { :turbo => true }, :class => "destroy-message" } %>
+    <% if message.muted? %>
+      <%= button_to t(".unmute_button"), message_unmute_path(message), :method => :patch, :class => "btn btn-sm btn-secondary", :form => { :data => { :turbo => true } } %>
     <% end %>
   </td>
 </tr>
index 2e33962328f6eb83a3119b5024341919c66c4f8f..f11fe3f628c0dc58d6968217164173786565cdcf 100644 (file)
@@ -1,4 +1,4 @@
-<table class="table table-sm align-middle">
+<table class="table table-sm align-middle messages-table">
   <thead>
     <tr>
       <% columns.each do |column| %>
@@ -8,6 +8,6 @@
     </tr>
   </thead>
   <tbody>
-    <%= render :partial => inner_partial, :collection => messages %>
+    <%= render :partial => inner_partial, :collection => messages, :as => "message" %>
   </tbody>
 </table>
diff --git a/app/views/messages/_muted_count.html.erb b/app/views/messages/_muted_count.html.erb
deleted file mode 100644 (file)
index 207973d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<h4 id="muted-count">
-<%= t "messages.muted.messages", :count => current_user.muted_messages.size %>
-</h4>
diff --git a/app/views/messages/_outbox_count.html.erb b/app/views/messages/_outbox_count.html.erb
deleted file mode 100644 (file)
index 5b27f1d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<h4 id="outbox-count">
-<%= t "messages.outbox.messages", :count => current_user.sent_messages.size %>
-</h4>
index 24caba5ab0a495d1b74d6255b5983602cb9ed3e8..683d8d6ad7614e13f0830e54857883c6c86913de 100644 (file)
@@ -1,8 +1,8 @@
-<tr class="inbox-row">
-  <td><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
-  <td><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
-  <td class="text-nowrap"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
+<tr id="outbox-<%= message.id %>" class="message-summary inbox-row">
+  <td><%= link_to message.recipient.display_name, user_path(message.recipient) %></td>
+  <td><%= link_to message.title, message_path(message) %></td>
+  <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap d-flex justify-content-end gap-1">
-    <%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :class => "btn btn-sm btn-danger", :form => { :data => { :turbo => true }, :class => "destroy-message" } %>
   </td>
 </tr>
diff --git a/app/views/messages/destroy.json.jbuilder b/app/views/messages/destroy.json.jbuilder
deleted file mode 100644 (file)
index 65bfd6a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-json.inboxanchor render(:partial => "layouts/inbox")
-json.inbox_count render(:partial => "inbox_count")
-json.outbox_count render(:partial => "outbox_count")
-json.muted_count render(:partial => "muted_count")
index 4d6be787b93fa5866404c8fc5721afe505382a12..835d70a74cd8ee1f7d4c4af4c0ddf381b156f89b 100644 (file)
@@ -4,10 +4,10 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => inbox_messages_path } %>
 
-<%= render :partial => "inbox_count" %>
+<h4><%= t "messages.inbox.messages", :new_messages => t(".new_messages", :count => current_user.new_messages.size), :old_messages => t(".old_messages", :count => current_user.messages.size - current_user.new_messages.size) %></h4>
 
 <% if current_user.messages.size > 0 %>
   <%= render :partial => "messages_table", :locals => { :columns => %w[from subject date], :messages => current_user.messages, :inner_partial => "message_summary" } %>
 <% else %>
-  <div><%= t(".no_messages_yet_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), user_path(current_user))) %></div>
+  <div><%= t(".no_messages_yet_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), dashboard_path)) %></div>
 <% end %>
diff --git a/app/views/messages/mark.json.jbuilder b/app/views/messages/mark.json.jbuilder
deleted file mode 100644 (file)
index 65bfd6a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-json.inboxanchor render(:partial => "layouts/inbox")
-json.inbox_count render(:partial => "inbox_count")
-json.outbox_count render(:partial => "outbox_count")
-json.muted_count render(:partial => "muted_count")
index 8e97abc7f2ff701d4cd9f67d266856cf7d36bc49..40c74e915762cb918a76233ff6faec6943528cdd 100644 (file)
@@ -4,6 +4,6 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => muted_messages_path } %>
 
-<%= render :partial => "muted_count" %>
+<h4><%= t ".messages", :count => current_user.muted_messages.size %></h4>
 
 <%= render :partial => "messages_table", :locals => { :columns => %w[from subject date], :messages => current_user.muted_messages, :inner_partial => "message_summary" } %>
index 7c91722ff1b37045457ea689f3875d90d128956f..2838a5dab1c93ca9ba866e9451f049e0e7ca5eab 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-  <h1><%= t(".send_message_to_html", :name => link_to(@message.recipient.display_name, user_path(@message.recipient))) %></h1>
+  <h1><%= t(".send_message_to_html", :name => link_to(@message.recipient.display_name, @message.recipient)) %></h1>
 <% end %>
 
 <%= bootstrap_form_for @message do |f| %>
index 65fbaf3261c818aa79613e6b6a3c6b546b69a9b3..5cb357f6fa19c899e88eb4970ca7caeb0844816e 100644 (file)
@@ -4,10 +4,10 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => outbox_messages_path } %>
 
-<%= render :partial => "outbox_count" %>
+<h4><%= t ".messages", :count => current_user.sent_messages.size %></h4>
 
 <% if current_user.sent_messages.size > 0 %>
   <%= render :partial => "messages_table", :locals => { :columns => %w[to subject date], :messages => current_user.sent_messages, :inner_partial => "sent_message_summary" } %>
 <% else %>
-  <div class="messages"><%= t(".no_sent_messages_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), user_path(current_user))) %></div>
+  <div class="messages"><%= t(".no_sent_messages_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), dashboard_path)) %></div>
 <% end %>
index f0742280f76e410cc5ebcdc8ab9c9830d7b5e32b..8fe5084692072d1a9e57e5c1bfc93c5b27b14f3c 100644 (file)
@@ -2,13 +2,13 @@
   <h1><%= @message.title %></h1>
 <% end %>
 
-<div class='mb-3 border-bottom border-grey py-1 d-flex gap-1 flex-wrap'>
+<div class='mb-3 border-bottom border-secondary-subtle py-1 d-flex gap-1 flex-wrap'>
   <% if current_user == @message.recipient %>
     <%= user_thumbnail_tiny @message.sender %>
-    <%= link_to @message.sender.display_name, user_path(@message.sender) %>
+    <%= link_to @message.sender.display_name, @message.sender %>
   <% else %>
     <%= user_thumbnail_tiny @message.recipient %>
-    <%= link_to @message.recipient.display_name, user_path(@message.recipient) %>
+    <%= link_to @message.recipient.display_name, @message.recipient %>
   <% end %>
   <span class="ms-auto">
     <%= l @message.sent_on, :format => :friendly %>
index ef625163400ceac7c75eb9c903fffa30c4c0fc95..d93978480e8bfe2b4d98094d88640a73d58514b0 100644 (file)
@@ -1,7 +1,7 @@
 <% content_for :heading do %>
   <h1><%= t ".heading", :user => @user.display_name %></h1>
   <p><%= t ".subheading_html",
-           :user => link_to(@user.display_name, user_path(@user)),
+           :user => link_to(@user.display_name, @user),
            :submitted => tag.span(t(".subheading_submitted"), :class => "px-2 py-1 bg-primary bg-opacity-25"),
            :commented => tag.span(t(".subheading_commented"), :class => "px-2 py-1 bg-white") %></p>
 <% end %>
index 8576ea3ab77c7cdbf761d8167f12f71d7a01896b..b8fe11f75b1ffdbdc7bab0e02d006e3bd73982e4 100644 (file)
@@ -2,7 +2,7 @@
   <h1><%= t ".title" %></h1>
 <% end %>
 
-<p><%= t(".request_access_html", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, user_path(current_user))) %></p>
+<p><%= t(".request_access_html", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, current_user)) %></p>
 
 <%= bootstrap_form_tag do |f| %>
   <%= f.hidden_field :oauth_token, :value => @token.token %>
index b207e72e2e6f979df549e0987aa0b73957e63731..d755be52cae4b7d3f0bb931f9de4351f6d13db8a 100644 (file)
@@ -56,9 +56,9 @@
       <input class="form-check-input" type="checkbox" name="updatehome" value="1" <% unless current_user.home_location? %> checked <% end %> id="updatehome" />
       <label class="form-check-label" for="updatehome"><%= t ".update home location on click" %></label>
     </div>
-    <%= tag.div "", :id => "map", :class => "content_map set_location border border-grey rounded" %>
+    <%= tag.div "", :id => "map", :class => "content_map set_location border border-secondary-subtle rounded" %>
   </fieldset>
 
   <%= f.primary t(".save") %>
-    <%= link_to t(".cancel"), user_path(current_user), :class => "btn btn-link" %>
+    <%= link_to t(".cancel"), current_user, :class => "btn btn-link" %>
 <% end %>
index 22d17cd5d5c3ad503e17be5cc3724456f2e834e5..5b9749a5113b7f2c3caa686b98c84b7b3103c75a 100644 (file)
@@ -5,7 +5,7 @@
 
 <p>
   <b><%= t ".user" %></b>
-  <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %>
+  <%= link_to @redaction.user.display_name, @redaction.user %>
 </p>
 <div class="richtext text-break">
   <b><%= t ".description" %></b>
index f15430efa554627f3b9a9dcf708818a40b6ee656..ffaad054af63f4b89f731415627b08a35e4ad03a 100644 (file)
       <label class="form-label"><%= t ".with external" %></label>
 
       <ul class='list-inline' id="login_auth_buttons">
-        <li class="list-inline-item me-3"><%= link_to image_tag("openid.png", :alt => t(".auth_providers.openid.title")), "#", :id => "openid_open_url", :title => t(".auth_providers.openid.title") %></li>
+        <li class="list-inline-item me-3">
+          <%= link_to image_tag("openid.png",
+                                :alt => t(".auth_providers.openid.title"),
+                                :size => "36"),
+                      "#",
+                      :id => "openid_open_url",
+                      :title => t(".auth_providers.openid.title") %>
+        </li>
+
         <% %w[google facebook microsoft github wikipedia].each do |provider| %>
           <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
             <li class="list-inline-item me-3"><%= auth_button provider, provider %></li>
index 22b3db54228fbd1d03e2eb5d43c138acb65dba87..f471cbbbf93bf89457e081abaa67ec5a91c67aa3 100644 (file)
@@ -4,7 +4,7 @@
     <div id="<%= id %>_preview" class="richtext_preview richtext text-break"></div>
   </div>
   <div id="<%= id %>_help" class="col-sm-4 richtext_help">
-    <div class="card bg-light h-100">
+    <div class="card bg-body-tertiary h-100">
       <div class="card-body">
         <%= render :partial => "shared/#{type}_help" %>
         <%= submit_tag t(".edit"), :id => "#{id}_doedit", :class => "richtext_doedit btn btn-primary", :disabled => true %>
index f6f6ba1370f0f4cca2ecef3001c3ba0157486d70..7dbed1514839add65c39a04f2e47a0d4c3b15ce1 100644 (file)
@@ -1,3 +1,4 @@
+<% content_for(:content_class) { "bg-body-secondary" } %>
 <% I18n.with_locale @locale do %>
   <%= tag.div :lang => @locale, :dir => t("html.dir") do %>
     <div class="container-lg attr">
         </div>
       </div>
       <div class='row'>
-        <div class="px-5 py-4 bg-dark">
+        <div class="px-5 py-4 bg-black bg-opacity-75">
           <h1 class="text-white fw-light"><%= t ".used_by_html", :name => tag.span("OpenStreetMap", :class => "user-name") %></h1>
         </div>
       </div>
     </div>
 
-    <div class='bg-white px-5 py-4'>
+    <div class='bg-body px-5 py-4'>
       <p class="lead"><%= t ".lede_text" %></p>
 
       <%= render :layout => "about_section", :locals => { :icon => "local", :title => "local_knowledge" } do %>
       <% end %>
 
       <%= render :layout => "about_section", :locals => { :id => "partners", :icon => "partners", :title => "partners" } do %>
-        <p><%= t "layouts.hosting_partners_html", :ucl => link_to(t("layouts.partners_ucl"), "https://www.ucl.ac.uk"),
-                                                  :fastly => link_to(t("layouts.partners_fastly"), "https://www.fastly.com/"),
-                                                  :bytemark => link_to(t("layouts.partners_bytemark"), "https://www.bytemark.co.uk"),
-                                                  :partners => link_to(t("layouts.partners_partners"), "https://hardware.openstreetmap.org/thanks/") %>
+        <p><%= t "layouts.hosting_partners_2024_html", :fastly => link_to(t("layouts.partners_fastly"), "https://www.fastly.com/"),
+                                                       :corpmembers => link_to(t("layouts.partners_corpmembers"), "https://osmfoundation.org/wiki/Corporate_Members"),
+                                                       :partners => link_to(t("layouts.partners_partners"), "https://hardware.openstreetmap.org/thanks/") %>
         </p>
       <% end %>
     </div>
index bb66c665ad147445d2b337c6795997efb3301d40..9b9499e6586f4f117a7bc760a49741f3c0640bdf 100644 (file)
@@ -6,7 +6,7 @@
   <%= hidden_field_tag "format", "osm", :autocomplete => "off" %>
 
   <div class='export_area_inputs'>
-    <div class='export_boxy border border-grey rounded'>
+    <div class='export_boxy border border-secondary-subtle rounded bg-body-secondary'>
       <%= text_field_tag("maxlat", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control mx-auto") %>
       <div class="clearfix">
         <%= text_field_tag("minlon", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control my-2") %>
index f4edc0e215c248c9a66a325163d4861fed5efe04..538e7f1ec39222745b9a9aabe5a74f93c95447c8 100644 (file)
@@ -1,6 +1,6 @@
-<%= image_tag(url_for(:controller => :traces, :action => :icon, :id => description.id, :display_name => description.user.display_name)) %>
-<% if description.size -%>
-<%= t ".description_with_count", :count => description.size, :user => description.user.display_name %>
+<%= image_tag trace_icon_url(trace.user, trace) %>
+<% if trace.size -%>
+<%= t ".description_with_count", :count => trace.size, :user => trace.user.display_name %>
 <% else -%>
-<%= t ".description_without_count", :user => description.user.display_name %>
+<%= t ".description_without_count", :user => trace.user.display_name %>
 <% end -%>
index 9ee58cf22122beff7633c1f02bd71c73f5c67e73..72794355bc447185d4d9243c714d6f8a49112e13 100644 (file)
@@ -2,7 +2,7 @@
   <td>
     <% if Settings.status != "gpx_offline" %>
       <% if trace.inserted %>
-        <a href="<%= url_for :controller => "traces", :action => "show", :id => trace.id, :display_name => trace.user.display_name %>"><img src="<%= url_for :controller => "traces", :action => "icon", :id => trace.id, :display_name => trace.user.display_name %>" border="0" alt="" /></a>
+        <%= link_to image_tag(trace_icon_path(trace.user, trace), :alt => "", :class => "trace_image"), show_trace_path(trace.user, trace) %>
       <% else %>
         <span class="text-danger"><%= t ".pending" %></span>
       <% end %>
@@ -11,7 +11,7 @@
   <td>
     <ul class="list-inline mb-0">
       <li class="list-inline-item">
-        <%= link_to trace.name, :controller => "traces", :action => "show", :display_name => trace.user.display_name, :id => trace.id %>
+        <%= link_to trace.name, show_trace_path(trace.user, trace) %>
       </li>
 
       <% if trace.inserted? %>
       </li>
     </ul>
     <p class="text-muted mb-0">
-      <%= friendly_date_ago(trace.timestamp) %>
-      <%= t ".by" %> <%= link_to trace.user.display_name, user_path(trace.user) %>
-      <% if !trace.tags.empty? %>
-        <%= t ".in" %>
-        <%= safe_join(trace.tags.collect { |tag| link_to_tag tag.tag }, ", ") %>
+      <% if trace.tags.empty? %>
+        <%= t ".details_without_tags_html", :time_ago => friendly_date_ago(trace.timestamp),
+                                            :user => link_to(trace.user.display_name, trace.user) %>
+      <% else %>
+        <%= t ".details_with_tags_html", :time_ago => friendly_date_ago(trace.timestamp),
+                                         :user => link_to(trace.user.display_name, trace.user),
+                                         :tags => safe_join(trace.tags.collect { |tag| link_to_tag tag.tag }, ", ") %>
       <% end %>
     </p>
     <p class="fst-italic mb-0">
       <nav class="secondary-actions">
         <ul>
           <li>
-            <%= link_to t(".view_map"), { :controller => "site", :action => "index", :mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}" } %>
+            <%= link_to t(".view_map"), root_path(:mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}") %>
           </li>
           <li>
-            <%= link_to t(".edit_map"), { :controller => "site", :action => "edit", :gpx => trace.id } %>
+            <%= link_to t(".edit_map"), edit_path(:gpx => trace.id) %>
           </li>
         </ul>
       </nav>
index 09fe9c510515c0eae9aa3650a5edb1ebdf2f8280..2059178cfa91303ca496f68839d590f6db097141 100644 (file)
@@ -2,7 +2,7 @@
   <h1><%= t ".heading", :name => @trace.name %></h1>
 <% end %>
 
-<img src="<%= url_for :controller => "traces", :action => "picture", :id => @trace.id, :display_name => @trace.user.display_name %>">
+<%= image_tag trace_picture_path(@trace.user, @trace), :class => "trace_image" %>
 
 <%= bootstrap_form_for @trace do |f| %>
   <%= f.text_field :name, :disabled => true %>
index 36641fec0b4e2f14c8f7191f0be3f084655840de..ad5bd45b2248d663bb94a514d4dc82dd1bf1b2b1 100644 (file)
@@ -21,11 +21,11 @@ xml.rss("version" => "2.0",
       xml.item do
         xml.title trace.name
 
-        xml.link url_for(:controller => :traces, :action => :show, :id => trace.id, :display_name => trace.user.display_name, :only_path => false)
-        xml.guid url_for(:controller => :traces, :action => :show, :id => trace.id, :display_name => trace.user.display_name, :only_path => false)
+        xml.link show_trace_url(trace.user, trace)
+        xml.guid show_trace_url(trace.user, trace)
 
         xml.description do
-          xml.cdata! render(:partial => "description", :object => trace, :formats => [:html])
+          xml.cdata! render(:partial => "description", :object => trace, :as => "trace", :formats => [:html])
         end
 
         xml.dc :creator, trace.user.display_name
index 63ade87d7dd6eb9445789d141d404c60da672dfa..6e27ac7e4e5a38e11434809a89228e7cc905a065 100644 (file)
       <% end %>
     </ul>
   </nav>
-  <ul class="nav nav-tabs flex-column flex-sm-row">
-    <% if @target_user.blank? %>
-      <!-- public traces -->
-      <li class="nav-item">
-        <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link active" } %>
-      </li>
-      <% if current_user %>
-        <li class="nav-item">
-          <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link" } %>
-        </li>
-      <% end %>
-    <% elsif current_user && current_user == @target_user %>
-      <li class="nav-item">
-        <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link" } %>
-      </li>
-      <!-- my traces -->
-      <li class="nav-item">
-        <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link active" } %>
-      </li>
-    <% else %>
-      <!-- public_traces_from @target_user -->
-      <li class="nav-item">
-        <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link" } %>
-      </li>
-      <% if current_user && current_user != @target_user %>
-        <li class="nav-item">
-          <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link" } %>
-        </li>
-      <% end %>
-      <li class="nav-item">
-        <%= link_to t(".public_traces_from", :user => @target_user&.display_name), { :action => "mine" }, { :class => "nav-link active" } %>
-      </li>
-    <% end %>
 
-    <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>
+  <div class="d-flex flex-column flex-md-row-reverse align-items-md-end">
+    <div class="pb-1 ps-1 d-flex flex-wrap flex-shrink-0 gap-1 justify-content-end">
+      <%= 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="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" %>
+    </div>
+
+    <div class="flex-grow-1">
+      <ul class="nav nav-tabs">
+        <% if @target_user.blank? %>
+          <!-- public traces -->
+          <li class="nav-item">
+            <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link active" } %>
+          </li>
+          <% if current_user %>
+            <li class="nav-item">
+              <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link" } %>
+            </li>
+          <% end %>
+        <% elsif current_user && current_user == @target_user %>
+          <li class="nav-item">
+            <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link" } %>
+          </li>
+          <!-- my traces -->
+          <li class="nav-item">
+            <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link active" } %>
+          </li>
+        <% else %>
+          <!-- traces_from @target_user -->
+          <li class="nav-item">
+            <%= link_to t(".all_traces"), { :controller => "traces", :action => "index", :display_name => nil }, { :class => "nav-link" } %>
+          </li>
+          <% if current_user && current_user != @target_user %>
+            <li class="nav-item">
+              <%= link_to t(".my_traces"), { :action => "mine" }, { :class => "nav-link" } %>
+            </li>
+          <% end %>
+          <li class="nav-item">
+            <%= link_to t(".traces_from", :user => @target_user&.display_name), { :controller => "traces", :action => "index", :display_name => @target_user&.display_name }, { :class => "nav-link active" } %>
+          </li>
+        <% end %>
+      </ul>
+    </div>
+  </div>
 <% end %>
 
 <% content_for :auto_discovery_link_tag do %>
@@ -68,8 +72,8 @@
   <%= render "shared/pagination",
              :newer_key => "traces.trace_paging_nav.newer",
              :older_key => "traces.trace_paging_nav.older",
-             :newer_id => @newer_traces && @traces.first.id,
-             :older_id => @older_traces && @traces.last.id %>
+             :newer_id => @newer_traces_id,
+             :older_id => @older_traces_id %>
 
   <table id="trace_list" class="table table-borderless table-striped">
     <tbody>
@@ -80,8 +84,8 @@
   <%= render "shared/pagination",
              :newer_key => "traces.trace_paging_nav.newer",
              :older_key => "traces.trace_paging_nav.older",
-             :newer_id => @newer_traces && @traces.first.id,
-             :older_id => @older_traces && @traces.last.id %>
+             :newer_id => @newer_traces_id,
+             :older_id => @older_traces_id %>
 <% else %>
   <h2><%= t ".empty_title" %></h2>
   <p><%= t ".empty_upload_html", :upload_link => link_to(t(".upload_new"), new_trace_path),
index 69f58b5b8e73c08cd91874b74ea4baa0fd7a83ec..51b21f9828e0f72cfdd56488f0e6657e9098a442 100644 (file)
@@ -4,7 +4,7 @@
 
 <% if Settings.status != "gpx_offline" %>
   <% if @trace.inserted %>
-    <img src="<%= url_for :controller => "traces", :action => "picture", :id => @trace.id, :display_name => @trace.user.display_name %>">
+    <%= image_tag trace_picture_path(@trace.user, @trace), :class => "trace_image" %>
   <% else %>
     <span class="text-danger"><%= t ".pending" %></span>
   <% end %>
               :latitude => tag.span(number_with_delimiter(@trace.latitude), :class => "latitude"),
               :longitude => tag.span(number_with_delimiter(@trace.longitude), :class => "longitude") %>
       </div>
-      (<%= link_to t(".map"), :controller => "site", :action => "index", :mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%= link_to t(".edit"), :controller => "site", :action => "edit", :gpx => @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>)</td>
+      (<%= link_to t(".map"), root_path(:mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}") %> / <%= link_to t(".edit"), edit_path(:gpx => @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}") %>)</td>
   </tr>
   <% end %>
   <tr>
     <th><%= t ".owner" %></th>
-    <td><%= link_to @trace.user.display_name, user_path(@trace.user) %></td>
+    <td><%= link_to @trace.user.display_name, @trace.user %></td>
   </tr>
   <tr>
     <th><%= t ".description" %></th>
@@ -63,6 +63,6 @@
     <% if current_user == @trace.user %>
       <%= link_to t(".edit_trace"), edit_trace_path(@trace), :class => "btn btn-outline-primary" %>
     <% end %>
-    <%= link_to t(".delete_trace"), { :controller => "traces", :action => "destroy", :id => @trace.id }, { :method => :delete, :class => "btn btn-outline-danger", :data => { :confirm => t(".confirm_delete") } } %>
+    <%= link_to t(".delete_trace"), @trace, { :method => :delete, :class => "btn btn-outline-danger", :data => { :confirm => t(".confirm_delete") } } %>
   </div>
 <% end %>
index f39efb571ecc477b044fe5e7f829f99ca793b2e7..50fe74e4cdf4616776bdea979c5008097cd15842 100644 (file)
@@ -1,9 +1,9 @@
 <tr>
   <% if show_user_name %>
-  <td><%= link_to block.user.display_name, user_path(block.user) %></td>
+  <td><%= link_to block.user.display_name, block.user %></td>
   <% end %>
   <% if show_creator_name %>
-  <td><%= link_to block.creator.display_name, user_path(block.creator) %></td>
+  <td><%= link_to block.creator.display_name, block.creator %></td>
   <% end %>
   <td><%= h truncate(block.reason) %></td>
   <td><%= h block_status(block) %></td>
@@ -11,7 +11,7 @@
     <% if block.revoker_id.nil? %>
       <%= t(".not_revoked") %>
     <% else %>
-      <%= link_to block.revoker.display_name, user_path(block.revoker) %>
+      <%= link_to block.revoker.display_name, block.revoker %>
     <% end %>
   </td>
   <td><%= link_to t(".show"), block %></td>
index b0b73c5a0b55c35dc084fa8baa8ddc8e9fa4f270..c508dcd47a6351f3007ba138843d6009541b80e2 100644 (file)
   <%= render :partial => "block", :locals => { :show_revoke_link => show_revoke_link, :show_user_name => show_user_name, :show_creator_name => show_creator_name }, :collection => @user_blocks %>
 </table>
 
-<nav class='secondary-actions'>
-  <ul>
-    <% if @user_blocks_pages.current_page.number > 1 -%>
-      <li><%= link_to t(".previous"), @params.merge(:page => @user_blocks_pages.current_page.number - 1) %></li>
-    <% else -%>
-      <li><%= t(".previous") %></li>
-    <% end -%>
-
-    <li><%= t(".showing_page", :page => @user_blocks_pages.current_page.number) %></li>
-
-    <% if @user_blocks_pages.current_page.number < @user_blocks_pages.page_count -%>
-      <li><%= link_to t(".next"), @params.merge(:page => @user_blocks_pages.current_page.number + 1) %></li>
-    <% else -%>
-      <li><%= t(".next") %></li>
-    <% end -%>
-  </ul>
-</nav>
+<%= render "shared/pagination",
+           :newer_key => "user_blocks.blocks.newer",
+           :older_key => "user_blocks.blocks.older",
+           :newer_id => @newer_user_blocks_id,
+           :older_id => @older_user_blocks_id %>
diff --git a/app/views/user_blocks/_navigation.html.erb b/app/views/user_blocks/_navigation.html.erb
new file mode 100644 (file)
index 0000000..f53f5cf
--- /dev/null
@@ -0,0 +1,44 @@
+<ul class="nav nav-tabs">
+  <li class="nav-item">
+    <%= link_to t(".all_blocks"),
+                user_blocks_path,
+                :class => ["nav-link", { :active => action_name == "index" }] %>
+  </li>
+  <% if current_user&.blocks&.exists? %>
+    <li class="nav-item">
+      <%= link_to t(".blocks_on_me"),
+                  user_blocks_on_path(current_user),
+                  :class => ["nav-link", { :active => action_name == "blocks_on" && current_user == @user }] %>
+    </li>
+  <% end %>
+  <% on_user = @user || @user_block&.user %>
+  <% if on_user != current_user && on_user&.blocks&.exists? %>
+    <li class="nav-item">
+      <%= link_to t(".blocks_on_user", :user => on_user.display_name),
+                  user_blocks_on_path(on_user),
+                  :class => ["nav-link", { :active => action_name == "blocks_on" }] %>
+    </li>
+  <% end %>
+  <% if current_user&.blocks_created&.exists? %>
+    <li class="nav-item">
+      <%= link_to t(".blocks_by_me"),
+                  user_blocks_by_path(current_user),
+                  :class => ["nav-link", { :active => action_name == "blocks_by" && current_user == @user }] %>
+    </li>
+  <% end %>
+  <% by_user = @user || @user_block&.creator %>
+  <% if by_user != current_user && by_user&.blocks_created&.exists? %>
+    <li class="nav-item">
+      <%= link_to t(".blocks_by_user", :user => by_user.display_name),
+                  user_blocks_by_path(by_user),
+                  :class => ["nav-link", { :active => action_name == "blocks_by" }] %>
+    </li>
+  <% end %>
+  <% if @user_block %>
+    <li class="nav-item">
+      <%= link_to t(".block", :id => @user_block.id),
+                  user_block_path(@user_block),
+                  :class => ["nav-link", { :active => action_name == "show" }] %>
+    </li>
+  <% end %>
+</ul>
index d5283925bf9e61a1b788103875a78d07b2326936..7fa0a4fbbae9f62b3ae69118eb479eb951fb3a59 100644 (file)
@@ -1,6 +1,9 @@
 <% @title = t(".title", :name => @user.display_name) %>
+
+<% content_for :heading_class, "pb-0" %>
 <% content_for :heading do %>
-  <h1><%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %></h1>
+  <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
+  <%= render :partial => "navigation" %>
 <% end %>
 
 <% unless @user_blocks.empty? %>
index 7d1f83ce357e533edee42e529b6c27d8c172d0b6..0c15b8866d73d70e2e133153e4cbc2bb7416fd3e 100644 (file)
@@ -1,6 +1,9 @@
 <% @title = t(".title", :name => @user.display_name) %>
+
+<% content_for :heading_class, "pb-0" %>
 <% content_for :heading do %>
-  <h1><%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %></h1>
+  <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
+  <%= render :partial => "navigation" %>
 <% end %>
 
 <% unless @user_blocks.empty? %>
index db7c5e057f360d5c80ceab91cdbfee6e4fe86589..a5b165e9ad790e5c8b918b471a775ebf4091d0cf 100644 (file)
@@ -1,8 +1,6 @@
 <% @title = t ".title", :name => @user_block.user.display_name %>
 <% content_for :heading do %>
-  <h1><%= t(".heading_html",
-            :name => link_to(@user_block.user.display_name,
-                             user_path(@user_block.user))) %></h1>
+  <h1><%= t(".heading_html", :name => link_to(@user_block.user.display_name, @user_block.user)) %></h1>
   <nav class='secondary-actions'>
     <ul class='clearfix'>
       <li><%= link_to t(".show"), @user_block %></li>
index 57cef6055992722523a71dc475feb718b6c1423a..4d200b516cd574b7f469ce4e17b2854a13d6b68e 100644 (file)
@@ -1,6 +1,9 @@
 <% @title = t(".title") %>
+
+<% content_for :heading_class, "pb-0" %>
 <% content_for :heading do %>
   <h1><%= t(".heading") %></h1>
+  <%= render :partial => "navigation" %>
 <% end %>
 
 <% unless @user_blocks.empty? %>
index c390134ba3db8482127f0c0a34a085a147e39aeb..3de6aa539ec86d48964524437641f1ca86b5f07f 100644 (file)
@@ -1,8 +1,6 @@
 <% @title = t ".title", :name => @user.display_name %>
 <% content_for :heading do %>
-  <h1><%= t(".heading_html",
-            :name => link_to(@user.display_name,
-                             user_path(@user))) %></h1>
+  <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
 <% end %>
 <%= bootstrap_form_for(@user_block) do |f| %>
   <%= hidden_field_tag "display_name", @user.display_name, :autocomplete => "off" %>
index eb1cc4cbebb4e9414043f828b753f03577ba25f8..224e1e4bb9fab67f8c4727459b7f151f33c08baf 100644 (file)
@@ -4,10 +4,8 @@
 
 <% content_for :heading do %>
   <h1><%= t(".heading_html",
-            :block_on => link_to(@user_block.user.display_name,
-                                 user_path(@user_block.user)),
-            :block_by => link_to(@user_block.creator.display_name,
-                                 user_path(@user_block.creator))) %></h1>
+            :block_on => link_to(@user_block.user.display_name, @user_block.user),
+            :block_by => link_to(@user_block.creator.display_name, @user_block.creator)) %></h1>
 <% end %>
 
 <% if @user_block.ends_at > Time.now %>
@@ -23,7 +21,7 @@
       </div>
     </div>
 
-    <%= f.primary t(".revoke") %>
+    <%= f.submit t(".revoke"), :class => "btn btn-danger" %>
   <% end %>
 
 <% else %>
index 7fef69b57fabddf64f3bf19f92529a7f0bf93532..f9a17d3e627c2670e76c3d7efc09b3f29b069795 100644 (file)
@@ -1,10 +1,7 @@
-<% @title = t ".title",
-              :block_on => @user.display_name %>
+<% @title = t ".title", :block_on => @user.display_name %>
 
 <% content_for :heading do %>
-  <h1><%= t ".heading_html",
-            :block_on => link_to(@user.display_name,
-                                 user_path(@user)) %></h1>
+  <h1><%= t ".heading_html", :block_on => link_to(@user.display_name, @user) %></h1>
 <% end %>
 
 <% unless @user.blocks.active.empty? %>
@@ -19,7 +16,7 @@
       </div>
     </div>
 
-    <%= f.primary t(".revoke") %>
+    <%= f.submit t(".revoke"), :class => "btn btn-danger" %>
   <% end %>
 
 <% else %>
index 03bcd30364d414e0d28e74d5626646e56c542823..7b30d19202ee56c34b76868969af639de6045390 100644 (file)
@@ -2,31 +2,18 @@
               :block_on => @user_block.user.display_name,
               :block_by => @user_block.creator.display_name) %>
 
+<% content_for :heading_class, "pb-0" %>
 <% content_for :heading do %>
   <h1><%= t(".heading_html",
-            :block_on => link_to(@user_block.user.display_name,
-                                 user_path(@user_block.user)),
-            :block_by => link_to(@user_block.creator.display_name,
-                                 user_path(@user_block.creator))) %></h1>
-  <nav class='secondary-actions'>
-    <ul class='clearfix'>
-      <% if @user_block.ends_at > Time.now.getutc %>
-        <% if current_user and current_user.id == @user_block.creator_id %>
-          <li><%= link_to t(".edit"), edit_user_block_path(@user_block) %></li>
-        <% end %>
-        <% if can?(:revoke, UserBlock) %>
-          <li><%= link_to t(".revoke"), revoke_user_block_path(@user_block) %></li>
-        <% end %>
-      <% end %>
-      <li><%= link_to t(".back"), user_blocks_path %></li>
-    </ul>
-  </nav>
+            :block_on => link_to(@user_block.user.display_name, @user_block.user),
+            :block_by => link_to(@user_block.creator.display_name, @user_block.creator)) %></h1>
+  <%= render :partial => "navigation" %>
 <% end %>
 
 <dl class="row">
   <% if @user_block.revoker %>
     <dt class="col-sm-3"><%= t ".revoker" %></dt>
-    <dd class="col-sm-9"><%= link_to @user_block.revoker.display_name, user_path(@user_block.revoker) %></dd>
+    <dd class="col-sm-9"><%= link_to @user_block.revoker.display_name, @user_block.revoker %></dd>
   <% end %>
 
   <dt class="col-sm-3"><%= t ".created" %></dt>
   <dt class="col-sm-3"><%= t ".reason" %></dt>
   <dd class="col-sm-9"><div class="richtext text-break"><%= @user_block.reason.to_html %></div></dd>
 </dl>
+
+<% if @user_block.ends_at > Time.now.getutc && (current_user&.id == @user_block.creator_id ||
+                                                can?(:revoke, UserBlock)) %>
+  <div>
+    <% if current_user&.id == @user_block.creator_id %>
+      <%= link_to t(".edit"), edit_user_block_path(@user_block), :class => "btn btn-outline-primary" %>
+    <% end %>
+    <% if can?(:revoke, UserBlock) %>
+      <%= link_to t(".revoke"), revoke_user_block_path(@user_block), :class => "btn btn-outline-danger" %>
+    <% end %>
+  </div>
+<% end %>
index cf9e7ed6bc4336b74ae4fa7f1884e376b116f0b5..8779a4bba011d014a956507214b3667a68303e1a 100644 (file)
@@ -25,7 +25,7 @@
         <tr>
           <td>
             <%= user_thumbnail_tiny user %>
-            <%= link_to user.display_name, user_path(user) %>
+            <%= link_to user.display_name, user %>
           </td>
           <td class="text-nowrap text-end">
             <%= link_to t(".table.tbody.unmute"), user_mute_path(user), :method => :delete, :class => "btn btn-sm btn-primary" %>
index e419aed1d43d2b22d7cde109f4fef91d45ab2391..ef50ccaf2fb4bffa27c19ce8950fbbd6b7e13209 100644 (file)
@@ -6,12 +6,12 @@
     <p>
       <% if user.creation_ip %>
         <%= t "users.index.summary_html",
-              :name => link_to(user.display_name, user_path(user)),
+              :name => link_to(user.display_name, user),
               :ip_address => link_to(user.creation_ip, :ip => user.creation_ip),
               :date => l(user.created_at, :format => :friendly) %>
       <% else %>
         <%= t "users.index.summary_no_ip_html",
-              :name => link_to(user.display_name, user_path(user)),
+              :name => link_to(user.display_name, user),
               :date => l(user.created_at, :format => :friendly) %>
       <% end %>
     </p>
index d2b2f6d3b40daeb0bc4c95ab185a012d6dd4b1d8..f1239bc1ec5d9b54ec9badd4f22cea85f4f3644c 100644 (file)
@@ -3,10 +3,9 @@
   <div class='header-illustration new-user-main'>
     <h1><%= t "users.new.title" %></h1>
   </div>
-  <div class='header-illustration new-user-arm'></div>
 <% end %>
 
-<div class="message">
-  <h1><%= t "users.new.no_auto_account_create" %></h1>
-  <h2><%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %></h2>
+<div class="mx-auto my-0">
+  <p><strong><%= t "users.new.no_auto_account_create" %></strong></p>
+  <p><%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %></p>
 </div>
index 12d5ae7af232edb801b0f5340d86435a1a2c2d39..e8031900f8a1f12201e2a3c143fcd901c0bc2176 100644 (file)
 
 <% unless @users.empty? %>
   <%= form_tag do %>
+    <div class="row">
+      <div class="col">
+        <%= render "shared/pagination",
+                   :newer_key => "users.index.newer",
+                   :older_key => "users.index.older",
+                   :newer_id => @newer_users_id,
+                   :older_id => @older_users_id %>
+      </div>
+      <div class="col col-auto">
+        <%= t ".found_users", :count => @users_count %>
+      </div>
+    <div>
+
     <%= hidden_field_tag :status, params[:status] if params[:status] %>
     <%= hidden_field_tag :ip, params[:ip] if params[:ip] %>
     <%= hidden_field_tag :page, params[:page] if params[:page] %>
       <thead>
         <tr>
           <td colspan="2">
-            <%= t ".showing",
-                  :page => @user_pages.current_page.number,
-                  :first_item => @user_pages.current_page.first_item,
-                  :last_item => @user_pages.current_page.last_item,
-                  :items => @user_pages.item_count,
-                  :count => @user_pages.current_page.last_item - @user_pages.current_page.first_item + 1 %>
-            <% if @user_pages.page_count > 1 %>
-            | <%= raw pagination_links_each(@user_pages, {}) { |n| link_to n, @params.merge(:page => n) } %>
-            <% end %>
           </td>
           <td>
             <%= check_box_tag "user_all", "1", false %>
       <%= render @users %>
     </table>
 
+    <div class="row">
+      <div class="col">
+        <%= render "shared/pagination",
+                   :newer_key => "users.index.newer",
+                   :older_key => "users.index.older",
+                   :newer_id => @newer_users_id,
+                   :older_id => @older_users_id %>
+      </div>
+      <div class="col col-auto">
+        <%= t ".found_users", :count => @users_count %>
+      </div>
+    <div>
+
     <div>
       <%= submit_tag t(".confirm"), :name => "confirm", :class => "btn btn-primary" %>
       <%= submit_tag t(".hide"), :name => "hide", :class => "btn btn-primary" %>
index 253945b9b6d2529d1cbc344453c257f924dcdd7f..9da3f8f046884b37279fb2a579852006b277e41a 100644 (file)
               <dd class="list-inline-item"><%= @user.email %></dd>
               <% unless @user.creation_ip.nil? -%>
                 <dt class="list-inline-item m-0"><%= t ".created from" %></dt>
-                <dd class="list-inline-item"><%= @user.creation_ip %></dd>
+                <dd class="list-inline-item"><%= link_to @user.creation_ip, users_path(:ip => @user.creation_ip) %></dd>
               <% end -%>
               <dt class="list-inline-item m-0"><%= t ".status" %></dt>
-              <dd class="list-inline-item"><%= @user.status.capitalize %></dd>
+              <dd class="list-inline-item"><%= link_to @user.status.capitalize, users_path(:status => @user.status) %></dd>
               <dt class="list-inline-item m-0"><%= t ".spam score" %></dt>
               <dd class="list-inline-item"><%= @user.spam_score %></dd>
             </dl>
index e2ece8f1a9b3049f681e91d4175456af5e988de0..340aaf04e2ac7c4604e8322844560f87e4759dde 100644 (file)
@@ -30,7 +30,7 @@
     <% end %>
   </div>
 
-  <div id="contributorTerms" class="legale border border-grey rounded">
+  <div id="contributorTerms" class="legale border border-secondary-subtle rounded">
     <%= render :partial => "terms" %>
   </div>
 
diff --git a/config/eslint.js b/config/eslint.js
new file mode 100644 (file)
index 0000000..a52b1e6
--- /dev/null
@@ -0,0 +1,135 @@
+const globals = require("globals");
+const js = require("@eslint/js");
+
+module.exports = [
+  js.configs.recommended,
+  {
+    languageOptions: {
+      ecmaVersion: 2015,
+      sourceType: "script",
+      globals: {
+        ...globals.browser,
+        ...globals.jquery,
+        Cookies: "readonly",
+        I18n: "readonly",
+        L: "readonly",
+        OSM: "writable",
+        Matomo: "readonly",
+        Qs: "readonly",
+        Turbo: "readonly",
+        updateLinks: "readonly"
+      }
+    },
+    rules: {
+      "accessor-pairs": "error",
+      "array-bracket-newline": ["error", "consistent"],
+      "array-bracket-spacing": "error",
+      "array-callback-return": "error",
+      "block-scoped-var": "error",
+      "block-spacing": "error",
+      "brace-style": ["error", "1tbs", { allowSingleLine: true }],
+      "comma-dangle": "error",
+      "comma-spacing": "error",
+      "comma-style": "error",
+      "computed-property-spacing": "error",
+      "curly": ["error", "multi-line", "consistent"],
+      "dot-location": ["error", "property"],
+      "dot-notation": "error",
+      "eol-last": "error",
+      "eqeqeq": ["error", "smart"],
+      "func-call-spacing": "error",
+      "indent": ["error", 2, {
+        SwitchCase: 1,
+        VariableDeclarator: "first",
+        FunctionDeclaration: { parameters: "first" },
+        FunctionExpression: { parameters: "first" },
+        CallExpression: { arguments: "first" }
+      }],
+      "key-spacing": "error",
+      "keyword-spacing": "error",
+      "no-alert": "warn",
+      "no-array-constructor": "error",
+      "no-caller": "error",
+      "no-console": "warn",
+      "no-div-regex": "error",
+      "no-eq-null": "error",
+      "no-eval": "error",
+      "no-extend-native": "error",
+      "no-extra-bind": "error",
+      "no-extra-label": "error",
+      "no-floating-decimal": "error",
+      "no-implicit-coercion": "warn",
+      "no-implicit-globals": "warn",
+      "no-implied-eval": "error",
+      "no-invalid-this": "error",
+      "no-iterator": "error",
+      "no-labels": "error",
+      "no-label-var": "error",
+      "no-lone-blocks": "error",
+      "no-lonely-if": "error",
+      "no-loop-func": "error",
+      "no-mixed-operators": "error",
+      "no-multiple-empty-lines": "error",
+      "no-multi-spaces": "error",
+      "no-multi-str": "error",
+      "no-negated-condition": "error",
+      "no-nested-ternary": "error",
+      "no-new": "error",
+      "no-new-func": "error",
+      "no-new-object": "error",
+      "no-new-wrappers": "error",
+      "no-octal-escape": "error",
+      "no-param-reassign": "error",
+      "no-process-env": "error",
+      "no-proto": "error",
+      "no-script-url": "error",
+      "no-self-compare": "error",
+      "no-sequences": "error",
+      "no-throw-literal": "error",
+      "no-trailing-spaces": "error",
+      "no-undef-init": "error",
+      "no-undefined": "error",
+      "no-unmodified-loop-condition": "error",
+      "no-unneeded-ternary": "error",
+      "no-unused-expressions": "off",
+      "no-unused-vars": ["error", { caughtErrors: "none" }],
+      "no-useless-call": "error",
+      "no-useless-concat": "error",
+      "no-useless-return": "error",
+      "no-use-before-define": ["error", { functions: false }],
+      "no-void": "error",
+      "no-warning-comments": "warn",
+      "no-whitespace-before-property": "error",
+      "object-curly-newline": ["error", { consistent: true }],
+      "object-curly-spacing": ["error", "always"],
+      "object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
+      "operator-linebreak": ["error", "after"],
+      "padded-blocks": ["error", "never"],
+      "quote-props": ["error", "consistent-as-needed", { keywords: true, numbers: true }],
+      "quotes": ["error", "double"],
+      "radix": ["error", "always"],
+      "semi": ["error", "always"],
+      "semi-spacing": "error",
+      "semi-style": "error",
+      "space-before-blocks": "error",
+      "space-before-function-paren": ["error", { named: "never" }],
+      "space-in-parens": "error",
+      "space-infix-ops": "error",
+      "space-unary-ops": "error",
+      "switch-colon-spacing": "error",
+      "wrap-iife": "error",
+      "wrap-regex": "error",
+      "yoda": "error"
+    }
+  },
+  {
+    files: ["config/eslint.js"],
+    languageOptions: {
+      ecmaVersion: 2019,
+      sourceType: "commonjs",
+      globals: {
+        ...globals.commonjs
+      }
+    }
+  }
+];
diff --git a/config/eslint.json b/config/eslint.json
deleted file mode 100644 (file)
index 3b878d4..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-{
-  "env": {
-    "browser": true,
-    "jquery": true
-  },
-  "extends": [
-    "eslint:recommended"
-  ],
-  "globals": {
-    "Cookies": "readonly",
-    "I18n": "readonly",
-    "L": "readonly",
-    "OSM": "writable",
-    "Matomo": "readonly",
-    "Qs": "readonly",
-    "updateLinks": "readonly"
-  },
-  "rules": {
-    "accessor-pairs": "error",
-    "array-bracket-newline": ["error", "consistent"],
-    "array-bracket-spacing": "error",
-    "array-callback-return": "error",
-    "block-scoped-var": "error",
-    "block-spacing": "error",
-    "brace-style": ["error", "1tbs", { "allowSingleLine": true }],
-    "comma-dangle": "error",
-    "comma-spacing": "error",
-    "comma-style": "error",
-    "computed-property-spacing": "error",
-    "curly": ["error", "multi-line", "consistent"],
-    "dot-location": ["error", "property"],
-    "dot-notation": "error",
-    "eol-last": "error",
-    "eqeqeq": ["error", "smart"],
-    "func-call-spacing": "error",
-    "indent": ["error", 2, {
-      "SwitchCase": 1,
-      "VariableDeclarator": "first",
-      "FunctionDeclaration": { "parameters": "first" },
-      "FunctionExpression": { "parameters": "first" },
-      "CallExpression": { "arguments": "first" }
-    }],
-    "key-spacing": "error",
-    "keyword-spacing": "error",
-    "no-alert": "warn",
-    "no-array-constructor": "error",
-    "no-caller": "error",
-    "no-console": "warn",
-    "no-div-regex": "error",
-    "no-eq-null": "error",
-    "no-eval": "error",
-    "no-extend-native": "error",
-    "no-extra-bind": "error",
-    "no-extra-label": "error",
-    "no-floating-decimal": "error",
-    "no-implicit-coercion": "warn",
-    "no-implicit-globals": "warn",
-    "no-implied-eval": "error",
-    "no-invalid-this": "error",
-    "no-iterator": "error",
-    "no-labels": "error",
-    "no-label-var": "error",
-    "no-lone-blocks": "error",
-    "no-lonely-if": "error",
-    "no-loop-func": "error",
-    "no-mixed-operators": "error",
-    "no-multiple-empty-lines": "error",
-    "no-multi-spaces": "error",
-    "no-multi-str": "error",
-    "no-negated-condition": "error",
-    "no-nested-ternary": "error",
-    "no-new": "error",
-    "no-new-func": "error",
-    "no-new-object": "error",
-    "no-new-wrappers": "error",
-    "no-octal-escape": "error",
-    "no-param-reassign": "error",
-    "no-process-env": "error",
-    "no-proto": "error",
-    "no-script-url": "error",
-    "no-self-compare": "error",
-    "no-sequences": "error",
-    "no-throw-literal": "error",
-    "no-trailing-spaces": "error",
-    "no-undef-init": "error",
-    "no-undefined": "error",
-    "no-unmodified-loop-condition": "error",
-    "no-unneeded-ternary": "error",
-    "no-unused-expressions": "off",
-    "no-unused-vars": "error",
-    "no-useless-call": "error",
-    "no-useless-concat": "error",
-    "no-useless-return": "error",
-    "no-use-before-define": ["error", { "functions": false }],
-    "no-void": "error",
-    "no-warning-comments": "warn",
-    "no-whitespace-before-property": "error",
-    "object-curly-newline": ["error", { "consistent": true }],
-    "object-curly-spacing": ["error", "always"],
-    "object-property-newline": ["error", { "allowAllPropertiesOnSameLine": true }],
-    "operator-linebreak": ["error", "after"],
-    "padded-blocks": ["error", "never"],
-    "quote-props": ["error", "consistent-as-needed", { "keywords": true, "numbers": true }],
-    "quotes": ["error", "double"],
-    "radix": ["error", "always"],
-    "semi": ["error", "always"],
-    "semi-spacing": "error",
-    "semi-style": "error",
-    "space-before-blocks": "error",
-    "space-before-function-paren": ["error", { "named": "never" }],
-    "space-in-parens": "error",
-    "space-infix-ops": "error",
-    "space-unary-ops": "error",
-    "switch-colon-spacing": "error",
-    "wrap-iife": "error",
-    "wrap-regex": "error",
-    "yoda": "error"
-  }
-}
index d02140f27ce693bf2af327c91da1944b94c7cfe9..13d5f8b09fa3746e26f05ccbf2e96edc7643cec5 100644 (file)
@@ -278,8 +278,6 @@ af:
     update:
       success: Gebruikersbesonderhede suksesvol bygewerk.
   browse:
-    created: Geskep
-    closed: Gesluit
     version: Weergawe
     in_changeset: Wysigingstel
     anonymous: anoniem
@@ -295,21 +293,6 @@ af:
     view_history: Beskou geskiedenis
     view_details: Bekyk detail
     location: 'Ligging:'
-    changeset:
-      title: 'Wysigingstel: %{id}'
-      belongs_to: Skrywer
-      node: Knooppunte (%{count})
-      node_paginated: Knooppunte (%{x}-%{y} van %{count})
-      way: Weë (%{count})
-      way_paginated: Weë (%{x}-%{y} van %{count})
-      relation: Verwantskappe (%{count})
-      relation_paginated: Verwantskappe (%{x}-%{y} of %{count})
-      changesetxml: Wysigingstel XML
-      osmchangexml: osmWysiging XML
-      join_discussion: Meld aan en gesels saam
-      discussion: Bespreking
-      still_open: Wysigingstel is steeds oop - bespreking sal oopmaak sodra die wysigingstel
-        gesluit is.
     node:
       title_html: 'Knooppunt: %{name}'
       history_title_html: 'Knooppuntgeskiedenis: %{name}'
@@ -416,6 +399,24 @@ af:
       feed:
         title: Wysigingstel %{id}
         title_comment: Wysigingstel %{id} - %{comment}
+        created: Geskep
+        closed: Gesluit
+        belongs_to: Skrywer
+    show:
+      title: 'Wysigingstel: %{id}'
+      discussion: Bespreking
+      join_discussion: Meld aan en gesels saam
+      still_open: Wysigingstel is steeds oop - bespreking sal oopmaak sodra die wysigingstel
+        gesluit is.
+      changesetxml: Wysigingstel XML
+      osmchangexml: osmWysiging XML
+    paging_nav:
+      nodes: Knooppunte (%{count})
+      nodes_paginated: Knooppunte (%{x}-%{y} van %{count})
+      ways: Weë (%{count})
+      ways_paginated: Weë (%{x}-%{y} van %{count})
+      relations: Verwantskappe (%{count})
+      relations_paginated: Verwantskappe (%{x}-%{y} of %{count})
     timeout:
       sorry: Jammer, die lys wysigingstelle wat u versoek het, neem lank om uit te
         haal.
@@ -1396,7 +1397,6 @@ af:
       daarvan is gratis en val onder 'n oop-lisensie.
     intro_2_create_account: Skep 'n gebruikerrekening
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: vennote
     tou: Gebruiksvoorwaardes
     osm_offline: Die OpenStreetMap-databasis is tans vanlyn terwyl noodsaaklike onderhoud
@@ -1525,8 +1525,6 @@ af:
       heading: Wagwoord vergeet?
       email address: 'E-posadres:'
       new password button: Herstel wagwoord
-    create:
-      notice email cannot find: E-posadres is ongelukkig onverkrygbaar, jammer.
     edit:
       title: Herstel wagwoord
       heading: Herstel wagwoord vir %{user}
@@ -1797,8 +1795,6 @@ af:
       public: OPENBAAR
       identifiable: IDENTIFISEERBAAR
       private: PRIVAAT
-      by: deur
-      in: in
     index:
       public_traces: Openbare GPS-spore
       public_traces_from: Openbare GPS-spore van %{user}
@@ -1971,9 +1967,6 @@ af:
     index:
       title: Gebruikers
       heading: Gebruikers
-      showing:
-        one: Bladsy %{page} (%{first_item} van %{items})
-        other: Bladsy %{page} (%{first_item}-%{last_item} van %{items})
       summary_html: '%{name} geskep vanaf %{ip_address} op %{date}'
       summary_no_ip_html: '%{name} geskep op %{date}'
       confirm: Bevestig geselekteerde gebruikers
@@ -2050,7 +2043,6 @@ af:
       revoke: Herroep!
       confirm: Is u seker?
       reason: 'Rede agter die versperring:'
-      back: Wys alle versperrings
       revoker: 'Herroep deur:'
       needs_view: Die gebruiker moet aanmeld alvorens hierdie versperring verwyder
         sal word.
@@ -2065,9 +2057,6 @@ af:
       reason: Rede vir die versperring
       status: Status
       revoker_name: Herroep deur
-      showing_page: Bladsy %{page}
-      next: Volgende »
-      previous: « Vorige
   notes:
     index:
       heading: Notas van %{user}
index b3bd19cf73b88fba4cef75530a78d2f4e06daa39..6c4cd9088f7186a179cb6f7ac57ef3b7e08d7393 100644 (file)
@@ -144,10 +144,6 @@ aln:
         emailin per konfirmim.
       success: Informatat e shfrytëzuesit u ndryshuan me sukses.
   browse:
-    changeset:
-      title: Ndryshim
-      changesetxml: Ndryshim en XML
-      osmchangexml: Ndryshim i OSM-s en XML
     relation_member:
       entry_role_html: '%{type} %{name} asht si %{role}'
       type:
@@ -202,6 +198,10 @@ aln:
       feed:
         title: Ndryshim %{id}
         title_comment: Ndryshimi %{id} - %{comment}
+    show:
+      title: Ndryshim
+      changesetxml: Ndryshim en XML
+      osmchangexml: Ndryshim i OSM-s en XML
   dashboards:
     contact:
       km away: '%{count}km larg'
@@ -781,10 +781,6 @@ aln:
       new password button: Ndrysho fjalkalimin
       help_text: Shkrueje email adresen që je regjistrue me to, do t'ju deromi një
         lidhe rreth ksaj ku ju muni me ndrru fjalkalimin
-    create:
-      notice email on way: Na vjen keq që e keni hup :-( po ni email ka me ju ardh
-        së shpejti edhe muni me ricaktu.
-      notice email cannot find: Smujtëm me gjet qat email adres, na vjen keq.
     edit:
       title: Ricakto fjalëkalimin
       heading: Ricakto fjalëkalimin për %{user}
@@ -988,8 +984,6 @@ aln:
       identifiable: E identifikueshme
       private: PRIVATE
       trackable: E GJURMUESHME
-      by: nga
-      in: në
     index:
       public_traces: Të dhanat publike të GPS-it
       public_traces_from: Të dhana publike të GPS-it pej %{user}
@@ -1131,9 +1125,6 @@ aln:
     index:
       title: Perdoruesit
       heading: Perdoruesit
-      showing:
-        one: Tu e kallxu faqen %{page} (%{first_item} prej %{items})
-        other: Tu e kallxu faqen %{page} (%{first_item}-%{last_item} prej %{items})
       summary_html: '%{name} u kriju prej %{ip_address} në %{date}'
       summary_no_ip_html: '%{name} u krijue me %{date}'
       confirm: Konfirmo Anëtarët e Selektum
@@ -1228,7 +1219,6 @@ aln:
       revoke: Tërheq!
       confirm: A jeni i sigurt?
       reason: 'Arsyeja për bllok:'
-      back: Shiko të gjitha blloqet
       revoker: 'Revoker:'
       needs_view: Shfrytëzuesi duhet të hyj para se të fshihet ky bllok.
     block:
index 527d73710dae147854a5db3f525c7692a9c9c3cd..d2cb9ff56ea351eb38242b12c9b60ca0dcafc0b4 100644 (file)
@@ -34,6 +34,7 @@
 # Author: Mohammed Qubati
 # Author: Mutarjem horr
 # Author: NEHAOUA
+# Author: NO1xMOHAMED
 # Author: Omda4wady
 # Author: OsamaK
 # Author: Ruila
@@ -90,6 +91,9 @@ ar:
       messages:
         invalid_email_address: لا يبدو أنه عنوان بريد إلكتروني صالح
         email_address_not_routable: غير قابل للتوجيه
+      models:
+        user_mute:
+          is_already_muted: تمت كتم الصوت بالفعل
     models:
       acl: لائحة التحكم بالوصول
       changeset: حزمة التغييرات
@@ -325,6 +329,8 @@ ar:
         reopened_at_by_html: تم التنشيط %{when} مِن قِبَل %{user}
       rss:
         title: ملاحظات خريطة الشارع المفتوحة
+        description_all: قائمة بالملاحظات التي تم الإبلاغ عنها أو التعليق عليها أو
+          إغلاقها
         description_area: قائمة بالملاحظات أو التقارير أو التعليق عليها أو إغلاقها
           في منطقتك [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
         description_item: خلاصة rss للملاحظة %{id}
@@ -359,6 +365,8 @@ ar:
         retain_changeset_discussions: سيجري الاحتفاظ بمناقشات مجموعة التغييرات الخاصة
           بك، إن وجدت.
         retain_email: سيتم الاحتفاظ بعنوان بريدك الإلكتروني.
+        recent_editing_html: نظرًا لأنك قمت بتحرير حسابك مؤخرًا، فلا يمكن حذفه حاليًا.
+          سيكون الحذف ممكنًا خلال %{time}.
         confirm_delete: هل أنت متأكد؟
         cancel: إلغاء
   accounts:
@@ -404,15 +412,10 @@ ar:
     destroy:
       success: تم حذف الحساب.
   browse:
-    created: تم الإنشاء
-    closed: تم الإغلاق
-    created_ago_html: تم إنشاء %{time_ago}
-    closed_ago_html: مغلق %{time_ago}
-    created_ago_by_html: تم إنشاء %{time_ago} بواسطة %{user}
-    closed_ago_by_html: مغلق %{time_ago} بواسطة %{user}
     deleted_ago_by_html: تم حذف %{time_ago} بواسطة %{user}
     edited_ago_by_html: تم تحرير %{time_ago} بواسطة %{user}
     version: الإصدار
+    redacted_version: النسخة المنقحة
     in_changeset: مجموعة التغييرات
     anonymous: مجهول
     no_comment: (لا تعليق)
@@ -426,25 +429,9 @@ ar:
       other: '%{count} طريقٍ'
     download_xml: تنزيل XML
     view_history: عرض السجل
+    view_unredacted_history: عرض التاريخ غير المُحرف
     view_details: شاهد التفاصيل
     location: 'الموقع:'
-    changeset:
-      title: حزمة التغييرات %{id}
-      belongs_to: الصانع
-      node: العقد (%{count})
-      node_paginated: العقد (%{x}-%{y} من %{count})
-      way: الطرق (%{count})
-      way_paginated: الطرق (%{x}-%{y} من %{count})
-      relation: الصلات (%{count})
-      relation_paginated: الصلات (%{x}-%{y} من %{count})
-      hidden_comment_by_html: تعليق مخفي من%{time_ago} %{user}
-      comment_by_html: تعليق من %{user}%{time_ago}
-      changesetxml: حزمة التغييرات XML
-      osmchangexml: osmChange XML
-      join_discussion: ادخل للاشتراك في المناقشة
-      discussion: مناقشة
-      still_open: ما زالت مجموعة التغييرات مفتوحة - سيتم فتح المناقشة بمجرد إغلاق
-        مجموعة التغييرات.
     node:
       title_html: 'عقدة: %{name}'
       history_title_html: 'تاريخ العقدة: %{name}'
@@ -546,6 +533,46 @@ ar:
       feed:
         title: حزمة التغييرات %{id}
         title_comment: حزمة التغييرات %{id} - %{comment}
+        created: تم الإنشاء
+        closed: تم الإغلاق
+        belongs_to: الصانع
+    subscribe:
+      heading: الاشتراك في مناقشة التغييرات التالية؟
+      button: الاشتراك في المناقشة
+    unsubscribe:
+      heading: الاشتراك في مناقشة التغييرات التالية؟
+      button: إلغاء الاشتراك من المناقشة
+    heading:
+      title: تغييرات %{id}
+      created_by_html: تم إنشاؤه بواسطة %{link_user} على %{created}.
+    no_such_entry:
+      title: لا يوجد مثل هذه التغييرات
+      heading: 'لا يوجد إدخال بالمعرف: %{id}'
+      body: عذرًا، لا يوجد مجموعة تغيير بالمعرف %{id}. يرجى التحقق من الإملاء، أو
+        ربما الرابط الذي قمت بالنقر عليه خاطئ.
+    show:
+      title: حزمة التغييرات %{id}
+      created: 'تم إنشاؤه: %{when}'
+      closed: 'مغلق: %{when}'
+      created_ago_html: تم إنشاء %{time_ago}
+      closed_ago_html: مغلق %{time_ago}
+      created_ago_by_html: تم إنشاء %{time_ago} بواسطة %{user}
+      closed_ago_by_html: مغلق %{time_ago} بواسطة %{user}
+      discussion: مناقشة
+      join_discussion: ادخل للاشتراك في المناقشة
+      still_open: ما زالت مجموعة التغييرات مفتوحة - سيتم فتح المناقشة بمجرد إغلاق
+        مجموعة التغييرات.
+      comment_by_html: تعليق من %{user}%{time_ago}
+      hidden_comment_by_html: تعليق مخفي من%{time_ago} %{user}
+      changesetxml: حزمة التغييرات XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: العقد (%{count})
+      nodes_paginated: العقد (%{x}-%{y} من %{count})
+      ways: الطرق (%{count})
+      ways_paginated: الطرق (%{x}-%{y} من %{count})
+      relations: الصلات (%{count})
+      relations_paginated: الصلات (%{x}-%{y} من %{count})
     timeout:
       sorry: عذرا، لقد استغرقت قائمة مجموعات التغييرات اللتي طلبتها وقتا طويلا لاستردادها.
   changeset_comments:
@@ -607,6 +634,7 @@ ar:
     show:
       title: يوميات %{user} | %{title}
       user_title: يومية %{user}
+      discussion: مناقشة
       leave_a_comment: اترك تعليقًا
       login_to_leave_a_comment_html: '%{login_link} لترك تعليق'
       login: تسجيل الدخول
@@ -624,6 +652,7 @@ ar:
         zero: لا تعليق
         one: '%{count} تعليق'
         other: '%{count} تعليقات'
+      no_comments: لا يوجد تعليقات
       edit_link: عدل هذه المدخلة
       hide_link: اخفِ هذه المدخلة
       unhide_link: إظهار هذا الإدخال
@@ -659,7 +688,16 @@ ar:
       comment: التعليق
       newer_comments: التعليقات الأحدث
       older_comments: التعليقات الأقدم
+    subscribe:
+      heading: اشترك في مناقشة مدونة الدخول التالية؟
+      button: الاشتراك في المناقشة
+    unsubscribe:
+      heading: إلغاء الاشتراك في مناقشة إدخال اليوميات التالية؟
+      button: إلغاء الاشتراك من المناقشة
   doorkeeper:
+    errors:
+      messages:
+        account_selection_required: يتطلب خادم المصادقة اختيار حساب المستخدم النهائي
     flash:
       applications:
         create:
@@ -1572,11 +1610,7 @@ ar:
     intro_text: خريطة الشارع المفتوحة هي خريطة العالم، أُنشِئت بواسطة أشخاص مثلك وحرة
       الاستخدام برخصة مفتوحة.
     intro_2_create_account: أنشئ حساب مستخدم
-    hosting_partners_html: يتم دعم الاستضافة بواسطة %{ucl} و%{fastly} و%{bytemark}
-      و%{partners} آخرين.
-    partners_ucl: UCL
     partners_fastly: بسرعة
-    partners_bytemark: استضافة Bytemark
     partners_partners: الشركاء
     tou: شروط الاستخدام
     osm_offline: حاليًا قاعدة بيانات خريطة الشارع المفتوحة مغلقة بينما يتم الانتهاء
@@ -1823,10 +1857,6 @@ ar:
       new password button: أعد ضبط كلمة السر
       help_text: أدخل عنوان البريد الإلكتروني الذي استخدمته للتسجيل، وسوف نرسل عليه
         رابطا يمكنك استخدامه لإعادة تعيين كلمة المرور.
-    create:
-      notice email on way: نأسف لأنك أضعتها :-( ولكن هناك رسالة إلكترونية في طريقها
-        إليك ستمكنك من إعادة تعيينها قريبًا.
-      notice email cannot find: معذرةً، تعذر إيجاد عنوان البريد الإلكتروني.
     edit:
       title: إعادة ضبط كلمة السر
       heading: إعادة تعيين كلمة السر %{user}
@@ -2315,8 +2345,6 @@ ar:
       identifiable: محدد الهوية
       private: خاص
       trackable: تعقبي
-      by: مِن قِبَل
-      in: في
     index:
       public_traces: آثار جي بي إس عمومية
       public_traces_from: آثار جي بي إس عمومية من %{user}
@@ -2537,9 +2565,6 @@ ar:
     index:
       title: المستخدمون
       heading: المستخدمون
-      showing:
-        one: صفحة %{page} (%{first_item} من %{items})
-        other: صفحة %{page} (%{first_item}-%{last_item} من %{items})
       summary_html: '%{name} تم إنشاؤها من %{ip_address} في %{date}'
       summary_no_ip_html: '%{name} تم إنشاؤه في %{date}'
       confirm: تأكيد المستخدمين المحددين
@@ -2663,7 +2688,6 @@ ar:
       revoke: ابطل!
       confirm: هل أنت متأكد؟
       reason: 'سبب العرقلة:'
-      back: اعرض كل العرقلات
       revoker: 'المبطل:'
       needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقلة.
     block:
@@ -2677,9 +2701,6 @@ ar:
       reason: السبب العرقلة
       status: الحالة
       revoker_name: مُبطل بواسطة
-      showing_page: الصفحة %{page}
-      next: التالي »
-      previous: « السابق
   user_mutes:
     index:
       title: المستخدمون الممنوعون
index a7fafef891f6a7b23ddce6d50a8269d0e256fb71..2f182162bf5a437c0b0f12f44875060c11e768c2 100644 (file)
@@ -124,10 +124,6 @@ arz:
         لمذكره تأكيد العنوان الإلكترونى الجديد.
       success: تم تحديث معلومات المستخدم بنجاح.
   browse:
-    changeset:
-      title: 'حزمه التغييرات: %{id}'
-      changesetxml: حزمه التغييرات إكس إم إل
-      osmchangexml: osmChange XML
     relation_member:
       entry_role_html: '%{type} %{name} كــ %{role}'
       type:
@@ -170,6 +166,10 @@ arz:
       feed:
         title: حزمه التغييرات %{id}
         title_comment: حزمه التغييرات %{id} - %{comment}
+    show:
+      title: 'حزمه التغييرات: %{id}'
+      changesetxml: حزمه التغييرات إكس إم إل
+      osmchangexml: osmChange XML
   dashboards:
     contact:
       km away: على بعد %{count}كم
@@ -702,10 +702,6 @@ arz:
       new password button: إعاده ضبط كلمه المرور
       help_text: أدخل عنوان البريد الإلكترونى الذى استخدمته للتسجيل ، وسوف نرسل عليه
         رابط يمكنك استخدامه لإعاده تعيين كلمه المرور.
-    create:
-      notice email on way: نأسف لأنك أضعتها :-( ولكن هناك رساله إلكترونيه فى طريقها
-        إليك ستمكنك من إعاده تعيينها قريبًا.
-      notice email cannot find: تعذّر إيجاد عنوان البريد الإلكترونى، نحن آسفون.
     edit:
       title: إعاده ضبط كلمه المرور
       heading: إعاده تعيين كلمه المرور %{user}
@@ -844,8 +840,6 @@ arz:
       edit_map: عدّل الخريطة
       public: عام
       private: خاص
-      by: بواسطة
-      in: في
     index:
       public_traces: آثار جى بى إس عمومية
       public_traces_from: آثار جى بى إس عموميه من %{user}
@@ -1044,7 +1038,6 @@ arz:
       revoke: ابطل!
       confirm: هل أنت متأكد؟
       reason: 'سبب العرقلة:'
-      back: اعرض كل العرقلات
       revoker: 'المبطل:'
       needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقله.
     block:
index 4c7c087ab1342676e09227adbd4bf0f975f05e32..3d6b92272c2eb4c31f5c103a579fc1a06b79645d 100644 (file)
@@ -27,7 +27,7 @@ ast:
         create: Espublizar
         update: Actualizar
       issue_comment:
-        create: Añedir comentariu
+        create: Añader comentariu
       message:
         create: Unviar
       client_application:
@@ -259,8 +259,6 @@ ast:
     destroy:
       success: Desanicióse la cuenta.
   browse:
-    created: Creáu
-    closed: Zarráu
     version: Versión
     in_changeset: Conxuntu de cambios
     anonymous: anónimu
@@ -270,21 +268,6 @@ ast:
     view_history: Ver historial
     view_details: Ver detalles
     location: 'Allugamientu:'
-    changeset:
-      title: 'Conxuntu de cambios: %{id}'
-      belongs_to: Autor
-      node: Nuedos (%{count})
-      node_paginated: Nuedos (%{x}-%{y} de %{count})
-      way: Víes (%{count})
-      way_paginated: Víes (%{x}-%{y} de %{count})
-      relation: Rellaciones (%{count})
-      relation_paginated: Rellaciones (%{x}-%{y} de %{count})
-      changesetxml: Conxuntu de cambeos XML
-      osmchangexml: osmChange XML
-      join_discussion: Anicia sesión pa xunite al alderique
-      discussion: Alderique
-      still_open: El conxuntu de cambios inda ta abiertu; l'alderique abriráse en
-        zarrando'l conxuntu de cambios.
     node:
       title_html: 'Nuedu: %{name}'
       history_title_html: 'Historial del nuedu: %{name}'
@@ -383,6 +366,24 @@ ast:
       feed:
         title: Conxuntu de cambeos %{id}
         title_comment: Conxuntu de cambeos %{id} - %{comment}
+        created: Creáu
+        closed: Zarráu
+        belongs_to: Autor
+    show:
+      title: 'Conxuntu de cambios: %{id}'
+      discussion: Alderique
+      join_discussion: Anicia sesión pa xunite al alderique
+      still_open: El conxuntu de cambios inda ta abiertu; l'alderique abriráse en
+        zarrando'l conxuntu de cambios.
+      changesetxml: Conxuntu de cambeos XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Nuedos (%{count})
+      nodes_paginated: Nuedos (%{x}-%{y} de %{count})
+      ways: Víes (%{count})
+      ways_paginated: Víes (%{x}-%{y} de %{count})
+      relations: Rellaciones (%{count})
+      relations_paginated: Rellaciones (%{x}-%{y} de %{count})
     timeout:
       sorry: Llevó demasiao tiempu baxar la llista de conxuntos de cambeos que pidisti.
   changeset_comments:
@@ -1224,10 +1225,6 @@ ast:
     intro_text: OpenStreetMap ye un mapa del mundu, creáu por persones como tu y d'usu
       llibre baxo una llicencia abierta.
     intro_2_create_account: Crear una cuenta d'usuariu
-    hosting_partners_html: L'agospiamientu tien l'encontu de %{ucl}, %{bytemark},  y
-      otros %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: asociaos
     tou: Condiciones d'usu
     osm_offline: La base de datos d'OpenStreetMap anguaño ta desconectada mentanto
@@ -1425,10 +1422,6 @@ ast:
       new password button: Reestablecer contraseña
       help_text: Escribi les señes de corréu qu'usasti pa date d'alta, unviarémoste
         un enllaz que pues usar pa reestablecer la contraseña.
-    create:
-      notice email on way: Sentimos que la perdieres :-( pero hai un corréu en camín
-        pa que puedas reaniciala ceo.
-      notice email cannot find: Nun s'alcontró esa direición de corréu.
     edit:
       title: Reestablecer contraseña
       heading: Reestablecer la contraseña de %{user}
@@ -1813,8 +1806,6 @@ ast:
       identifiable: IDENTIFICABLE
       private: PRIVÁU
       trackable: RASTREABLE
-      by: por
-      in: en
     index:
       public_traces: Traces GPS públiques
       public_traces_from: Traces GPS públiques de %{user}
@@ -2023,9 +2014,6 @@ ast:
     index:
       title: Usuarios
       heading: Usuarios
-      showing:
-        one: Páxina %{page} (%{first_item} de %{items})
-        other: Páxina %{page} (%{first_item}-%{last_item} de %{items})
       summary_html: '%{name} creáu dende %{ip_address} el %{date}'
       summary_no_ip_html: '%{name} creáu el %{date}'
       confirm: Confirmar los usuarios esbillaos
@@ -2149,7 +2137,6 @@ ast:
       revoke: ¡Desaniciar!
       confirm: ¿Tas seguru?
       reason: 'Motivu del bloquéu:'
-      back: Ver tolos bloqueos
       revoker: 'Desaniciador:'
       needs_view: L'usuariu tien de coneutase enantes de que se desanicie esti bloquéu.
     block:
@@ -2163,9 +2150,6 @@ ast:
       reason: Motivu del bloquéu
       status: Estáu
       revoker_name: Desaniciáu por
-      showing_page: Páxina %{page}
-      next: Siguiente »
-      previous: « Anterior
   notes:
     index:
       title: Notes unviaes o comentaes por %{user}
index 32e8bc34789feea7355be9d926d4b2d701076068..415294bae4ed0dbb6c9163f78f9b334c32b94531 100644 (file)
@@ -5,6 +5,7 @@
 # Author: Cekli829
 # Author: Huseyn
 # Author: Mushviq Abdulla
+# Author: NMW03
 # Author: Ruila
 # Author: SalihB
 # Author: Toghrul Rahimli
@@ -162,8 +163,6 @@ az:
         link text: bu nədir?
       save changes button: Dəyişiklikləri yadda saxla
   browse:
-    created: Yaradılıb
-    closed: Bağlanıb
     version: Versiya
     in_changeset: Dəyişikliklər
     anonymous: anonim
@@ -173,12 +172,6 @@ az:
     view_history: Tarixçəyə bax
     view_details: Xüsusiyyətlərə bax
     location: 'Yerləşməsi:'
-    changeset:
-      title: 'Dəyişikliklər dəsti: %{id}'
-      belongs_to: Müəllif
-      node: (%{count}) nöqtə
-      changesetxml: XML dəyişikliklər dəsti
-      osmchangexml: osmChange XML
     relation:
       members: İştirakçılar
     relation_member:
@@ -247,6 +240,15 @@ az:
       feed:
         title: Dəyişikliklər dəsti  %{id}
         title_comment: Dəyişikliklər dəsti %{id} - %{comment}
+        created: Yaradılıb
+        closed: Bağlanıb
+        belongs_to: Müəllif
+    show:
+      title: 'Dəyişikliklər dəsti: %{id}'
+      changesetxml: XML dəyişikliklər dəsti
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: (%{count}) nöqtə
     timeout:
       sorry: Bağışlayın, tələb etdiyiniz dəyişikliklər dəstinin siyahısı, çıxarıla
         bilmək üçün cox böyükdür.
@@ -282,7 +284,7 @@ az:
       user_title: İstifadəçi %{user} gündəliyi
       leave_a_comment: Şərh yaz
       login_to_leave_a_comment_html: Şərh yazmaq üçün %{login_link}
-      login: Özünüzü təqdim edin
+      login: Daxil ol
     no_such_entry:
       title: Belə bir gündəlik yazısı mövcud deyil
       heading: 'Yazı mövcud deyil id: %{id}'
@@ -803,7 +805,6 @@ az:
     edit_with: '%{editor} köməyi ilə dəyişdir'
     tag_line: Azad Viki Dünya Xəritəsi
     intro_2_create_account: İstifadəçi hesabı yarat
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnyorlar
     help: Kömək
     copyright: Müəllif hüquqları və Lisenziyalar
@@ -914,8 +915,17 @@ az:
       remember: Məni xatırla
       login_button: Daxil ol
       register now: İndi qeydiyyatdan keç
+      with external: 'Alternativ olaraq, daxil olmaq üçün üçüncü tərəfdən istifadə
+        edin:'
       no account: İstifadəçi hesabınız yoxdur?
       openid_logo_alt: OpenID ilə hesabınıza daxil olun
+      auth_providers:
+        microsoft:
+          title: Microsoft ilə daxil olun
+        github:
+          alt: GitHub Hesabı ilə daxil olun
+        wikipedia:
+          alt: Vikipediya hesabı ilə daxil olun
     destroy:
       title: Sistemdən çıx
       heading: OpenStreetMap-dən çıx
@@ -1039,6 +1049,11 @@ az:
     index:
       title: İstifadəçilər
       heading: İstifadəçilər
+      older: Köhnə İstifadəçilər
+      newer: Yeni İstifadəçilər
+      found_users:
+        one: '%{count} istifadəçi tapıldı'
+        other: '%{count} istifadəçi tapıldı'
       hide: Seçilmiş istifadəçiləri gizlət
   user_role:
     grant:
@@ -1084,8 +1099,6 @@ az:
       reason: Bloklanma səbəbi
       status: Status
       revoker_name: Tərəfindən ləgv edilib
-      next: Növbəti »
-      previous: « Əvvəlki
   notes:
     show:
       description: Təsvir
index ca53e54c551f0b408aeea8be0f2b935e649310ec..131bbb2d8e1ee05724c15602569bcd11a7b2c265 100644 (file)
@@ -251,8 +251,6 @@ ba:
         comment: Комментарий
         full: Тулы текст
   browse:
-    created: Булдырылған
-    closed: Ябыҡ
     version: Версия
     in_changeset: Төҙәтеүҙәр пакеты
     anonymous: Аноним
@@ -268,21 +266,6 @@ ba:
     view_history: Тарих
     view_details: Ентекләберәк
     location: 'Географик урын:'
-    changeset:
-      title: 'Төҙәтеүҙәр пакеты: %{id}'
-      belongs_to: Автор
-      node: Нөктәләр (%{count})
-      node_paginated: Нөктәләр (%{x}-%{y} из %{count})
-      way: Һыҙыҡтар (%{count})
-      way_paginated: Юлдар (%{x}-%{y} %{count}һынан)
-      relation: Мөнәсәбәттәр (%{count})
-      relation_paginated: Мөнәсәбәттәр (%{x}-%{y} %{count}нан)
-      changesetxml: Төҙәтеүҙәр пакетының XML-ы
-      osmchangexml: osmChange XML
-      join_discussion: Фекер алышыуға ҡушылыу өсөн системаға инегеҙ
-      discussion: Фекер алышыу
-      still_open: Төҙәтмәләр пакеты әле асыҡ. Фекер алышыу, төҙәтмәләр пакеты ябылғандан
-        һуң ғына буласаҡ.
     node:
       title_html: 'Нөктә: %{name}'
       history_title_html: 'Нөктә тарихы: %{name}'
@@ -387,6 +370,24 @@ ba:
       feed:
         title: 'Төҙәтеүҙәр пакеты: %{id}'
         title_comment: Төҙәтеүҙәр пакеты %{id} — %{comment}
+        created: Булдырылған
+        closed: Ябыҡ
+        belongs_to: Автор
+    show:
+      title: 'Төҙәтеүҙәр пакеты: %{id}'
+      discussion: Фекер алышыу
+      join_discussion: Фекер алышыуға ҡушылыу өсөн системаға инегеҙ
+      still_open: Төҙәтмәләр пакеты әле асыҡ. Фекер алышыу, төҙәтмәләр пакеты ябылғандан
+        һуң ғына буласаҡ.
+      changesetxml: Төҙәтеүҙәр пакетының XML-ы
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Нөктәләр (%{count})
+      nodes_paginated: Нөктәләр (%{x}-%{y} из %{count})
+      ways: Һыҙыҡтар (%{count})
+      ways_paginated: Юлдар (%{x}-%{y} %{count}һынан)
+      relations: Мөнәсәбәттәр (%{count})
+      relations_paginated: Мөнәсәбәттәр (%{x}-%{y} %{count}нан)
     timeout:
       sorry: Ҡыҙғанысҡа ҡаршы, һеҙ һораған төҙәтмә пакеттары исемлеген алыу өсөн күп
         ваҡыт талап итә.
index 6825dd85c03270a304ce4d503c3b44dadf0d6211..3b8f06c35c88f51bcc6d1a0d19043b73c12523da 100644 (file)
@@ -155,6 +155,11 @@ be-Tarask:
         pass_crypt: Пароль
         pass_crypt_confirmation: Пацьверджаньне паролю
     help:
+      doorkeeper/application:
+        confidential: Праграма будзе выкарыстоўвацца там, дзе кліенцкі сакрэтны ключ
+          можа захоўвацца канфідэнцыйна (родныя мабільныя і аднастаронкавыя праграмы
+          не канфідэнцыйныя)
+        redirect_uri: Кожны URI з асобнага радка
       trace:
         tagstring: падзеленае коскамі
       user_block:
@@ -281,8 +286,6 @@ be-Tarask:
         пошты.
       success: Зьвесткі пра карыстальніка пасьпяхова абноўленыя.
   browse:
-    created: Створана
-    closed: Закрытае
     version: Вэрсія
     in_changeset: Набор зьменаў
     anonymous: ананім
@@ -302,17 +305,6 @@ be-Tarask:
     view_history: Паглядзець гісторыю
     view_details: Паглядзець зьвесткі
     location: 'Месцазнаходжаньне:'
-    changeset:
-      title: 'Набор зьменаў: %{id}'
-      belongs_to: Аўтар
-      node: Пункты (%{count})
-      node_paginated: Пункты (%{x}-%{y} з %{count})
-      way: Лініі (%{count})
-      way_paginated: Лініі (%{x}-%{y} з %{count})
-      relation: Сувязі (%{count})
-      relation_paginated: Сувязі (%{x}-%{y} з %{count})
-      changesetxml: Набор зьменаў у фармаце XML
-      osmchangexml: osmChange XML
     way:
       nodes: Вузлы
       nodes_count:
@@ -396,6 +388,20 @@ be-Tarask:
       feed:
         title: Набор зьменаў %{id}
         title_comment: Набор зьменаў %{id} - %{comment}
+        created: Створана
+        closed: Закрытае
+        belongs_to: Аўтар
+    show:
+      title: 'Набор зьменаў: %{id}'
+      changesetxml: Набор зьменаў у фармаце XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Пункты (%{count})
+      nodes_paginated: Пункты (%{x}-%{y} з %{count})
+      ways: Лініі (%{count})
+      ways_paginated: Лініі (%{x}-%{y} з %{count})
+      relations: Сувязі (%{count})
+      relations_paginated: Сувязі (%{x}-%{y} з %{count})
     timeout:
       sorry: Прабачце, сьпіс набораў зьменаў, які Вы запыталі, занадта вялікі для
         атрыманьня.
@@ -898,7 +904,6 @@ be-Tarask:
     edit_with: Рэдагаваць праз %{editor}
     tag_line: Вольная Wiki-мапа сьвету
     intro_2_create_account: Стварыце рахунак
-    partners_ucl: UCL
     osm_offline: База зьвестак OpenStreetMap у цяперашні момант недаступная, таму
       што праводзяцца неабходныя тэхнічныя работы.
     osm_read_only: База зьвестак OpenStreetMap у цяперашні момант даступная толькі
@@ -1039,11 +1044,6 @@ be-Tarask:
       new password button: Ачысьціць пароль
       help_text: Увядзіце адрас электроннай пошты, які Вы выкарыстоўвалі пры рэгістрацыі,
         і мы вышлем Вам спасылку, якую Вы зможаце выкарыстаць для зьмены паролю.
-    create:
-      notice email on way: Шкада, што Вы яго згубілі, але электронны ліст ужо дасланы,
-        таму Вы хутка зможаце яго зьмяніць.
-      notice email cannot find: Прабачце, не атрымалася знайсьці такога адрасу электроннай
-        пошты.
     edit:
       title: Ачысьціць пароль
       heading: Скінуць пароль для %{user}
@@ -1260,8 +1260,6 @@ be-Tarask:
       identifiable: ІДЭНТЫФІКАВАНЫ
       private: ПРЫВАТНЫ
       trackable: МАГЧЫМА САЧЫЦЬ
-      by: аўтар
-      in: у
     index:
       public_traces: Публічныя GPS-трэкі
       public_traces_from: Публічныя GPS-трэкі ўдзельніка %{user}
@@ -1411,9 +1409,6 @@ be-Tarask:
     index:
       title: Удзельнікі
       heading: Карыстальнікі
-      showing:
-        one: Старонка %{page} (%{first_item} з %{items})
-        other: Старонкі %{page} (%{first_item}—%{last_item} з %{items})
       summary_html: '%{name} створаны з %{ip_address}, %{date}'
       summary_no_ip_html: '%{name} створаны %{date}'
       confirm: Пацьвердзіць выбраных карыстальнікаў
@@ -1511,7 +1506,6 @@ be-Tarask:
       revoke: Адклікаць!
       confirm: Вы ўпэўненыя?
       reason: 'Прычына блякаваньня:'
-      back: Паказаць усе блякаваньні
       revoker: 'Адклікаўшы:'
       needs_view: Удзельніку трэба ўвайсьці ў сыстэму, перад тым як гэтае блякаваньне
         будзе зьнятае.
index 0c3771d466770185f8cc452b1b90076286e9ddda..8791227c29fe252e135471102b0ac44e090cff36 100644 (file)
@@ -284,6 +284,28 @@ be:
         title: Выдаліць мой уліковы запіс
         warning: Увага! Працэс выдалення ўліковага запісу з'яўляецца канчатковым і
           не можа быць зменены.
+        delete_account: Выдаліць уліковы запіс
+        delete_introduction: 'Вы можаце выдаліць свой уліковы запіс OpenStreetMap
+          з дапамогай кнопкі ніжэй. Звярніце ўвагу на наступныя дэталі:'
+        delete_profile: Інфармацыя вашага ўліковага запісу, разам з вашым аватарам,
+          апісаннем і месцазнаходжаннем дома, будзе выдалена.
+        delete_display_name: Назва вашага ўліковага запісу будзе выдалена і можа быць
+          паўторна выкарыстана іншымі ўліковымі запісамі.
+        retain_caveats: 'Аднак некаторая інфармацыя пра вас будзе захоўвацца на OpenStreetMap
+          нават пасля выдалення вашага ўліковага запісу:'
+        retain_edits: Вашыя змены ў базе даных карты, калі такія маюцца, будуць захаваныя.
+        retain_traces: Вашыя трасіроўкі, калі такія маюцца, будуць захаваны.
+        retain_diary_entries: Вашыя запісы і каментарыі ў дзённіку, калі такія маюцца,
+          будуць захаваныя, але схаваныя ад назірання.
+        retain_notes: Вашы нататкі на карце і каментарыі да іх, калі такія маюцца,
+          будуць захаваныя, але схаваныя ад назірання.
+        retain_changeset_discussions: Вашыя абмеркаванні зменаў, калі такія маюцца,
+          будуць захаваныя.
+        retain_email: Ваш адрас электроннай пошты будзе захаваны.
+        recent_editing_html: Вы нядаўна рэдагавалі ваш уліковы запіс, таму зараз яго
+          нельга выдаліць. Выдаленне будзе магчымае праз %{time}.
+        confirm_delete: Вы ўпэўненыя?
+        cancel: Скасаваць
   accounts:
     edit:
       title: Рэдагаваць уліковы запіс
@@ -300,7 +322,7 @@ be:
           ананімныя.
         disabled link text: чаму я не магу рэдагаваць?
       contributor terms:
-        heading: 'Умовы ўдзелу:'
+        heading: Умовы ўдзелу
         agreed: Вы пагадзіліся на новыя ўмовы ўдзелу.
         not yet agreed: Вы яшчэ не пагадзіліся на новыя ўмовы ўдзелу.
         review link text: Калі ласка, прайдзіце па гэтай спасылцы для Вашай зручнасці,
@@ -309,40 +331,32 @@ be:
           ў агульнай уласнасці.
         link text: што гэта?
       save changes button: Запісаць змены
+      delete_account: Выдаліць уліковы запіс...
     go_public:
-      heading: 'Публічнае рэдагаванне:'
+      heading: Публічнае рэдагаванне
       make_edits_public_button: Зрабіць усе мае змены публічнымі
     update:
       success_confirm_needed: Звесткі аб карыстальніку паспяхова абноўленыя. Праверце
         сваю эл.пошту, вам павінен прыйсці запыт на пацвярджэнне вашага новага адраса.
       success: Звесткі аб карыстальніку паспяхова абноўленыя.
+    destroy:
+      success: Уліковы запіс выдалены.
   browse:
-    created: Створаны
-    closed: Зачынены
+    deleted_ago_by_html: Выдалена %{time_ago} карыстальнікам %{user}
+    edited_ago_by_html: Адрэдагавана %{time_ago} карыстальнікам %{user}
     version: Версія
+    redacted_version: Адрэдагаваная версія
     in_changeset: Пакет правак
     anonymous: ананімны
     no_comment: (без каментароў)
     part_of: Частка
     download_xml: Спампаваць XML
     view_history: Прагляд гісторыі
+    view_unredacted_history: Прагляд неадрэдагаванай гісторыі
     view_details: Прагляд звестак
+    view_redacted_data: Прагляд адрэдагаваных даных
+    view_redaction_message: Прагляд паведамлення аб рэдагаванні
     location: 'Месца:'
-    changeset:
-      title: 'Набор змен: %{id}'
-      belongs_to: Аўтар
-      node: Пункты (%{count})
-      node_paginated: Пункты (%{x}-%{y} з %{count})
-      way: Лініі (%{count})
-      way_paginated: Лініі (%{x}-%{y} з %{count})
-      relation: Дачыненні (%{count})
-      relation_paginated: Дачыненні (%{x}-%{y} з %{count})
-      changesetxml: XML пакета правак
-      osmchangexml: osmChange XML
-      join_discussion: Увайдзіце ў сістэму, каб далучыцца да абмеркавання
-      discussion: Абмеркаванне
-      still_open: Пакет правак яшчэ адкрыты. Абмеркаванне стане даступным, як толькі
-        пакет правак закрыецца.
     node:
       title_html: 'Пункт: %{name}'
       history_title_html: 'Гісторыя пункта: %{name}'
@@ -367,6 +381,7 @@ be:
       entry_html: Дачыненне %{relation_name}
       entry_role_html: Дачыненне %{relation_name} (як %{relation_role})
     not_found:
+      title: Не знойдзена
       sorry: Прабачце, %{type} з нумарам %{id} не знойдзены.
       type:
         node: пункт
@@ -375,6 +390,7 @@ be:
         changeset: пакет правак
         note: заўвага
     timeout:
+      title: Памылка
       sorry: Прабачце, атрыманне даных для %{type} з ідэнтыфікатарам %{id} заняла
         зашмат часу.
       type:
@@ -406,6 +422,7 @@ be:
       wikimedia_commons_link: '%{page} ў Вікісховішчы'
       telephone_link: Патэлефанаваць %{phone_number}
       colour_preview: Прагляд колеру %{colour_value}
+      email_link: Электронная пошта %{email}
     query:
       title: Пошук аб’ектаў
       introduction: Націсніце на карце, каб атрымаць звесткі пра аб’екты паблізу.
@@ -429,6 +446,7 @@ be:
     index:
       title: Пакет правак
       title_user: Пакет правак ад %{user}
+      title_user_link_html: Змены ад %{user_link}
       title_friend: Пакеты правак ад вашых сяброў
       title_nearby: Пакеты правак ад карыстальнікаў паблізу
       empty: Пакеты правак не знойдзены.
@@ -441,6 +459,33 @@ be:
       feed:
         title: Набор змен %{id}
         title_comment: Набор змен %{id} - %{comment}
+        created: Створаны
+        closed: Зачынены
+        belongs_to: Аўтар
+    subscribe:
+      heading: Падпісацца на наступнае абмеркаванне зменаў?
+      button: Падпісацца на абмеркаванне
+    unsubscribe:
+      heading: Скасаваць падпіску на наступнае абмеркаванне зменаў?
+      button: Адпісацца ад абмеркавання
+    heading:
+      title: Набор змен %{id}
+    show:
+      title: 'Набор змен: %{id}'
+      created: 'Створана: %{when}'
+      discussion: Абмеркаванне
+      join_discussion: Увайдзіце ў сістэму, каб далучыцца да абмеркавання
+      still_open: Пакет правак яшчэ адкрыты. Абмеркаванне стане даступным, як толькі
+        пакет правак закрыецца.
+      changesetxml: XML пакета правак
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Пункты (%{count})
+      nodes_paginated: Пункты (%{x}-%{y} з %{count})
+      ways: Лініі (%{count})
+      ways_paginated: Лініі (%{x}-%{y} з %{count})
+      relations: Дачыненні (%{count})
+      relations_paginated: Дачыненні (%{x}-%{y} з %{count})
     timeout:
       sorry: Выбачайце, спіс набораў правак, што Вы запыталі, занадта вялікі для атрымання.
   changeset_comments:
@@ -464,6 +509,8 @@ be:
       nearby mapper: Карыстальнік
       friend: Сябар
     show:
+      title: Мая панэль
+      edit_your_profile: Адрэдагуйце свой профіль
       my friends: Мае сябры
       no friends: Вы пакуль не дадалі нікога ў сябры.
       nearby users: 'Карыстальнікі паблізу:'
@@ -477,7 +524,7 @@ be:
     new:
       title: Новы запіс дзённіку
     form:
-      location: 'Месца:'
+      location: Месца
       use_map_link: карыстацца картай
     index:
       title: Дзённікі карыстальнікаў
@@ -498,6 +545,7 @@ be:
     show:
       title: Дзённік карыстальніка %{user} | %{title}
       user_title: Дзённік карыстальніка %{user}
+      discussion: Абмеркаванне
       leave_a_comment: Пакінуць каментар
       login_to_leave_a_comment_html: '%{login_link} каб пакінуць каментар'
       login: Увайсці
@@ -514,6 +562,7 @@ be:
         one: 1 каментар
         zero: Каментароў няма
         other: 'Каментароў: %{count}'
+      no_comments: Няма каментароў
       edit_link: Правіць гэты запіс
       hide_link: Схаваць гэты запіс
       unhide_link: Паказаць гэты запіс
@@ -540,6 +589,7 @@ be:
         title: Дзеннікавыя запісы OpenStreetMap
         description: Свежыя дзеннікавыя запісы карыстальнікаў OpenStreetMap
     comments:
+      no_comments: Няма каментароў у дзённіку
       post: Апублікаваць
       when: Калі
       comment: Каментар
@@ -1243,10 +1293,9 @@ be:
     intro_text: OpenStreetMap - гэта карта свету, створаная людзьмі, як вы, і бясплатная
       для выкарыстання на ўмовах адкрытай ліцэнзіі.
     intro_2_create_account: Стварыць уліковы запіс удзельніка
-    hosting_partners_html: Хостынг падтрымліваецца %{ucl}, %{bytemark}, і іншымі %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
-    partners_partners: партнёрамi
+    hosting_partners_2024_html: Хостынг падтрымліваюць %{fastly}, %{corpmembers} і
+      іншыя %{partners}.
+    partners_partners: партнёры
     tou: Умовы карыстання
     osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць
       неабходная тэхнічная праца.
@@ -1256,6 +1305,7 @@ be:
     help: Даведка
     about: Пра праект
     copyright: Аўтарскае права
+    communities: Супольнасці
     community: Супольнасьць
     community_blogs: Блогі супольнасці
     community_blogs_title: Блогі ўдзельнікаў супольнасці OpenStreetMap
@@ -1266,15 +1316,27 @@ be:
     more: Больш падрабязна
   user_mailer:
     diary_comment_notification:
+      description: 'Запіс у дзённіку OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} пакінуў каментар у вашым дзённіку'
       hi: Вітанні, %{to_user},
       header: '%{from_user} пракаментаваў ваш запіс у дзённіку на OpenStreetMap з
         тэмай %{subject}:'
+      header_html: '%{from_user} пракаментаваў ваш запіс у дзённіку на OpenStreetMap
+        з тэмай %{subject}:'
       footer: Вы можаце прагледзець каментар на %{readurl} і пракаментаваць на %{commenturl}
         ці адказаць на %{replyurl}
+      footer_html: Вы можаце прагледзець каментар на %{readurl} і пракаментаваць на
+        %{commenturl} ці адказаць на %{replyurl}
+      footer_unsubscribe: Вы можаце адмовіцца ад падпіскі на абмеркаванне праз %{unsubscribeurl}
+      footer_unsubscribe_html: Вы можаце адмовіцца ад падпіскі на абмеркаванне праз
+        %{unsubscribeurl}
     message_notification:
+      subject: '[OpenStreetMap] %{message_title}'
       hi: Прывітанне, %{to_user},
       header: '%{from_user} адправіў вам паведамленне з тэмай %{subject} праз OpenStreetMap:'
+      header_html: '%{from_user} адправіў вам паведамленне з тэмай %{subject} у OpenStreetMap:'
+      footer: Вы можаце таксама прачытаць паведамленне на %{readurl}, і вы можаце
+        адказаць на %{replyurl}
       footer_html: Вы можаце таксама прачытаць паведамленне на %{readurl}, і вы можаце
         адказаць на %{replyurl}
     friendship_notification:
@@ -1283,8 +1345,16 @@ be:
       had_added_you: '%{user} пасябраваў з Вамі на OpenStreetMap.'
       see_their_profile: Вы можаце прагледзець профіль на %{userurl} і дадаць, як
         сябра, у адказ, калі хочаце.
+      see_their_profile_html: Вы можаце прагледзець профіль на %{userurl}.
       befriend_them: Вы таксама можаце пасябраваць з імі на %{befriendurl}.
+      befriend_them_html: Вы таксама можаце дадаць як сябра па спасылцы %{befriendurl}.
+    gpx_description:
+      description_with_tags_html: 'Падобна, што ваш файл GPX %{trace_name} з апісаннем
+        %{trace_description} і наступнымі тэгамі: %{tags}'
+      description_with_no_tags_html: Падобна, што ваш файл GPX %{trace_name} з апісаннем
+        %{trace_description} і без тэгаў
     gpx_failure:
+      hi: Прывітанне, %{to_user},
       failed_to_import: 'збой імпарту. Адбылася памылка:'
       subject: '[OpenStreetMap] Збой імпарту GPX'
     gpx_success:
@@ -1448,10 +1518,6 @@ be:
       new password button: Выслаць мне новы пароль
       help_text: Увядзіце адрас электроннай пошты, які Вы выкарыстоўвалі пры рэгістрацыі,
         і мы вышлем Вам спасылку, якую Вы зможаце выкарыстаць для змены паролю.
-    create:
-      notice email on way: Жаль, што вы яго згубілі :-( але ліст ужо адпраўлены, і
-        вы хутка зможаце яго скінуць.
-      notice email cannot find: Немагчыма знайсці гэтакі паштовы адрас, прабачце.
     edit:
       title: скінуць пароль
       heading: Скінуць пароль для %{user}
@@ -1461,7 +1527,7 @@ be:
       flash changed: Ваш пароль быў зменены.
   profiles:
     edit:
-      image: 'Выява:'
+      image: Выява
       gravatar:
         gravatar: Выкарыстоўваць Gravatar
         disabled: Граватар быў адключаны.
@@ -1478,13 +1544,13 @@ be:
     new:
       title: Уваход
       heading: Уваход
-      email or username: 'Пошта ці імя карыстальніка:'
-      password: 'Пароль:'
+      email or username: Электронны адрас або Імя карыстальніка
+      password: Пароль
       remember: Памятаць мяне
       lost password link: Згубілі пароль?
       login_button: Увайсці
       register now: Зарэгістравацца зараз
-      with external: 'Ð\94лÑ\8f Ð°Ð»Ñ\8cÑ\82Ñ\8dÑ\80наÑ\82Ñ\8bÑ\9eнага Ñ\9eваÑ\85одÑ\83, Ð·Ð°Ð»Ð°Ð³Ñ\96нÑ\8cÑ\86еÑ\81Ñ\8f Ñ\86еÑ\80аз:'
+      with external: 'У Ñ\8fкаÑ\81Ñ\86Ñ\96 Ð°Ð»Ñ\8cÑ\82Ñ\8dÑ\80наÑ\82Ñ\8bвÑ\8b Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82айÑ\86е Ð´Ð»Ñ\8f Ñ\9eваÑ\85одÑ\83 Ñ\81Ñ\82аÑ\80оннÑ\96 Ñ\81еÑ\80вÑ\96Ñ\81:'
       no account: Не маеце асабістага рахунка?
       auth failure: Прабачце, немагчыма увайсці з такім адрасам і паролем.
       openid_logo_alt: Увайсці з дапамогай OpenID
@@ -1499,8 +1565,8 @@ be:
           title: Увайсці праз Facebook
           alt: Увайсці праз уліковы запіс Facebook
         microsoft:
-          title: Увайсці праз Windows live
-          alt: Увайсці праз уліковы запіс Windows Live
+          title: Увайсці праз Microsoft
+          alt: Увайсці праз уліковы запіс Microsoft
         github:
           title: Уваход праз GitHub
           alt: Увайсці праз уліковы запіс GitHub
@@ -1528,8 +1594,8 @@ be:
   site:
     about:
       next: Далей
-      used_by_html: '%{name} Ð·Ð°Ð±Ñ\8fÑ\81пеÑ\87вае ÐºÐ°Ñ\80Ñ\82агÑ\80аÑ\84Ñ\96Ñ\87нÑ\8bмÑ\96 Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bмÑ\96 Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87Ñ\8b Ñ\81айÑ\82аÑ\9e,
-        Ð¼Ð°Ð±Ñ\96лÑ\8cнÑ\8bÑ\85 Ð¿Ñ\80агÑ\80ам Ñ\96 Ð¿Ñ\80Ñ\8bÑ\81Ñ\82аÑ\81аваннÑ\8fÑ\9e'
+      used_by_html: '%{name} Ð·Ð°Ð±Ñ\8fÑ\81пеÑ\87вае ÐºÐ°Ñ\80Ñ\82агÑ\80аÑ\84Ñ\96Ñ\87нÑ\8bмÑ\96 Ð´Ð°Ð½Ñ\8bмÑ\96 Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87Ñ\8b Ñ\81айÑ\82аÑ\9e, Ð¼Ð°Ð±Ñ\96лÑ\8cнÑ\8bÑ\85
+        Ð¿Ñ\80агÑ\80ам Ñ\96 Ð¿Ñ\80Ñ\8bлад'
       lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць
         дадзеныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім
         свеце.
@@ -1558,9 +1624,8 @@ be:
       legal_babble:
         title_html: Аўтарскія правы і ліцэнзія
         credit_title_html: Як спасылацца на OpenStreetMap
-        credit_1_html: |-
-          Мы патрабуем, каб выкарыстоўвалася спасылка &ldquo;&copy; OpenStreetMap
-          contributors&rdquo;.
+        credit_1_html: 'Там, дзе вы выкарыстоўваеце даныя OpenStreetMap, вы павінны
+          выканаць наступныя дзве рэчы:'
         attribution_example:
           alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы
           title: Прыклад спасылкі
@@ -1729,7 +1794,7 @@ be:
           reserve: Запаведнік
           military: Ваенная зона
           school: Школа
-          university: універсітэт
+          university: Універсітэт
           building: Значны будынак
           station: Чыгуначны вакзал
           summit: Вяршыня
@@ -1761,6 +1826,27 @@ be:
         para_1: Калі трэба ўнесці дробнае ўдакладненне, дзеля якога не варта марнаваць
           час на рэгістрацыю і вывучэнне правілаў рэдагавання, раім проста дадаць
           заўвагу на карту.
+    communities:
+      title: Супольнасці
+      lede_text: |-
+        Людзі з усяго свету ўносяць свой уклад у OpenStreetMap або выкарыстоўваюць яго.
+        Многія ўдзельнічаюць паасобку, іншыя стварылі свае супольнасці.
+        Супольнасці бываюць розных памераў і могуць прадстаўляць як невялікія гарады, так і цэлыя рэгіёны з некалькімі краінамі.
+        Яны таксама могуць быць афіцыйнымі і неафіцыйнымі.
+      local_chapters:
+        title: Мясцовыя аддзяленні
+        about_text: Мясцовыя аддзяленні - гэта групы на ўзроўні краіны або рэгіёна,
+          якія зрабілі фармальны крок і афіцыйна зарэгістравалі некамерцыйную юрыдычную
+          асобу. Яны прадстаўляюць карту рэгіёна і картографаў перад мясцовымі органамі
+          ўлады, бізнесам і СМІ. Яны таксама прыядналіся да OpenStreetMap Foundation
+          (OSMF), што дало сувязь з юрыдычным і аўтарскім органам кіравання.
+        list_text: 'Наступныя суполкі афіцыйна зарэгістраваны ў якасці мясцовых аддзяленняў:'
+      other_groups:
+        title: Іншыя супольнасці
+        other_groups_html: Няма неабходнасці афіцыйна рэгістраваць групу як мясцовае
+          аддзяленне. Насамрэч многія групы вельмі паспяхова існуюць у выглядзе нефармальных
+          сустрэч або суполак. Кожны можа заснаваць такую суполку або далучыцца да
+          яе. Больш падрабязна на старонцы %{communities_wiki_link}.
   traces:
     visibility:
       private: Прыватны (ананімны з неспарадкаванымі пунктамі)
@@ -1783,6 +1869,7 @@ be:
       traces_waiting: У вас %{count} след у чарзе. Калі ласка, пачакайце, пакуль яны
         будуць апрацаваныя, каб не блакірваць чаргу для астатніх карстальнікаў.
     edit:
+      cancel: Скасаваць
       title: Рэдагаванне следу %{name}
       heading: Рэдагаванне следу %{name}
       visibility_help: што гэта значыць?
@@ -1799,6 +1886,7 @@ be:
       uploaded: 'Прысланы:'
       points: 'Пункты:'
       start_coordinates: 'Каардынаты пачатку:'
+      coordinates_html: '%{latitude}; %{longitude}'
       map: карта
       edit: правіць
       owner: 'Уладальнік:'
@@ -1828,13 +1916,15 @@ be:
       identifiable: ІДЭНТЫФІКУЕМЫ
       private: ПРЫВАТНЫ
       trackable: TRACKABLE
-      by: карыстальнікам
-      in: у
     index:
       public_traces: Агульныя GPS-сляды
+      my_gps_traces: Мае GPS-трэкі
       public_traces_from: Агульныя GPS-сляды карыстальніка %{user}
       description: Агляд нядаўна дададзеных GPS-слядоў
       tagged_with: ' з тэгамі: %{tags}'
+      empty_title: Тут яшчэ нічога няма
+      empty_upload_html: '%{upload_link} або даведайцеся больш пра адсочванне GPS
+        на %{wiki_link}.'
       upload_trace: Адаслаць GPS-след
       my_traces: Мае GPS-сляды
     destroy:
@@ -1946,7 +2036,7 @@ be:
       display name description: Ваша імя, якое будзе бачнае ўсім. Вы можаце змяніць
         яго потым ў вашых параметрах.
       external auth: 'Аўтэнтыфікацыя праз:'
-      use external auth: 'Для альтэрнатыўнага ўваходу, залагіньцеся цераз:'
+      use external auth: У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс
       auth no password: Пры выкарыстанні знешняй аўтэнтыфікацыі пароль не патрэбны,
         але для некаторых дадатковых інструментаў або сервераў ён усё яшчэ спатрэбіцца.
       continue: Зарэгістравацца
@@ -2034,9 +2124,6 @@ be:
     index:
       title: Удзельнікі
       heading: Удзельнікі
-      showing:
-        one: Старонка %{page} (%{first_item} з %{items})
-        other: Старонка %{page} (%{first_item}-%{last_item} з %{items})
       summary_html: '%{name} створана з %{ip_address} %{date}'
       summary_no_ip_html: '%{name} створаны %{date}'
       confirm: Пацвердзіць выбраных карыстальнікаў
@@ -2158,13 +2245,12 @@ be:
       title: '%{block_on} заблакіраваны %{block_by}'
       heading_html: '%{block_on} заблакіраваны %{block_by}'
       created: Створаны
-      status: Статус
+      status: 'Статус:'
       show: Паказаць
       edit: Рэдагаваць
       revoke: Адазваць!
       confirm: Вы ўпэўненыя?
       reason: 'Прычына блакіроўкі:'
-      back: Праглядзець усе блакіроўкі
       revoker: 'Адклікаўшы:'
       needs_view: Удзельніку трэба ўвайсці ў сістэму, перад тым як гэтая блакіроўка
         будзе знята.
@@ -2179,9 +2265,6 @@ be:
       reason: Прычына блакіроўкі
       status: Статус
       revoker_name: Адкліканы
-      showing_page: Старонка %{page}
-      next: Далей »
-      previous: « Назад
   notes:
     index:
       title: Заўвагі, створаныя ці пракаментаваныя %{user}
index 29c42a0506480cac78708ef9a6cf6ed75553c18b..6cfa8239c53e5365bafa5b18e97bbb396c779d39 100644 (file)
@@ -293,11 +293,6 @@ bg:
     destroy:
       success: Профилът е изтрит.
   browse:
-    created: Създадена
-    closed: Затворена
-    closed_ago_html: Затворен %{time_ago}
-    created_ago_by_html: Създаден %{time_ago} от %{user}
-    closed_ago_by_html: Затворен %{time_ago} от %{user}
     edited_ago_by_html: Редактирано %{time_ago} от %{user}
     version: Версия
     in_changeset: Списък с промени
@@ -308,21 +303,6 @@ bg:
     view_history: Показване на историята
     view_details: Показване на детайли
     location: 'Местоположение:'
-    changeset:
-      title: 'Списък с промени: %{id}'
-      belongs_to: Автор
-      node: Възли (%{count})
-      node_paginated: Възли (%{x}-%{y} от общо %{count})
-      way: Пътища (%{count})
-      way_paginated: Пътища (%{x}-%{y} от общо %{count})
-      relation: Релации (%{count})
-      relation_paginated: Релации(%{x}-%{y} от %{count})
-      changesetxml: XML на списъка с промени
-      osmchangexml: osmChange XML
-      join_discussion: Впишете се, за да се присъедините към обсъждането
-      discussion: Обсъждане
-      still_open: Списъкът с промени не е завършен - обсъждането ще започне след неговото
-        завършване.
     node:
       title_html: 'Възел: %{name}'
       history_title_html: 'История на възела: %{name}'
@@ -415,6 +395,27 @@ bg:
       feed:
         title: Списък с промени %{id}
         title_comment: Списък с промени %{id} - %{comment}
+        created: Създадена
+        closed: Затворена
+        belongs_to: Автор
+    show:
+      title: 'Списък с промени: %{id}'
+      closed_ago_html: Затворен %{time_ago}
+      created_ago_by_html: Създаден %{time_ago} от %{user}
+      closed_ago_by_html: Затворен %{time_ago} от %{user}
+      discussion: Обсъждане
+      join_discussion: Впишете се, за да се присъедините към обсъждането
+      still_open: Списъкът с промени не е завършен - обсъждането ще започне след неговото
+        завършване.
+      changesetxml: XML на списъка с промени
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Възли (%{count})
+      nodes_paginated: Възли (%{x}-%{y} от общо %{count})
+      ways: Пътища (%{count})
+      ways_paginated: Пътища (%{x}-%{y} от общо %{count})
+      relations: Релации (%{count})
+      relations_paginated: Релации(%{x}-%{y} от %{count})
     timeout:
       sorry: Съжаляваме, но списъка с промени който заявихте се зарежда твърде дълго.
   changeset_comments:
@@ -1255,10 +1256,6 @@ bg:
     intro_text: OpenStreetMap е карта на света създадена от хора като вас, за свободно
       ползване и под отворен лиценз.
     intro_2_create_account: Създаване на сметка
-    hosting_partners_html: Хостингът се поддържа от %{ucl}, %{fastly}, %{bytemark}
-      и други %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark
     partners_partners: партньори
     tou: Условия за ползване
     osm_offline: Базата на данни на  OpenStreetMap в момента е изключена докато се
@@ -1434,8 +1431,6 @@ bg:
       help_text: Въведете имейл адреса, който сте използвали при регистрацията, и
         ние ще Ви изпратим връзка, която можете да използвате, за да промените паролата
         си.
-    create:
-      notice email cannot find: Съжаляваме, но този електронен адрес не е намерен.
     edit:
       title: Възстановяване на парола
       heading: Смени Парола за %{user}
@@ -1858,8 +1853,6 @@ bg:
       public: ПУБЛИЧНО
       private: ЧАСТНО
       trackable: ПРОСЛЕДИМО
-      by: от
-      in: в
     index:
       public_traces: Публични следи от GPS
       public_traces_from: Публични следи от GPS от потребител %{user}
@@ -1997,9 +1990,6 @@ bg:
     index:
       title: Потребители
       heading: Потребители
-      showing:
-        one: Страница %{page} (%{first_item} от %{items})
-        other: Страница %{page} (%{first_item}-%{last_item} от %{items})
       summary_no_ip_html: '%{name} създадено на %{date}'
       hide: Скрий избраните потребители
       empty: Не са открити съвпадащи профили
@@ -2056,9 +2046,6 @@ bg:
       creator_name: Създател
       reason: Причина за блокиране
       status: Състояние
-      showing_page: Страница %{page}
-      next: Следваща »
-      previous: « Предишна
   user_mutes:
     index:
       table:
index 6991fb8a4d40c8c9b510d2353bbd9f1010d1ac97..2c2e4e8b9e92e2b05aa1e22934263c575510386a 100644 (file)
@@ -337,12 +337,6 @@ bn:
     destroy:
       success: অ্যাকাউন্ট অপসারণ করা হয়েছে।
   browse:
-    created: তৈরি হয়েছে
-    closed: বন্ধ হয়েছে
-    created_ago_html: '%{time_ago} তৈরি'
-    closed_ago_html: '%{time_ago} বন্ধকৃত'
-    created_ago_by_html: '%{user} কর্তৃক %{time_ago} তৈরিকৃত'
-    closed_ago_by_html: '%{user} কর্তৃক %{time_ago} বন্ধকৃত'
     deleted_ago_by_html: '%{user} কর্তৃক %{time_ago} অপসারিত'
     edited_ago_by_html: '%{user} কর্তৃক %{time_ago} সম্পাদিত'
     version: সংস্করণ
@@ -360,21 +354,6 @@ bn:
     view_history: ইতিহাস দেখুন
     view_details: বিস্তারিত দেখুন
     location: 'অবস্থান:'
-    changeset:
-      title: 'পরিবর্তনধার্য: %{id}'
-      belongs_to: লেখক
-      node: সংযোগস্থল (%{count}টি)
-      node_paginated: সংযোগস্থল (%{count}টির %{x}-%{y})
-      way: পথসমূহ (%{count}টি)
-      way_paginated: পথসমূহ (%{count}টির %{x}-%{y})
-      relation: সম্পর্ক (%{count}টি)
-      relation_paginated: সম্পর্ক (%{count}টির %{x}-%{y})
-      hidden_comment_by_html: '%{user} %{time_ago} মন্তব্যটি লুকিয়েছেন'
-      changesetxml: পরিবর্তনধার্য এক্সএমএল
-      osmchangexml: osmChange এক্সএমএল
-      join_discussion: আলোচনায় যোগ দিতে প্রবেশ করুন
-      discussion: আলোচনা
-      still_open: চেঞ্জসেট এখনও খোলা - চেঞ্জসেট বন্ধ হয়ে গেলে আলোচনা খোলা হবে।
     node:
       title_html: 'সংযোগস্থল: %{name}'
       history_title_html: 'সংযোগস্থলের ইতিহাস: %{name}'
@@ -482,6 +461,28 @@ bn:
       feed:
         title: পরিবর্তনধার্য %{id}
         title_comment: পরিবর্তনধার্য %{id} - %{comment}
+        created: তৈরি হয়েছে
+        closed: বন্ধ হয়েছে
+        belongs_to: লেখক
+    show:
+      title: 'পরিবর্তনধার্য: %{id}'
+      created_ago_html: '%{time_ago} তৈরি'
+      closed_ago_html: '%{time_ago} বন্ধকৃত'
+      created_ago_by_html: '%{user} কর্তৃক %{time_ago} তৈরিকৃত'
+      closed_ago_by_html: '%{user} কর্তৃক %{time_ago} বন্ধকৃত'
+      discussion: আলোচনা
+      join_discussion: আলোচনায় যোগ দিতে প্রবেশ করুন
+      still_open: চেঞ্জসেট এখনও খোলা - চেঞ্জসেট বন্ধ হয়ে গেলে আলোচনা খোলা হবে।
+      hidden_comment_by_html: '%{user} %{time_ago} মন্তব্যটি লুকিয়েছেন'
+      changesetxml: পরিবর্তনধার্য এক্সএমএল
+      osmchangexml: osmChange এক্সএমএল
+    paging_nav:
+      nodes: সংযোগস্থল (%{count}টি)
+      nodes_paginated: সংযোগস্থল (%{count}টির %{x}-%{y})
+      ways: পথসমূহ (%{count}টি)
+      ways_paginated: পথসমূহ (%{count}টির %{x}-%{y})
+      relations: সম্পর্ক (%{count}টি)
+      relations_paginated: সম্পর্ক (%{count}টির %{x}-%{y})
     timeout:
       sorry: দুঃখিত, আপনি যেই পরিবর্তনসেটটির জন্য আবেদন করছেন সেটি ফিরিয়ে আনতে আরও
         সময় লাগবে।
@@ -548,7 +549,7 @@ bn:
       discussion: আলোচনা
       leave_a_comment: একটি মন্তব্য করুন
       login_to_leave_a_comment_html: মন্তব্য করতে %{login_link} করুন
-      login: প্রবেশ
+      login: প্রবেশ করুন
     no_such_entry:
       title: এমন কোনো দিনলিপির ভুক্তি নেই
       heading: '%{id} এই আইডি থেকে কোনও ভুক্তি নেই'
@@ -1368,7 +1369,6 @@ bn:
     intro_text: ওপেনস্ট্রিটম্যাপ বিশ্বের একটি মানচিত্র; যা আপনার মতো মানুষের দ্বারা
       নির্মিত এবং এটি মুক্ত লাইসেন্সের অধীনে বিনামূল্যে ব্যবহারযোগ্য।
     intro_2_create_account: একটি ব্যবহারকারী অ্যাকাউন্ট তৈরি করুন
-    partners_ucl: UCL
     partners_partners: সহযোগীগণ
     tou: ব্যবহারের শর্তাবলী
     help: সাহায্য
@@ -1544,13 +1544,13 @@ bn:
       success: প্রোফাইল পরিবর্তিত হয়েছে।
   sessions:
     new:
-      title: প্রবেশ
+      title: প্রবেশ করুন
       heading: প্রবেশ
       email or username: ইমেইল ঠিকানা অথবা ব্যবহারকারী নাম
       password: পাসওয়ার্ড
       remember: আমাকে মনে রাখো
       lost password link: পাসওয়ার্ড ভুলে গেছেন?
-      login_button: প্রবেশ
+      login_button: প্রবেশ করুন
       register now: এখনই নিবন্ধন করুন
       no account: কোনও অ্যাকাউন্ট নেই?
       auth failure: দুঃখিত, এই তথ্য দিয়ে প্রবেশ করানো যাচ্ছে না।
@@ -1567,7 +1567,7 @@ bn:
           title: গিটহাব দিয়ে প্রবেশ করুন
           alt: একটি গিটহাব অ্যাকাউন্ট দিয়ে প্রবেশ করুন
         wikipedia:
-          title: উইকিপিডিয়া দিয়ে প্রবেশ
+          title: উইকিপিডিয়া দিয়ে প্রবেশ করুন
           alt: উইকিপিডিয়া অ্যাকাউন্ট দিয়ে প্রবেশ করুন
         wordpress:
           title: ওয়ার্ডপ্রেস দিয়ে প্রবেশ
@@ -1828,7 +1828,6 @@ bn:
       identifiable: শনাক্তকরণযোগ্য
       private: ব্যাক্তিগত
       trackable: অনুসরণযোগ্য
-      by: দ্বারা
     index:
       upload_trace: অনুসরণ আপলোড
     offline_warning:
@@ -2039,8 +2038,6 @@ bn:
       edit: সম্পাদনা
     blocks:
       display_name: বাধাপ্রাপ্ত ব্যবহারকারী
-      next: পরবর্তী »
-      previous: « পূর্ববর্তী
   user_mutes:
     index:
       table:
index 1399fb864e195c2651c51f168b2915c1b081e4ff..a39851c2754659651e16a2a90bf6536fa7c0969a 100644 (file)
@@ -352,12 +352,6 @@ br:
     destroy:
       success: Kont dilamet.
   browse:
-    created: Krouet
-    closed: Serret
-    created_ago_html: Krouet %{time_ago}
-    closed_ago_html: Serret %{time_ago}
-    created_ago_by_html: Bet krouet %{time_ago} gant %{user}
-    closed_ago_by_html: Bet serret %{time_ago} gant %{user}
     deleted_ago_by_html: Bet dilamet %{time_ago} gant %{user}
     edited_ago_by_html: Bet aozet %{time_ago} gant %{user}
     version: Stumm
@@ -381,23 +375,6 @@ br:
     view_history: Gwelet an istor
     view_details: ↓Gwelet ar munudoù
     location: 'Lec''hiadur:'
-    changeset:
-      title: 'Hollad cheñchamantoù: %{id}'
-      belongs_to: Aozer
-      node: Skoulmoù (%{count})
-      node_paginated: Skoulmoù (%{x}-%{y} diwar %{count})
-      way: Hentoù (%{count})
-      way_paginated: Hentoù (%{x}-%{y} diwar %{count})
-      relation: Darempredoù (%{count})
-      relation_paginated: Darempredoù (%{x}-%{y} diwar %{count})
-      hidden_comment_by_html: Kemennadenn kuzhet gant %{user} %{time_ago}
-      comment_by_html: Kemennadenn skrivet gant %{user} %{time_ago}
-      changesetxml: Hollad cheñchamantoù XML
-      osmchangexml: Cheñchoùosm XML
-      join_discussion: Kevreit evit mont er gaozeadenn
-      discussion: Kaozeadenn
-      still_open: Hollad cheñchamantoù digor - an diviz a zigoro ur wech ma vo serret
-        an hollad cheñchamantoù.
     node:
       title_html: 'Skoulm: %{name}'
       history_title_html: 'Istor ar skoulm: %{name}'
@@ -525,6 +502,9 @@ br:
       feed:
         title: Hollad cheñchamantoù %{id}
         title_comment: Hollad cheñchamantoù %{id} - %{comment}
+        created: Krouet
+        closed: Serret
+        belongs_to: Aozer
     subscribe:
       button: Koumanantiñ ouzh ar gaozeadenn
     unsubscribe:
@@ -533,7 +513,31 @@ br:
       title: Hollad cheñchamantoù %{id}
       created_by_html: Bet krouet gant %{link_user} d'an %{created}.
     no_such_entry:
+      title: N'eus ket eus an hollad cheñchamantoù-mañ
       heading: 'Enmont ebet gant an id: %{id}'
+    show:
+      title: 'Hollad cheñchamantoù: %{id}'
+      created: 'Krouet: %{when}'
+      closed: 'Serret: %{when}'
+      created_ago_html: Krouet %{time_ago}
+      closed_ago_html: Serret %{time_ago}
+      created_ago_by_html: Bet krouet %{time_ago} gant %{user}
+      closed_ago_by_html: Bet serret %{time_ago} gant %{user}
+      discussion: Kaozeadenn
+      join_discussion: Kevreit evit mont er gaozeadenn
+      still_open: Hollad cheñchamantoù digor - an diviz a zigoro ur wech ma vo serret
+        an hollad cheñchamantoù.
+      comment_by_html: Kemennadenn skrivet gant %{user} %{time_ago}
+      hidden_comment_by_html: Kemennadenn kuzhet gant %{user} %{time_ago}
+      changesetxml: Hollad cheñchamantoù XML
+      osmchangexml: Cheñchoùosm XML
+    paging_nav:
+      nodes: Skoulmoù (%{count})
+      nodes_paginated: Skoulmoù (%{x}-%{y} diwar %{count})
+      ways: Hentoù (%{count})
+      ways_paginated: Hentoù (%{x}-%{y} diwar %{count})
+      relations: Darempredoù (%{count})
+      relations_paginated: Darempredoù (%{x}-%{y} diwar %{count})
     timeout:
       sorry: Ho tigarez, re hir eo adtapout ar roll cheñchamantoù hoc'h eus goulennet.
   changeset_comments:
@@ -1600,11 +1604,7 @@ br:
     intro_text: Ur gartenn eus ar bed eo OprenStreetMap, krouet gant tud eveldoc'h
       ha frank hec'h implij dindan un aotre-implij digor.
     intro_2_create_account: Krouiñ ur gont implijer
-    hosting_partners_html: Kemeret eo an herberc'hiañ e karg gant %{ucl}, %{fastly},
-      %{bytemark}, ha %{partners} all.
-    partners_ucl: ↓"Universiy College" Londrez
     partners_fastly: Fastly
-    partners_bytemark: ↓Herberc'hiañ Bytemark
     partners_partners: Kevelourien
     tou: Termenoù implijout
     osm_offline: Ezlinenn eo diaz roadennoù OpenStreetMap evit bremañ e-pad ma pleder
@@ -1869,10 +1869,6 @@ br:
       new password button: Adderaouekaat ar ger-tremen
       help_text: Ebarzhit ar chomlec'h postel ho poa implijet evit en em enskrivañ,
         kaset e vo deoc'h ul liamm a c'hallot implijout evit adderaouekaat ho ker-tremen.
-    create:
-      notice email on way: Kaset ez eus bet ur postel deoc'h evit adderaouekaat ho
-        ker-tremen.
-      notice email cannot find: Ho tigarez, n'eo ket bet kavet ar chomlec'h postel-se.
     edit:
       title: Adderaouekaat ar ger-tremen
       heading: Adderaouekaat ar ger-tremen evit %{user}
@@ -1939,29 +1935,29 @@ br:
       openid_logo_alt: Kevreañ gant un OpenID
       auth_providers:
         openid:
-          title: Kevreañ ouzh OpenID
-          alt: Kevreañ ouzh un URL OpenID
+          title: Kevreañ gant OpenID
+          alt: Kevreañ gant un URL OpenID
         google:
-          title: Kevreañ ouzh Google
-          alt: Kevreañ ouzh OpenID Google
+          title: Kevreañ gant Google
+          alt: Kevreañ gant OpenID Google
         facebook:
-          title: Kevreañ ouzh Facebook
-          alt: Kevreañ ouzh ur gont facebook
+          title: Kevreañ gant Facebook
+          alt: Kevreañ gant ur gont Facebook
         microsoft:
-          title: Kevreañ ouzh Microsoft
-          alt: Kevreañ ouzh ur gont Microsoft
+          title: Kevreañ gant Microsoft
+          alt: Kevreañ gant ur gont Microsoft
         github:
-          title: Kevreañ dre GitHub
+          title: Kevreañ gant GitHub
           alt: Kevreañ gant ur gont GitHub
         wikipedia:
-          title: Kevreañ dre Wikipedia
+          title: Kevreañ gant Wikipedia
           alt: Kevreañ gant ur gont Wikipedia
         wordpress:
-          title: Kevreañ ouzh Wordpress
-          alt: Kevreañ ouzh OpenID Wordpress
+          title: Kevreañ gant Wordpress
+          alt: Kevreañ gant un OpenID Wordpress
         aol:
-          title: Kevreañ ouzh AOL
-          alt: Kevreañ ouzh AOL OpenID
+          title: Kevreañ gant AOL
+          alt: Kevreañ gant un OpenID AOL
     destroy:
       title: Digevreañ
       heading: Kuitaat OpenStreetMap
@@ -2448,8 +2444,7 @@ br:
       identifiable: ANAVEZADUS
       private: PREVEZ
       trackable: HEULIADUS
-      by: gant
-      in: e-barzh
+      details_without_tags_html: '%{time_ago} gant %{user}'
     index:
       public_traces: Roudoù GPS foran
       my_gps_traces: Ma Roudoù GPS
@@ -2621,6 +2616,7 @@ br:
       title: Ma sevenidigezhioù aotreet
       application: Sevenidigezh
       permissions: Aotreoù
+      last_authorized: Aotreet da ziwezhañ
       no_applications_html: N'ho peus ket aotreet goulenn %{oauth2} ebet c'hoazh.
     application:
       revoke: Nullañ ar moned
@@ -2744,9 +2740,14 @@ br:
     index:
       title: Implijerien
       heading: Implijerien
-      showing:
-        one: Pajenn %{page} (%{first_item} diwar %{items})
-        other: Pajenn %{page} (%{first_item}-%{last_item} diwar %{items})
+      older: Implijerien goshoc'h
+      newer: Implijerien nevesoc'h
+      found_users:
+        one: '%{count} implijer kavet'
+        two: '%{count} implijer kavet'
+        few: '%{count} implijer kavet'
+        many: '%{count} implijer kavet'
+        other: '%{count} implijer'
       summary_html: '%{name} krouet eus %{ip_address} d''an %{date}'
       summary_no_ip_html: '%{name} krouet d''an %{date}'
       confirm: Kadarnaat an implijerien diuzet
@@ -2769,8 +2770,8 @@ br:
       heading: N'eo ket kevredet ho ID ouzh ur gont OpenStreetMap.
       option_1: Ma'z oc'h un den nevez en OpenStreetMap, krouit ur gont nevez, mar
         plij, war-bouez ar furmskrid amañ dindan.
-      option_2: M'ho pez ur gont dija e c'hallit kevreañ outi en ur implijout hoc'h
-        anv implijer hag ho ker-tremen, ha goude-se kevrediñ ho kont gant hoc'h ID
+      option_2: M'ho peus ur gont dija e c'hallit kevreañ outi en ur implijout hoc'h
+        anv implijer hag ho ker-tremen, ha goude-se liammañ ho kont ouzh hoc'h ID
         en ho tibaboù implijer.
   user_role:
     filter:
@@ -2838,6 +2839,8 @@ br:
       revoke: Disteuler !
       flash: Torret eo bet ar stankadur-mañ.
     revoke_all:
+      title: Disteurel an holl stankadurioù evit %{block_on}
+      heading_html: O tisteurel an holl stankadurioù evit %{block_on}
       revoke: Disteuler!
     helper:
       time_future_html: Echuiñ a ray a-benn %{time}.
@@ -2895,7 +2898,6 @@ br:
       revoke: Disteuler !
       confirm: Ha sur oc'h ?
       reason: 'Abeg ar stankadur :'
-      back: Gwelet an holl stankadurioù
       revoker: 'Torrer :'
       needs_view: Ret eo d'an implijer kevreañ a-raok ma vefe diverket ar stankadur-mañ.
     block:
@@ -2909,9 +2911,6 @@ br:
       reason: Abeg evit stankañ
       status: Statud
       revoker_name: Torret gant
-      showing_page: Page %{page}
-      next: ↓War-lerc'h »
-      previous: ↓« Kent
   user_mutes:
     index:
       title: Implijerien kuzhet
index e661a4614dadea13cd9249874ae71414f44e21e8..c11f73d5e8efe3cf7d63734758af1964ddef114d 100644 (file)
@@ -184,8 +184,6 @@ bs:
         e-mail za porukom za potvrdu nove e-mail adrese.
       success: Korisničke informacije su uspješno osvježene.
   browse:
-    created: Napravljeno
-    closed: Zatvoreno
     version: Verzija
     in_changeset: Skup izmjena
     anonymous: anonimno
@@ -195,18 +193,6 @@ bs:
     view_history: Historija
     view_details: Prikaži detalje
     location: 'Lokacija:'
-    changeset:
-      title: 'Skup promjena: %{id}'
-      belongs_to: Autor
-      node: Čvorovi (%{count})
-      node_paginated: Čvorovi (%{x}-%{y} of %{count})
-      way: Putevi (%{count})
-      way_paginated: Putevi (%{x}-%{y} of %{count})
-      relation: Relacije (%{count})
-      relation_paginated: Relacije (%{x}-%{y} of %{count})
-      changesetxml: XML seta promjena
-      osmchangexml: osmChange XML
-      discussion: Diskusija
     node:
       title_html: 'Čvor: %{name}'
     way:
@@ -282,6 +268,21 @@ bs:
       feed:
         title: Set promjena %{id}
         title_comment: Set promjena %{id} - %{comment}
+        created: Napravljeno
+        closed: Zatvoreno
+        belongs_to: Autor
+    show:
+      title: 'Skup promjena: %{id}'
+      discussion: Diskusija
+      changesetxml: XML seta promjena
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Čvorovi (%{count})
+      nodes_paginated: Čvorovi (%{x}-%{y} of %{count})
+      ways: Putevi (%{count})
+      ways_paginated: Putevi (%{x}-%{y} of %{count})
+      relations: Relacije (%{count})
+      relations_paginated: Relacije (%{x}-%{y} of %{count})
     timeout:
       sorry: Žao nam je, listi seta promjena koju ste tražili je predugo trajalo za
         preuzimanje.
@@ -868,8 +869,6 @@ bs:
     intro_text: OpenStreetMap predstavlja mapu svijeta, kreiranu od strane ljudi kao
       što ste vi i može se besplatno koristiti.
     intro_2_create_account: Napravite korisnički račun
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnera
     osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
       važni radovi na održavanju.
@@ -1023,10 +1022,6 @@ bs:
       new password button: Ponovno postavljanje lozinke
       help_text: Unesite e-mail adresu koju ste koristili za otvaranje računa i poslaćemo
         Vam link kojim možete ponovo postaviti lozinku.
-    create:
-      notice email on way: Žao mi je što ste je izgubili :-( ali e-mail je na putu
-        tako da je možete pononvo postaviti uskoro.
-      notice email cannot find: Ne možemo pronaći tu e-mail adresu, žao nam je.
     edit:
       title: Ponovno postavljanje lozinke
       heading: Ponovno postavljanje lozinke za %{user}
@@ -1281,8 +1276,6 @@ bs:
       identifiable: MOŽE SE IDENTIFICIRATI
       private: PRIVATNO
       trackable: MOŽE SE PRATITI
-      by: od
-      in: u
     index:
       public_traces: Javne GPS trase
       public_traces_from: Javne GPS trase korisnika %{user}
@@ -1437,9 +1430,6 @@ bs:
     index:
       title: Korisnici
       heading: Korisnici
-      showing:
-        one: Stranica %{page} (%{first_item} od %{items})
-        other: Stranice %{page} (%{first_item}-%{last_item} od %{items})
       summary_html: '%{name} napravljeno sa %{ip_address} dana %{date}'
       summary_no_ip_html: '%{name} napravljeno %{date}'
       confirm: Potvrditi odabrane korisnike
@@ -1533,7 +1523,6 @@ bs:
       revoke: Opozvati!
       confirm: Da li ste sigurni?
       reason: Razlog za blokadu
-      back: Pogledati sve blokade
       revoker: 'Opozivalac:'
       needs_view: Korisnik se mora prijaviti prije nego se blokada očisti.
     block:
@@ -1547,9 +1536,6 @@ bs:
       reason: Razlog za blokadu
       status: Stanje
       revoker_name: Opozvano od strane
-      showing_page: Stranica %{page}
-      next: Sljedeća »
-      previous: « Prethodna
   notes:
     index:
       id: Id
index 54bbfeb276ef9322cfcb554707431c813b203703..91e65e8390368d6604c68ef41aa5bdc9a722e175 100644 (file)
@@ -356,12 +356,6 @@ ca:
     destroy:
       success: Compte suprimit.
   browse:
-    created: Creat
-    closed: Tancat
-    created_ago_html: Creat %{time_ago}
-    closed_ago_html: Tancat %{time_ago}
-    created_ago_by_html: Creat %{time_ago} per %{user}
-    closed_ago_by_html: Tancat %{time_ago} per %{user}
     deleted_ago_by_html: Eliminat %{time_ago} per %{user}
     edited_ago_by_html: Editat %{time_ago} per %{user}
     version: Versió
@@ -379,23 +373,6 @@ ca:
     view_history: Mostra l’historial
     view_details: Mostra els detalls
     location: 'Ubicació:'
-    changeset:
-      title: 'Conjunt de canvis: %{id}'
-      belongs_to: Autor
-      node: Nodes (%{count})
-      node_paginated: Nodes (%{x}-%{y} de %{count})
-      way: Vies (%{count})
-      way_paginated: Vies (%{x}-%{y} de %{count})
-      relation: Relacions (%{count})
-      relation_paginated: Relacions (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Comentari ocult de %{user} %{time_ago}
-      comment_by_html: Comentari de %{user} %{time_ago}
-      changesetxml: XML del conjunt de canvis
-      osmchangexml: XML en format osmChange
-      join_discussion: Inicieu una sessió per a unir-vos al debat
-      discussion: Debat
-      still_open: Conjunt de canvis encara obert - el debat començarà quan es tanqui
-        el conjunt de canvis.
     node:
       title_html: 'Node: %{name}'
       history_title_html: 'Historial del node: %{name}'
@@ -505,6 +482,30 @@ ca:
       feed:
         title: Conjunt de canvis %{id}
         title_comment: Conjunt de canvis %{id} - %{comment}
+        created: Creat
+        closed: Tancat
+        belongs_to: Autor
+    show:
+      title: 'Conjunt de canvis: %{id}'
+      created_ago_html: Creat %{time_ago}
+      closed_ago_html: Tancat %{time_ago}
+      created_ago_by_html: Creat %{time_ago} per %{user}
+      closed_ago_by_html: Tancat %{time_ago} per %{user}
+      discussion: Debat
+      join_discussion: Inicieu una sessió per a unir-vos al debat
+      still_open: Conjunt de canvis encara obert - el debat començarà quan es tanqui
+        el conjunt de canvis.
+      comment_by_html: Comentari de %{user} %{time_ago}
+      hidden_comment_by_html: Comentari ocult de %{user} %{time_ago}
+      changesetxml: XML del conjunt de canvis
+      osmchangexml: XML en format osmChange
+    paging_nav:
+      nodes: Nodes (%{count})
+      nodes_paginated: Nodes (%{x}-%{y} de %{count})
+      ways: Vies (%{count})
+      ways_paginated: Vies (%{x}-%{y} de %{count})
+      relations: Relacions (%{count})
+      relations_paginated: Relacions (%{x}-%{y} de %{count})
     timeout:
       sorry: La llista de conjunt de canvis que heu sol·licitat ha trigat massa a
         carregar-se.
@@ -1563,11 +1564,7 @@ ca:
     intro_text: L'OpenStreetMap és un mapa del món creat per persones com tu i d'ús
       lliure sota una llicència oberta.
     intro_2_create_account: Crea un compte d’usuari
-    hosting_partners_html: L'allotjament és a càrrec de %{ucl}, %{fastly}, %{bytemark}
-      i d'altres %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: socis
     tou: Condicions d’ús
     osm_offline: La base de dades OpenStreetMap és fora de línia mentre es fan les
@@ -1837,10 +1834,6 @@ ca:
       new password button: Restableix la contrasenya
       help_text: Introduïu l'adreça de correu electrònic que vau utilitzar per registrar-vos;
         us hi enviarem un enllaç per a restablir la contrasenya.
-    create:
-      notice email on way: Lamentem que l'hàgiu perdut :-( però ja us hem enviat un
-        correu i la podreu restablir ben aviat.
-      notice email cannot find: No s'ha trobat aquesta adreça de correu.
     edit:
       title: Restableix la contrasenya
       heading: Restableix la contrasenya per a %{user}
@@ -2483,8 +2476,6 @@ ca:
       identifiable: IDENTIFICABLE
       private: PRIVAT
       trackable: RASTREJABLE
-      by: per
-      in: en
     index:
       public_traces: Traces GPS públiques
       my_gps_traces: Les meves traces GPS
@@ -2791,9 +2782,6 @@ ca:
     index:
       title: Usuaris
       heading: Usuaris
-      showing:
-        one: Pàgina %{page} (%{first_item} de %{items})
-        other: Pàgina %{page} (%{first_item}-%{last_item} de %{items})
       summary_html: '%{name} creat a partir de %{ip_address} el %{date}'
       summary_no_ip_html: '%{name} creat el %{date}'
       confirm: Confirmar usuaris seleccionats
@@ -2923,7 +2911,6 @@ ca:
       revoke: Revoca
       confirm: N'esteu segur?
       reason: 'Motiu del blocatge:'
-      back: Mostra tots els blocs
       revoker: 'Revoker:'
       needs_view: L'usuari ha d'iniciar una sessió abans que es netegi el bloc.
     block:
@@ -2937,9 +2924,6 @@ ca:
       reason: Motiu del blocatge
       status: Estat
       revoker_name: Revocat per
-      showing_page: Pàgina %{page}
-      next: Següent »
-      previous: « Anterior
   notes:
     index:
       title: Notes enviades o comentades per %{user}
index 8029aa4429956c11f44802c9e5c7263feaa0c07a..92b224820c1f85755aa2dce7093574852f744a0a 100644 (file)
@@ -183,8 +183,6 @@ ce:
         link text: хӀун йу хӀара?
       save changes button: Ӏалашбе хийцамаш
   browse:
-    created: Кхоьллина
-    closed: ДӀачӀагӀа
     version: Верси
     in_changeset: Нисдарш
     anonymous: аноним
@@ -194,19 +192,6 @@ ce:
     view_history: Хьажа истори
     view_details: Мадарра
     location: 'Географин йолу меттиг:'
-    changeset:
-      title: 'Нисдарш: %{id}'
-      belongs_to: Автор
-      node: ТӀадамаш (%{count})
-      node_paginated: ТӀадамаш (%{x}-%{y} чуьра %{count})
-      way: Сиз (%{count})
-      way_paginated: Сиз (%{x}-%{y} чуьра %{count})
-      relation: Хилар (%{count})
-      relation_paginated: Хилар (%{x}-%{y} чуьра %{count})
-      changesetxml: Нисдарийн XML
-      osmchangexml: osmChange XML
-      join_discussion: Дийцарехь дакъалаца системин чугӀо
-      discussion: Дийцар
     node:
       title_html: 'ТӀадам: %{name}'
       history_title_html: 'ТӀадаман истори: %{name}'
@@ -302,6 +287,22 @@ ce:
       feed:
         title: 'Нисдарш: %{id}'
         title_comment: Нисдарш %{id} — %{comment}
+        created: Кхоьллина
+        closed: ДӀачӀагӀа
+        belongs_to: Автор
+    show:
+      title: 'Нисдарш: %{id}'
+      discussion: Дийцар
+      join_discussion: Дийцарехь дакъалаца системин чугӀо
+      changesetxml: Нисдарийн XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: ТӀадамаш (%{count})
+      nodes_paginated: ТӀадамаш (%{x}-%{y} чуьра %{count})
+      ways: Сиз (%{count})
+      ways_paginated: Сиз (%{x}-%{y} чуьра %{count})
+      relations: Хилар (%{count})
+      relations_paginated: Хилар (%{x}-%{y} чуьра %{count})
     timeout:
       sorry: Ахьа бихина нисдарийн могӀа, арабаккха тӀехь беха бу.
   changeset_comments:
@@ -711,7 +712,6 @@ ce:
     gps_traces: GPS-трекаш
     gps_traces_tooltip: Болхбе GPS-трекашца
     user_diaries: Декъашхочун дневник
-    partners_ucl: UCL
     help: ГӀо
     about: Проектах лаьцна
     copyright: Авторийн бакъонаш
@@ -844,8 +844,6 @@ ce:
       download: схьаэца
       start_coordinates: 'Координатийн йуьхь:'
       visibility: 'Гуш хилар:'
-    trace:
-      in: цу
   oauth_clients:
     index:
       application: ТӀетохаран цӀе
@@ -892,9 +890,6 @@ ce:
     index:
       title: Декъашхой
       heading: Декъашхой
-      showing:
-        one: АгӀо %{page} (%{first_item} %{items}) чуьра
-        other: АгӀо %{page} (%{first_item}-%{last_item} %{items} чуьра)
       summary_html: '%{name} кхоьллина %{date}, %{ip_address} адрес чуьра'
       summary_no_ip_html: '%{name} кхоьллина %{date}'
   user_role:
@@ -921,7 +916,6 @@ ce:
       revoke: ДӀайаккхаблок!
       confirm: Бакъалла лаьий хӀуна?
       reason: 'Блоктохаран бахьана:'
-      back: Гайта дерриге блоктохарш
       revoker: 'БлокдӀайаьккхинарг:'
     block:
       show: Гайта
@@ -933,9 +927,6 @@ ce:
       reason: Блоктохаран бахьана
       status: Статус
       revoker_name: ДӀайаьккхина блок
-      showing_page: АгӀо %{page}
-      next: РогӀера →
-      previous: ← Хьалхара
   notes:
     index:
       heading: '%{user} декъашхочун билгалонаш'
index 2649ed2207c6a468b4c8ffdff99125d5ff3f1b58..c8abf9a7bdb22f97166a0348e1230e0b11fa845f 100644 (file)
@@ -386,12 +386,6 @@ cs:
     destroy:
       success: Účet smazán.
   browse:
-    created: Vytvořeno
-    closed: Uzavřeno
-    created_ago_html: Vytvořeno %{time_ago}
-    closed_ago_html: Uzavřeno %{time_ago}
-    created_ago_by_html: Vytvořeno %{time_ago} uživatelem %{user}
-    closed_ago_by_html: Uzavřeno %{time_ago} uživatelem %{user}
     deleted_ago_by_html: Smazáno %{time_ago} uživatelem %{user}
     edited_ago_by_html: Upraveno %{time_ago} uživatelem %{user}
     version: Verze
@@ -413,23 +407,6 @@ cs:
     view_history: Zobrazit historii
     view_details: Zobrazit detaily
     location: 'Pozice:'
-    changeset:
-      title: 'Sada změn: %{id}'
-      belongs_to: Autor
-      node: Uzly (%{count})
-      node_paginated: Uzly (%{x}-%{y} z %{count})
-      way: Cesty (%{count})
-      way_paginated: Cesty (%{x}-%{y} z %{count})
-      relation: Relace (%{count})
-      relation_paginated: Relace (%{x}–%{y} z %{count})
-      hidden_comment_by_html: Skrytý komentář od uživatele %{user} %{time_ago}
-      comment_by_html: Komentář od uživatele %{user} %{time_ago}
-      changesetxml: Sada změn XML
-      osmchangexml: osmChange XML
-      join_discussion: Chcete-li diskutovat, přihlaste se
-      discussion: Diskuse
-      still_open: Sada změn je stále otevřená – diskuse se zpřístupní, jakmile bude
-        sada změn uzavřena.
     node:
       title_html: 'Uzel: %{name}'
       history_title_html: 'Historie uzlu: %{name}'
@@ -465,7 +442,7 @@ cs:
       entry_role_html: Relace %{relation_name} (jako %{relation_role})
     not_found:
       title: Nenalezeno
-      sorry: 'Promiňte, ale %{type} #%{id} nebylo možné nalézt.'
+      sorry: 'Je nám líto, ale %{type} #%{id} neexistuje.'
       type:
         node: uzel
         way: cesta
@@ -510,6 +487,15 @@ cs:
       introduction: Pro nalezení okolních prvků klikněte na mapu.
       nearby: Okolní prvky
       enclosing: Umístění prvku
+  old_nodes:
+    not_found:
+      sorry: 'Je nám líto, ale verze %{version} uzlu #%{id} nebyla nalezena.'
+  old_ways:
+    not_found:
+      sorry: 'Je nám líto, ale verze %{version} cesty #%{id} nebyla nalezena.'
+  old_relations:
+    not_found:
+      sorry: 'Je nám líto, ale verze %{version} relace #%{id} nebyla nalezena.'
   changesets:
     changeset_paging_nav:
       showing_page: Stránka %{page}
@@ -541,6 +527,46 @@ cs:
       feed:
         title: Sada změn %{id}
         title_comment: Sada změn %{id} - %{comment}
+        created: Vytvořeno
+        closed: Uzavřeno
+        belongs_to: Autor
+    subscribe:
+      heading: Přihlásit se k odběru následující diskuse o sadě změn?
+      button: Odebírat diskusi
+    unsubscribe:
+      heading: Zrušit odběr následující diskuse o sadě změn?
+      button: Zrušit odběr diskuse
+    heading:
+      title: Sada změn %{id}
+      created_by_html: Vytvořil uživatel %{link_user} %{created}.
+    no_such_entry:
+      title: Taková sada změn neexistuje
+      heading: Záznam s ID %{id} neexistuje
+      body: Je nám líto, ale sada změn s ID %{id} neexistuje. Zkontrolujte překlepy
+        nebo jste možná klikli na chybný odkaz.
+    show:
+      title: 'Sada změn: %{id}'
+      created: 'Vytvořeno: %{when}'
+      closed: 'Uzavřeno: %{when}'
+      created_ago_html: Vytvořeno %{time_ago}
+      closed_ago_html: Uzavřeno %{time_ago}
+      created_ago_by_html: Vytvořeno %{time_ago} uživatelem %{user}
+      closed_ago_by_html: Uzavřeno %{time_ago} uživatelem %{user}
+      discussion: Diskuse
+      join_discussion: Chcete-li diskutovat, přihlaste se
+      still_open: Sada změn je stále otevřená – diskuse se zpřístupní, jakmile bude
+        sada změn uzavřena.
+      comment_by_html: Komentář od uživatele %{user} %{time_ago}
+      hidden_comment_by_html: Skrytý komentář od uživatele %{user} %{time_ago}
+      changesetxml: Sada změn XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Uzly (%{count})
+      nodes_paginated: Uzly (%{x}-%{y} z %{count})
+      ways: Cesty (%{count})
+      ways_paginated: Cesty (%{x}-%{y} z %{count})
+      relations: Relace (%{count})
+      relations_paginated: Relace (%{x}–%{y} z %{count})
     timeout:
       sorry: Omlouváme se, ale vámi požadovaný seznam sad změn se načítal příliš dlouho.
   changeset_comments:
@@ -603,6 +629,7 @@ cs:
     show:
       title: Deník uživatele %{user} | %{title}
       user_title: Deník uživatele %{user}
+      discussion: Diskuse
       leave_a_comment: Zanechat komentář
       login_to_leave_a_comment_html: '%{login_link} k zanechání komentáře'
       login: Přihlaste se
@@ -657,6 +684,12 @@ cs:
       comment: Komentář
       newer_comments: Novější komentáře
       older_comments: Starší komentáře
+    subscribe:
+      heading: Přihlásit se k odběru následující diskuse k deníkovému záznamu?
+      button: Odebírat diskusi
+    unsubscribe:
+      heading: Odhlásit odběr následující diskuse k deníkovému záznamu?
+      button: Zrušit odběr diskuse
   doorkeeper:
     errors:
       messages:
@@ -698,7 +731,7 @@ cs:
     forbidden:
       title: Zakázáno
       description: Operace, kterou jste požadovali na serveru OpenStreetMap, je dostupná
-        pouze administrátorům (HTTP 403)
+        pouze správcům (HTTP 403)
     internal_server_error:
       title: Chyba aplikace
       description: Server OpenStreetMap narazil na neočekávanou situaci, která mu
@@ -1630,11 +1663,10 @@ cs:
     intro_text: OpenStreetMap je mapa světa, vytvořená lidmi jako vy a volně využitelná
       pod otevřenou licencí.
     intro_2_create_account: Vytvořit uživatelský účet
-    hosting_partners_html: Hosting podporují %{ucl}, %{fastly}, %{bytemark} a další
+    hosting_partners_2024_html: Hosting podporují %{fastly}, %{corpmembers} a další
       %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: firemní členové OSMF
     partners_partners: partneři
     tou: Podmínky užití
     osm_offline: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
@@ -1656,6 +1688,7 @@ cs:
     more: Další
   user_mailer:
     diary_comment_notification:
+      description: 'Záznam #%{id} deníku uživatele OpenStreetMap'
       subject: '[OpenStreetMap] %{user} okomentoval záznam v deníku'
       hi: Ahoj, uživateli %{to_user},
       header: '%{from_user} okomentoval záznam v deníku na OpenStreetMap s předmětem
@@ -1666,6 +1699,8 @@ cs:
         %{commenturl} nebo poslat zprávu autorovi na %{replyurl}
       footer_html: Můžete si také přečíst komentář na %{readurl} a můžete komentovat
         na %{commenturl} nebo poslat zprávu autorovi na %{replyurl}
+      footer_unsubscribe: Z odběru diskuse se můžete odhlásit na %{unsubscribeurl}
+      footer_unsubscribe_html: Z odběru diskuse se můžete odhlásit na %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Dobrý den, uživateli %{to_user},
@@ -1704,6 +1739,7 @@ cs:
         few: úspěšně načteno s %{trace_points} z možných %{count} bodů.
         many: úspěšně načteno s %{trace_points} z možných %{count} bodu.
         other: úspěšně načteno s %{trace_points} z možných %{count} bodů.
+      all_your_traces_html: Všechny úspěšně načtené GPX stopy můžete najít na %{url}.
       subject: '[OpenStreetMap] Úspěšný import GPX'
     signup_confirm:
       subject: '[OpenStreetMap] Vítejte v OpenStreetMap'
@@ -1729,6 +1765,7 @@ cs:
       click_the_link: Pokud jste to byli Vy, kliknutím na níže uvedený odkaz získáte
         nové heslo.
     note_comment_notification:
+      description: 'Poznámka k OpenStreetMap #%{id}'
       anonymous: Anonymní uživatel
       greeting: Ahoj,
       commented:
@@ -1769,6 +1806,7 @@ cs:
       details: Podrobnosti k poznámce můžete najít na %{url}.
       details_html: Podrobnosti k poznámce můžete najít na %{url}.
     changeset_comment_notification:
+      description: 'Sada změn OpenStreetMap #%{id}'
       hi: Dobrý den, uživateli %{to_user},
       greeting: Dobrý den,
       commented:
@@ -1789,10 +1827,8 @@ cs:
         partial_changeset_without_comment: bez komentáře
       details: Více informací o této sadě změn lze nalézt na %{url}.
       details_html: Více informací o této sadě změn lze nalézt na %{url}.
-      unsubscribe: Pro odhlášení z aktualizací této sady změn jděte na %{url} a klikněte
-        na „Zrušit odebírání“.
-      unsubscribe_html: Pro odhlášení z aktualizací této sady změn jděte na %{url}
-        a klikněte na „Zrušit odebírání“.
+      unsubscribe: Od aktualizací této sady změn se můžete odhlásit na %{url}.
+      unsubscribe_html: Od aktualizací této sady změn se můžete odhlásit na %{url}.
   confirmations:
     confirm:
       heading: Zkontrolujte si e-mail!
@@ -1842,11 +1878,13 @@ cs:
       to: Komu
       subject: Předmět
       date: Datum
+      actions: Akce
     message_summary:
       unread_button: Označit jako nepřečtené
       read_button: Označit jako přečtené
       reply_button: Odpovědět
       destroy_button: Smazat
+      unmute_button: Přesunout do doručené pošty
     new:
       title: Odeslat zprávu
       send_message_to_html: Poslat novou zprávu uživateli %{name}
@@ -1861,6 +1899,7 @@ cs:
       body: Je mi líto, ale žádná zpráva s tímto ID neexistuje.
     outbox:
       title: Odeslaná pošta
+      actions: Akce
       messages:
         few: Máte %{count} odeslané zprávy
         one: Máte %{count} odeslanou zprávu
@@ -1868,6 +1907,13 @@ cs:
       no_sent_messages_html: Nemáte žádné odeslané zprávy. Co třeba kontaktovat nějaké
         %{people_mapping_nearby_link}?
       people_mapping_nearby: uživatele poblíž
+    muted:
+      title: Ztlumené zprávy
+      messages:
+        one: Máte %{count} ztlumenou zprávu
+        few: Máte %{count} ztlumené zprávy
+        many: Máte %{count} ztlumené zprávy
+        other: Máte %{count} ztlumených zpráv
     reply:
       wrong_user: Jste přihlášeni jako „%{user}“, ale zpráva, na kterou chcete odpovědět,
         nebyla poslána tomuto uživateli. Pokud na ni chcete odpovědět, přihlaste se
@@ -1886,23 +1932,26 @@ cs:
     heading:
       my_inbox: Má doručená pošta
       my_outbox: Moje odchozí
+      muted_messages: Ztlumené zprávy
     mark:
       as_read: Zpráva označena jako přečtená
       as_unread: Zpráva označena jako nepřečtená
+    unmute:
+      notice: Zpráva byla přesunuta do doručené pošty
+      error: Zprávu se nepodařilo přesunout do doručené pošty.
     destroy:
       destroyed: Zpráva smazána
   passwords:
     new:
       title: Ztracené heslo
       heading: Zapomněli jste heslo?
-      email address: 'E-mailová adresa:'
+      email address: E-mailová adresa
       new password button: Resetovat heslo
       help_text: Zadejte e-mailovou adresu, pod kterou jste se zaregistrovali, my
         vám na ni pošleme odkaz, pomocí kterého si nastavíte nové heslo.
     create:
-      notice email on way: Škoda zapomenutého hesla :-( e-mail už je na cestě, takže
-        si budete brzy moci zvolit nové.
-      notice email cannot find: Je mi líto, ale nemohu najít tuto e-mailovou adresu.
+      send_paranoid_instructions: Pokud v naší databázi existuje vaše e-mailová adresa,
+        obdržíte na ni během několika minut odkaz pro obnovení hesla.
     edit:
       title: Obnovit heslo
       heading: Resetovat heslo pro %{user}
@@ -1910,6 +1959,7 @@ cs:
       flash token bad: Odpovídající kód nebyl nalezen, možná zkontrolujte URL?
     update:
       flash changed: Vaše heslo bylo změněno.
+      flash token bad: Odpovídající kód nebyl nalezen, možná zkontrolujte URL?
   preferences:
     show:
       title: Moje preference
@@ -1954,11 +2004,11 @@ cs:
     new:
       title: Přihlásit se
       heading: Přihlášení
-      email or username: 'E-mailová adresa nebo uživatelské jméno:'
-      password: 'Heslo:'
+      email or username: E-mailová adresa nebo uživatelské jméno
+      password: Heslo
       remember: Zapamatuj si mě
       lost password link: Ztratili jste heslo?
-      login_button: Přihlásit
+      login_button: Přihlásit se
       register now: Zaregistrujte se
       with external: 'Případně se přihlaste prostřednictvím třetí strany:'
       no account: Nemáte účet?
@@ -1967,16 +2017,16 @@ cs:
       auth_providers:
         openid:
           title: Přihlásit se pomocí OpenID
-          alt: Přihlášení pomocí OpenID URL
+          alt: Přihlásit se pomocí OpenID URL
         google:
           title: Přihlásit se prostřednictvím Google
-          alt: Přihlášení pomocí Google OpenID
+          alt: Přihlásit se pomocí Google OpenID
         facebook:
           title: Přihlásit se přes Facebook
-          alt: Přihlášení pomocí účtu na Facebooku
+          alt: Přihlásit se pomocí účtu na Facebooku
         microsoft:
           title: Přihlásit se přes Microsoft
-          alt: Přihlášení pomocí účtu Microsoft
+          alt: Přihlásit se pomocí účtu Microsoft
         github:
           title: Přihlásit se přes GitHub
           alt: Přihlásit se pomocí GitHub účtu
@@ -1985,10 +2035,10 @@ cs:
           alt: Přihlásit se účtem na Wikipedii
         wordpress:
           title: Přihlásit se prostřednictvím Wordpress
-          alt: Přihlášení pomocí Wordpress OpenID
+          alt: Přihlásit se pomocí Wordpress OpenID
         aol:
           title: Přihlásit se prostřednictvím AOL
-          alt: Přihlášení pomocí AOL OpenID
+          alt: Přihlásit se pomocí AOL OpenID
     destroy:
       title: Odhlásit se
       heading: Odhlášení z OpenStreetMap
@@ -2013,6 +2063,7 @@ cs:
       image: Obrázek
       alt: Alternativní text
       url: URL
+      codeblock: Blok kódu
     richtext_field:
       edit: Upravit
       preview: Náhled
@@ -2301,8 +2352,8 @@ cs:
         title: Průvodce začátečníka
         description: Komunitou spravovaná příručka pro začátečníky.
       community:
-        title: Komunitní fórum
-        description: Sdílený prostor pro diskuse o OpenStreetMap.
+        title: Nápověda a komunitní fórum
+        description: Sdílený prostor, kde můžete získat pomoc a diskutovat o OpenStreetMap.
       mailing_lists:
         title: E-mailové konference
         description: Položte dotaz nebo diskutujte o zajímavých věcech na některé
@@ -2361,43 +2412,67 @@ cs:
           primary: Silnice první třídy
           secondary: Silnice druhé třídy
           unclassified: Silnice
+          pedestrian: Cesta pro pěší
           track: Lesní a polní cesta
           bridleway: Koňská stezka
           cycleway: Cyklostezka
           cycleway_national: Národní cyklotrasa
           cycleway_regional: Regionální cyklotrasa
           cycleway_local: Místní cyklotrasa
+          cycleway_mtb: Trasa pro horská kola
           footway: Pěší cesta
           rail: Železnice
+          train: Vlak
           subway: Metro
+          ferry: Trajekt
+          light_rail: Rychlodráha
+          tram: Tramvaj
+          trolleybus: Trolejbus
           cable_car: Lanovka
           chair_lift: sedačková lanovka
           runway: Vzletová a přistávací dráha
           taxiway: pojezdová dráha
           apron: Letištní odbavovací plocha
           admin: Administrativní hranice
+          capital: Hlavní město
+          city: Město
+          orchard: Sad
+          vineyard: Vinice
           forest: Les
-          wood: Les
+          wood: les
+          farmland: Pole
+          grass: Tráva
+          meadow: louka
+          bare_rock: Holá skála
+          sand: Písčina
           golf: Golfové hřiště
           park: Park
           common: Pastvina
+          built_up: Zastavěná plocha
           resident: Obytná oblast
           retail: Nákupní oblast
           industrial: Průmyslová oblast
           commercial: Kancelářská oblast
           heathland: Vřesoviště
+          scrubland: Křoviny
           lake: Jezero
           reservoir: nádrž
+          intermittent_water: Občasná vodní plocha
+          glacier: Ledovec
+          reef: Rif
+          wetland: Mokřad
           farm: Farma
           brownfield: Zbořeniště
           cemetery: Hřbitov
           allotments: Zahrádkářská kolonie
           pitch: Sportovní hřiště
           centre: Sportovní centrum
+          beach: Pláž
           reserve: Přírodní rezervace
           military: Vojenský prostor
           school: Škola
           university: univerzita
+          hospital: nemocnice
           building: Významná budova
           station: Nádraží
           summit: Vrchol
@@ -2407,8 +2482,11 @@ cs:
           private: Soukromý pozemek
           destination: Průjezd zakázán
           construction: Cesta ve výstavbě
+          bus_stop: Autobusová zastávka
           bicycle_shop: Cykloobchod
+          bicycle_rental: Půjčovna kol
           bicycle_parking: Parkoviště pro kola
+          bicycle_parking_small: Malé parkoviště pro kola
           toilets: Záchody
     welcome:
       title: Vítejte!
@@ -2560,8 +2638,6 @@ cs:
       identifiable: IDENTIFIKOVATELNÁ
       private: SOUKROMÁ
       trackable: STOPOVATELNÁ
-      by: od
-      in: v
     index:
       public_traces: Veřejné GPS stopy
       my_gps_traces: Moje GPS stopy
@@ -2600,7 +2676,7 @@ cs:
       cookies_needed: Vypadá to, že máte zakázány cookies – před pokračováním si je
         v prohlížeči zapněte.
     require_admin:
-      not_an_admin: Tuto akci může provést jen administrátor.
+      not_an_admin: Tuto akci může provést jen správce.
     setup_user_auth:
       blocked_zero_hour: Na webu OpenStreetMap máte urgentní zprávu. Tuto zprávu si
         musíte přečíst, než budete moci ukládat své editace.
@@ -2614,6 +2690,7 @@ cs:
       oauth1_settings: Nastavení OAuth 1
       oauth2_applications: Aplikace OAuth 2
       oauth2_authorizations: Autorizace OAuth 2
+      muted_users: Ztlumení uživatelé
   oauth:
     authorize:
       title: Autorizovat přístup k vašemu účtu
@@ -2824,6 +2901,8 @@ cs:
       my_dashboard: Moje nástěnka
       blocks on me: Moje zablokování
       blocks by me: Zablokování mnou
+      create_mute: Ztlumit tohoto uživatele
+      destroy_mute: Zrušit ztlumení tohoto uživatele
       edit_profile: Upravit profil
       send message: Poslat zprávu
       diary: Deník
@@ -2868,9 +2947,13 @@ cs:
     index:
       title: Uživatelé
       heading: Uživatelé
-      showing:
-        one: Stránka %{page} (%{first_item} z %{items})
-        other: Stránka %{page} (%{first_item}–%{last_item} z %{items})
+      older: Starší uživatelé
+      newer: Novější uživatelé
+      found_users:
+        one: Nalezen %{count} uživatel
+        few: Nalezeni %{count} uživatelé
+        many: Nalezeno %{count} uživatele
+        other: Nalezeno %{count} uživatelů
       summary_html: '%{name} vytvořeno %{date} z %{ip_address}'
       summary_no_ip_html: '%{name} vytvořen %{date}'
       confirm: Potvrdit vybrané uživatele
@@ -2882,8 +2965,8 @@ cs:
       support: podporu
       automatically_suspended: Omlouváme se, váš účet byl automaticky pozastaven kvůli
         podezřelé aktivitě.
-      contact_support_html: Toto rozhodnutí bude brzy přezkoumáno administrátorem,
-        nebo můžete kontaktovat %{support_link}, pokud si to přejete prodiskutovat.
+      contact_support_html: Toto rozhodnutí bude brzy přezkoumáno správcem, nebo můžete
+        kontaktovat %{support_link}, pokud si to přejete prodiskutovat.
     auth_failure:
       connection_failed: Připojení k poskytovateli autentizace se nezdařilo
       invalid_credentials: Neplatné autentizační údaje
@@ -2902,8 +2985,8 @@ cs:
       not_a_role: Řetězec „%{role}“ neoznačuje platnou roli.
       already_has_role: Uživatel již roli %{role} má.
       doesnt_have_role: Uživatel nemá roli %{role}.
-      not_revoke_admin_current_user: Administrátorskou roli nelze odebrat aktuálně
-        přihlášenému uživateli.
+      not_revoke_admin_current_user: Správcovskou roli nelze odebrat aktuálně přihlášenému
+        uživateli.
     grant:
       title: Potvrdit přidělení role
       heading: Potvrdit přidělení role
@@ -3006,7 +3089,6 @@ cs:
       revoke: Zrušit !
       confirm: Jste si jistý?
       reason: 'Důvod bloku:'
-      back: Zobrazit všechny bloky
       revoker: 'Zrušil:'
       needs_view: Aby se blok smazal, uživatel se musí nejprve přihlásit.
     block:
@@ -3020,9 +3102,32 @@ cs:
       reason: Důvod pro blok
       status: Stav
       revoker_name: Zrušil
-      showing_page: Stránka %{page}
-      next: Následující »
-      previous: « Předchozí
+  user_mutes:
+    index:
+      title: Ztlumení uživatelé
+      my_muted_users: Mnou ztlumení uživatelé
+      you_have_muted_n_users:
+        one: Ztlumili jste %{count} uživatele
+        few: Ztlumili jste %{count} uživatele
+        many: Ztlumili jste %{count} uživatele
+        other: Ztlumili jste %{count} uživatelů
+      user_mute_explainer: Zprávy od ztlumených uživatelů jsou přesunuty do oddělené
+        složky a nebudete dostávat e-mailová upozornění.
+      user_mute_admins_and_moderators: Správce a moderátory můžete ztlumit, ale jejich
+        zprávy nebudou ztlumeny.
+      table:
+        thead:
+          muted_user: Ztlumený uživatel
+          actions: Akce
+        tbody:
+          unmute: Zrušit ztlumení
+          send_message: Poslat zprávu
+    create:
+      notice: Ztlumili jste uživatele %{name}.
+      error: Uživatele %{name} nebylo možno ztlumit. %{full_message}.
+    destroy:
+      notice: Zrušili jste ztlumení uživatel %{name}.
+      error: Ztlumení uživatele se nepodařilo zrušit. Zkuste to prosím znovu.
   notes:
     index:
       title: Poznámky vytvořené nebo okomentované uživatelem %{user}
@@ -3059,6 +3164,7 @@ cs:
       reactivate: Reaktivovat
       comment_and_resolve: Okomentovat a vyřešit
       comment: Okomentovat
+      log_in_to_comment: Chcete-li okomentovat tuto poznámku, přihlaste se
       report_link_html: Pokud tato poznámka obsahuje citlivé údaje, které je třeba
         odstranit, můžete %{link}.
       other_problems_resolve: Pokud má tato poznámka jakýkoli jiný problém, přidejte
@@ -3149,6 +3255,7 @@ cs:
       map_data_zoom_in_tooltip: Pro zobrazení mapových dat přejděte na větší měřítko.
       queryfeature_tooltip: Průzkum prvků
       queryfeature_disabled_tooltip: Pro průzkum prvků přejděte na větší měřítko
+      embed_html_disabled: HTML vkládání není pro tuto mapovou vrstvu k dispozici
     changesets:
       show:
         comment: Okomentovat
index 24a8d086bcca0691908246018c6a57581ff24444..90d31d0b9c7bed7a9eae310fae6238cf89048f9c 100644 (file)
@@ -342,12 +342,6 @@ cy:
     destroy:
       success: Cyfrif wedi'i ddileu.
   browse:
-    created: Wedi creu
-    closed: Wedi cau
-    created_ago_html: Wedi creu %{time_ago}
-    closed_ago_html: Wedi cau %{time_ago}
-    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: Golygwyd %{time_ago} gan %{user}
     version: Fersiwn
@@ -373,23 +367,6 @@ cy:
     view_history: Gweld hanes
     view_details: Gweld manylion
     location: Lleoliadː
-    changeset:
-      title: 'Grŵp newid: %{id}'
-      belongs_to: Awdur
-      node: Nodau (%{count})
-      node_paginated: Nodau (%{x}-%{y} o %{count})
-      way: Llwybrau %{count}
-      way_paginated: Llwybrau (%{x}-%{y} o %{count})
-      relation: Perthnasoedd (%{count})
-      relation_paginated: Perthnasoedd (%{x}-%{y} o %{count})
-      hidden_comment_by_html: Sylw cudd gan %{user} %{time_ago}
-      comment_by_html: Sylw gan %{user} %{time_ago}
-      changesetxml: XML grŵp newid
-      osmchangexml: XML osmChange
-      join_discussion: Mewngofnodwch i ymuno â'r sgwrs
-      discussion: Sgwrs
-      still_open: Mae'r grŵp newid dal ar agor - bydd trafodaeth yn agor pan fydd
-        y grŵp newid wedi cau.
     node:
       title_html: 'Nod: %{name}'
       history_title_html: 'Hanes y nod: %{name}'
@@ -509,6 +486,42 @@ cy:
       feed:
         title: Grŵp newid %{id}
         title_comment: Grŵp newid %{id} - %{comment}
+        created: Wedi creu
+        closed: Wedi cau
+        belongs_to: Awdur
+    subscribe:
+      button: Tanysgrifio i drafodaeth
+    unsubscribe:
+      button: Dad-danysgrifio o'r drafodaeth
+    heading:
+      title: Grŵp newid %{id}
+      created_by_html: Crëwyd gan %{link_user} ar %{created}.
+    no_such_entry:
+      title: Dim grŵp newid o'r fath
+      heading: 'Dim cofnod gyda''r id: %{id}'
+    show:
+      title: 'Grŵp newid: %{id}'
+      created: 'Crëwyd: %{when}'
+      closed: 'Caëwyd: %{when}'
+      created_ago_html: Wedi creu %{time_ago}
+      closed_ago_html: Wedi cau %{time_ago}
+      created_ago_by_html: Wedi creu %{time_ago} gan %{user}
+      closed_ago_by_html: Wedi cau %{time_ago} gan %{user}
+      discussion: Sgwrs
+      join_discussion: Mewngofnodwch i ymuno â'r sgwrs
+      still_open: Mae'r grŵp newid dal ar agor - bydd trafodaeth yn agor pan fydd
+        y grŵp newid wedi cau.
+      comment_by_html: Sylw gan %{user} %{time_ago}
+      hidden_comment_by_html: Sylw cudd gan %{user} %{time_ago}
+      changesetxml: XML grŵp newid
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nodau (%{count})
+      nodes_paginated: Nodau (%{x}-%{y} o %{count})
+      ways: Llwybrau %{count}
+      ways_paginated: Llwybrau (%{x}-%{y} o %{count})
+      relations: Perthnasoedd (%{count})
+      relations_paginated: Perthnasoedd (%{x}-%{y} o %{count})
     timeout:
       sorry: Mae'n ddrwg gennym, cymerodd y rhestr o grwpiau newid y gofynnoch amdanynt
         rhy hir i'w hadalw.
@@ -1516,11 +1529,7 @@ cy:
     intro_text: Mae OpenStreetMap yn fap o'r byd, wedi'i greu gan bobl fel chi ac
       sydd ar gael i'w ddefnyddio am ddim a dan drwydded rydd.
     intro_2_create_account: Creu cyfrif defnyddiwr
-    hosting_partners_html: Cefnogir y gynhaliaeth gan %{ucl}, %{fastly}, %{bytemark}
-      a %{partners} eraill
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: phartneriaid
     tou: Telerau Gwasanaeth
     osm_offline: Mae cronfa ddata OpenStreetMap all-lein ar hyn o bryd er mwyn gwaith
@@ -1602,6 +1611,7 @@ cy:
       details: Ceir rhagor o fanylion am y nodyn ar %{url}.
       details_html: Ceir rhagor o fanylion am y nodyn ar %{url}.
     changeset_comment_notification:
+      description: 'Grŵp newid OpenStreetMap #%{id}'
       hi: Helo %{to_user},
       greeting: Helo,
       commented:
@@ -1716,10 +1726,6 @@ cy:
       heading: Wedi anghofio'ch cyfrinair?
       email address: Cyfeiriad E-bost
       new password button: Ailosod cyfrinair
-    create:
-      notice email on way: Sori eich bod wedi ei golli :-( ond mae e-bost ar y ffordd
-        er mwyn ichi ei ailosod yn fuan.
-      notice email cannot find: Methwyd dod o hyd i'r cyfeiriad ebost yno.
     edit:
       title: Ailosod cyfrinair
       heading: Ailosod cyfrinair ar gyfer %{user}
@@ -1731,9 +1737,9 @@ cy:
       title: Dewisiadau
       preferred_editor: Hoff Olygydd
       preferred_languages: Ieithoedd
-      edit_preferences: Dewisiadau Golygu
+      edit_preferences: Golygu Dewisiadau
     edit:
-      title: Dewisiadau Golygu
+      title: Golygu Dewisiadau
       save: Diweddaru Dewisiadau
       cancel: Canslo
     update:
@@ -2245,8 +2251,6 @@ cy:
       identifiable: CANFYDDADWY
       private: PREIFAT
       trackable: OLRHAINADWY
-      by: gan
-      in: mewn
     index:
       public_traces: Arllwybrau GPS Cyhoeddus
       my_gps_traces: Fy Arllwybrau GPS
@@ -2468,13 +2472,6 @@ cy:
     index:
       title: Defnyddwyr
       heading: Defnyddwyr
-      showing:
-        zero: Tudalen %{page} (%{first_item} o %{items})
-        one: Tudalen %{page} (%{first_item} o %{items})
-        two: Tudalen %{page} (%{first_item}-%{last_item} o %{items})
-        few: Tudalen %{page} (%{first_item}-%{last_item} o %{items})
-        many: Tudalen %{page} (%{first_item}-%{last_item} o %{items})
-        other: Tudalen %{page} (%{first_item}-%{last_item} o %{items})
       summary_html: Crëwyd %{name} o %{ip_address} ar %{date}
       summary_no_ip_html: '%{name} wedi''i greu ar %{date}'
       confirm: Cadarnhau Defnyddwyr Dewisiedig
@@ -2515,6 +2512,13 @@ cy:
     revoke:
       revoke: Dad-flocio!
     revoke_all:
+      active_blocks:
+        zero: '%{count} blociau cyfredol.'
+        one: '%{count} %{count} bloc cyfredol.'
+        two: '%{count} floc cyfredol.'
+        few: '%{count} bloc cyfredol.'
+        many: '%{count} bloc cyfredol.'
+        other: '%{count} bloc cyfredol.'
       revoke: Dad-flocio!
     helper:
       time_future_html: Yn dod i ben mewn %{time}.
@@ -2570,7 +2574,6 @@ cy:
       revoke: Dad-flocio!
       confirm: Ydych chi'n siŵr?
       reason: 'Rheswm dros y bloc:'
-      back: Gweld pob bloc
       revoker: 'Dad-flociwr:'
     block:
       not_revoked: (heb ei ddirymu)
@@ -2583,9 +2586,6 @@ cy:
       reason: Rheswm dros flocio
       status: Statws
       revoker_name: Dirymwyd gan
-      showing_page: Tudalen %{page}
-      next: Nesaf »
-      previous: « Blaenorol
   user_mutes:
     index:
       title: Defnyddwyr ag Anwybyddwyd
index 82d1f61b2b9e13a5534ab35491ce6061e745df04..63cfe341135d06b0eb92270423d78c1ad21e56c2 100644 (file)
@@ -26,6 +26,7 @@
 # Author: Kaare
 # Author: Luckas
 # Author: Macofe
+# Author: Mehanika
 # Author: Mikini
 # Author: Mjjzf
 # Author: Nemo bis
@@ -243,8 +244,8 @@ da:
       name: iD
       description: iD (redigér i browseren)
     remote:
-      name: Fjernbetjening
-      description: Fjernbetjening (JOSM, Potlatch eller Merkaartor)
+      name: Eksternt program
+      description: eksternt program (JOSM, Potlatch eller Merkaartor)
   auth:
     providers:
       none: Ingen
@@ -351,12 +352,6 @@ da:
     destroy:
       success: Kontoen er bleget slettet.
   browse:
-    created: Oprettet
-    closed: Lukket
-    created_ago_html: Oprettet %{time_ago}
-    closed_ago_html: Lukket %{time_ago}
-    created_ago_by_html: Oprettet %{time_ago} af %{user}
-    closed_ago_by_html: Lukket %{time_ago} af %{user}
     deleted_ago_by_html: Slettet %{time_ago} af %{user}
     edited_ago_by_html: Redigeret %{time_ago} af %{user}
     version: Version
@@ -374,23 +369,6 @@ da:
     view_history: Se historik
     view_details: Se detaljer
     location: 'Sted:'
-    changeset:
-      title: 'Ændringssæt: %{id}'
-      belongs_to: Forfatter
-      node: Punkter (%{count})
-      node_paginated: Punkter (%{x}-%{y} af %{count})
-      way: Veje (%{count})
-      way_paginated: Veje (%{x}-%{y} af %{count})
-      relation: Relationer (%{count})
-      relation_paginated: Relationer (%{x}-%{y} af %{count})
-      hidden_comment_by_html: Skjult kommentar fra %{user} %{time_ago}
-      comment_by_html: Kommentar fra %{user} %{time_ago}
-      changesetxml: XML for ændringssæt
-      osmchangexml: XML for osmChange
-      join_discussion: Log på for at deltage i diskussionen
-      discussion: Diskussion
-      still_open: Ændringssæt er stadig åben - diskussion vil åbne når ændringssættet
-        lukkes.
     node:
       title_html: 'Punkt: %{name}'
       history_title_html: 'Punkthistorik: %{name}'
@@ -508,6 +486,30 @@ da:
       feed:
         title: Ændringssæt %{id}
         title_comment: Ændringssæt %{id} - %{comment}
+        created: Oprettet
+        closed: Lukket
+        belongs_to: Forfatter
+    show:
+      title: 'Ændringssæt: %{id}'
+      created_ago_html: Oprettet %{time_ago}
+      closed_ago_html: Lukket %{time_ago}
+      created_ago_by_html: Oprettet %{time_ago} af %{user}
+      closed_ago_by_html: Lukket %{time_ago} af %{user}
+      discussion: Diskussion
+      join_discussion: Log på for at deltage i diskussionen
+      still_open: Ændringssæt er stadig åben - diskussion vil åbne når ændringssættet
+        lukkes.
+      comment_by_html: Kommentar fra %{user} %{time_ago}
+      hidden_comment_by_html: Skjult kommentar fra %{user} %{time_ago}
+      changesetxml: XML for ændringssæt
+      osmchangexml: XML for osmChange
+    paging_nav:
+      nodes: Punkter (%{count})
+      nodes_paginated: Punkter (%{x}-%{y} af %{count})
+      ways: Veje (%{count})
+      ways_paginated: Veje (%{x}-%{y} af %{count})
+      relations: Relationer (%{count})
+      relations_paginated: Relationer (%{x}-%{y} af %{count})
     timeout:
       sorry: Desværre tog det for lang tid at indlæse den liste af ændringssæt du
         har bedt om.
@@ -534,8 +536,8 @@ da:
       friend: Ven
     show:
       title: Mit kontrolpanel
-      no_home_location_html: '%{edit_profile_link} og definer hvor du bor for at se
-        brugere i nærheden.'
+      no_home_location_html: '%{edit_profile_link} og angiv din hjemmeposition for
+        at se brugere i nærheden.'
       edit_your_profile: Rediger din profil
       my friends: Mine venner
       no friends: Du har ikke tilføjet nogle venner endnu.
@@ -1592,11 +1594,10 @@ da:
     intro_text: OpenStreetMap er et kort over verden, skabt af folk som dig og gratis
       at bruge under en åben licens.
     intro_2_create_account: Opret en brugerkonto
-    hosting_partners_html: Driften støttes af %{ucl}, %{fastly}, %{bytemark} og andre
+    hosting_partners_2024_html: Hosting støttes af %{fastly}, %{corpmembers}, og andre
       %{partners}.
-    partners_ucl: University College London
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: OSMF virksomhedsmedlemmer
     partners_partners: partnere
     tou: Vilkår for anvendelse
     osm_offline: OpenStreetMap-databasen er for øjeblikket offline på grund af nødvendig
@@ -1869,10 +1870,6 @@ da:
       new password button: Nulstil adgangskode
       help_text: Indtast e-mailadressen du brugte da du oprettede kontoen. Vi sender
         et link til den som du kan bruge til at nulstille din adgangskode.
-    create:
-      notice email on way: Synd du har glemt den, men en e-mail er på vej så du kan
-        snart indstille en ny.
-      notice email cannot find: Kunne ikke finde den e-mailadresse, beklager.
     edit:
       title: Nulstil adgangskode
       heading: Nulstil adgangskode for %{user}
@@ -2203,7 +2200,7 @@ da:
         copyright: Ophavsret tilhører OpenStreetMap og bidragsydere, under en åben
           licens
       remote_failed: Redigering mislykkede - tjek at JOSM eller Merkaartor er startet
-        og fjernbetjening er aktiveret
+        og at ekstern betjening er aktiveret
     edit:
       not_public: Du har ikke angivet af dine ændringer skal være offentlige.
       not_public_description_html: Du kan ikke længere redigere kortet medmindre du
@@ -2556,8 +2553,6 @@ da:
       identifiable: IDENTIFICERBAR
       private: PRIVAT
       trackable: SPORBAR
-      by: af
-      in: i
     index:
       public_traces: Offentlige GPS-spor
       my_gps_traces: Mine GPS-spor
@@ -2872,9 +2867,6 @@ da:
     index:
       title: Brugere
       heading: Brugere
-      showing:
-        one: Side %{page} (%{first_item} af %{items})
-        other: Side %{page} (%{first_item}-%{last_item} af %{items})
       summary_html: '%{name} oprettet fra %{ip_address} på %{date}'
       summary_no_ip_html: '%{name} oprettet på %{date}'
       confirm: Bekræft valgte brugere
@@ -3018,7 +3010,6 @@ da:
       revoke: Tilbagekald!
       confirm: Er du sikker?
       reason: 'Årsag til blokering:'
-      back: Vis alle blokeringer
       revoker: 'Tilbagekalder:'
       needs_view: Brugeren skal logge på, før denne blokering vil blive fjernet
     block:
@@ -3032,9 +3023,6 @@ da:
       reason: Årsag til blokering
       status: Status
       revoker_name: Tilbagekaldt af
-      showing_page: Side %{page}
-      next: Næste »
-      previous: « Forrige
   user_mutes:
     index:
       title: Stillegjorte Brugere
index d105238ada20cbf8c52cbb5b2482503fb83d240f..d0d6ccbf72d52d9ac9dceeac136124068c6bcda7 100644 (file)
 # Author: Thomas Bohn
 # Author: Til
 # Author: Timonade
+# Author: TomatoCake
 # Author: Twistqj
 # Author: Umherirrender
 # Author: Unkn0wnCat
@@ -212,7 +213,7 @@ de:
         name: Name
         redirect_uri: 'Weiterleitungs-URIs:'
         confidential: Vertrauliche Anwendung?
-        scopes: Rechte
+        scopes: Berechtigungen
       friend:
         user: Benutzer
         friend: Freund
@@ -259,7 +260,7 @@ de:
         confidential: Es wird eine Anwendung verwendet, bei der das Kundengeheimnis
           vertraulich behandelt werden kann (native mobile Apps und einseitige Apps
           sind nicht vertraulich)
-        redirect_uri: Pro URI eine Zeile verwenden
+        redirect_uri: Verwende eine Zeile pro URI
       trace:
         tagstring: durch Komma getrennt
       user_block:
@@ -412,14 +413,14 @@ de:
     go_public:
       heading: Karte bearbeiten (public editing)
       currently_not_public: Derzeit sind deine Bearbeitungen anonym und andere können
-        weder deine Nachrichten noch deinen Standort sehen. Um öffentlich deine Bearbeitungen
-        zu zeigen und anderen die Möglichkeit zu geben, dich über die Website zu kontaktieren,
-        klicke die Taste unten.
-      only_public_can_edit: Seit der API Version 0.6 können nur öffentliche Mitglieder
+        dir weder Nachrichten senden noch deinen Standort sehen. Um deine Bearbeitungen
+        öffentlich zu zeigen und anderen die Möglichkeit zu geben, dich über die Website
+        zu kontaktieren, klicke auf die Schaltfläche unten.
+      only_public_can_edit: Seit der API-Version 0.6 können nur öffentliche Mitglieder
         Kartendaten bearbeiten.
       find_out_why: finde heraus wieso
-      email_not_revealed: Deine Emailadressen werden beim öffentlich werden nicht
-        mit veröffentlicht.
+      email_not_revealed: Deine E-Mail-Adresse wird durch die Veröffentlichung nicht
+        preisgegeben.
       not_reversible: Dies kann nicht rückgängig gemacht werden und alle neuen Mitglieder
         sind jetzt standardmäßig öffentlich.
       make_edits_public_button: Alle meine Bearbeitungen öffentlich machen
@@ -430,15 +431,10 @@ de:
     destroy:
       success: Konto gelöscht.
   browse:
-    created: Erstellt
-    closed: Geschlossen
-    created_ago_html: Erstellt %{time_ago}
-    closed_ago_html: Geschlossen %{time_ago}
-    created_ago_by_html: Erstellt %{time_ago} von %{user}
-    closed_ago_by_html: Geschlossen %{time_ago} von %{user}
     deleted_ago_by_html: Gelöscht %{time_ago} von %{user}
     edited_ago_by_html: Bearbeitet %{time_ago} von %{user}
     version: Version
+    redacted_version: Zensierte Version
     in_changeset: Änderungssatz
     anonymous: anonym
     no_comment: (kein Kommentar)
@@ -451,25 +447,11 @@ de:
       other: '%{count} Wege'
     download_xml: XML herunterladen
     view_history: Verlauf anzeigen
+    view_unredacted_history: Unzensierten Verlauf ansehen
     view_details: Details anzeigen
+    view_redacted_data: Zensierte Daten ansehen
+    view_redaction_message: Zensurnachricht ansehen
     location: 'Standort:'
-    changeset:
-      title: 'Änderungssatz: %{id}'
-      belongs_to: Autor
-      node: Knoten (%{count})
-      node_paginated: Knoten (%{x}–%{y} von %{count})
-      way: Wege (%{count})
-      way_paginated: Wege (%{x}–%{y} von %{count})
-      relation: Relationen (%{count})
-      relation_paginated: Relationen (%{x}–%{y} von %{count})
-      hidden_comment_by_html: Versteckter Kommentar von %{user} %{time_ago}
-      comment_by_html: Kommentar von %{user} %{time_ago}
-      changesetxml: Änderungssatz-XML
-      osmchangexml: osmChange-XML
-      join_discussion: Anmelden, um mitzudiskutieren
-      discussion: Diskussion
-      still_open: Der Änderungssatz ist noch offen. Die Diskussion wird eröffnet,
-        sobald der Änderungssatz geschlossen ist.
     node:
       title_html: 'Knoten: %{name}'
       history_title_html: 'Knotenverlauf: %{name}'
@@ -519,7 +501,7 @@ de:
         note: Hinweis
     redacted:
       redaction: Schwärzung %{id}
-      message_html: 'Die Version %{version} diese%{type} kann nicht angezeigt werden,
+      message_html: 'Die Version %{version} diese%{type} kann nicht angezeigt werden,
         weil hier etwas geschwärzt wurde. Mehr erfahren: %{redaction_link}.'
       type:
         node: s Knotens
@@ -546,6 +528,18 @@ de:
       introduction: Klicke auf die Karte, um benachbarte Objekte zu finden.
       nearby: Benachbarte Objekte
       enclosing: Umschließende Objekte
+  old_nodes:
+    not_found:
+      sorry: 'Entschuldigung, Knoten #%{id} Version %{version} konnte nicht gefunden
+        werden.'
+  old_ways:
+    not_found:
+      sorry: 'Entschuldigung, Weg #%{id} Version %{version} konnte nicht gefunden
+        werden.'
+  old_relations:
+    not_found:
+      sorry: 'Entschuldigung, Relation #%{id} Version %{version} konnte nicht gefunden
+        werden.'
   changesets:
     changeset_paging_nav:
       showing_page: Seite %{page}
@@ -564,7 +558,7 @@ de:
     index:
       title: Änderungssätze
       title_user: Änderungssätze von %{user}
-      title_user_link_html: Änderungen von %{user_link}
+      title_user_link_html: Änderungssätze von %{user_link}
       title_friend: Änderungssätze von meinen Freunden
       title_nearby: Änderungssätze von Benutzern in der Nähe
       empty: Keine Änderungssätze gefunden.
@@ -575,8 +569,49 @@ de:
       no_more_user: Keine weiteren Änderungssätze von diesem Benutzer.
       load_more: Mehr laden
       feed:
-        title: 'Änderungssatz: %{id}'
+        title: Änderungssatz %{id}
         title_comment: Änderungssatz %{id} - %{comment}
+        created: Erstellt
+        closed: Geschlossen
+        belongs_to: Autor
+    subscribe:
+      heading: Die folgende Änderungssatz-Diskussion abonnieren?
+      button: Diskussion abonnieren
+    unsubscribe:
+      heading: Von der folgenden Änderungssatz-Diskussion abmelden?
+      button: Von der Diskussion abmelden
+    heading:
+      title: Änderungssatz %{id}
+      created_by_html: Erstellt von %{link_user} am %{created}.
+    no_such_entry:
+      title: Dieser Änderungssatz existiert nicht
+      heading: 'Kein Eintrag mit der ID: %{id}'
+      body: Es gibt leider keinen Änderungssatz mit der ID %{id}. Bitte überprüfe
+        deine Rechtschreibung, oder vielleicht ist der Link, auf den du geklickt hast,
+        falsch.
+    show:
+      title: 'Änderungssatz: %{id}'
+      created: 'Erstellt: %{when}'
+      closed: 'Geschlossen: %{when}'
+      created_ago_html: Erstellt %{time_ago}
+      closed_ago_html: Geschlossen %{time_ago}
+      created_ago_by_html: Erstellt %{time_ago} von %{user}
+      closed_ago_by_html: Geschlossen %{time_ago} von %{user}
+      discussion: Diskussion
+      join_discussion: Anmelden, um mitzudiskutieren
+      still_open: Der Änderungssatz ist noch offen. Die Diskussion wird eröffnet,
+        sobald der Änderungssatz geschlossen ist.
+      comment_by_html: Kommentar von %{user} %{time_ago}
+      hidden_comment_by_html: Versteckter Kommentar von %{user} %{time_ago}
+      changesetxml: Änderungssatz-XML
+      osmchangexml: osmChange-XML
+    paging_nav:
+      nodes: Knoten (%{count})
+      nodes_paginated: Knoten (%{x}–%{y} von %{count})
+      ways: Wege (%{count})
+      ways_paginated: Wege (%{x}–%{y} von %{count})
+      relations: Relationen (%{count})
+      relations_paginated: Relationen (%{x}–%{y} von %{count})
     timeout:
       sorry: Es hat leider zu lange gedauert, die angeforderten Änderungssätze abzurufen.
   changeset_comments:
@@ -640,6 +675,7 @@ de:
     show:
       title: Blog von %{user} | %{title}
       user_title: Blog von %{user}
+      discussion: Diskussion
       leave_a_comment: Schreibe einen Kommentar
       login_to_leave_a_comment_html: '%{login_link}, um einen Kommentar zu schreiben'
       login: Anmelden
@@ -651,7 +687,7 @@ de:
         Link gefolgt.
     diary_entry:
       posted_by_html: Verfasst von %{link_user} am %{created} in %{language_link}
-      updated_at_html: Letzte Aktualisierung am %{updated}
+      updated_at_html: Zuletzt aktualisiert am %{updated}.
       comment_link: Kommentar zu diesem Eintrag
       reply_link: Eine Nachricht an den Autor senden
       comment_count:
@@ -693,6 +729,12 @@ de:
       comment: Kommentar
       newer_comments: Neuere Kommentare
       older_comments: Ältere Kommentare
+    subscribe:
+      heading: Folgende Tagebucheintragsdiskussion abonnieren?
+      button: Diskussion abonnieren
+    unsubscribe:
+      heading: Von der folgenden Tagebucheintragsdiskussion abmelden?
+      button: Von der Diskussion abmelden
   doorkeeper:
     errors:
       messages:
@@ -710,9 +752,9 @@ de:
       errors:
         messages:
           auth_time_from_resource_owner_not_configured: Fehler aufgrund fehlender
-            Konfiguration Doorkeeper::OpenidConnect.configure.auth_time_from_resource_owner.
+            Doorkeeper::OpenidConnect.configure.auth_time_from_resource_owner-Konfiguration.
           reauthenticate_resource_owner_not_configured: Fehler aufgrund fehlender
-            Konfiguration Doorkeeper::OpenidConnect.configure.reauthenticate_resource_owner.
+            Doorkeeper::OpenidConnect.configure.reauthenticate_resource_owner-Konfiguration.
           resource_owner_from_access_token_not_configured: Fehler aufgrund fehlender
             Doorkeeper::OpenidConnect.configure.resource_owner_from_access_token-Konfiguration.
           select_account_for_resource_owner_not_configured: Fehler aufgrund fehlender
@@ -729,10 +771,10 @@ de:
     contact:
       contact_url: https://wiki.openstreetmap.org/wiki/DE:Kommunikationskan%C3%A4le
       contact_url_title: Erklärung verschiedener Kontaktkanäle
-      contact: kontaktieren
-      contact_the_community_html: Bitte nehmen Sie %{contact_link} mit der OpenStreetMap-Community
-        auf, wenn Sie einen defekten Link / Fehler gefunden haben. Notieren Sie sich
-        die genaue URL Ihrer Anfrage.
+      contact: Kontakt
+      contact_the_community_html: Bitte nimm %{contact_link} mit der OpenStreetMap-Community
+        auf, wenn du einen defekten Link / Fehler gefunden hast. Notiere dir die genaue
+        URL deiner Anfrage.
     forbidden:
       title: Verboten
       description: Der von Ihnen angeforderte Vorgang auf dem OpenStreetMap-Server
@@ -782,7 +824,7 @@ de:
           airstrip: Startbahn
           apron: Flughafenvorfeld
           gate: Flugsteig
-          hangar: Flugzeughalle
+          hangar: Hangar
           helipad: Hubschrauberlandeplatz
           holding_position: Haltestelle
           navigationaid: Luftfahrt-Navigationshilfe
@@ -1665,11 +1707,10 @@ de:
     intro_text: OpenStreetMap ist eine Karte der Welt, erstellt von Menschen wie dir
       und frei verwendbar unter einer offenen Lizenz.
     intro_2_create_account: Erstelle ein Benutzerkonto
-    hosting_partners_html: Das Hosting wird von %{ucl}, %{fastly}, %{bytemark} und
+    hosting_partners_2024_html: Das Hosting wird von %{fastly}, %{corpmembers} und
       anderen %{partners} unterstützt.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: OSMF-Unternehmensmitglieder
     partners_partners: Partnern
     tou: Nutzungsbedingungen
     osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
@@ -1692,6 +1733,7 @@ de:
     more: Mehr
   user_mailer:
     diary_comment_notification:
+      description: 'OpenStreetMap-Tagebucheintrag #%{id}'
       subject: '[OpenStreetMap] %{user} hat zu einem Blogeintrag kommentiert'
       hi: Hallo %{to_user},
       header: '%{from_user} hat zu dem OpenStreetMap-Blogeintrag mit dem Thema %{subject}
@@ -1702,6 +1744,10 @@ de:
         oder dem Autor unter %{replyurl} antworten.
       footer_html: Hier gehts zum Kommentar %{readurl}, Du kannst ihn kommentieren
         %{commenturl} oder dem Autor unter %{replyurl} eine Nachricht senden.
+      footer_unsubscribe: Du kannst dich von der Diskussion auf %{unsubscribeurl}
+        abmelden.
+      footer_unsubscribe_html: Du kannst dich von der Diskussion auf %{unsubscribeurl}
+        abmelden.
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Hallo %{to_user},
@@ -1765,6 +1811,7 @@ de:
       click_the_link: Wenn du das bist, klicke bitte auf den Link unten, um dein Passwort
         zurückzusetzen.
     note_comment_notification:
+      description: 'OpenStreetMap-Notiz #%{id}'
       anonymous: Ein anonymer Benutzer
       greeting: Hallo,
       commented:
@@ -1809,6 +1856,7 @@ de:
       details: Weitere Details über den Hinweis findest du unter %{url}.
       details_html: Weitere Details über den Hinweis findest du unter %{url}.
     changeset_comment_notification:
+      description: 'OpenStreetMap-Änderungssatz #%{id}'
       hi: Hallo %{to_user},
       greeting: Hallo,
       commented:
@@ -1830,10 +1878,10 @@ de:
       details: Weitere Details über den Änderungssatz können gefunden werden unter
         %{url}.
       details_html: Weitere Details über den Änderungssatz findest Du unter %{url}.
-      unsubscribe: Um die Aktualisierungen an diesem Änderungssatz abzubestellen,
-        besuche %{url} und klicke auf „Abmelden“.
-      unsubscribe_html: Um Aktualisierungen an diesem Änderungssatz abzubestellen,
-        besuche %{url} und klicke auf „Abmelden“.
+      unsubscribe: Du kannst dich auf %{url} von den Benachrichtigungen dieses Änderungssatzes
+        abmelden.
+      unsubscribe_html: Du kannst dich auf %{url} von den Benachrichtigungen dieses
+        Änderungssatzes abmelden.
   confirmations:
     confirm:
       heading: Bitte überprüfe deine E-Mails!
@@ -1918,8 +1966,8 @@ de:
         other: '%{count} stummgeschatete Nachrichten'
     reply:
       wrong_user: Du bist angemeldet als '%{user}', aber die Nachricht, auf die du
-        antworten wolltest, wurde an einen anderen Benutzer geschickt. Bitte melde
-        dich zum Beantworten mit dem richtigen Benutzer an.
+        antworten wolltest, wurde nicht an diesen Benutzer gesendet. Bitte melde dich
+        zum Beantworten mit dem richtigen Benutzer an.
     show:
       title: Nachricht lesen
       reply_button: Antworten
@@ -1927,8 +1975,8 @@ de:
       destroy_button: Löschen
       back: Zurück
       wrong_user: Du bist angemeldet als '%{user}', aber die Nachricht, die du lesen
-        wolltest, wurde an einen anderen Benutzer geschickt. Bitte melde dich zum
-        Lesen mit dem richtigen Benutzer an.
+        wolltest, wurde von einem oder an einen anderen Benutzer geschickt. Bitte
+        melde dich zum Lesen mit dem richtigen Benutzer an.
     sent_message_summary:
       destroy_button: Löschen
     heading:
@@ -1947,16 +1995,15 @@ de:
     new:
       title: Passwort vergessen
       heading: Passwort vergessen?
-      email address: 'E-Mail-Adresse:'
+      email address: E-Mail-Adresse
       new password button: Passwort zurücksetzen
       help_text: Bitte gib deine E-Mail-Adresse ein, mit der du dich angemeldet hast.
         Wir werden dir dann einen Link schicken, mit dem du dein Passwort zurücksetzen
         kannst.
     create:
-      notice email on way: Eine E-Mail mit Hinweisen zum Zurücksetzen des Passworts
-        wurde an dich versandt.
-      notice email cannot find: Wir konnten die E-Mail-Adresse nicht finden. Du hast
-        dich möglicherweise vertippt oder mit einer anderen E-Mail-Adresse angemeldet.
+      send_paranoid_instructions: Wenn deine E-Mail-Adresse in unserer Datenbank existiert
+        erhältst du in wenigen Minuten einen Passwortwiederherstellungs-Link an deiner
+        E-Mail-Adresse.
     edit:
       title: Passwort zurücksetzen
       heading: Passwort für %{user} zurücksetzen
@@ -2011,13 +2058,13 @@ de:
     new:
       title: Anmelden
       heading: Anmelden
-      email or username: 'E-Mail-Adresse oder Benutzername:'
-      password: 'Passwort:'
+      email or username: E-Mail-Adresse oder Benutzername
+      password: Passwort
       remember: Anmeldedaten merken
       lost password link: Passwort vergessen?
       login_button: Anmelden
       register now: Jetzt registrieren
-      with external: 'Verwende alternativ eine Drittpartei zur Anmeldung:'
+      with external: 'Verwende alternativ einen Drittanbieter für die Anmeldung:'
       no account: Du hast noch kein Benutzerkonto?
       auth failure: Mit diesen Daten leider keine Anmeldung möglich.
       openid_logo_alt: Mit einer OpenID anmelden
@@ -2385,8 +2432,9 @@ de:
         title: Anleitung für Anfänger
         description: Eine durch die Gemeinschaft gewartete Anleitung für Anfänger.
       community:
-        title: Community-Forum
-        description: Ein gemeinsamer Ort für Gespräche über OpenStreetMap.
+        title: Hilfe- und Community-Forum
+        description: Ein gemeinsamer Ort, um Hilfe zu erhalten und Gespräche über
+          OpenStreetMap zu führen.
       mailing_lists:
         title: Mailinglisten
         description: Stelle eine Frage und diskutiere interessante Sachen zu einem
@@ -2676,8 +2724,8 @@ de:
       identifiable: IDENTIFIZIERBAR
       private: PRIVAT
       trackable: VERFOLGBAR
-      by: von
-      in: in
+      details_with_tags_html: '%{time_ago} von %{user} in %{tags}'
+      details_without_tags_html: '%{time_ago} von %{user}'
     index:
       public_traces: Öffentliche GPS-Tracks
       my_gps_traces: Meine GPS-Tracks
@@ -2776,6 +2824,7 @@ de:
   oauth_clients:
     new:
       title: Eine neue Anwendung registrieren
+      disabled: Die Registrierung von OAuth-1-Anwendungen wurde deaktiviert
     edit:
       title: Anwendung bearbeiten
     show:
@@ -2859,6 +2908,7 @@ de:
       title: Meine autorisierten Anwendungen
       application: Anwendung
       permissions: Berechtigungen
+      last_authorized: Zuletzt autorisiert
       no_applications_html: Du hast noch keine %{oauth2}-Anwendungen autorisiert.
     application:
       revoke: Zugriff entziehen
@@ -2881,7 +2931,7 @@ de:
       display name description: Dein öffentlich angezeigter Benutzername. Er kann
         später in den Einstellungen geändert werden.
       external auth: 'Drittparteiauthentifikation:'
-      use external auth: Verwende alternativ eine Drittpartei zur Anmeldung
+      use external auth: Verwende alternativ einen Drittanbieter für die Anmeldung
       auth no password: Mit Drittparteiauthentifikation ist kein Passwort erforderlich,
         jedoch können einige Extrawerkzeuge oder Server eines benötigen.
       continue: Registrieren
@@ -3001,9 +3051,11 @@ de:
     index:
       title: Benutzer
       heading: Benutzer
-      showing:
-        one: Seite %{page} (%{first_item} von %{items})
-        other: Seite %{page} (%{first_item}–%{last_item} von %{items})
+      older: Ältere Benutzer
+      newer: Neuere Benutzer
+      found_users:
+        one: '%{count} Benutzer gefunden'
+        other: '%{count} Benutzer gefunden'
       summary_html: '%{name} erstellt von %{ip_address} am %{date}'
       summary_no_ip_html: '%{name} erstellt am %{date}'
       confirm: Bestätige ausgewählte Benutzer
@@ -3153,7 +3205,6 @@ de:
       revoke: Aufheben!
       confirm: Bist du sicher?
       reason: 'Grund der Sperre:'
-      back: Alle Sperren anzeigen
       revoker: 'Aufgehoben von:'
       needs_view: Der Benutzer muss sich wieder anmelden, damit die Sperre beendet
         wird.
@@ -3168,9 +3219,6 @@ de:
       reason: Grund der Sperre
       status: Status
       revoker_name: Aufgehoben von
-      showing_page: Seite %{page}
-      next: Nächste »
-      previous: « Vorige
   user_mutes:
     index:
       title: Stummgeschaltete Benutzer
index 15aa85683411456c1d52ebea88e7caf9063f47bb..ba1079129aa11f4e1f9bf4bce903637e647f6608 100644 (file)
@@ -178,8 +178,6 @@ diq:
     go_public:
       heading: 'Pêron rê akerde vırnayış:'
   browse:
-    created: Vıraziya
-    closed: Kerd kip
     version: Versiyon
     in_changeset: Qeydê Vurnayışan
     anonymous: anonim
@@ -195,19 +193,6 @@ diq:
     view_history: Verêni bıvêne
     view_details: Teferuatan Bıvêne
     location: 'Lokasyon:'
-    changeset:
-      title: 'Koma vurnayışi: %{id}'
-      belongs_to: Nuştekar
-      node: '%{count} noqtey'
-      node_paginated: pero piya (%{x}-%{y} - %{count}) noqtey
-      way: '%{count} ray'
-      way_paginated: Ray (%{x}-%{y} - pêro piya  %{count})
-      relation: Elaqeyi %{count}
-      relation_paginated: Elaqeyi %{x}-%{y} pêro piya %{count}
-      changesetxml: Vurnayışê peyênê XML
-      osmchangexml: OsmVurnayışê XML
-      join_discussion: Dekewtena vatenayışi rê qeyd bê
-      discussion: Werênayış
     node:
       title_html: Noqta:%{name}
       history_title_html: 'Verora nokta: %{name}'
@@ -288,6 +273,22 @@ diq:
       feed:
         title: 'Koma vurnayışi: %{id}'
         title_comment: '%{id} - %{comment} vurniyayışi'
+        created: Vıraziya
+        closed: Kerd kip
+        belongs_to: Nuştekar
+    show:
+      title: 'Koma vurnayışi: %{id}'
+      discussion: Werênayış
+      join_discussion: Dekewtena vatenayışi rê qeyd bê
+      changesetxml: Vurnayışê peyênê XML
+      osmchangexml: OsmVurnayışê XML
+    paging_nav:
+      nodes: '%{count} noqtey'
+      nodes_paginated: pero piya (%{x}-%{y} - %{count}) noqtey
+      ways: '%{count} ray'
+      ways_paginated: Ray (%{x}-%{y} - pêro piya  %{count})
+      relations: Elaqeyi %{count}
+      relations_paginated: Elaqeyi %{x}-%{y} pêro piya %{count}
   dashboards:
     contact:
       km away: '%{count} km duriyo'
@@ -942,8 +943,6 @@ diq:
       identifiable: ŞINASKERDENEN
       private: XAS
       trackable: SEYRKERDENEN
-      by: kerden
-      in: te de
     index:
       public_traces: Pêron rê akerde rêçê GPS
       public_traces_from: '%{user} ra pêron rê akerde rêçê GPS'
@@ -1013,9 +1012,6 @@ diq:
     index:
       title: Karberi
       heading: Karberi
-      showing:
-        one: Pela %{page} (%{first_item} - toplam %{items})
-        other: Pela %{page} (%{first_item}-%{last_item} - pêro %{items})
       summary_html: '%{name} %{ip_address} ra %{date} dı vıraşt'
       summary_no_ip_html: '%{name} %{date} dı vıraşt'
       confirm: Karberê ke weçineyayê ena tesdiq ke
@@ -1076,9 +1072,6 @@ diq:
       creator_name: Vıraştoğ
       status: Weziyet
       revoker_name: Terknoğ
-      showing_page: Pele %{page}
-      next: Peyên »
-      previous: « Verên
   notes:
     index:
       description: Şınasnayış
index e418bc8326b7b0cede4e952ccdc08bf314d09824..aa74193ce99f537b5903de96e302183502d315e9 100644 (file)
@@ -13,14 +13,24 @@ dsb:
     formats:
       friendly: '%e. %B %Y  %H:%M'
   helpers:
+    file:
+      prompt: Dataju wubraś
     submit:
       diary_comment:
-        create: Składowaś
+        create: Komentěrowaś
+      diary_entry:
+        create: Wózjawiś
+        update: Aktualizěrowaś
+      issue_comment:
+        create: Komentar pśidaś
       message:
         create: Pósłaś
       client_application:
         create: Registrěrowaś
-        update: Wobźěłaś
+        update: Aktualizěrowaś
+      oauth2_application:
+        create: Registrěrowaś
+        update: Aktualizěrowaś
       redaction:
         create: Redakciju napóraś
         update: Redakciju składowaś
@@ -106,7 +116,8 @@ dsb:
         description: Wopisanje
         home_lat: 'Šyrina:'
         home_lon: 'Dlinina:'
-        languages: Rěcy
+        languages: Preferěrowane rěcy
+        preferred_editor: Preferěrowany editor
         pass_crypt: Gronidło
     help:
       trace:
@@ -146,6 +157,10 @@ dsb:
       entry:
         comment: Komentar
         full: Dopołna pokazka
+  account:
+    deletions:
+      show:
+        cancel: Pśetergnuś
   accounts:
     edit:
       title: Konto wobźěłaś
@@ -177,8 +192,6 @@ dsb:
         e-mail z napominanim, twóju e-mailowu adresu wobkšuśiś.
       success: Wužywarske informacije wuspěšnje zaktualizěrowane.
   browse:
-    created: Napórany
-    closed: Zacynjony
     version: Wersija
     in_changeset: Sajźba změnow
     anonymous: anonymny
@@ -188,17 +201,6 @@ dsb:
     view_history: Historiju pokazaś
     view_details: Drobnostki pokazaś
     location: 'Městno:'
-    changeset:
-      title: 'Sajźba změnow: %{id}'
-      belongs_to: Awtor
-      node: Suki (%{count})
-      node_paginated: Suki (%{x}-%{y} z %{count})
-      way: Puśe (%{count})
-      way_paginated: Puśe (%{x}-%{y} z %{count})
-      relation: Relacije (%{count})
-      relation_paginated: Relacije (%{x}-%{y} z %{count})
-      changesetxml: Sajźbu změnow XML
-      osmchangexml: osmChange XML
     node:
       title_html: 'Suk: %{name}'
       history_title_html: 'Sukowa historija: %{name}'
@@ -290,6 +292,20 @@ dsb:
       feed:
         title: Sajźba změnow %{id}
         title_comment: Sajźba změnow %{id} - %{comment}
+        created: Napórany
+        closed: Zacynjony
+        belongs_to: Awtor
+    show:
+      title: 'Sajźba změnow: %{id}'
+      changesetxml: Sajźbu změnow XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Suki (%{count})
+      nodes_paginated: Suki (%{x}-%{y} z %{count})
+      ways: Puśe (%{count})
+      ways_paginated: Puśe (%{x}-%{y} z %{count})
+      relations: Relacije (%{count})
+      relations_paginated: Relacije (%{x}-%{y} z %{count})
     timeout:
       sorry: Bóžko jo pśedłujko trało, kupki změnow, kótarež  sy póžedał, wótwołaś.
   dashboards:
@@ -302,6 +318,7 @@ dsb:
       nearby mapper: Kartěrowaŕ w bliskosći
       friend: Pśijaśel
     show:
+      title: Mój pśeglědowy bok
       no friends: Hyšći njejsy žednych pśijaśelow pśidał.
       nearby users: Druge wužywarje w bliskosći
       no nearby users: Hyšći njejsu žedne wužywarje, kótarež kartěruju w bliskosći.
@@ -873,8 +890,6 @@ dsb:
     intro_text: OpenStreetMap jó kórta swěta, napórana wót luźi ako ty a dajo se licho
       pód wótwórjoneju licencu wužywaś.
     intro_2_create_account: Załož wužywarske konto
-    partners_ucl: z UCL VR Centre
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnerow
     osm_offline: Datowa banka OpenStreetMap jo tuchylu offline, dokulaž se wažne źěło
       za wótglědowanje datoweje banki pśewjedujo.
@@ -884,6 +899,7 @@ dsb:
     help: Pomoc
     about: Wó
     copyright: Awtorske pšawo
+    communities: Zgromadnosći
     community: Zgromaźeństwo
     community_blogs: Blogi zgromaźeństwa
     community_blogs_title: Blogi cłonkow zgromaźeństwa OpenStreetMap
@@ -1065,10 +1081,6 @@ dsb:
       new password button: Gronidło slědk stajiś
       help_text: Zapódaj e-mailowu adresu, kótaruž sy za registrěrowanje wužył, pósćelomy
         wótkaz na nju, kótaryž móžoš wužywaś, aby swójo gronidło slědk stajił.
-    create:
-      notice email on way: Bóžko sy jo zabył :-(, ale e-mail jo k tebje ducy, tak
-        až móžoš jo skóro slědk stajiś.
-      notice email cannot find: Bóžko ta e-mailowa adresa njejo se namakała.
     edit:
       title: Gronidło slědk stajiś
       heading: Gronidło za %{user} slědk stajiś
@@ -1076,8 +1088,23 @@ dsb:
       flash token bad: Njejo móžno było ten token namakaś, pšosym pśekontrolěruj URL.
     update:
       flash changed: Twójo gronidło jo se změniło.
+  preferences:
+    show:
+      title: Móje preference
+      preferred_editor: Preferěrowany editor
+      preferred_languages: Preferěrowane rěcy
+      edit_preferences: Preference wobźěłaś
+    edit:
+      title: Preference wobźěłaś
+      save: Preference aktualizěrowaś
+      cancel: Pśetergnuś
+    update:
+      failure: Preference njedaju se aktualizěrowaś.
+    update_success_flash:
+      message: Preference su se zaktualizěrowali.
   profiles:
     edit:
+      cancel: Pśetergnuś
       image: 'Wobraz:'
       gravatar:
         gravatar: Gravatar wužywaś
@@ -1219,6 +1246,12 @@ dsb:
         title: Witaj k OSM
         description: Zachop z toś tym spěšnym rozpokazanim, kótarež wopsímujo zakłady
           OpenStreetMap.
+      community:
+        description: Zgromadne městno, źož móžośo za pomocu pytaś a se wó OpenStreetMap
+          rozgranjaś.
+      welcomemat:
+        description: Z organizaciju plany za OpenStreetMap cyniś? Wuslěźćo na boku
+          wuwitanja, což musyśo wěźeś.
       wiki:
         title: wiki.openstreetmap.org
         description: Pśepytaj wiki za nadrobneju OSM-dokumentaciju
@@ -1300,6 +1333,13 @@ dsb:
         title: Njamaš chyle za wobźěłowanje? Pśidaj pokazku!
         para_1: Jolic coš jano drobnosć korigěrowaś a njamaš chyle, aby se zregistrěrował
           a wuknuł, kak se wobźěłujo, móžoš jadnorje pokazku pśidaś.
+    communities:
+      title: Zgromadnosći
+      local_chapters:
+        title: Lokalne zwězki
+        list_text: 'Slědujuce zgromadnosći su oficielnje ako lokalne zwězki zregistrěrowane:'
+      other_groups:
+        title: Druge kupki
   traces:
     visibility:
       private: Priwatny (jano źělony ako anonymne, njezrědowane dypki)
@@ -1322,6 +1362,7 @@ dsb:
           nagrate, nježli až nagrajoš dalšne, až njeby cakański rěd blokěrował za
           drugich wužywarjow.
     edit:
+      cancel: Pśetergnuś
       title: Wobźěłujo se slěd %{name}
       heading: Wobźěłujo se slěd %{name}
       visibility_help: Co to groni?
@@ -1360,8 +1401,6 @@ dsb:
       identifiable: IDENTIFICĚRUJOBNY
       private: PRIWATNY
       trackable: SLĚDUJOBNY
-      by: wót
-      in: w
     index:
       public_traces: Zjawne GPS-slědy
       public_traces_from: Zjawne GPS-slědy wót %{user}
@@ -1498,6 +1537,8 @@ dsb:
       my profile: Mój profil
       my settings: Móje nastajenja
       my comments: Móje komentary
+      my_preferences: Móje preference
+      my_dashboard: Mój pśeglědowy bok
       blocks on me: Dostane blokowanja
       blocks by me: Dane blokěrowanja
       send message: Powěsć pósłaś
@@ -1539,9 +1580,6 @@ dsb:
     index:
       title: Wužywarje
       heading: Wužywarje
-      showing:
-        one: Bok %{page} (%{first_item} z %{items})
-        other: Bok %{page} (%{first_item}-%{last_item} z %{items})
       summary_html: '%{name} wót %{ip_address} dnja %{date} napórany'
       summary_no_ip_html: '%{name} dnja %{date} napórany'
       confirm: Wubranych wužywarjow wobkšuśiś
@@ -1636,7 +1674,6 @@ dsb:
       revoke: Wótpóraś!
       confirm: Sy se wěsty?
       reason: 'Pśicyna za blokěrowanje:'
-      back: Wše blokěrowanja pokazaś
       revoker: 'Anulěrowaŕ:'
       needs_view: Wužywaŕ musy se pśizjawiś, nježli blokěrowanje se wótpórajo.
     block:
@@ -1650,9 +1687,6 @@ dsb:
       reason: Pśicyna za blokěrowanje
       status: Status
       revoker_name: Wótpórany wót
-      showing_page: Bok %{page}
-      next: Pśiducy »
-      previous: « Pjerwjejšny
   notes:
     index:
       title: Pokazki, kótarež su se wót %{user} dali abo komentěrowali
index 0affff2bfc1a8462f5e68241eb28c41ed430d1d4..fa81eb926de6f02f8a226793eb669768bbb58c3b 100644 (file)
@@ -364,12 +364,6 @@ el:
     destroy:
       success: Ο λογαριασμός διαγράφηκε...
   browse:
-    created: Δημιουργήθηκε
-    closed: Έκλεισε
-    created_ago_html: Δημιουργήθηκε %{time_ago}
-    closed_ago_html: Έκλεισε %{time_ago}
-    created_ago_by_html: Δημιουργήθηκε %{time_ago} από %{user}
-    closed_ago_by_html: Έκλεισε %{time_ago} από %{user}
     deleted_ago_by_html: Διαγράφηκε %{time_ago} από %{user}
     edited_ago_by_html: Επεξεργάστηκε %{time_ago} από %{user}
     version: Έκδοση
@@ -387,23 +381,6 @@ el:
     view_history: Προβολή ιστορικού
     view_details: Προβολή λεπτομερειών
     location: 'Τοποθεσία:'
-    changeset:
-      title: 'Ομάδα αλλαγών: %{id}'
-      belongs_to: Συντάκτης
-      node: Kόμβοι (%{count})
-      node_paginated: Κόμβοι (%{x}-%{y} από %{count})
-      way: Διαδρομές (%{count})
-      way_paginated: Διαδρομές (%{x}-%{y} από %{count})
-      relation: Σχέσεις (%{count})
-      relation_paginated: Σχέσεις (%{x}-%{y} από %{count})
-      hidden_comment_by_html: Κρυφό σχόλιο από %{user} %{time_ago}
-      comment_by_html: Σχόλιο από %{user} %{time_ago}
-      changesetxml: Ομάδας αλλαγών XML
-      osmchangexml: osmChange XML
-      join_discussion: Συνδεθείτε για συμμετοχή στη συζήτηση
-      discussion: Συζήτηση
-      still_open: Η ομάδα αλλαγών παραμένει σε εκκρεμότητα - η συζήτηση θα ανοίξει
-        μόλις ολοκληρωθεί η ομάδα αλλαγών.
     node:
       title_html: 'Κόμβος: %{name}'
       history_title_html: 'Ιστορικό κόμβου: %{name}'
@@ -522,6 +499,30 @@ el:
       feed:
         title: Ομάδα αλλαγών %{id}
         title_comment: Ομάδα αλλαγών %{id} - %{comment}
+        created: Δημιουργήθηκε
+        closed: Έκλεισε
+        belongs_to: Συντάκτης
+    show:
+      title: 'Ομάδα αλλαγών: %{id}'
+      created_ago_html: Δημιουργήθηκε %{time_ago}
+      closed_ago_html: Έκλεισε %{time_ago}
+      created_ago_by_html: Δημιουργήθηκε %{time_ago} από %{user}
+      closed_ago_by_html: Έκλεισε %{time_ago} από %{user}
+      discussion: Συζήτηση
+      join_discussion: Συνδεθείτε για συμμετοχή στη συζήτηση
+      still_open: Η ομάδα αλλαγών παραμένει σε εκκρεμότητα - η συζήτηση θα ανοίξει
+        μόλις ολοκληρωθεί η ομάδα αλλαγών.
+      comment_by_html: Σχόλιο από %{user} %{time_ago}
+      hidden_comment_by_html: Κρυφό σχόλιο από %{user} %{time_ago}
+      changesetxml: Ομάδας αλλαγών XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Kόμβοι (%{count})
+      nodes_paginated: Κόμβοι (%{x}-%{y} από %{count})
+      ways: Διαδρομές (%{count})
+      ways_paginated: Διαδρομές (%{x}-%{y} από %{count})
+      relations: Σχέσεις (%{count})
+      relations_paginated: Σχέσεις (%{x}-%{y} από %{count})
     timeout:
       sorry: Λυπάμαι, ο κατάλογος των αλλαγών που ζητήσατε χρειάστηκε πολύ χρόνο για
         να ανακτηθεί.
@@ -1619,11 +1620,7 @@ el:
     intro_text: Το OpenStreetMap είναι χάρτης του κόσμου, που δημιουργήθηκε από ανθρώπους
       σαν κι εσάς και είναι δωρεάν, υπό άδεια ελεύθερης χρήσης.
     intro_2_create_account: Δημιουργήστε ένα λογαριασμό χρήστη
-    hosting_partners_html: Η φιλοξενία υποστηρίζεται από %{ucl}, %{fastly}, %{bytemark},
-      και άλλους %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: συνεργάτες
     tou: Όροι χρήσης
     osm_offline: Η βάση δεδομένων του OpenStreetMap είναι προσωρινά εκτός λειτουργίας
@@ -1909,11 +1906,6 @@ el:
       help_text: Πληκτρολογήστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου που χρησιμοποιήσατε
         για να εγγραφείτε. Θα στείλουμε έναν σύνδεσμο τον οποίον μπορείτε να χρησιμοποιήσετε
         για να επαναφέρετε το συνθηματικό σας.
-    create:
-      notice email on way: Λυπούμαστε που το χάσατε :-(, αλλά ένα μήνυμα ηλεκτρονικού
-        ταχυδρομείου εστάλη, ώστε να μπορέσετε να το επαναφέρετε σύντομα.
-      notice email cannot find: Λυπούμαστε, δεν βρέθηκε αυτή η διεύθυνση ηλεκτρονικού
-        ταχυδρομείου.
     edit:
       title: Επαναφορά συνθηματικού
       heading: Επαναφορά συνθηματικού για τον χρήστη %{user}
@@ -2579,8 +2571,6 @@ el:
       identifiable: ΑΝΑΓΝΩΡΙΣΙΜΟ
       private: ΙΔΙΩΤΙΚΟ
       trackable: ΑΝΙΧΝΕΥΣΙΜΟ
-      by: από
-      in: σε
     index:
       public_traces: Δημόσια ίχνη GPS
       my_gps_traces: Τα ίχνη GPS μου
@@ -2905,9 +2895,6 @@ el:
     index:
       title: Χρήστες
       heading: Χρήστες
-      showing:
-        one: Σελίδα %{page} (%{first_item} από %{items})
-        other: Σελίδα %{page} (%{first_item}-%{last_item} από %{items})
       summary_html: '%{name} δημιουργήθηκε από την διεύθυνση IP %{ip_address} στις
         %{date}'
       summary_no_ip_html: '%{name} δημιουργήθηκε στις %{date}'
@@ -3052,7 +3039,6 @@ el:
       revoke: Ανακαλέστε!
       confirm: Είστε σίγουρος?
       reason: 'Αιτία φραγής:'
-      back: Προβολή όλων των φραγών
       revoker: 'Έκανε την ανάκληση:'
       needs_view: Ο χρήστης πρέπει να συνδεθεί προτού εκκαθαριστεί αυτή η φραγή.
     block:
@@ -3066,9 +3052,6 @@ el:
       reason: Αιτία φραγής
       status: Κατάσταση
       revoker_name: Ανακλήθηκε από
-      showing_page: Σελίδα %{page}
-      next: Επόμενη »
-      previous: « Προηγούμενη
   user_mutes:
     index:
       title: Χρήστες σε Σίγαση
index 6d3be7da84907427c5994a4b64c5ecbb776f0634..a1fe561764e23a6bdfd8ceb351070567967495df 100644 (file)
@@ -277,8 +277,6 @@ en-GB:
         for a note to confirm your new email address.
       success: User information updated successfully.
   browse:
-    created: Created
-    closed: Closed
     version: Version
     in_changeset: Changeset
     anonymous: anonymous
@@ -288,21 +286,6 @@ en-GB:
     view_history: View History
     view_details: View Details
     location: 'Location:'
-    changeset:
-      title: 'Changeset: %{id}'
-      belongs_to: Author
-      node: Nodes (%{count})
-      node_paginated: Nodes (%{x}-%{y} of %{count})
-      way: Ways (%{count})
-      way_paginated: Ways (%{x}-%{y} of %{count})
-      relation: Relations (%{count})
-      relation_paginated: Relations (%{x}-%{y} of %{count})
-      changesetxml: Changeset XML
-      osmchangexml: osmChange XML
-      join_discussion: Log in to join the discussion
-      discussion: Discussion
-      still_open: Changeset still open - discussion will open once the changeset is
-        closed.
     node:
       title_html: 'Node: %{name}'
       history_title_html: 'Node History: %{name}'
@@ -402,6 +385,24 @@ en-GB:
       feed:
         title: Changeset %{id}
         title_comment: Changeset %{id} - %{comment}
+        created: Created
+        closed: Closed
+        belongs_to: Author
+    show:
+      title: 'Changeset: %{id}'
+      discussion: Discussion
+      join_discussion: Log in to join the discussion
+      still_open: Changeset still open - discussion will open once the changeset is
+        closed.
+      changesetxml: Changeset XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Nodes (%{count})
+      nodes_paginated: Nodes (%{x}-%{y} of %{count})
+      ways: Ways (%{count})
+      ways_paginated: Ways (%{x}-%{y} of %{count})
+      relations: Relations (%{count})
+      relations_paginated: Relations (%{x}-%{y} of %{count})
     timeout:
       sorry: Sorry, the list of changesets you requested took too long to retrieve.
   changeset_comments:
@@ -1142,8 +1143,6 @@ en-GB:
     intro_text: OpenStreetMap is a map of the world, created by people like you and
       free to use under an open licence.
     intro_2_create_account: Create a user account
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partners
     osm_offline: The OpenStreetMap database is currently offline while essential database
       maintenance work is carried out.
@@ -1341,10 +1340,6 @@ en-GB:
       new password button: Reset password
       help_text: Enter the e-mail address you used to sign up, we will send a link
         to it that you can use to reset your password.
-    create:
-      notice email on way: Sorry you lost it :-( but an email is on its way so you
-        can reset it soon.
-      notice email cannot find: Could not find that email address, sorry.
     edit:
       title: Reset password
       heading: Reset Password for %{user}
@@ -1693,8 +1688,6 @@ en-GB:
       identifiable: IDENTIFIABLE
       private: PRIVATE
       trackable: TRACKABLE
-      by: by
-      in: in
     index:
       public_traces: Public GPS traces
       public_traces_from: Public GPS traces from %{user}
@@ -1887,9 +1880,6 @@ en-GB:
     index:
       title: Users
       heading: Users
-      showing:
-        one: Page %{page} (%{first_item} of %{items})
-        other: Page %{page} (%{first_item}-%{last_item} of %{items})
       summary_html: '%{name} created from %{ip_address} on %{date}'
       summary_no_ip_html: '%{name} created on %{date}'
       confirm: Confirm Selected Users
@@ -2001,7 +1991,6 @@ en-GB:
       revoke: Revoke!
       confirm: Are you sure?
       reason: 'Reason for block:'
-      back: View all blocks
       revoker: 'Revoker:'
       needs_view: The user needs to log in before this block will be cleared.
     block:
@@ -2015,9 +2004,6 @@ en-GB:
       reason: Reason for block
       status: Status
       revoker_name: Revoked by
-      showing_page: Page %{page}
-      next: Next »
-      previous: « Previous
   notes:
     index:
       title: Notes submitted or commented on by %{user}
index c387d32d91b22f4974c901590bfc47340b96034b..77002268b0e6b3c2f04c9995d5c70b39af6ac75c 100644 (file)
@@ -546,7 +546,7 @@ en:
       discussion: "Discussion"
       leave_a_comment: "Leave a comment"
       login_to_leave_a_comment_html: "%{login_link} to leave a comment"
-      login: "Login"
+      login: "Log in"
     no_such_entry:
       title: "No such diary entry"
       heading: "No entry with the id: %{id}"
@@ -1568,10 +1568,9 @@ en:
     intro_header: Welcome to OpenStreetMap!
     intro_text: OpenStreetMap is a map of the world, created by people like you and free to use under an open license.
     intro_2_create_account: "Create a user account"
-    hosting_partners_html: "Hosting is supported by %{ucl}, %{fastly}, %{bytemark}, and other %{partners}."
-    partners_ucl: "UCL"
+    hosting_partners_2024_html: "Hosting is supported by %{fastly}, %{corpmembers}, and other %{partners}."
     partners_fastly: "Fastly"
-    partners_bytemark: "Bytemark Hosting"
+    partners_corpmembers: "OSMF corporate members"
     partners_partners: "partners"
     tou: "Terms of Use"
     osm_offline: "The OpenStreetMap database is currently offline while essential database maintenance work is carried out."
@@ -1767,14 +1766,14 @@ en:
         one: "%{count} muted message"
         other: "You have %{count} muted messages"
     reply:
-      wrong_user: "You are logged in as `%{user}' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply."
+      wrong_user: "You are logged in as `%{user}' but the message you have asked to reply to was not sent to that user. Please log in as the correct user in order to reply."
     show:
       title: "Read message"
       reply_button: "Reply"
       unread_button: "Mark as unread"
       destroy_button: "Delete"
       back: "Back"
-      wrong_user: "You are logged in as `%{user}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it."
+      wrong_user: "You are logged in as `%{user}' but the message you have asked to read was not sent by or to that user. Please log in as the correct user in order to read it."
     sent_message_summary:
       destroy_button: "Delete"
     heading:
@@ -1848,44 +1847,44 @@ en:
       failure: Couldn't update profile.
   sessions:
     new:
-      title: "Login"
-      heading: "Login"
+      title: "Log in"
+      heading: "Log in"
       email or username: "Email Address or Username"
       password: "Password"
       openid_html: "%{logo} OpenID"
       remember: "Remember me"
       lost password link: "Lost your password?"
-      login_button: "Login"
+      login_button: "Log in"
       register now: Register now
-      with external: "Alternatively, use a third party to login:"
+      with external: "Alternatively, use a third party to log in:"
       no account: Don't have an account?
       auth failure: "Sorry, could not log in with those details."
       openid_logo_alt: "Log in with an OpenID"
       auth_providers:
         openid:
-          title: Login with OpenID
-          alt: Login with an OpenID URL
+          title: Log in with OpenID
+          alt: Log in with an OpenID URL
         google:
-          title: Login with Google
-          alt: Login with a Google OpenID
+          title: Log in with Google
+          alt: Log in with a Google OpenID
         facebook:
-          title: Login with Facebook
-          alt: Login with a Facebook Account
+          title: Log in with Facebook
+          alt: Log in with a Facebook Account
         microsoft:
-          title: Login with Microsoft
-          alt: Login with a Microsoft Account
+          title: Log in with Microsoft
+          alt: Log in with a Microsoft Account
         github:
-          title: Login with GitHub
-          alt: Login with a GitHub Account
+          title: Log in with GitHub
+          alt: Log in with a GitHub Account
         wikipedia:
-          title: Login with Wikipedia
-          alt: Login with a Wikipedia Account
+          title: Log in with Wikipedia
+          alt: Log in with a Wikipedia Account
         wordpress:
-          title: Login with Wordpress
-          alt: Login with a Wordpress OpenID
+          title: Log in with Wordpress
+          alt: Log in with a Wordpress OpenID
         aol:
-          title: Login with AOL
-          alt: Login with an AOL OpenID
+          title: Log in with AOL
+          alt: Log in with an AOL OpenID
     destroy:
       title: "Logout"
       heading: "Logout from OpenStreetMap"
@@ -2550,8 +2549,8 @@ en:
       identifiable: "IDENTIFIABLE"
       private: "PRIVATE"
       trackable: "TRACKABLE"
-      by: "by"
-      in: "in"
+      details_with_tags_html: "%{time_ago} by %{user} in %{tags}"
+      details_without_tags_html: "%{time_ago} by %{user}"
     index:
       public_traces: "Public GPS Traces"
       my_gps_traces: "My GPS Traces"
@@ -2737,7 +2736,7 @@ en:
         paragraph_2: Sign up to get started contributing. We'll send an email to confirm your account.
       display name description: "Your publicly displayed username. You can change this later in the preferences."
       external auth: "Third Party Authentication:"
-      use external auth: "Alternatively, use a third party to login"
+      use external auth: "Alternatively, use a third party to log in"
       auth no password: "With third party authentication a password is not required, but some extra tools or server may still need one."
       continue: Sign Up
       terms accepted: "Thanks for accepting the new contributor terms!"
@@ -2841,9 +2840,11 @@ en:
     index:
       title: Users
       heading: Users
-      showing:
-        one: Page %{page} (%{first_item} of %{items})
-        other: Page %{page} (%{first_item}-%{last_item} of %{items})
+      older: "Older Users"
+      newer: "Newer Users"
+      found_users:
+        one: "%{count} user found"
+        other: "%{count} users found"
       summary_html: "%{name} created from %{ip_address} on %{date}"
       summary_no_ip_html: "%{name} created on %{date}"
       confirm: Confirm Selected Users
@@ -2868,7 +2869,7 @@ en:
         If you are new to OpenStreetMap, please create a new account
         using the form below.
       option_2: |
-        If you already have an account, you can login to your account
+        If you already have an account, you can log in to your account
         using your username and password and then associate the account
         with your ID in your user settings.
   user_role:
@@ -2977,7 +2978,6 @@ en:
       revoke: "Revoke!"
       confirm: "Are you sure?"
       reason: "Reason for block:"
-      back: "View all blocks"
       revoker: "Revoker:"
       needs_view: "The user needs to log in before this block will be cleared."
     block:
@@ -2991,9 +2991,15 @@ en:
       reason: "Reason for block"
       status: "Status"
       revoker_name: "Revoked by"
-      showing_page: "Page %{page}"
-      next: "Next »"
-      previous: "« Previous"
+      older: "Older Blocks"
+      newer: "Newer Blocks"
+    navigation:
+      all_blocks: "All Blocks"
+      blocks_on_me: "Blocks on Me"
+      blocks_on_user: "Blocks on %{user}"
+      blocks_by_me: "Blocks by Me"
+      blocks_by_user: "Blocks by %{user}"
+      block: "Block #%{id}"
   user_mutes:
     index:
       title: "Muted Users"
index 80a7be5b47370fea544c6cc0a20713451a454392..8a6f0dd143a8a3a56be0a204b9da4d32def6ea9f 100644 (file)
@@ -338,15 +338,10 @@ eo:
     destroy:
       success: Via konto estas forigita.
   browse:
-    created: Kreita
-    closed: Fermita
-    created_ago_html: Kreita %{time_ago}
-    closed_ago_html: Fermita %{time_ago}
-    created_ago_by_html: Kreita %{time_ago} de %{user}
-    closed_ago_by_html: Fermita %{time_ago} de %{user}
     deleted_ago_by_html: Forigita %{time_ago} de %{user}
     edited_ago_by_html: Redaktita %{time_ago} de %{user}
     version: Versio
+    redacted_version: Redaktita versio
     in_changeset: Ŝanĝaro
     anonymous: anonimulo
     no_comment: (neniu komento)
@@ -359,27 +354,13 @@ eo:
       other: '%{count} linioj'
     download_xml: Elŝuti XML
     view_history: Vidi historion
+    view_unredacted_history: Vidigi historion de neredaktitaj
     view_details: Montri detalojn
+    view_redacted_data: Vidigi redaktitajn datumojn
+    view_redaction_message: Vidigi mesaĝon pri la redaktado
     location: 'Pozicio:'
     common_details:
       coordinates_html: '%{latitude}; %{longitude}'
-    changeset:
-      title: 'Ŝanĝaro: %{id}'
-      belongs_to: Aŭtoro
-      node: Nodoj (%{count})
-      node_paginated: Nodoj (%{x}-%{y} el %{count})
-      way: Linioj (%{count})
-      way_paginated: Linioj (%{x}-%{y} el %{count})
-      relation: Rilatoj (%{count})
-      relation_paginated: Rilatoj (%{x}-%{y} el %{count})
-      hidden_comment_by_html: Kaŝita komento de %{time_ago} de %{user}
-      comment_by_html: Komento de %{time_ago} de %{user}
-      changesetxml: Ŝanĝaro XML
-      osmchangexml: osmŜanĝo XML
-      join_discussion: Ensalutu por aliĝi al la diskuto
-      discussion: Diskuto
-      still_open: Ŝanĝaro plue malfermita - diskuto estos malfermita ekde kiam la
-        ŝanĝaro estos fermita.
     node:
       title_html: 'Nodo: %{name}'
       history_title_html: 'Historio de nodo: %{name}'
@@ -497,6 +478,9 @@ eo:
       feed:
         title: Ŝanĝaro %{id}
         title_comment: Ŝanĝaro %{id} - %{comment}
+        created: Kreita
+        closed: Fermita
+        belongs_to: Aŭtoro
     subscribe:
       heading: Ĉu aboni diskuton pri tiu ĉi ŝanĝaro?
       button: Aboni diskuton
@@ -511,6 +495,29 @@ eo:
       heading: 'Neniu ŝanĝaro kun la identigilo: %{id}'
       body: Bedaŭrinde ne ekzistas ŝanĝaro kun la identigilo %{id}. Kontrolu pri liter-eraroj
         aŭ eble vi alklakis eraran ligilon.
+    show:
+      title: 'Ŝanĝaro: %{id}'
+      created: Kreita je %{when}
+      closed: Fermita je %{when}
+      created_ago_html: Kreita %{time_ago}
+      closed_ago_html: Fermita %{time_ago}
+      created_ago_by_html: Kreita %{time_ago} de %{user}
+      closed_ago_by_html: Fermita %{time_ago} de %{user}
+      discussion: Diskuto
+      join_discussion: Ensalutu por aliĝi al la diskuto
+      still_open: Ŝanĝaro plue malfermita - diskuto estos malfermita ekde kiam la
+        ŝanĝaro estos fermita.
+      comment_by_html: Komento de %{time_ago} de %{user}
+      hidden_comment_by_html: Kaŝita komento de %{time_ago} de %{user}
+      changesetxml: Ŝanĝaro XML
+      osmchangexml: osmŜanĝo XML
+    paging_nav:
+      nodes: Nodoj (%{count})
+      nodes_paginated: Nodoj (%{x}-%{y} el %{count})
+      ways: Linioj (%{count})
+      ways_paginated: Linioj (%{x}-%{y} el %{count})
+      relations: Rilatoj (%{count})
+      relations_paginated: Rilatoj (%{x}-%{y} el %{count})
     timeout:
       sorry: Bedaŭrinde daŭris tro longe kompili la petitan liston de ŝanĝaroj.
   changeset_comments:
@@ -1598,11 +1605,10 @@ eo:
     intro_text: OpenStreetMap estas mapo de la mondo, kreata de homoj kiel vi, kaj
       libere uzebla laŭ malferma permesilo.
     intro_2_create_account: Krei konton
-    hosting_partners_html: Retgastigo estas subtenata de %{ucl}, %{fastly}, %{bytemark}
+    hosting_partners_2024_html: Retgastigo estas provizata de %{fastly}, %{corpmembers}
       kaj aliaj %{partners}.
-    partners_ucl: University College London
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: firmaaj anoj de OSMF
     partners_partners: kunlaborantoj
     tou: Uzkondiĉoj
     osm_offline: La OpenStreetMap-datumbazo estas nuntempe nealireabla pro necesaj
@@ -1830,17 +1836,17 @@ eo:
         one: Vi havas %{count} silentigitan mesaĝon
         other: Vi havas %{count} silentigitajn mesaĝojn
     reply:
-      wrong_user: Vi estas ensalutinta kiel '%{user}', sed la mesaĝo, kiun vi volas
-        respondi, ne estas sendita al tiu uzanto. Bonvolu ensaluti kiel propra uzanto
-        por respondi ĝin.
+      wrong_user: Vi estas ensalutinta kiel '%{user}', sed la mesaĝo – kiun vi volas
+        respondi – ne estas sendita al tiu uzanto. Ensalutu kiel propra uzanto por
+        respondi ĝin.
     show:
       title: Legi mesaĝon
       reply_button: Respondi
       unread_button: Marki kiel nelegitan
       destroy_button: Forigi
       back: Reveni
-      wrong_user: Vi estas ensalutinta kiel '%{user}', sed la mesaĝo, kiun vi volas
-        legi estas sendita al tiu uzanto. Bonvolu ensaluti kiel propra uzanto por
+      wrong_user: Vi estas ensalutinta kiel '%{user}', sed la mesaĝo – kiun vi volas
+        legi – ne estas sendita al aŭ el tiu uzanto. Ensalutu kiel propra uzanto por
         legi ĝin.
     sent_message_summary:
       destroy_button: Forigi
@@ -1865,9 +1871,8 @@ eo:
       help_text: Entajpu la retpoŝtan adreson kiun vi uzis por ensaluto, ni sendos
         al vi ligilon, kiun vi povos uzi por restarigi vian pasvorton.
     create:
-      notice email on way: Bedaŭras, ke vi perdis ĝin :-( sed baldaŭ vi ricevos retleteron,
-        kiun vi uzos por restarigi ĝin.
-      notice email cannot find: Bedaŭrinde, tiu retadreso ne troveblas.
+      send_paranoid_instructions: Se via retpoŝta adreso ekzistas en nia datumbazo,
+        vi ricevos ligilon por restarigi pasvorton en via retpoŝtujo post kelkaj minutoj.
     edit:
       title: Nuligi pasvorton
       heading: Nuligi Pasvorton por %{user}
@@ -1933,19 +1938,19 @@ eo:
       auth_providers:
         openid:
           title: Ensaluti per OpenID
-          alt: Ensaluti per OpenID URL
+          alt: Ensaluti per ligilo OpenID
         google:
           title: Ensaluti per Google
           alt: Ensaluti per Google OpenID
         facebook:
-          title: Ensaluti per Fejsbuko
-          alt: Ensaluti per konto je Fejsbuko
+          title: Ensaluti per Facebook
+          alt: Ensaluti per konto Facebook
         microsoft:
           title: Ensaluti per Microsoft
           alt: Ensaluti per konto Microsoft
         github:
           title: Ensaluti per GitHub
-          alt: Ensaluti per konto je GitHub
+          alt: Ensaluti per konto GitHub
         wikipedia:
           title: Ensaluti per Vikipedio
           alt: Ensaluti per Vikipedia konto
@@ -2057,6 +2062,7 @@ eo:
         introduction_3_html: Nia dokumentaro estas eldonata laŭ la permesilo %{creative_commons_link}
           (CC BY-SA 2.0).
         introduction_3_creative_commons: Krea Komunaĵo Atribuite-Samkondiĉe 2.0
+        introduction_3_creative_commons_url: https://creativecommons.org/licenses/by-sa/2.0/deed.eo
         credit_title_html: Kiel atribui aŭtorecon
         credit_1_html: 'Kiam vi uzas OpenStreetMap-datumojn, vi devas fari la jenajn
           du agojn:'
@@ -2546,8 +2552,8 @@ eo:
       identifiable: IDENTIGEBLA
       private: PRIVATA
       trackable: SPUREBLA
-      by: de
-      in: en
+      details_with_tags_html: '%{time_ago} de %{user} en %{tags}'
+      details_without_tags_html: '%{time_ago} de %{user}'
     index:
       public_traces: Publikaj GPS-spuroj
       my_gps_traces: Miaj GPS-spuroj
@@ -2861,9 +2867,11 @@ eo:
     index:
       title: Uzantoj
       heading: Uzantoj
-      showing:
-        one: Paĝo %{page} (%{first_item} el %{items})
-        other: Paĝo %{page} (%{first_item}-%{last_item} el %{items})
+      older: Pli malnovaj uzantoj
+      newer: Pli novaj uzantoj
+      found_users:
+        one: '%{count} trovita uzanto'
+        other: '%{count} trovitaj uzantoj'
       summary_html: '%{name} kreita de %{ip_address} je %{date}'
       summary_no_ip_html: '%{name} kreita je %{date}'
       confirm: Konfirmi elektitajn uzantojn
@@ -2888,7 +2896,7 @@ eo:
       heading: Via identigilo ne estas ankoraŭ kunligita kun OpenStreetMap-konto.
       option_1: Se vi estas unuafoje je OpenStreetMap, bonvolu krei novan konton per
         la jena formularo.
-      option_2: Se vi jam havas konton, vi povas ensaluti per via uzantnomo kaj pasvorto,
+      option_2: Se vi jam havas konton, vi povas ensaluti per viaj uzantnomo kaj pasvorto,
         kaj poste kunligi la konton kun via identigilo en agordoj de uzanto.
   user_role:
     filter:
@@ -2998,7 +3006,6 @@ eo:
       revoke: Malbloki!
       confirm: Ĉu vi certas?
       reason: 'Kialo de blokado:'
-      back: Montri ĉiujn blokadojn
       revoker: 'Malblokanto:'
       needs_view: La uzanto devas ensaluti antaŭ ĉi tiu blokado nuligos.
     block:
@@ -3012,9 +3019,15 @@ eo:
       reason: Kialo de blokado
       status: Stato
       revoker_name: Nuligita de
-      showing_page: Paĝo %{page}
-      next: Sekva »
-      previous: « Antaŭa
+      older: Pli malnovaj blokadoj
+      newer: Pli novaj blokadoj
+    navigation:
+      all_blocks: Ĉiuj blokadoj
+      blocks_on_me: Blokadoj por mi
+      blocks_on_user: Blokadoj por %{user}
+      blocks_by_me: Blokadoj de mi
+      blocks_by_user: Blokadoj de %{user}
+      block: 'Blokado #%{id}'
   user_mutes:
     index:
       title: Silentigitaj uzantoj
index 42fe297836d09e1401cc082647661b3c8688b8fc..446da785bd32c7b53450202ed82c940ec0af8f94 100644 (file)
@@ -27,6 +27,7 @@
 # Author: Dgstranz
 # Author: Egofer
 # Author: Ejegg
+# Author: Eulalio
 # Author: Fitoschido
 # Author: Fortega
 # Author: Francodiaz7
@@ -418,12 +419,6 @@ es:
     destroy:
       success: Cuenta eliminada.
   browse:
-    created: Creado
-    closed: Cerrado
-    created_ago_html: Creado %{time_ago}
-    closed_ago_html: Cerrado %{time_ago}
-    created_ago_by_html: Creado %{time_ago} por %{user}
-    closed_ago_by_html: Cerrado %{time_ago} por %{user}
     deleted_ago_by_html: Eliminado %{time_ago} por %{user}
     edited_ago_by_html: Editado %{time_ago} por %{user}
     version: Versión
@@ -441,23 +436,6 @@ es:
     view_history: Ver historial
     view_details: Ver detalles
     location: 'Ubicación:'
-    changeset:
-      title: 'Conjunto de cambios: %{id}'
-      belongs_to: Autor
-      node: Nodos (%{count})
-      node_paginated: Nodos (%{x}-%{y} de %{count})
-      way: Vías (%{count})
-      way_paginated: Vías (%{x}-%{y} de %{count})
-      relation: Relaciones (%{count})
-      relation_paginated: Relaciones (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Comentario ocultado por %{user} %{time_ago}
-      comment_by_html: Comentario de %{user} %{time_ago}
-      changesetxml: XML del conjunto de cambios
-      osmchangexml: XML en formato osmChange
-      join_discussion: Inicia sesión para unirte a la discusión
-      discussion: Discusión
-      still_open: El conjunto de cambios sigue abierto; la discusión se abrirá cuando
-        se cierre el conjunto de cambios.
     node:
       title_html: 'Nodo: %{name}'
       history_title_html: 'Historial de nodo: %{name}'
@@ -576,6 +554,44 @@ es:
       feed:
         title: Conjunto de cambios %{id}
         title_comment: Conjunto de cambios %{id} - %{comment}
+        created: Creado
+        closed: Cerrado
+        belongs_to: Autor
+    subscribe:
+      heading: ¿Deseas suscribirte a la siguiente discusión del conjunto de cambios?
+      button: Suscribirse a la discusión
+    unsubscribe:
+      heading: ¿Deseas desuscribirte de la siguiente discusión del conjunto de cambios?
+      button: Desuscribirse de la discusión
+    heading:
+      title: Conjunto de cambios %{id}
+      created_by_html: Creado por %{link_user} el %{created}.
+    no_such_entry:
+      title: No existe tal conjunto de cambios
+      heading: 'No hay entrada con id: %{id}'
+      body: Lo sentimos, no existe algún conjunto de cambios con id %{id}. Revisa
+        los dígitos, o tal vez el enlace en el que hiciste clic sea incorrecto.
+    show:
+      title: 'Conjunto de cambios: %{id}'
+      created_ago_html: Creado %{time_ago}
+      closed_ago_html: Cerrado %{time_ago}
+      created_ago_by_html: Creado %{time_ago} por %{user}
+      closed_ago_by_html: Cerrado %{time_ago} por %{user}
+      discussion: Discusión
+      join_discussion: Inicia sesión para unirte a la discusión
+      still_open: El conjunto de cambios sigue abierto; la discusión se abrirá cuando
+        se cierre el conjunto de cambios.
+      comment_by_html: Comentario de %{user} %{time_ago}
+      hidden_comment_by_html: Comentario ocultado por %{user} %{time_ago}
+      changesetxml: XML del conjunto de cambios
+      osmchangexml: XML en formato osmChange
+    paging_nav:
+      nodes: Nodos (%{count})
+      nodes_paginated: Nodos (%{x}-%{y} de %{count})
+      ways: Vías (%{count})
+      ways_paginated: Vías (%{x}-%{y} de %{count})
+      relations: Relaciones (%{count})
+      relations_paginated: Relaciones (%{x}-%{y} de %{count})
     timeout:
       sorry: Lo sentimos, la lista de conjuntos de cambios que solicitó tardó demasiado
         en obtenerse.
@@ -694,6 +710,12 @@ es:
       comment: Comentario
       newer_comments: Comentarios más recientes
       older_comments: Comentarios más antiguos
+    subscribe:
+      heading: ¿Deseas suscribirte a la siguiente discusión sobre la entrada al diario?
+      button: Suscribirse a la discusión
+    unsubscribe:
+      heading: ¿Deseas desuscribirte de la siguiente discusión de entrada de diario?
+      button: Desuscribirse de la discusión
   doorkeeper:
     errors:
       messages:
@@ -1672,11 +1694,10 @@ es:
     intro_text: OpenStreetMap es un mapa del mundo, creado por gente como tú y de
       uso libre bajo una licencia abierta.
     intro_2_create_account: Crear una cuenta de usuario
-    hosting_partners_html: '%{ucl}, %{fastly}, %{bytemark} y otros %{partners} patrocinan
-      el alojamiento.'
-    partners_ucl: UCL
+    hosting_partners_2024_html: El alojamiento cuenta con el respaldo de %{fastly},
+      %{corpmembers} y otros %{partners}.
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: Miembros corporativos de OSMF
     partners_partners: socios
     tou: Términos de Uso
     osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
@@ -1698,6 +1719,7 @@ es:
     more: Más
   user_mailer:
     diary_comment_notification:
+      description: 'Entrada de diario de OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} ha comentado en una entrada de diario'
       hi: 'Hola, %{to_user}:'
       header: '%{from_user} ha comentado en la entrada de diario con asunto %{subject}:'
@@ -1706,6 +1728,8 @@ es:
         %{commenturl} o responder en %{replyurl}
       footer_html: También puedes leer el comentario en %{readurl} y puedes comentar
         en %{commenturl} o responder en %{replyurl}
+      footer_unsubscribe: Puedes cancelar la suscripción de la discusión en %{unsubscribeurl}
+      footer_unsubscribe_html: Puedes cancelar la suscripción de la discusión en %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Hola %{to_user},
@@ -1768,6 +1792,7 @@ es:
       click_the_link: Si este eres tú, por favor, haz clic en el enlace siguiente
         para restablecer tu contraseña.
     note_comment_notification:
+      description: 'Nota de OpenStreetMap #%{id}'
       anonymous: Un usuario anónimo
       greeting: Hola,
       commented:
@@ -1807,6 +1832,7 @@ es:
       details: Más detalles acerca de la nota pueden encontrarse en %{url}.
       details_html: Puedes encontrar más detalles acerca de la nota en %{url}.
     changeset_comment_notification:
+      description: 'Conjunto de cambios de OpenStreetMap #%{id}'
       hi: Hola %{to_user},
       greeting: Hola,
       commented:
@@ -1828,10 +1854,10 @@ es:
       details: Puedes encontrar más detalles sobre el conjunto de cambios en %{url}.
       details_html: Puedes encontrar más detalles sobre el conjunto de cambios en
         %{url}.
-      unsubscribe: Para cancelar la suscripción a las actualizaciones de este conjunto
-        de cambios, visita %{url} y haz clic en "Cancelar suscripción".
-      unsubscribe_html: Para darte de baja de las actualizaciones de este conjunto
-        de cambios, visita %{url} y haz clic en "Cancelar suscripción".
+      unsubscribe: Puedes desinscrirte de las actualizaciones de este conjunto de
+        cambios en %{url}.
+      unsubscribe_html: Puedes desinscrirte de las actualizaciones de este conjunto
+        de cambios en %{url}.
   confirmations:
     confirm:
       heading: ¡Revisa tu correo electrónico!
@@ -1948,12 +1974,6 @@ es:
       help_text: Escribe la dirección de correo electrónico con la que te registraste,
         te enviaremos un enlace a esa dirección que podrás utilizar para restablecer
         tu contraseña.
-    create:
-      notice email on way: Sentimos que la hayas perdido :-( pero ya va de camino
-        un mensaje de correo electrónico que te servirá para restablecer tu contraseña
-        enseguida.
-      notice email cannot find: Lo sentimos, no se pudo encontrar esa dirección de
-        correo electrónico.
     edit:
       title: Restablecer contraseña
       heading: Restablecer contraseña para %{user}
@@ -2664,8 +2684,8 @@ es:
       identifiable: IDENTIFICABLE
       private: PRIVADA
       trackable: RASTREABLE
-      by: por
-      in: en
+      details_with_tags_html: '%{time_ago} por %{user} en %{tags}'
+      details_without_tags_html: '%{time_ago} por %{user}'
     index:
       public_traces: Trazas GPS públicas
       my_gps_traces: Mis trazas GPS
@@ -2986,9 +3006,11 @@ es:
     index:
       title: Usuarios
       heading: Usuarios
-      showing:
-        one: Página %{page} (%{first_item} de %{items})
-        other: Página %{page} (%{first_item}-%{last_item} de %{items})
+      older: Usuarios antiguos
+      newer: Usuarios más recientes
+      found_users:
+        one: '%{count} usuario encontrado'
+        other: '%{count} usuarios encontrados'
       summary_html: '%{name} creado desde %{ip_address} el %{date}'
       summary_no_ip_html: '%{name} creado el %{date}'
       confirm: Confirmar usuarios seleccionados
@@ -3015,7 +3037,7 @@ es:
       option_1: Si eres nuevo en OpenStreetMap, crea una cuenta nueva usando el formulario
         a continuación.
       option_2: |-
-        Si ya tienes una cuenta, puedes iniciar sesión a tu cuenta
+        Si ya tienes una cuenta, puedes iniciar sesión con tu cuenta
         usando tu nombre de usuario y contraseña y luego asociar la cuenta
         con tu identificador en tus configuraciones de usuario.
   user_role:
@@ -3134,7 +3156,6 @@ es:
       revoke: ¡Revocar!
       confirm: ¿Estás seguro?
       reason: 'Razón del bloqueo:'
-      back: Ver todos los bloqueos
       revoker: 'Revocador:'
       needs_view: El usuario tiene que iniciar sesión antes de que este bloqueo sea
         eliminado
@@ -3149,9 +3170,15 @@ es:
       reason: Razón del bloqueo
       status: Estado
       revoker_name: Revocado por
-      showing_page: Página %{page}
-      next: Siguiente »
-      previous: « Anterior
+      older: Bloques más antiguos
+      newer: Bloques más recientes
+    navigation:
+      all_blocks: Todos los bloques
+      blocks_on_me: Me bloquea
+      blocks_on_user: Bloqueos en %{user}
+      blocks_by_me: Bloqueados por mí
+      blocks_by_user: Bloqueos por %{user}
+      block: 'Bloqueo #%{id}'
   user_mutes:
     index:
       title: Usuarios silenciados
index 49882ed9ff1d22258a4fc6f544d0a9aeee39574f..68b3fb5590dc1aa915a19f13ef604b4f4588c12a 100644 (file)
@@ -297,12 +297,6 @@ et:
     destroy:
       success: Konto kustutatud.
   browse:
-    created: Loodud
-    closed: Suletud
-    created_ago_html: Loodud %{time_ago}
-    closed_ago_html: Suletud %{time_ago}
-    created_ago_by_html: Loonud %{user} %{time_ago}
-    closed_ago_by_html: Sulgenud %{user} %{time_ago}
     deleted_ago_by_html: Kustutanud %{user} %{time_ago}
     edited_ago_by_html: Muutnud %{user} %{time_ago}
     version: Versioon
@@ -320,23 +314,6 @@ et:
     view_history: Vaata ajalugu
     view_details: Vaata üksikasju
     location: 'Asukoht:'
-    changeset:
-      title: 'Muudatuskogum: %{id}'
-      belongs_to: Autor
-      node: Sõlmed (%{count})
-      node_paginated: Sõlmed (%{x}–%{y} %{count}-st)
-      way: Jooned (%{count})
-      way_paginated: Jooned (%{x}–%{y} %{count}-st)
-      relation: Relatsioonid (%{count})
-      relation_paginated: Relatsioonid (%{x}–%{y} %{count}-st)
-      hidden_comment_by_html: Peidetud kommentaar kasutajalt %{user} %{time_ago}
-      comment_by_html: Kommentaar kasutajalt %{user} %{time_ago}
-      changesetxml: Muudatuskogumi XML
-      osmchangexml: osmChange XML
-      join_discussion: Logi sisse, kui soovid arutelus osaleda
-      discussion: Arutelu
-      still_open: Muudatuskogum on veel avatud. Arutelu avaneb siis, kui muudatuskogum
-        on suletud.
     node:
       title_html: 'Sõlm: %{name}'
       history_title_html: 'Sõlme ajalugu: %{name}'
@@ -442,6 +419,30 @@ et:
       feed:
         title: Muudatuskogum %{id}
         title_comment: Muudatuskogum %{id} – %{comment}
+        created: Loodud
+        closed: Suletud
+        belongs_to: Autor
+    show:
+      title: 'Muudatuskogum: %{id}'
+      created_ago_html: Loodud %{time_ago}
+      closed_ago_html: Suletud %{time_ago}
+      created_ago_by_html: Loonud %{user} %{time_ago}
+      closed_ago_by_html: Sulgenud %{user} %{time_ago}
+      discussion: Arutelu
+      join_discussion: Logi sisse, kui soovid arutelus osaleda
+      still_open: Muudatuskogum on veel avatud. Arutelu avaneb siis, kui muudatuskogum
+        on suletud.
+      comment_by_html: Kommentaar kasutajalt %{user} %{time_ago}
+      hidden_comment_by_html: Peidetud kommentaar kasutajalt %{user} %{time_ago}
+      changesetxml: Muudatuskogumi XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Sõlmed (%{count})
+      nodes_paginated: Sõlmed (%{x}–%{y} %{count}-st)
+      ways: Jooned (%{count})
+      ways_paginated: Jooned (%{x}–%{y} %{count}-st)
+      relations: Relatsioonid (%{count})
+      relations_paginated: Relatsioonid (%{x}–%{y} %{count}-st)
     timeout:
       sorry: Kahjuks võttis taotletud muudatuskogumite laadimine liiga kaua aega.
   changeset_comments:
@@ -1080,10 +1081,6 @@ et:
     intro_text: OpenStreetMap on maailma kaart, mille on loonud inimesed nagu sina
       ja seda võib vabalt kasutada avatud litsentsi tingimustel.
     intro_2_create_account: loo oma konto
-    hosting_partners_html: Majutust toetavad %{ucl}, %{fastly}, %{bytemark} ja teised
-      %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnerid
     osm_offline: OpenStreetMapi andmebaas ei ole hetkel juurdepääsetav sest teostatakse
       vajalikke hooldustöid.
@@ -1340,10 +1337,6 @@ et:
       new password button: Lähtesta parool
       help_text: Sisesta e-posti aadress, mida kasutasid registreerumisel. Saadame
         sinna lingi, mida saad kasutada parooli lähtestamiseks.
-    create:
-      notice email on way: Kahju, et parooli kaotasid, kuid ära muretse. Peagi saad
-        e-kirja, mille abil saad parooli lähtestada.
-      notice email cannot find: Seda e-posti aadressi ei leitud.
     edit:
       title: Lähtesta parool
       heading: Kasutaja %{user} parooli lähtestamine
@@ -1962,8 +1955,6 @@ et:
       identifiable: TUVASTATAV
       private: ISIKLIK
       trackable: JÄLGITAV
-      by: kasutajalt
-      in: kohas
     index:
       public_traces: Avalikud GPS-rajad
       my_gps_traces: Minu GPS-rajad
@@ -2226,9 +2217,6 @@ et:
     index:
       title: Kasutajad
       heading: Kasutajad
-      showing:
-        one: Lehekülg %{page} (%{first_item} / %{items})
-        other: Lehekülg %{page} (%{first_item}-%{last_item} / %{items})
       summary_html: '%{name} loodud IP-aadressilt %{ip_address} (%{date})'
       summary_no_ip_html: '%{name} loodud (%{date})'
       confirm: Kinnita valitud kasutajad
@@ -2352,7 +2340,6 @@ et:
       revoke: Tühista!
       confirm: Oled Sa kindel?
       reason: 'Blokeerimise põhjus:'
-      back: Vaata kõiki blokeeringuid
       revoker: Tühistaja
       needs_view: Kasutaja peab sisse logima enne kui see blokeering eemaldatakse.
     block:
@@ -2366,9 +2353,6 @@ et:
       reason: Blokeerimise põhjus
       status: Olek
       revoker_name: Tühistanud
-      showing_page: Leht %{page}
-      next: Järgmine »
-      previous: « Eelmine
   user_mutes:
     index:
       title: Vaigistatud kasutajad
index d4bd1c4e7589c3e06c6ac7bb68fe5592678e0109..07a3a04058aa0bac919fce1f082037842fb121cd 100644 (file)
@@ -337,12 +337,6 @@ eu:
     destroy:
       success: Kontua ezabatu da.
   browse:
-    created: Sortua
-    closed: Itxita
-    created_ago_html: Sortua orain dela %{time_ago}
-    closed_ago_html: Itxia orain dela %{time_ago}
-    created_ago_by_html: '%{user}-ek %{time_ago} sortua'
-    closed_ago_by_html: '%{user}-ek %{time_ago} itxia'
     deleted_ago_by_html: '%{user}-ek %{time_ago} ezabatua'
     edited_ago_by_html: '%{user}-ek %{time_ago} editatua'
     version: Bertsioa
@@ -360,23 +354,6 @@ eu:
     view_history: Ikusi historia
     view_details: Ikusi xehetasunak
     location: 'Kokapena:'
-    changeset:
-      title: 'Aldaketa: %{id}'
-      belongs_to: Egilea
-      node: Nodoak (%{count})
-      node_paginated: Nodoak (%{x}-%{y} %{count}-tik)
-      way: Bideak (%{count})
-      way_paginated: Bideak (%{x}-%{y} %{count}-tik)
-      relation: Erlazioak (%{count})
-      relation_paginated: Erlazioak (%{x}-%{y} %{count}-tik)
-      hidden_comment_by_html: '%{user} -ren ezkutuko iruzkina %{time_ago} tik'
-      comment_by_html: '%{user} -ren iruzkina orain dela %{time_ago}'
-      changesetxml: Aldaketaren XML kodea
-      osmchangexml: osmChange XML kodea
-      join_discussion: Hasi saioa eztabaidan parte hartzeko
-      discussion: Eztabaida
-      still_open: Aldaketak oraindik zabalik - eztabaida aldaketak itxi ondoren irekiko
-        da.
     node:
       title_html: 'Nodoa: %{name}'
       history_title_html: 'Nodoaren historia: %{name}'
@@ -494,6 +471,30 @@ eu:
       feed:
         title: '%{id} aldaketak'
         title_comment: '%{id} aldaketa - %{comment}'
+        created: Sortua
+        closed: Itxita
+        belongs_to: Egilea
+    show:
+      title: 'Aldaketa: %{id}'
+      created_ago_html: Sortua orain dela %{time_ago}
+      closed_ago_html: Itxia orain dela %{time_ago}
+      created_ago_by_html: '%{user}-ek %{time_ago} sortua'
+      closed_ago_by_html: '%{user}-ek %{time_ago} itxia'
+      discussion: Eztabaida
+      join_discussion: Hasi saioa eztabaidan parte hartzeko
+      still_open: Aldaketak oraindik zabalik - eztabaida aldaketak itxi ondoren irekiko
+        da.
+      comment_by_html: '%{user} -ren iruzkina orain dela %{time_ago}'
+      hidden_comment_by_html: '%{user} -ren ezkutuko iruzkina %{time_ago} tik'
+      changesetxml: Aldaketaren XML kodea
+      osmchangexml: osmChange XML kodea
+    paging_nav:
+      nodes: Nodoak (%{count})
+      nodes_paginated: Nodoak (%{x}-%{y} %{count}-tik)
+      ways: Bideak (%{count})
+      ways_paginated: Bideak (%{x}-%{y} %{count}-tik)
+      relations: Erlazioak (%{count})
+      relations_paginated: Erlazioak (%{x}-%{y} %{count}-tik)
     timeout:
       sorry: Barkatu, zuk eskatutako aldaketen zerrenda berreskuratzeko denbora gehiegi
         behar izan da.
@@ -1569,11 +1570,7 @@ eu:
     intro_text: OpenStreetMap munduko mapa da, zu bezalako jendeak sortutakoa eta
       doako lizentzia irekiarekin erabiltzeko dagoena.
     intro_2_create_account: Erabiltzaile kontua sortu
-    hosting_partners_html: Ostatatzea %{ucl}, %{fastly}, %{bytemark} eta beste %{partners}
-      babestua.
-    partners_ucl: UCLa
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Ostatua
     partners_partners: bazkideak
     tou: Erabilera-baldintzak
     osm_offline: OpenStreetMap datu-basea orain konexiorik gabe dago funtsezko datu-basearen
@@ -1848,10 +1845,6 @@ eu:
       new password button: Pasahitza berrezarri
       help_text: Sartu saioa hastean erabiltzen zenuen helbide elektronikoa, zure
         pasahitza berrezarri ahal izateko erabil dezakezu bidaliko dizugun esteka.
-    create:
-      notice email on way: Sentitzen duzu hau galdu izatea :-( baina posta elektronikoa
-        bidaltzen ari zaizu laster berrabiarazi dezakezun.
-      notice email cannot find: Eposta helbide hori ezin izan dugu aurkitu, barkatu.
     edit:
       title: Pasahitza berrezarri
       heading: '%{user}-ren pasahitza berrezarri'
@@ -2440,8 +2433,6 @@ eu:
       identifiable: IDENTIFIKAGARRIA
       private: PRIBATUA
       trackable: JARRAIGARRIA
-      by: 'honen arabera:'
-      in: barruan
     index:
       public_traces: GPS aztarna publikoak
       my_gps_traces: Nire GPS Arrastoak
@@ -2743,9 +2734,6 @@ eu:
     index:
       title: Erabiltzaileak
       heading: Erabiltzaileak
-      showing:
-        one: '%{page} orria (%{items}n %{first_item})'
-        other: '%{page} orria (%{items}ko %{first_item}-%{last_item})'
       summary_html: '%{date}n %{ip_address}tik %{name} sortu da'
       summary_no_ip_html: '%{name} %{date} datan sortua'
       confirm: Berretsi Hautatutako Erabiltzaileak
@@ -2876,7 +2864,6 @@ eu:
       revoke: Ezeztatu!
       confirm: Ziur zaude?
       reason: 'Blokeatzeko arrazoia:'
-      back: Blokeo guztiak ikusi
       revoker: 'Ezeztatu duena:'
       needs_view: Erabiltzaileak saioa hasi behar du blokeoa kendu baino lehen.
     block:
@@ -2890,9 +2877,6 @@ eu:
       reason: Blokeatzeko arrazoia
       status: Egoera
       revoker_name: -k ezeztatua
-      showing_page: '%{page} orria'
-      next: Hurrengoa »
-      previous: « Aurrekoa
   notes:
     index:
       title: '%{user}k igotako edo iruzkinak utzitako oharrak'
index 4c2243872a60f21530ecdf27b60e91774a2bf815..52c8b29647ccee10493180f9f07fc7d65837180a 100644 (file)
@@ -47,6 +47,7 @@
 # Author: ZxxZxxZ
 # Author: جواد
 # Author: فلورانس
+# Author: کهربا
 ---
 fa:
   html:
@@ -353,12 +354,6 @@ fa:
     destroy:
       success: حساب حذف شد.
   browse:
-    created: ایجاد شد
-    closed: بسته شد
-    created_ago_html: ایجاد شد %{time_ago}
-    closed_ago_html: بسته شد %{time_ago}
-    created_ago_by_html: '%{time_ago} %{user} ایجادش کرد'
-    closed_ago_by_html: '%{time_ago} %{user} بستش'
     deleted_ago_by_html: '%{time_ago} %{user} حذفش کرد'
     edited_ago_by_html: '%{time_ago} %{user} ویرایشش کرد'
     version: نسخهٔ
@@ -376,22 +371,6 @@ fa:
     view_history: نمایش تاریخچه
     view_details: نمایش جزئیات
     location: 'مکان: ‪'
-    changeset:
-      title: 'بستهٔ تغییر: %{id}'
-      belongs_to: پدیدآور
-      node: گره‌ها (%{count})
-      node_paginated: گره‌ها (%{x}-%{y} از %{count})
-      way: راه‌ها (%{count})
-      way_paginated: راه‌ها (%{x}-%{y} از %{count})
-      relation: رابطه‌ها (%{count})
-      relation_paginated: رابطه‌ها (%{x}-%{y} از %{count})
-      hidden_comment_by_html: نظر پنهان؛ نوشتهٔ %{user}‏ %{time_ago}
-      comment_by_html: نظر از %{user}‏ %{time_ago}
-      changesetxml: Changeset XML
-      osmchangexml: osmChange XML
-      join_discussion: وارد شوید تا به بحث بپیوندید
-      discussion: بحث
-      still_open: بستهٔ تغییر هنوز باز است - امکان بحث پس از بستن آن باز می‌شود.
     node:
       title_html: 'گره: %{name}'
       history_title_html: 'تاریخچهٔ گره: %{name}'
@@ -500,6 +479,29 @@ fa:
       feed:
         title: بستهٔ تغییر %{id}
         title_comment: بستهٔ تغییر %{id} - %{comment}
+        created: ایجاد شد
+        closed: بسته شد
+        belongs_to: پدیدآور
+    show:
+      title: 'بستهٔ تغییر: %{id}'
+      created_ago_html: ایجاد شد %{time_ago}
+      closed_ago_html: بسته شد %{time_ago}
+      created_ago_by_html: '%{time_ago} %{user} ایجادش کرد'
+      closed_ago_by_html: '%{time_ago} %{user} بستش'
+      discussion: بحث
+      join_discussion: وارد شوید تا به بحث بپیوندید
+      still_open: بستهٔ تغییر هنوز باز است - امکان بحث پس از بستن آن باز می‌شود.
+      comment_by_html: نظر از %{user}‏ %{time_ago}
+      hidden_comment_by_html: نظر پنهان؛ نوشتهٔ %{user}‏ %{time_ago}
+      changesetxml: Changeset XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: گره‌ها (%{count})
+      nodes_paginated: گره‌ها (%{x}-%{y} از %{count})
+      ways: راه‌ها (%{count})
+      ways_paginated: راه‌ها (%{x}-%{y} از %{count})
+      relations: رابطه‌ها (%{count})
+      relations_paginated: رابطه‌ها (%{x}-%{y} از %{count})
     timeout:
       sorry: شوربختانه بازیابی بسته‌های تغییر که درخواست نموده‌اید، خیلی طولانی شد.
   changeset_comments:
@@ -983,7 +985,7 @@ fa:
           commercial: منطقهٔ تجاری
           conservation: منطقه حفاظت‌شده
           construction: منطقه در دست ساخت
-          farmland: زمین های کشاورزی
+          farmland: زمینهای کشاورزی
           farmyard: محوطه مزرعه
           forest: جنگل
           garages: گاراژ
@@ -1492,10 +1494,6 @@ fa:
     intro_text: OpenStreetMap نقشه‌ای از جهان است که افرادی مانند شما آن را ساخته‌اند
       و آزادید آن را تحت پروانه‌ای آزاد استفاده کنید.
     intro_2_create_account: ساخت حساب کاربری
-    hosting_partners_html: میزبانی وب را %{ucl}،‏ %{fastly}،‏ %{bytemark} و سایر %{partners}
-      پشتیبانی می‌کنند.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: شرکای تجاری
     tou: شرایط استفاده
     osm_offline: پایگاه دادهٔ OpenStreetMap هم‌اکنون برون‌خط است تا کارهای ضروری برای
@@ -1677,7 +1675,7 @@ fa:
         را تأیید نمایید. سپس می‌توانید نقشه‌کشی را آغاز کنید.
       press confirm button: برای فعال‌سازی حسابتان روی دکمهٔ تأیید زیر کلیک کنید.
       button: تأیید
-      success: ' ØªØ´Ú©Ø± Ø¨Ø§Ø¨Øª Ø«Ø¨Øª Ù\86اÙ\85! Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø´Ù\85ا ØªØ§یید شد.'
+      success: ' ØªØ´Ú©Ø± Ø¨Ø§Ø¨Øª Ø«Ø¨Øª Ù\86اÙ\85! Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø´Ù\85ا ØªØ£یید شد.'
       already active: این حساب کاربری قبلاً تأیید شده است.
       unknown token: کد تأیید منقضی شده یا وجود ندارد.
       resend_html: اگر لازم است ذوباره رایانامهٔ تأیید را بفرستیم، %{reconfirm_link}.
@@ -1771,10 +1769,6 @@ fa:
       new password button: بازنشانی رمز عبور
       help_text: رایانامه‌ای که با آن نام‌نویسی کرده‌اید را وارد کنید. ما پیوندی به
         آن می‌فرستیم تا بتوانید به وسیلهٔ آن گذرواژه‌تان را بازنشانی کنید.
-    create:
-      notice email on way: متأسفیم که آن را گم کرده‌اید :-( اما رایانامه‌ای در راه
-        است که می‌توانید به‌زودی آن را مجدد تنظیم کنید.
-      notice email cannot find: چنین رایانامه‌ای پیدا نشد، متأسفیم.
     edit:
       title: بازنشانی رمز عبور
       heading: بازنشانی رمز عبور برای %{user}
@@ -2120,7 +2114,7 @@ fa:
           construction: جاده در دست ساخت
           bicycle_shop: فروشگاه دوچرخه
           bicycle_parking: پارکینگ دوچرخه
-          toilets: سرویس های بهداشتی
+          toilets: سرویسهای بهداشتی
     welcome:
       title: خوش آمدید!
       introduction: به OpenStreetMap، نقشهٔ آزاد و قابل ویرایش جهان، خوش آمدید. اکنون
@@ -2213,8 +2207,6 @@ fa:
       identifiable: قابل شناسایی
       private: خصوصی
       trackable: قابل ردیابی
-      by: از
-      in: در
     index:
       public_traces: ردهای GPS عمومی
       public_traces_from: ردهای GPS عمومی از %{user}
@@ -2253,7 +2245,7 @@ fa:
         بتوانید ویرایش‌های خود را ذخیره کنید باید ابتدا آن را بخوانید.
       blocked: دسترسی شما به API مسدود شده. برای یافتن اطلاعات بیشتر لطفاً به رابط
         کاربری وب وارد شوید.
-      need_to_see_terms: دسترسی شما به API به‌طور موقت معلق شدهاست. لطفاً در رابط
+      need_to_see_terms: دسترسی شما به API به‌طور موقت معلق شده است. لطفاً در رابط
         کاربری وب وارد شوید تا شرایط مشارکت‌کننده را ببینید. لازم نیست آن را بپذیرید،
         ولی حتماً باید آن را ببینید.
     settings_menu:
@@ -2494,9 +2486,6 @@ fa:
     index:
       title: کاربران
       heading: کاربران
-      showing:
-        one: صفحهٔ %{page} (%{first_item} از %{items})
-        other: صفحهٔ %{page} (%{first_item}-%{last_item} از %{items})
       summary_html: '%{name} با آی‌پی %{ip_address} در %{date} ایجاد شد'
       summary_no_ip_html: '%{name} در %{date} ایجاد شد'
       confirm: تأیید کاربران انتخاب‌شده
@@ -2537,7 +2526,7 @@ fa:
     revoke:
       title: تأیید ابطال نقش
       heading: تأیید ابطال نقش
-      are_you_sure: آیا اطمینان دارید که می خواهید نقش `%{role}' را برای کاربر '%{name}'
+      are_you_sure: آیا اطمینان دارید که میخواهید نقش `%{role}' را برای کاربر '%{name}'
         باطل نمایید؟
       confirm: تأیید
       fail: نمی‌توان نقش %{role} را برای کاربر %{name} باطل کرد. لطفاً مطمئن شوید
@@ -2576,7 +2565,7 @@ fa:
     revoke:
       title: ابطال مسدودی %{block_on}
       heading_html: ابطال مسدودی %{block_on}، مسدودشده به دست %{block_by}
-      time_future_html: این مسدودی در %{time} پایان می یابد.
+      time_future_html: این مسدودی در %{time} پایان مییابد.
       past_html: این مسدودی %{time} پایان یافته و اکنون قابل‌ابطال نیست.
       confirm: مطمئنید می‌خواهید این مسدودی را باطل کنید؟
       revoke: باطل شود!
@@ -2614,7 +2603,6 @@ fa:
       revoke: باطل شود!
       confirm: آیا مطمئن هستید؟
       reason: 'دلیل مسدودی:'
-      back: دیدن تمام مسدودی‌ها
       revoker: 'باطل‌کننده:'
       needs_view: برای پاک‌شدن این مسدودی کاربر باید وارد حسابش شود.
     block:
@@ -2628,9 +2616,20 @@ fa:
       reason: دلیل مسدودی
       status: وضعیت
       revoker_name: باطل‌کننده
-      showing_page: صفحهٔ %{page}
-      next: بعدی »
-      previous: « قبلی
+    navigation:
+      all_blocks: تمام قطع دسترسی‌ها
+      blocks_on_me: قطع دسترسی‌های من
+      blocks_on_user: قطع دسترسی‌های %{user}
+      blocks_by_me: |-
+        Blocks by Me
+        بسته شدها یا مسدود شدهها
+      blocks_by_user: |-
+        Blocks by %{user}
+
+        بستن توسط یا مسدود شدن توسط
+      block: |-
+        Block #%{id}
+        مسدود کردن یا بستن آی دی
   notes:
     index:
       title: یادداشت‌هایی که %{user} ارسال کرده یا روی آن‌ها نظر داده
index ae2c8151f9b31787bb4e96fac75c08dcf01f9b9b..7946799bd85eda42fb1924c10a7c2d538f6bb837 100644 (file)
@@ -353,12 +353,6 @@ fi:
     destroy:
       success: Käyttäjä poistettu.
   browse:
-    created: Luotu
-    closed: Suljettu
-    created_ago_html: Luotu %{time_ago}
-    closed_ago_html: Suljettu %{time_ago}
-    created_ago_by_html: Luonut %{user}, %{time_ago}
-    closed_ago_by_html: Sulkenut %{user}, %{time_ago}
     deleted_ago_by_html: Poistanut %{user}, %{time_ago}
     edited_ago_by_html: Muokannut %{time_ago} %{user}
     version: Versio
@@ -376,23 +370,6 @@ fi:
     view_history: Näytä historia
     view_details: Näytä tiedot
     location: 'Sijainti:'
-    changeset:
-      title: 'Muutoskokoelma: %{id}'
-      belongs_to: Lähettäjä
-      node: Pisteet (%{count})
-      node_paginated: Pisteet (%{x}-%{y} / %{count})
-      way: Reitit (%{count})
-      way_paginated: Reitit (%{x}-%{y} of %{count})
-      relation: Relaatiot (%{count})
-      relation_paginated: Relaatiot (%{x}-%{y} / %{count})
-      hidden_comment_by_html: Piilotettu kommentti käyttäjältä %{user} %{time_ago}
-      comment_by_html: Kommentti käyttäjältä %{user}, %{time_ago}
-      changesetxml: Muutoskokoelman XML
-      osmchangexml: osmChange XML
-      join_discussion: Kirjaudu sisään osallistuaksesi keskusteluun
-      discussion: Keskustelu
-      still_open: Muutoskokoelma on edelleen avoimena - keskustelu avataan heti kun
-        muutoskokoelma on suljettu.
     node:
       title_html: 'Piste: %{name}'
       history_title_html: Pisteen %{name} historia
@@ -500,6 +477,32 @@ fi:
       feed:
         title: Muutoskokoelma %{id}
         title_comment: Muutoskokoelma %{id} - %{comment}
+        created: Luotu
+        closed: Suljettu
+        belongs_to: Lähettäjä
+    show:
+      title: 'Muutoskokoelma: %{id}'
+      created: 'Luotu: %{when}'
+      closed: 'Suljettu: %{when}'
+      created_ago_html: Luotu %{time_ago}
+      closed_ago_html: Suljettu %{time_ago}
+      created_ago_by_html: Luonut %{user}, %{time_ago}
+      closed_ago_by_html: Sulkenut %{user}, %{time_ago}
+      discussion: Keskustelu
+      join_discussion: Kirjaudu sisään osallistuaksesi keskusteluun
+      still_open: Muutoskokoelma on edelleen avoimena - keskustelu avataan heti kun
+        muutoskokoelma on suljettu.
+      comment_by_html: Kommentti käyttäjältä %{user}, %{time_ago}
+      hidden_comment_by_html: Piilotettu kommentti käyttäjältä %{user} %{time_ago}
+      changesetxml: Muutoskokoelman XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Pisteet (%{count})
+      nodes_paginated: Pisteet (%{x}-%{y} / %{count})
+      ways: Reitit (%{count})
+      ways_paginated: Reitit (%{x}-%{y} of %{count})
+      relations: Relaatiot (%{count})
+      relations_paginated: Relaatiot (%{x}-%{y} / %{count})
     timeout:
       sorry: Valitettavasti pyytämäsi muutoskokoelmien listan hakeminen kesti liian
         kauan.
@@ -998,7 +1001,7 @@ fi:
           meadow: Niitty
           military: Sotilasalue
           mine: Kaivos
-          orchard: Puutarha
+          orchard: Hedelmätarha
           plant_nursery: Taimitarha
           quarry: Avolouhos
           railway: Rautatie
@@ -1541,11 +1544,7 @@ fi:
     intro_text: OpenStreetMap on vapaaehtoisten luoma maailmankartta, jota voi käyttää
       vapaasti avoimella lisenssillä.
     intro_2_create_account: luomalla ensin käyttäjätunnuksen
-    hosting_partners_html: Palvelinkapasiteettia meille tarjoaa %{ucl}, %{fastly},
-      %{bytemark} ja muut %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: kumppanimme
     tou: Käyttöehdot
     osm_offline: OpenStreetMapin tietokanta ei toistaiseksi ole käytettävissä välttämättömien
@@ -1725,6 +1724,7 @@ fi:
       to: Vastaanottaja
       subject: Otsikko
       date: Päiväys
+      actions: Toiminnot
     message_summary:
       unread_button: Merkitse lukemattomaksi
       read_button: Merkitse luetuksi
@@ -1744,6 +1744,7 @@ fi:
       body: Valitettavasti tällä ID-tunnuksella ei ole viestiä.
     outbox:
       title: Lähetetyt
+      actions: Toiminnot
       messages:
         one: Kansiossa on %{count} lähetetty viesti.
         other: Kansiossa on %{count} lähetettyä viestiä.
@@ -1781,9 +1782,6 @@ fi:
       new password button: Lähetä salasanan palautusohjeet
       help_text: Kirjoita alapuolelle kirjautumissähköpostiosoitteesi. Osoitteeseen
         lähetetään salasanan palautusohjeet.
-    create:
-      notice email on way: Salasanan palautusohjeet on lähetetty annettuun sähköpostiosoitteeseen.
-      notice email cannot find: Annettu sähköpostiosoite ei ole käytössä.
     edit:
       title: Salasanan vaihto
       heading: Vaihda käyttäjän %{user} salasana
@@ -1860,7 +1858,7 @@ fi:
           alt: Kirjaudu sisään Microsoft-tililläsi
         github:
           title: Kirjaudu GitHubin avulla
-          alt: Kirjaudu käyttämällä GitHub-tiliäsi
+          alt: Kirjaudu GitHub-tilin avulla
         wikipedia:
           title: Kirjaudu sisään Wikipedialla
           alt: Kirjaudu sisään Wikipedia-tunnuksella
@@ -2192,7 +2190,7 @@ fi:
           subway: Metro
           ferry: Lautta
           light_rail: Pikaraitiotie
-          tram: Raitiovaunu
+          tram: Raitiotie
           trolleybus: Johdinauto
           bus: Bussi
           cable_car: Köysirata
@@ -2203,6 +2201,7 @@ fi:
           admin: Hallinnollinen raja
           capital: Pääkaupunki
           city: Kaupunki
+          orchard: Hedelmätarha
           vineyard: Viinitarha
           forest: Talousmetsä
           wood: Metsä
@@ -2219,6 +2218,7 @@ fi:
           industrial: Teollisuusalue
           commercial: Toimistoalue
           heathland: Kanervikko
+          scrubland: Pensaikko
           lake: Järvi
           reservoir: Tekojärvi
           intermittent_water: Ajoittainen vesi
@@ -2364,8 +2364,6 @@ fi:
       identifiable: TUNNISTETTAVA
       private: YKSITYINEN
       trackable: SEURATTAVA
-      by: käyttäjältä
-      in: avainsanoilla
     index:
       public_traces: Julkiset GPS-jäljet
       my_gps_traces: Omat GPS-jäljet
@@ -2653,9 +2651,6 @@ fi:
     index:
       title: Käyttäjät
       heading: Käyttäjät
-      showing:
-        one: Näytetään sivu %{page} (%{first_item}/%{items})
-        other: Näytetään sivu %{page} (%{first_item}-%{last_item} / %{items})
       summary_html: '%{name} luotu %{date} osoitteesta %{ip_address}'
       summary_no_ip_html: '%{name} luotu %{date}'
       confirm: Vahvista valitut käyttäjät
@@ -2781,7 +2776,6 @@ fi:
       revoke: Estä!
       confirm: Oletko varma?
       reason: 'Syy estoon:'
-      back: Näytä kaikki estot
       revoker: 'Estäjä:'
       needs_view: Käyttäjän täytyy kirjautua sisään ennen kuin esto poistuu.
     block:
@@ -2795,9 +2789,6 @@ fi:
       reason: Eston syy
       status: Tila
       revoker_name: Eston tehnyt
-      showing_page: Sivu %{page}
-      next: Seuraava »
-      previous: « Edellinen
   user_mutes:
     index:
       table:
@@ -2881,7 +2872,7 @@ fi:
     embed:
       report_problem: Ilmoita ongelmasta
     key:
-      title: Karttamerkinnät
+      title: Kartta­merkinnät
       tooltip: Merkkien selitykset
       tooltip_disabled: Ei käytettävissä tässä karttanäkymässä
     map:
@@ -2914,6 +2905,7 @@ fi:
       cyclosm_credit: 'Laattojen tyyli: %{osm_france_link} ylläpitämä %{cyclosm_link}'
       osm_france: OpenStreetMap Francen
       thunderforest_credit: Laattojen tekijä %{thunderforest_link}
+      andy_allan: Andy Allan
       tracestrack_credit: 'Laatat: %{tracestrack_link}'
       hotosm_credit: 'Laattojen tyyli: %{osm_france_link} ylläpitämä %{hotosm_link}'
     site:
index bc653f3a715006275ebccbdc9c7291b7a4efed87..ae57596c81c4edef9b0b882847e6971a9cde2266 100644 (file)
@@ -200,8 +200,6 @@ fit:
       heading: 'Mookkaukset julkisia:'
       make_edits_public_button: Tee mookkauksistani julkisia
   browse:
-    created: Luotu
-    closed: Ratkaistu
     version: Versuuni
     in_changeset: Muutoskokoelma
     anonymous: tuntematon
@@ -211,21 +209,6 @@ fit:
     view_history: Näytä histuuria
     view_details: Näytä tieot
     location: 'Sijainti:'
-    changeset:
-      title: 'Muutoskokoelma: %{id}'
-      belongs_to: Lähättäjä
-      node: Pisteet (%{count})
-      node_paginated: Pisteet (%{x}-%{y} / %{count})
-      way: Reitit (%{count})
-      way_paginated: Reitit (%{x}-%{y} of %{count})
-      relation: Relaatiot (%{count})
-      relation_paginated: Relaatiot (%{x}-%{y} / %{count})
-      changesetxml: Muutoskokoelman XML
-      osmchangexml: osmChange XML
-      join_discussion: Lokkaa sisäle, jos halvaat osallistua keskusteluun
-      discussion: Keskustelu
-      still_open: Muutoskokoelma on edelleen avoimena - keskustelu avathaan heti kun
-        muutoskokoelma on suljettu.
     node:
       title_html: 'Piste: %{name}'
       history_title_html: Pisteen %{name} histuuria
@@ -323,6 +306,24 @@ fit:
       feed:
         title: Muutoskokoelma %{id}
         title_comment: Muutoskokoelma %{id} - %{comment}
+        created: Luotu
+        closed: Ratkaistu
+        belongs_to: Lähättäjä
+    show:
+      title: 'Muutoskokoelma: %{id}'
+      discussion: Keskustelu
+      join_discussion: Lokkaa sisäle, jos halvaat osallistua keskusteluun
+      still_open: Muutoskokoelma on edelleen avoimena - keskustelu avathaan heti kun
+        muutoskokoelma on suljettu.
+      changesetxml: Muutoskokoelman XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Pisteet (%{count})
+      nodes_paginated: Pisteet (%{x}-%{y} / %{count})
+      ways: Reitit (%{count})
+      ways_paginated: Reitit (%{x}-%{y} of %{count})
+      relations: Relaatiot (%{count})
+      relations_paginated: Relaatiot (%{x}-%{y} / %{count})
     timeout:
       sorry: Valitettavasti pyytämäsi muutoskokoelmien listan hakeminen kesti liian
         kauan.
@@ -838,8 +839,6 @@ fit:
       identifiable: TUNNISTETTAVA
       private: YKSITYINEN
       trackable: SEURATTAVA
-      by: käyttäjältä
-      in: avainsanoilla
     index:
       public_traces: Julkiset GPS-jäljet
       my_traces: Minun GPS-jäljet
@@ -888,9 +887,6 @@ fit:
       edit: Mookkaa
     block:
       edit: Mookkaa
-    blocks:
-      next: Seuraava »
-      previous: « Eelinen
   notes:
     index:
       description: Kuvvaus
index fa09fc52da50c2ebfb8be9ab3f413a8619269eec..5a07b1b6c73958c6dc09cd8d818bb07d5b5c14a7 100644 (file)
@@ -41,6 +41,7 @@
 # Author: Gravitystorm
 # Author: Guilhelma
 # Author: Hashar
+# Author: Hecatonchire
 # Author: IAlex
 # Author: Iketsi
 # Author: JB
@@ -56,6 +57,7 @@
 # Author: Ltrlg
 # Author: Lucky
 # Author: Lulucmy
+# Author: MacOS Weed
 # Author: Macofe
 # Author: Manaviko
 # Author: Mathieu
@@ -108,7 +110,7 @@ fr:
     dir: ltr
   time:
     formats:
-      friendly: '%e %B %Y à %-Hh%M'
+      friendly: '%e %B %Y à %H%M'
       blog: '%e %B %Y'
   helpers:
     file:
@@ -130,8 +132,8 @@ fr:
         create: S’inscrire
         update: Mettre à jour
       redaction:
-        create: Créer le masquage
-        update: Enregistrer le masquage
+        create: Créer la censure
+        update: Enregistrer la censure
       trace:
         create: Téléverser
         update: Enregistrer les modifications
@@ -143,8 +145,8 @@ fr:
       messages:
         invalid_email_address: ne semble pas être une adresse de courriel valide
         email_address_not_routable: n’est pas routable
-        display_name_is_user_n: ne peut pas être user_n à moins que n soit votre identifiant
-          d’utilisateur
+        display_name_is_user_n: ne peut pas être user_n à moins que n ne soit votre
+          identifiant d’utilisateur
       models:
         user_mute:
           is_already_muted: est déjà en sourdine
@@ -244,7 +246,7 @@ fr:
         email_confirmation: Confirmation du courriel
         new_email: Nouvelle adresse de courriel
         active: Actif
-        display_name: Nom affiché
+        display_name: Afficher le nom
         description: Description du profil
         home_lat: Latitude
         home_lon: Longitude
@@ -261,11 +263,11 @@ fr:
       trace:
         tagstring: données séparées par des virgules
       user_block:
-        reason: Le motif pour lequel l’utilisateur est bloqué. Veuillez rester et
-          aussi calme et raisonnable que possible, en donnant autant de détails que
-          vous le pouvez sur la situation, en vous souvenant que le message sera visible
-          publiquement. Gardez en tête que tous les utilisateurs ne comprennent pas
-          le jargon de la communauté, donc essayez d’utiliser des termes simples.
+        reason: Le motif pour lequel l’utilisateur est bloqué. Soyez aussi calme et
+          raisonnable que possible, en donnant autant de détails que vous le pouvez
+          sur la situation, en vous souvenant que le message sera visible publiquement.
+          Gardez à l’esprit que tous les utilisateurs ne comprennent pas le jargon
+          de la communauté, donc essayez d’utiliser des termes simples.
         needs_view: Est-ce que l’utilisateur ou l’utilisatrice doit se connecter avant
           qu’expire ce blocage ?
       user:
@@ -343,7 +345,7 @@ fr:
         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}
+        description_item: Un flux RSS pour la note %{id}
         opened: nouvelle note (près de %{place})
         commented: nouveau commentaire (près de %{place})
         closed: note fermée (près de %{place})
@@ -357,7 +359,7 @@ fr:
         title: Supprimer mon compte
         warning: Avertissement ! Le processus de suppression de compte est définitif
           et ne peut pas être annulé.
-        delete_account: Supprimer un compte
+        delete_account: Supprimer le compte
         delete_introduction: 'Vous pouvez supprimer votre compte OpenStreetMap en
           utilisant le bouton ci-dessous. Veuillez prendre note des détails suivants :'
         delete_profile: Les informations de votre profil, y compris votre avatar,
@@ -384,7 +386,7 @@ fr:
   accounts:
     edit:
       title: Modifier le compte
-      my settings: Mes options
+      my settings: Mes paramètres
       current email address: Adresse de courriel actuelle
       external auth: Authentification externe
       openid:
@@ -435,15 +437,10 @@ fr:
     destroy:
       success: Compte supprimé.
   browse:
-    created: Créé
-    closed: Fermé
-    created_ago_html: Créé %{time_ago}
-    closed_ago_html: Fermé %{time_ago}
-    created_ago_by_html: Créé %{time_ago} par %{user}
-    closed_ago_by_html: Fermé %{time_ago} par %{user}
     deleted_ago_by_html: Supprimé %{time_ago} par %{user}
     edited_ago_by_html: Modifié %{time_ago} par %{user}
     version: Version
+    redacted_version: Version censurée
     in_changeset: Groupe de modifications
     anonymous: anonyme
     no_comment: (aucun commentaire)
@@ -456,27 +453,12 @@ fr:
       other: '%{count} chemins'
     download_xml: Télécharger en XML
     view_history: Voir l’historique
+    view_unredacted_history: Voir l'historique non censuré
     view_details: Afficher les détails
+    view_redacted_data: Afficher les données censurées
     location: 'Emplacement :'
     common_details:
       coordinates_html: '%{latitude} ; %{longitude}'
-    changeset:
-      title: 'Groupe de modifications : %{id}'
-      belongs_to: Auteur
-      node: Nœuds (%{count})
-      node_paginated: Nœuds (%{x} à %{y} sur %{count})
-      way: Chemins (%{count})
-      way_paginated: Chemins (%{x} à %{y} sur %{count})
-      relation: Relations (%{count})
-      relation_paginated: Relations (%{x} à %{y} sur %{count})
-      hidden_comment_by_html: Commentaire caché de %{user} %{time_ago}
-      comment_by_html: Commentaire de %{user} %{time_ago}
-      changesetxml: XML du groupe de modifications
-      osmchangexml: XML osmChange
-      join_discussion: Se connecter pour rejoindre la discussion
-      discussion: Discussion
-      still_open: Ensemble de modifications toujours ouvert – la discussion s’ouvrira
-        une fois que l’ensemble de modifications sera fermé.
     node:
       title_html: 'Nœud : %{name}'
       history_title_html: 'Historique du nœud : %{name}'
@@ -576,7 +558,7 @@ fr:
       view_changeset_details: Afficher les détails du groupe de modifications
     changesets:
       id: Identifiant
-      saved_at: Enregistré le
+      saved_at: Enregistré vers
       user: Utilisateur
       comment: Commentaire
       area: Zone
@@ -596,6 +578,34 @@ fr:
       feed:
         title: Groupe de modifications %{id}
         title_comment: 'Groupe de modifications %{id} : %{comment}'
+        created: Créé
+        closed: Fermé
+        belongs_to: Auteur
+    unsubscribe:
+      button: Se désinscrire de la discussion
+    show:
+      title: 'Groupe de modifications : %{id}'
+      created: 'Créé : %{when}'
+      closed: 'Fermé : %{when}'
+      created_ago_html: Créé %{time_ago}
+      closed_ago_html: Fermé %{time_ago}
+      created_ago_by_html: Créé %{time_ago} par %{user}
+      closed_ago_by_html: Fermé %{time_ago} par %{user}
+      discussion: Discussion
+      join_discussion: Se connecter pour rejoindre la discussion
+      still_open: Ensemble de modifications toujours ouvert – la discussion s’ouvrira
+        une fois que l’ensemble de modifications sera fermé.
+      comment_by_html: Commentaire de %{user} %{time_ago}
+      hidden_comment_by_html: Commentaire caché de %{user} %{time_ago}
+      changesetxml: XML du groupe de modifications
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nœuds (%{count})
+      nodes_paginated: Nœuds (%{x} à %{y} sur %{count})
+      ways: Chemins (%{count})
+      ways_paginated: Chemins (%{x} à %{y} sur %{count})
+      relations: Relations (%{count})
+      relations_paginated: Relations (%{x} à %{y} sur %{count})
     timeout:
       sorry: Désolé, la liste des groupes de modifications que vous avez demandée
         a mis trop de temps à récupérer.
@@ -717,6 +727,10 @@ fr:
       comment: Commentaire
       newer_comments: Commentaires plus récents
       older_comments: Commentaires plus anciens
+    subscribe:
+      button: S'abonner à la discussion
+    unsubscribe:
+      button: Se désinscrire de la discussion
   doorkeeper:
     errors:
       messages:
@@ -747,7 +761,7 @@ fr:
             cause de la configuration manquante Doorkeeper::OpenidConnect.configure.subject.
     scopes:
       address: Afficher votre adresse physique
-      email: Afficher votre adresse e-mail
+      email: Afficher votre adresse électronique
       openid: Authentifier votre compte
       phone: Voir votre numéro de téléphone
       profile: Voir les informations de votre profil
@@ -1696,11 +1710,7 @@ fr:
     intro_text: OpenStreetMap est une carte du monde, créée par des gens comme vous
       et libre d’utilisation sous licence libre.
     intro_2_create_account: Créez un compte d’utilisateur
-    hosting_partners_html: L’hébergement est pris en charge par %{ucl}, %{fastly},
-      %{bytemark}, et d’autres %{partners}.
-    partners_ucl: l’University College de Londres
     partners_fastly: Fastly
-    partners_bytemark: l'Hébergeur Bytemark
     partners_partners: partenaires
     tou: Conditions d’utilisation
     osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
@@ -1733,6 +1743,7 @@ fr:
         sur %{commenturl} ou envoyer un message à l'auteur sur %{replyurl}
       footer_html: Vous pouvez aussi lire le commentaire sur %{readurl} et vous pouvez
         commenter sur %{commenturl} ou envoyer un message à l’auteur sur %{replyurl}
+      footer_unsubscribe: Vous pouvez vous désabonner de la discussion depuis %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Bonjour %{to_user},
@@ -1856,10 +1867,10 @@ fr:
       details: Plus de détails sur l’ensemble de modifications à %{url}.
       details_html: Vous pouvez trouver plus de détails sur l’ensemble de modifications
         sur %{url}.
-      unsubscribe: Pour vous désabonner des mises à jour de cet ensemble de modifications,
-        visitez %{url} et cliquez sur « Désabonner ».
-      unsubscribe_html: Pour vous désabonner des mises à jour de cet ensemble de modifications,
-        visitez %{url} et cliquez sur « Désabonner ».
+      unsubscribe: Vous pouvez vous désabonner des mises à jour de cet ensemble de
+        modifications depuis %{url}.
+      unsubscribe_html: Vous pouvez vous désabonner des mises à jour de cet ensemble
+        de modifications depuis %{url}.
   confirmations:
     confirm:
       heading: Vérifiez votre courriel !
@@ -1945,7 +1956,7 @@ fr:
         one: un ancien message
         other: '%{count} anciens messages'
     reply:
-      wrong_user: Vous êtes identifié(e) comme « %{user} » mais le message auquel
+      wrong_user: Vous êtes identifié(e) sous le nom `%{user}' mais le message auquel
         vous souhaitez répondre n’a pas été envoyé à cet utilisateur. Veuillez vous
         connecter avec l’identifiant correct pour pouvoir répondre.
     show:
@@ -1981,9 +1992,9 @@ fr:
         nous enverrons à cette adresse un lien que vous pourrez utiliser pour réinitialiser
         votre mot de passe.
     create:
-      notice email on way: Désolé que vous ayez perdu votre mot de passe :-( Un courriel
-        vous a été envoyé pour que vous puissiez vite le réinitialiser.
-      notice email cannot find: Cette adresse de courriel est introuvable, désolé.
+      send_paranoid_instructions: Si votre adresse courriel existe dans notre base
+        de données, vous recevrez dans quelques minutes un courriel avec un lien de
+        récupération de mot de passe à votre adresse de courriel.
     edit:
       title: Réinitialiser le mot de passe
       heading: Réinitialiser le mot de passe de %{user}
@@ -2715,8 +2726,6 @@ fr:
       identifiable: IDENTIFIABLE
       private: PRIVÉE
       trackable: PISTABLE
-      by: par
-      in: dans
     index:
       public_traces: Traces GPS publiques
       my_gps_traces: Mes traces GPS
@@ -3047,9 +3056,6 @@ fr:
     index:
       title: Utilisateurs
       heading: Utilisateurs
-      showing:
-        one: Page %{page} (%{first_item} sur %{items})
-        other: Page %{page} (%{first_item} à %{last_item} sur %{items})
       summary_html: '%{name} créé depuis %{ip_address} le %{date}'
       summary_no_ip_html: '%{name} créé le %{date}'
       confirm: Confirmer les utilisateurs sélectionnés
@@ -3193,7 +3199,6 @@ fr:
       revoke: Révoquer !
       confirm: Êtes-vous sûr(e) ?
       reason: 'Raison du blocage :'
-      back: Afficher tous les blocages
       revoker: 'Révocateur :'
       needs_view: L’utilisateur ou l’utilisatrice doit se connecter avant que ce blocage
         soit annulé.
@@ -3208,9 +3213,6 @@ fr:
       reason: Motif du blocage
       status: État
       revoker_name: Révoqué par
-      showing_page: Page %{page}
-      next: Suivant »
-      previous: ◂ Précédent
   user_mutes:
     index:
       title: Utilisateurs en sourdine
index 9615be1f65517df492f2d71f88e2ef759da6d4f7..018f181cd558e6934e5ec73e8db1aae432500987 100644 (file)
@@ -264,12 +264,6 @@ fur:
     destroy:
       success: Profîl eliminât.
   browse:
-    created: Creât
-    closed: Sierât
-    created_ago_html: Creât %{time_ago}
-    closed_ago_html: Sierât %{time_ago}
-    created_ago_by_html: Creât di %{user} %{time_ago}
-    closed_ago_by_html: Sierât di %{user} %{time_ago}
     deleted_ago_by_html: Eliminât di %{user} %{time_ago}
     edited_ago_by_html: Modificât di %{user} %{time_ago}
     version: Version
@@ -287,21 +281,6 @@ fur:
     view_history: Cjale il storic
     view_details: Cjale i detais
     location: 'Lûc:'
-    changeset:
-      title: 'Grup di cambiaments: %{id}'
-      belongs_to: Autôr
-      node: Grops (%{count})
-      node_paginated: Grops (%{x}-%{y} su %{count})
-      way: Viis (%{count})
-      way_paginated: Viis (%{x}-%{y} su %{count})
-      relation: Relazions (%{count})
-      relation_paginated: Relazions (%{x}-%{y} su %{count})
-      hidden_comment_by_html: Coment platât di %{user} %{time_ago}
-      comment_by_html: Comentât di %{user} %{time_ago}
-      changesetxml: Grup di cambiaments XML
-      osmchangexml: XML in formât osmChange
-      join_discussion: Jentre par partecipâ ae discussion
-      discussion: Discussion
     node:
       title_html: 'Grop: %{name}'
       history_title_html: 'Storic dal grop: %{name}'
@@ -401,6 +380,28 @@ fur:
       feed:
         title: Grup di cambiaments %{id}
         title_comment: Grup di cambiaments %{id} - %{comment}
+        created: Creât
+        closed: Sierât
+        belongs_to: Autôr
+    show:
+      title: 'Grup di cambiaments: %{id}'
+      created_ago_html: Creât %{time_ago}
+      closed_ago_html: Sierât %{time_ago}
+      created_ago_by_html: Creât di %{user} %{time_ago}
+      closed_ago_by_html: Sierât di %{user} %{time_ago}
+      discussion: Discussion
+      join_discussion: Jentre par partecipâ ae discussion
+      comment_by_html: Comentât di %{user} %{time_ago}
+      hidden_comment_by_html: Coment platât di %{user} %{time_ago}
+      changesetxml: Grup di cambiaments XML
+      osmchangexml: XML in formât osmChange
+    paging_nav:
+      nodes: Grops (%{count})
+      nodes_paginated: Grops (%{x}-%{y} su %{count})
+      ways: Viis (%{count})
+      ways_paginated: Viis (%{x}-%{y} su %{count})
+      relations: Relazions (%{count})
+      relations_paginated: Relazions (%{x}-%{y} su %{count})
     timeout:
       sorry: Nus displâs, la liste dai grups di cambiaments che tu âs domandât e je
         stade masse timp a cjamâsi.
@@ -961,11 +962,7 @@ fur:
     intro_text: OpenStreetMap e je une mape dal mont, creade di int come te e di ûs
       libar sot di une licence vierte.
     intro_2_create_account: Cree il to profîl utent
-    hosting_partners_html: L'hosting al è sostignût di %{ucl}, %{fastly}, %{bytemark}
-      e altris %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: associâts
     tou: Cundizions pal ûs
     osm_offline: La base di dâts di OpenStreetMap e je par cumò fûr linie parcè che
@@ -1104,8 +1101,6 @@ fur:
       new password button: Azere la password
       help_text: Scrîf la direzion di pueste eletroniche che tu âs doprât par iscrivîti
         e ti mandarin un leam par tornâ a impuestâ la tô password.
-    create:
-      notice email cannot find: No vin podût cjatâ la tô direzion di pueste, nus displâs.
     edit:
       title: Azere la password
       heading: Azere la password par %{user}
@@ -1422,8 +1417,6 @@ fur:
       public: PUBLIC
       identifiable: IDENTIFICABIL
       private: PRIVÂT
-      by: di
-      in: in
     index:
       public_traces: Percors GPS publics
       my_gps_traces: I miei percors GPS
@@ -1621,9 +1614,6 @@ fur:
     index:
       title: Utents
       heading: Utents
-      showing:
-        one: Pagjine %{page} (%{first_item} su %{items})
-        other: Pagjine %{page} (%{first_item}-%{last_item} su %{items})
       summary_html: '%{name} creât di %{ip_address} ai %{date}'
       summary_no_ip_html: '%{name} creât ai %{date}'
       confirm: Conferme i utents selezionâts
@@ -1682,7 +1672,6 @@ fur:
       revoke: Revoche!
       confirm: Sêstu sigûr?
       reason: 'Reson dal bloc:'
-      back: Cjale ducj i blocs
       revoker: 'Chel che al à revocât:'
     block:
       not_revoked: (no revocât)
@@ -1695,9 +1684,6 @@ fur:
       reason: Reson dal bloc
       status: Stât
       revoker_name: Revocât di
-      showing_page: Pagjine %{page}
-      next: Sucessîf »
-      previous: « Precedent
   user_mutes:
     index:
       table:
index d50bb21d9ba1158fe06fd746b417d41f6304356c..7fce45fa2ccfa048945908f45649a463affca127 100644 (file)
@@ -300,8 +300,6 @@ fy:
     destroy:
       success: Akkount wiske.
   browse:
-    created: Makke
-    closed: Ofdien
     version: Ferzje
     in_changeset: Wizigingsset
     anonymous: anonym
@@ -317,21 +315,6 @@ fy:
     view_history: Skiednis besjen
     view_details: Gegevens besjen
     location: 'Lokaasje:'
-    changeset:
-      title: 'Wizigingsset: %{id}'
-      belongs_to: Makker
-      node: Punten (%{count})
-      node_paginated: Punten (%{x}-%{y} fan %{count})
-      way: Linen (%{count})
-      way_paginated: Linen (%{x}-%{y} fan %{count})
-      relation: Relaasjes (%{count})
-      relation_paginated: Relaasjes (%{x}-%{y} fan %{count})
-      changesetxml: Wizigingsset-XML
-      osmchangexml: osmWizigings-XML
-      join_discussion: Meld jo oan en oerlis mei
-      discussion: Oerlis
-      still_open: Wizigingsset net ree - it oerlis iepenet sa gau't de wizigingsset
-        ôfdien is.
     node:
       title_html: 'Punt: %{name}'
       history_title_html: 'Skiednis fan punt: %{name}'
@@ -437,6 +420,24 @@ fy:
       feed:
         title: Wizigingsset %{id}
         title_comment: Wizigingsset %{id} - %{comment}
+        created: Makke
+        closed: Ofdien
+        belongs_to: Makker
+    show:
+      title: 'Wizigingsset: %{id}'
+      discussion: Oerlis
+      join_discussion: Meld jo oan en oerlis mei
+      still_open: Wizigingsset net ree - it oerlis iepenet sa gau't de wizigingsset
+        ôfdien is.
+      changesetxml: Wizigingsset-XML
+      osmchangexml: osmWizigings-XML
+    paging_nav:
+      nodes: Punten (%{count})
+      nodes_paginated: Punten (%{x}-%{y} fan %{count})
+      ways: Linen (%{count})
+      ways_paginated: Linen (%{x}-%{y} fan %{count})
+      relations: Relaasjes (%{count})
+      relations_paginated: Relaasjes (%{x}-%{y} fan %{count})
     timeout:
       sorry: Spitich, it opheljen fan 'e list wizigingssets dy't jo fregen duorre
         te lang.
@@ -1469,11 +1470,7 @@ fy:
     intro_text: OpenStreetMap is in wrâldkaart makke troch minsken krekt as jo, en
       frij te brûken ûnder in iepen lisinsje.
     intro_2_create_account: Meitsje in akkount as meidogger
-    hosting_partners_html: It webstee is ûnderdak by %{ucl}, %{fastly}, %{bytemark}
-      en oare %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partners
     tou: Gebrûksbetingsten
     osm_offline: De OpenStreetMap-databank is op it stuit ôfline, wylst der it nedige
@@ -1727,10 +1724,6 @@ fy:
       help_text: Folje it e-mailadres yn dat jo by it ynskriuwen brûkt hawwe. Wy stjoere
         der dan in keppeling hinne dy't jo brûke kinne om jo wachtwurd op 'e nij yn
         te stellen.
-    create:
-      notice email on way: Spitich dat jo 'm kwyt binne :-( mar in e-mail is ûnderweis,
-        dat jo kinne gau in nijenien ynstelle.
-      notice email cannot find: Koe dat e-mailadres net fine, spitich.
     edit:
       title: Nij wachtwurd
       heading: Wachtwurd op 'e nij ynstelle foar %{user}
@@ -2144,8 +2137,6 @@ fy:
       identifiable: IDENTIFISEARBER
       private: PRIVEE
       trackable: TRASEARBER
-      by: troch
-      in: yn
     index:
       public_traces: Iepenbiere GPS-trajekten
       my_gps_traces: Myn GPS-trajekten
@@ -2428,9 +2419,6 @@ fy:
     index:
       title: Meidoggers
       heading: Meidoggers
-      showing:
-        one: Side %{page} (%{first_item} fan %{items})
-        other: Side %{page} (%{first_item}-%{last_item} fan %{items})
       summary_html: '%{name} oanmakke fan %{ip_address} op %{date}'
       summary_no_ip_html: '%{name} oanmakke op %{date}'
       confirm: Selektearre meidoggers befêstigje
@@ -2560,7 +2548,6 @@ fy:
       revoke: Ynlûke!
       confirm: Seker witte?
       reason: 'Reden foar útsluting:'
-      back: Alle útslutings besjen
       revoker: 'Ynlûker:'
       needs_view: De meidogger moat oanmelde foar't dizze útsluting ferfalt.
     block:
@@ -2574,9 +2561,6 @@ fy:
       reason: Reden foar útsluting
       status: Status
       revoker_name: Ynlutsen troch
-      showing_page: Side %{page}
-      next: Folgjende »
-      previous: « Foarige
   notes:
     index:
       title: Troch %{user} yntsjinne as op reägearre notysjes
index b64dc4fff516b5e3af4b66ed8d2a9e3bc9f91051..bdfa6b1d498ce8f912d0bbf238c185d3985dc12c 100644 (file)
@@ -207,8 +207,6 @@ ga:
     go_public:
       heading: Eagarthóireacht phoiblí
   browse:
-    created: Cruthaithe ag
-    closed: Dúnta ag
     version: Leagan
     in_changeset: Tacar athruithe
     anonymous: gan ainm
@@ -218,19 +216,6 @@ ga:
     view_history: Féach ar Stair
     view_details: Amharc ar Shonraí
     location: 'Suíomh:'
-    changeset:
-      title: 'Tacar athruithe: %{id}'
-      belongs_to: Údar
-      node: Nóid (%{count})
-      node_paginated: Nóid (%{x}-%{y} de %{count})
-      way: Bealaí (%{count})
-      way_paginated: Bealaí (%{x}-%{y} de %{count})
-      relation: Gaolta (%{count})
-      relation_paginated: Gaolta (%{x}-%{y} de %{count})
-      changesetxml: XML an Tacair athruithe
-      osmchangexml: XML osmChange
-      join_discussion: Logáil isteach chun páirt a ghlacadh sa phlé
-      discussion: Plé
     node:
       title_html: 'Nód: %{name}'
       history_title_html: 'Stair an Nóid: %{name}'
@@ -327,6 +312,22 @@ ga:
       feed:
         title: Tacar athruithe %{id}
         title_comment: Tacar athruithe %{id} - %{comment}
+        created: Cruthaithe ag
+        closed: Dúnta ag
+        belongs_to: Údar
+    show:
+      title: 'Tacar athruithe: %{id}'
+      discussion: Plé
+      join_discussion: Logáil isteach chun páirt a ghlacadh sa phlé
+      changesetxml: XML an Tacair athruithe
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nóid (%{count})
+      nodes_paginated: Nóid (%{x}-%{y} de %{count})
+      ways: Bealaí (%{count})
+      ways_paginated: Bealaí (%{x}-%{y} de %{count})
+      relations: Gaolta (%{count})
+      relations_paginated: Gaolta (%{x}-%{y} de %{count})
     timeout:
       sorry: Ár leithscéil, thóg sé rófhada an liosta de na tacair athruithe a d'iarr
         tú a aisghabháil.
@@ -1081,10 +1082,6 @@ ga:
     intro_text: Is léarscáil den domhan é OpenStreetMap, a chruthaigh daoine cosúil
       leatsa agus atá saor in aisce le húsáid faoi cheadúnas oscailte.
     intro_2_create_account: Cruthaigh cuntas úsáideora
-    hosting_partners_html: Tacaíonn %{ucl}, %{bytemark} agus %{partners} eile leis
-      an óstáil.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: comhpháirtithe
     osm_offline: Tá bunachar sonraí OpenStreetMap as líne faoi láthair fad agus atá
       obair chothabhála riachtanach á dhéanamh ar an mbunachar sonraí.
@@ -1299,11 +1296,6 @@ ga:
       new password button: Athshocraigh an focal faire
       help_text: Iontráil an seoladh ríomhphoist a d'úsáid tú le clárú, agus seolfaimid
         nasc chugat a bheidh tú in ann a úsáid chun do phasfhocal a athshocrú.
-    create:
-      notice email on way: Is oth linn gur chaill tú é :-( ach tá ríomhphost ar an
-        mbealach chugat le go mbeidh tú in ann é a athshocrú go luath.
-      notice email cannot find: Níorbh fhéidir an seoladh ríomhphoist sin a aimsiú,
-        ár leithscéil faoi sin.
     edit:
       title: Focal faire a athshocrú
       heading: Focal Faire le haghaidh %{user} a Athshocrú
@@ -1638,8 +1630,6 @@ ga:
       identifiable: IN-AITHEANTA
       private: PRÍOBHÁIDEACH
       trackable: INRIANAITHE
-      by: ag
-      in: in
     index:
       public_traces: Loirg GPS phoiblí
       public_traces_from: Loirg GPS phoiblí ó %{user}
@@ -1842,9 +1832,6 @@ ga:
       reason: Cúis don bhac
       status: Stádas
       revoker_name: Tarraingthe siar ag
-      showing_page: Leathanach %{page}
-      next: Ar aghaidh »
-      previous: « Roimhe
   notes:
     index:
       id: ID
index 05513dbe4e6f379b05744821a58146916cdc3f95..7881b7087b9d34c156778f4abb194c2a05adc939 100644 (file)
@@ -104,13 +104,6 @@ gcf:
     no_comment: (pon komantasyon)
     download_xml: Chantyé XML
     location: 'Ki koté:'
-    changeset:
-      hidden_comment_by_html: Komantasyon ou dévwè a %{user} %{time_ago}
-      comment_by_html: Komantasyon a %{user} %{time_ago}
-      changesetxml: Niméwo Chanjeman XML
-      osmchangexml: osmChanjeman XML
-      join_discussion: Konèkté-w pou jwenn bokantaj-la
-      discussion: Bokantaj
     containing_relation:
       entry_html: Rèlasion %{relation_name}
       entry_role_html: Rèlasion %{relation_name} (adan wol %{relation_role})
@@ -131,6 +124,13 @@ gcf:
       previous: Pwochenn
     changesets:
       comment: Komantasyon
+    show:
+      discussion: Bokantaj
+      join_discussion: Konèkté-w pou jwenn bokantaj-la
+      comment_by_html: Komantasyon a %{user} %{time_ago}
+      hidden_comment_by_html: Komantasyon ou dévwè a %{user} %{time_ago}
+      changesetxml: Niméwo Chanjeman XML
+      osmchangexml: osmChanjeman XML
   dashboards:
     contact:
       km away: '%{count} km'
index 8082f2ae262181120b8ecc2f502ee244dc2bbdd7..90cf01bdfd3f0d782e0623c9c34ba61b87007029 100644 (file)
@@ -182,8 +182,6 @@ gd:
         Thoir sùil air a' phost-d agad gus an seòladh puist-d ùr agad a dhearbhadh.
       success: Chaidh fiosrachadh a' chleachdaiche ùrachadh gu soirbheachail.
   browse:
-    created: Air a chruthachadh
-    closed: Dùinte
     version: Tionndadh
     in_changeset: Seata atharraichean
     anonymous: gun ainm
@@ -193,19 +191,6 @@ gd:
     view_history: Seall an eachdraidh
     view_details: Seall am mion-fhiosrachadh
     location: 'Àite:'
-    changeset:
-      title: 'Seata atharraichean: %{id}'
-      belongs_to: Ùghdar
-      node: Nòdan (%{count})
-      node_paginated: Nòdan (%{x}-%{y} à %{count})
-      way: Slighean (%{count})
-      way_paginated: Slighean (%{x}-%{y} à %{count})
-      relation: Dàimhean (%{count})
-      relation_paginated: Dàimhean (%{x}-%{y} à %{count})
-      changesetxml: XML le seata atharraichean
-      osmchangexml: XML osmChange
-      join_discussion: Clàraich a-steach gus pàirt a ghabhail san deasbaireachd
-      discussion: Deasbaireachd
     node:
       title_html: 'Nòd: %{name}'
       history_title_html: 'Eachdraidh an nòd: %{name}'
@@ -304,6 +289,22 @@ gd:
       feed:
         title: Seata atharraichean %{id}
         title_comment: Seata atharraichean %{id} - %{comment}
+        created: Air a chruthachadh
+        closed: Dùinte
+        belongs_to: Ùghdar
+    show:
+      title: 'Seata atharraichean: %{id}'
+      discussion: Deasbaireachd
+      join_discussion: Clàraich a-steach gus pàirt a ghabhail san deasbaireachd
+      changesetxml: XML le seata atharraichean
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nòdan (%{count})
+      nodes_paginated: Nòdan (%{x}-%{y} à %{count})
+      ways: Slighean (%{count})
+      ways_paginated: Slighean (%{x}-%{y} à %{count})
+      relations: Dàimhean (%{count})
+      relations_paginated: Dàimhean (%{x}-%{y} à %{count})
     timeout:
       sorry: Duilich ach thug e ro fhada gus an seata atharraichean a dh'iarr thu
         fhaighinn.
@@ -932,8 +933,6 @@ gd:
     intro_text: '''S e mapa an t-saoghail a tha san OpenStreetMap a chaidh a chruthachadh
       le daoine mar thu fhèin ''s a tha saor fo cheadachas fhosgailte.'
     intro_2_create_account: Cruthaich cunntas cleachdaiche
-    partners_ucl: UCL VR Centre
-    partners_bytemark: Bytemark Hosting
     partners_partners: com-pàirtichean eile
     osm_offline: Tha an stòr-dàta aig OpenStreetMap far loidhńe an-dràsta on a tha
       sinn a' dèanamh obair-charaidh riatanach air.
@@ -1139,11 +1138,6 @@ gd:
       help_text: Cuir a-steach an seòladh puist-d a chleachd thu gus an cunntas agad
         a chlàradh agus cuiridh sinn post-d dha as urrainn dhut cleachdadh gus am
         facal-faire agad ath-shuidheachadh.
-    create:
-      notice email on way: Tha sinn duilich gun do chaill thu e :-( ach tha post-d
-        gu bhith tighinn thugad ach an urrainn dhut ath-shuidheachadh a dh'aithghearr.
-      notice email cannot find: Duilich ach cha do rinn sinn lorg air an t-seòladh
-        puist-d ud.
     edit:
       title: Ath-shuidhich am facal-faire
       heading: Ath-shuidhich am facal-faire aig %{user}
@@ -1496,8 +1490,6 @@ gd:
       identifiable: GABHAIDH AITHNEACHADH
       private: PRÍOBHAIDEACH
       trackable: GABHAIDH LORGADH
-      by: le
-      in: 'an-seo:'
     index:
       public_traces: Lorgaidhean GPS poblach
       public_traces_from: Lorgaidhean GPS poblach o %{user}
@@ -1694,9 +1686,6 @@ gd:
     index:
       title: Cleachdaichean
       heading: Cleachdaichean
-      showing:
-        one: Duilleag %{page} (%{first_item} à %{items})
-        other: Duilleag %{page} (%{first_item}-%{last_item} à %{items})
       summary_html: Chaidh %{name} a chruthachadh o %{ip_address} %{date}
       summary_no_ip_html: Chaidh %{name} a chruthachadh %{date}
       confirm: Dearbhaich na cleachdaichean a thagh thu
@@ -1801,7 +1790,6 @@ gd:
       revoke: Cùl-ghairm!
       confirm: A bheil thu cinnteach?
       reason: 'Adhbhar a'' bhacaidh:'
-      back: Seall a h-uile bacadh
       revoker: 'Cùl-ghairm le:'
       needs_view: Feumaidh an cleachdaiche clàradh a-steach mus dèid am bacadh seo
         a thoirt air falamh.
@@ -1816,9 +1804,6 @@ gd:
       reason: Adhbhar a' bhacaidh
       status: Staid
       revoker_name: Air a chùl-ghairm le
-      showing_page: Duilleag %{page}
-      next: Air adhart »
-      previous: « Air ais
   notes:
     index:
       title: Nòtaichean a chuir %{user} a-null no a thug %{user} beachd dhaibh
index 987212e45dd2dcafcb0c47ac9e3097f97e20d4f6..44d73ad3516ef2360db1345ae01f95e696a7a38d 100644 (file)
@@ -69,7 +69,7 @@ gl:
       changeset_tag: Etiqueta do conxunto de modificacións
       country: País
       diary_comment: Comentario do diario
-      diary_entry: Entrada do diario
+      diary_entry: Entrada no diario
       friend: Amizade
       issue: Problema
       language: Lingua
@@ -339,15 +339,10 @@ gl:
     destroy:
       success: Conta borrada.
   browse:
-    created: Creado
-    closed: Pechado
-    created_ago_html: Creado %{time_ago}
-    closed_ago_html: Pechado %{time_ago}
-    created_ago_by_html: Creado %{time_ago} por %{user}
-    closed_ago_by_html: Pechado %{time_ago} por %{user}
     deleted_ago_by_html: Borrado %{time_ago} por %{user}
     edited_ago_by_html: Editado %{time_ago} por %{user}
     version: Versión
+    redacted_version: Versión censurada
     in_changeset: Conxunto de modificacións
     anonymous: anónimo
     no_comment: (sen comentarios)
@@ -360,25 +355,11 @@ gl:
       other: '%{count} vías'
     download_xml: Baixar en XML
     view_history: Ollar o historial
+    view_unredacted_history: Ollar o historial non censurado
     view_details: Ollar os detalles
+    view_redacted_data: Ollar os datos censurados
+    view_redaction_message: Ollar a mensaxe censurada
     location: 'Localización:'
-    changeset:
-      title: 'Conxunto de modificacións: %{id}'
-      belongs_to: Autor
-      node: Nós (%{count})
-      node_paginated: Nós (%{x}-%{y} de %{count})
-      way: Vías (%{count})
-      way_paginated: Vías (%{x}-%{y} de %{count})
-      relation: Relacións (%{count})
-      relation_paginated: Relacións (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Comentario de %{user} agochado %{time_ago}
-      comment_by_html: Comentario de %{user} %{time_ago}
-      changesetxml: XML do conxunto de modificacións
-      osmchangexml: XML de osmChange
-      join_discussion: Inicia a sesión para unirte á parola
-      discussion: Parola
-      still_open: O conxunto de modificacións segue aberto. Abrirase a parola cando
-        o conxunto de modificacións estea pechado.
     node:
       title_html: 'Nó: %{name}'
       history_title_html: 'Historial do nó: %{name}'
@@ -496,6 +477,47 @@ gl:
       feed:
         title: Conxunto de modificacións %{id}
         title_comment: Conxunto de modificacións %{id} - %{comment}
+        created: Creado
+        closed: Pechado
+        belongs_to: Autor
+    subscribe:
+      heading: Queres subscribirte á seguinte conversa sobre o conxunto de modificacións?
+      button: Subscribirse á conversa
+    unsubscribe:
+      heading: Queres cancelar a subscrición á seguinte conversa sobre o conxunto
+        de modificacións?
+      button: Cancelar a subscrición á conversa
+    heading:
+      title: Conxunto de modificacións %{id}
+      created_by_html: Creado por %{link_user} o %{created}.
+    no_such_entry:
+      title: Non existe ese conxunto de modificacións
+      heading: 'Non hai ningunha entrada co ID: %{id}'
+      body: Non existe ningún conxunto de modificacións co identificador %{id}. Comproba
+        a ortografía ou que a ligazón que seguiches estea ben.
+    show:
+      title: 'Conxunto de modificacións: %{id}'
+      created: 'Creado: %{when}'
+      closed: 'Pechado: %{when}'
+      created_ago_html: Creado %{time_ago}
+      closed_ago_html: Pechado %{time_ago}
+      created_ago_by_html: Creado %{time_ago} por %{user}
+      closed_ago_by_html: Pechado %{time_ago} por %{user}
+      discussion: Parola
+      join_discussion: Inicia a sesión para unirte á parola
+      still_open: O conxunto de modificacións segue aberto. Abrirase a parola cando
+        o conxunto de modificacións estea pechado.
+      comment_by_html: Comentario de %{user} %{time_ago}
+      hidden_comment_by_html: Comentario de %{user} agochado %{time_ago}
+      changesetxml: XML do conxunto de modificacións
+      osmchangexml: XML de osmChange
+    paging_nav:
+      nodes: Nós (%{count})
+      nodes_paginated: Nós (%{x}-%{y} de %{count})
+      ways: Vías (%{count})
+      ways_paginated: Vías (%{x}-%{y} de %{count})
+      relations: Relacións (%{count})
+      relations_paginated: Relacións (%{x}-%{y} de %{count})
     timeout:
       sorry: Desculpe que levase moito tempo obter a listaxe do conxunto de modificacións
         que solicitou.
@@ -558,19 +580,19 @@ gl:
       newer_entries: Entradas máis novas
     edit:
       title: Editar a entrada do diario
-      marker_text: Localización da entrada do diario
+      marker_text: Localización da entrada no diario
     show:
       title: Diario de %{user} | %{title}
       user_title: Diario de %{user}
       discussion: Conversa
       leave_a_comment: Deixar un comentario
       login_to_leave_a_comment_html: '%{login_link} para deixar un comentario'
-      login: Iniciar a sesión
+      login: Inicia sesión
     no_such_entry:
-      title: Non hai tal entrada de diario
+      title: Non hai tal entrada no diario
       heading: 'Non hai ningunha entrada co ID: %{id}'
-      body: Non existe ningunha entrada no diario ou comentario co ID %{id}. Comprobe
-        a ortografía ou que a ligazón que seguiu estea ben.
+      body: Non existe ningunha entrada no diario ou comentario co identificador %{id}.
+        Comproba a ortografía ou que a ligazón que seguiches estea ben.
     diary_entry:
       posted_by_html: Publicado por %{link_user} o %{created} en %{language_link}.
       updated_at_html: Última actualización no %{updated}.
@@ -616,6 +638,13 @@ gl:
       comment: Comentario
       newer_comments: Comentarios máis recentes
       older_comments: Comentarios máis vellos
+    subscribe:
+      heading: Queres subscribirte á seguinte conversa sobre a entrada no diario?
+      button: Subscribirse á conversa
+    unsubscribe:
+      heading: Queres cancelar a subscrición á seguinte conversa sobre a entrada no
+        diario?
+      button: Cancelar a subscrición á conversa
   doorkeeper:
     errors:
       messages:
@@ -1541,9 +1570,9 @@ gl:
         resolve_with_user: Xa tentaches resolver o problema co usuario en cuestión
       categories:
         diary_entry:
-          spam_label: Esta entrada de diario é/contén spam
-          offensive_label: Esta entrada do diario é obscena/ofensiva
-          threat_label: Esta entrada de diario contén unha ameaza
+          spam_label: Esta entrada no diario é/contén spam
+          offensive_label: Esta entrada no diario é obscena/ofensiva
+          threat_label: Esta entrada no diario contén unha ameaza
           other_label: Outro
         diary_comment:
           spam_label: Este comentario da entrada é/contén spam
@@ -1588,11 +1617,10 @@ gl:
     intro_text: O OpenStreetMap é un mapa do mundo, creado por xente coma ti e de
       libre uso baixo unha licenza aberta.
     intro_2_create_account: Crea unha conta de usuario
-    hosting_partners_html: O aloxamento está fornecido por %{ucl}, %{fastly}, %{bytemark}
+    hosting_partners_2024_html: O aloxamento está fornecido por %{fastly}, %{corpmembers}
       e outros %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: membros corporativos da OSMF
     partners_partners: socios
     tou: Termos de uso
     osm_offline: A base de datos do OpenStreetMap atópase desconectada mentres realizamos
@@ -1614,16 +1642,19 @@ gl:
     more: Máis
   user_mailer:
     diary_comment_notification:
-      subject: '[OpenStreetMap] %{user} comentou nunha entrada de diario'
+      description: Entrada do diario do OpenStreetMap n.º %{id}
+      subject: '[OpenStreetMap] %{user} comentou nunha entrada do diario'
       hi: 'Ola %{to_user}:'
-      header: '%{from_user} comentou na entrada de diario no OpenStreetMap co asunto
+      header: '%{from_user} comentou na entrada do diario do OpenStreetMap co asunto
         "%{subject}":'
-      header_html: '%{from_user} comentou na entrada de diario no OpenStreetMap co
+      header_html: '%{from_user} comentou na entrada do diario do OpenStreetMap co
         asunto %{subject}:'
       footer: Tamén podes ler o comentario en %{readurl} e comentar en %{commenturl}
         ou enviar unha mensaxe ó autor en %{replyurl}
       footer_html: Tamén podes ler o comentario en %{readurl} e comentar en %{commenturl}
         ou enviar unha mensaxe ao autor en %{replyurl}
+      footer_unsubscribe: Podes cancelar a subscrición á conversa en %{unsubscribeurl}
+      footer_unsubscribe_html: Podes cancelar a subscrición á conversa en %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: 'Ola %{to_user}:'
@@ -1685,6 +1716,7 @@ gl:
       click_the_link: Se este es ti, preme na seguinte ligazón para restablecer o
         teu contrasinal.
     note_comment_notification:
+      description: Nota do OpenStreetMap n.º %{id}
       anonymous: Un usuario anónimo
       greeting: 'Ola:'
       commented:
@@ -1724,6 +1756,7 @@ gl:
       details: Pode atopar máis detalles da nota en %{url}.
       details_html: Podes atopar máis detalles da nota en %{url}.
     changeset_comment_notification:
+      description: Conxunto de modificacións do OpenStreetMap n.º %{id}
       hi: 'Ola, %{to_user}:'
       greeting: 'Ola:'
       commented:
@@ -1746,10 +1779,10 @@ gl:
         %{url}.
       details_html: Pódense atopar máis detalles sobre o conxunto de modificacións
         en %{url}.
-      unsubscribe: Para darse de baixa das actualizacións deste conxunto de modificacións,
-        olla %{url} e preme en "darse de baixa".
-      unsubscribe_html: Para darse de baixa das actualizacións deste conxunto de modificacións,
-        olla %{url} e preme en "darse de baixa".
+      unsubscribe: Podes cancelar a subscrición ás actualizacións deste conxunto de
+        modificacións en %{url}.
+      unsubscribe_html: Podes cancelar a subscrición ás actualizacións deste conxunto
+        de modificacións en %{url}.
   confirmations:
     confirm:
       heading: Comproba o teu correo!
@@ -1833,17 +1866,18 @@ gl:
         one: '%{count} mensaxe silenciada'
         other: Tes %{count} mensaxes silenciadas
     reply:
-      wrong_user: Accediches ó sistema coma "%{user}", pero a mensaxe que pediu responder
-        non lla enviou a ese usuario. Accede co usuario correcto para redactar a resposta.
+      wrong_user: Accediches ó sistema como "%{user}", pero a mensaxe que pediches
+        responder non se enviou a ese usuario. Accede co usuario correcto para redactar
+        a resposta.
     show:
       title: Ler a mensaxe
       reply_button: Responder
       unread_button: Marcar como non lida
       destroy_button: Eliminar
       back: Volver
-      wrong_user: Accedeches ó sistema coma "%{user}", pero a mensaxe que pregaches
-        ler non a enviaches a ese usuario ou el non a enviou a ti. Accede co usuario
-        correcto para ler a resposta.
+      wrong_user: Accediches ó sistema como "%{user}", pero a mensaxe que pediches
+        ler non a enviou ese usuario nin foi enviada a ese usuario. Accede co usuario
+        correcto para ler a mensaxe.
     sent_message_summary:
       destroy_button: Eliminar
     heading:
@@ -1868,9 +1902,9 @@ gl:
         rexistrares. Enviarémosche unha ligazón que poderás empregar para restablecer
         o teu contrasinal.
     create:
-      notice email on way: Por desgraza perdeuno, pero hai en camiño unha mensaxe
-        de correo electrónico ca que o poderá restabelecelo axiña.
-      notice email cannot find: Non se puido atopar o enderezo de correo electrónico.
+      send_paranoid_instructions: Se o teu enderezo de correo electrónico existe na
+        nosa base de datos, recibirás nuns minutos unha ligazón de recuperación do
+        contrasinal no teu enderezo de correo electrónico.
     edit:
       title: Restablecer o contrasinal
       heading: Restablecer o contrasinal de %{user}
@@ -1923,13 +1957,13 @@ gl:
       failure: Non foi posíbel actualizar o perfil.
   sessions:
     new:
-      title: Rexistrarse
-      heading: Rexistro
+      title: Acceder ao sistema
+      heading: Acceder ao sistema
       email or username: Enderezo de correo electrónico ou nome de usuario
       password: Contrasinal
       remember: Lembrádeme
       lost password link: Perdiches o teu contrasinal?
-      login_button: Iniciar a sesión
+      login_button: Acceder ao sistema
       register now: Rexístrate agora
       with external: 'Ou ben, emprega un servizo de terceiros para acceder:'
       no account: Non estás rexistrado?
@@ -1937,28 +1971,28 @@ gl:
       openid_logo_alt: Acceder ó sistema cun OpenID
       auth_providers:
         openid:
-          title: Iniciar a sesión co OpenID
-          alt: Acceder ó sistema cun URL OpenID
+          title: Acceder ó sistema co OpenID
+          alt: Acceder ó sistema cun URL do OpenID
         google:
-          title: Acceder ó sistema co Google
+          title: Acceder ó sistema con Google
           alt: Acceder ó sistema cun OpenID de Google
         facebook:
-          title: Iniciar a sesión co Facebook
-          alt: Iniciar a sesión cunha conta do Facebook
+          title: Acceder ó sistema co Facebook
+          alt: Acceder ó sistema cunha conta do Facebook
         microsoft:
-          title: Iniciar a sesión con Microsoft
-          alt: Iniciar a sesión cunha conta de Microsoft
+          title: Acceder ó sistema con Microsoft
+          alt: Acceder ó sistema cunha conta de Microsoft
         github:
-          title: Iniciar a sesión co GitHub
-          alt: Acceder cunha conta do GitHub
+          title: Acceder ó sistema co GitHub
+          alt: Acceder ó sistema cunha conta do GitHub
         wikipedia:
-          title: Iniciar a sesión ca Wikipedia
-          alt: Iniciar a sesión cunha conta da Wikipedia
+          title: Acceder ó sistema coa Wikipedia
+          alt: Acceder ó sistema cunha conta da Wikipedia
         wordpress:
-          title: Iniciar a sesión co Wordpress
+          title: Acceder ó sistema co Wordpress
           alt: Acceder ó sistema cun OpenID do Wordpress
         aol:
-          title: Iniciar a sesión co AOL
+          title: Acceder ó sistema co AOL
           alt: Acceder ó sistema cun OpenID do AOL
     destroy:
       title: Pechar a sesión
@@ -2582,8 +2616,8 @@ gl:
       identifiable: IDENTIFICÁBEL
       private: PRIVADO
       trackable: RASTREXÁBEL
-      by: por
-      in: en
+      details_with_tags_html: '%{time_ago} por %{user} en %{tags}'
+      details_without_tags_html: '%{time_ago} por %{user}'
     index:
       public_traces: Pistas GPS públicas
       my_gps_traces: A miñas pistas GPS
@@ -2900,9 +2934,11 @@ gl:
     index:
       title: Usuarios
       heading: Usuarios
-      showing:
-        one: Páxina %{page} (%{first_item} de %{items})
-        other: Páxina %{page} (%{first_item}-%{last_item} de %{items})
+      older: Usuarios máis vellos
+      newer: Usuarios máis novos
+      found_users:
+        one: Atopouse %{count} usuario
+        other: Atopáronse %{count} usuarios
       summary_html: '%{name} creado dende %{ip_address} o %{date}'
       summary_no_ip_html: '%{name} creado o %{date}'
       confirm: Confirmar os usuarios seleccionados
@@ -2927,8 +2963,8 @@ gl:
       option_1: Se é novo en OpenStreetMap, por favor cree unha nova conta utilizando
         o formulario de abaixo.
       option_2: Se xa tes unha conta, podes conectarte á túa conta empregando o teu
-        nome de usuario e contrasinal, e despois asociar a conta co teu Identificador
-        nas túas preferencias de usuario
+        nome de usuario e contrasinal, e despois asociar a conta co teu identificador
+        nas túas preferencias de usuario.
   user_role:
     filter:
       not_a_role: A cadea "%{role}" non é un rol correcto.
@@ -3043,7 +3079,6 @@ gl:
       revoke: Revogar!
       confirm: Queres continuar?
       reason: 'Motivo para o bloqueo:'
-      back: Ollar tódolos bloqueos
       revoker: 'Autor da revogación:'
       needs_view: O usuario ten que acceder ó sistema antes de que o bloqueo sexa
         revogado.
@@ -3058,9 +3093,6 @@ gl:
       reason: Motivo para o bloqueo
       status: Estado
       revoker_name: Revogado por
-      showing_page: Páxina %{page}
-      next: Seguinte »
-      previous: « Anterior
   user_mutes:
     index:
       title: Usuarios silenciados
@@ -3216,7 +3248,7 @@ gl:
       show:
         comment: Comentar
         subscribe: Subscribirse
-        unsubscribe: Rexeitar a subscrición
+        unsubscribe: Cancelar a subscrición
         hide_comment: agochar
         unhide_comment: amosar
     edit_help: Desplaza o mapa e achégao na localización que queiras editar; logo,
index cf3854f93e07c9621cf4257437e0f727004417ce..ffd78b12b47924c0c869885dec54ace483e28a44 100644 (file)
@@ -93,8 +93,6 @@ gsw:
       name: externer Editor
       description: externer Editor (JOSM odda Merkaartor)
   browse:
-    created: Aagleit
-    closed: Zue
     version: Version
     in_changeset: Änderige
     anonymous: anonym
@@ -104,19 +102,6 @@ gsw:
     view_history: Versionsgschicht
     view_details: Details aagucke
     location: 'Ort:'
-    changeset:
-      title: 'Änderigssatz: %{id}'
-      belongs_to: Autor
-      node: Gnode (%{count})
-      node_paginated: Gnode (%{x}-%{y} of %{count})
-      way: Wäg (%{count})
-      way_paginated: Wäg (%{x}-%{y} von %{count})
-      relation: Relatione (%{count})
-      relation_paginated: Relatione (%{x}-%{y} of %{count})
-      changesetxml: Changeset-XML
-      osmchangexml: osmChange XML
-      join_discussion: Meld dich aa, wennd mitdiskutiere willsch.
-      discussion: Diskussion
     node:
       title_html: 'Gnode: %{name}'
       history_title_html: 'Versionsgschicht vum Gnote: %{name}'
@@ -168,6 +153,22 @@ gsw:
       feed:
         title: Changeset %{id}
         title_comment: Changeset %{id} - %{comment}
+        created: Aagleit
+        closed: Zue
+        belongs_to: Autor
+    show:
+      title: 'Änderigssatz: %{id}'
+      discussion: Diskussion
+      join_discussion: Meld dich aa, wennd mitdiskutiere willsch.
+      changesetxml: Changeset-XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Gnode (%{count})
+      nodes_paginated: Gnode (%{x}-%{y} of %{count})
+      ways: Wäg (%{count})
+      ways_paginated: Wäg (%{x}-%{y} von %{count})
+      relations: Relatione (%{count})
+      relations_paginated: Relatione (%{x}-%{y} of %{count})
   dashboards:
     popup:
       your location: Dyy Standort
@@ -246,8 +247,6 @@ gsw:
       edit_map: Charte bearbeite
       public: EFFETLI
       private: PRIVAT
-      by: vu
-      in: in
     index:
       public_traces: Effetligi GPS-Track
       public_traces_from: Effetligi GPS-Track vu %{user}
index 5c3ce490b2befe87e8f5062b55a97a6690148a09..43db3184cffaef3b3f04480b1be436d50143cdfb 100644 (file)
@@ -351,7 +351,7 @@ he:
         agreed_with_pd: הצהרת גם שמבחינתך העריכות שלך יהיו בנחלת הכלל.
         link text: מה זה?
       save changes button: שמירת השינויים
-      delete_account: ×\9c×\9e×\97×\95ק ×\97ש×\91×\95×\9fâ\80¦
+      delete_account: ×\9e×\97×\99קת ×\97ש×\91×\95×\9f...
     go_public:
       heading: עריכה ציבורית
       currently_not_public: כעת, העריכות שלך אלמוניות ואנשים לא יכולים לשלוח לך הודעות
@@ -371,15 +371,10 @@ he:
     destroy:
       success: חשבון נמחק.
   browse:
-    created: נוצרה
-    closed: נסגרה
-    created_ago_html: נוצרה %{time_ago}
-    closed_ago_html: נסגרה %{time_ago}
-    created_ago_by_html: נוצרה %{time_ago} על־ידי %{user}
-    closed_ago_by_html: נסגרה %{time_ago} על־ידי %{user}
     deleted_ago_by_html: נמחקה %{time_ago} על־ידי %{user}
     edited_ago_by_html: נערכה %{time_ago} על־ידי %{user}
     version: גרסה
+    redacted_version: גרסה שהוסר ממנה מידע
     in_changeset: ערכת שינויים
     anonymous: אלמוני
     no_comment: (אין הערות)
@@ -396,24 +391,11 @@ he:
       other: '%{count} דרכים'
     download_xml: הורדת XML
     view_history: הצגת ההיסטוריה
+    view_unredacted_history: הצגת היסטוריה ללא הסרות
     view_details: הצגת פרטים
+    view_redacted_data: הצגת הנתונים שהוסרו
+    view_redaction_message: הצגת הודעת הסרה
     location: 'מיקום:'
-    changeset:
-      title: 'ערכת שינויים: %{id}'
-      belongs_to: יוצר
-      node: נקודות (%{count})
-      node_paginated: נקודות (%{x}–%{y} מתוך %{count})
-      way: קווים (%{count})
-      way_paginated: קווים (%{x}–%{y} מתוך %{count})
-      relation: יחסים (%{count})
-      relation_paginated: יחסים (%{x}–%{y} מתוך %{count})
-      hidden_comment_by_html: הערה מוסתרת מאת %{user} %{time_ago}
-      comment_by_html: הערה מאת %{user} %{time_ago}
-      changesetxml: XML של ערכת השינויים
-      osmchangexml: osmChange XML
-      join_discussion: נא להיכנס לחשבון כדי להצטרף לדיון
-      discussion: דיון
-      still_open: ערכת השינויים עדיין פתוחה – הדיון ייפתח אחרי שערכת השיניים תיסגר.
     node:
       title_html: 'נקודה: %{name}'
       history_title_html: 'היסטוריית הנקודה: %{name}'
@@ -536,6 +518,9 @@ he:
       feed:
         title: ערכת שינויים %{id}
         title_comment: ערכת שינויים %{id} – %{comment}
+        created: נוצרה
+        closed: נסגרה
+        belongs_to: יוצר
     subscribe:
       heading: לעשות מינוי לדיון בערכת השינויים הבאה?
       button: מינוי לדיון
@@ -550,6 +535,28 @@ he:
       heading: 'אין רשומה עם המזהה: %{id}'
       body: סליחה, אין ערכת שינויים עם המזהה %{id}. אולי האיות לא נכון ואולי לחצת
         על קישור שגוי.
+    show:
+      title: 'ערכת שינויים: %{id}'
+      created: 'נוצרה: %{when}'
+      closed: 'נסגרה: %{when}'
+      created_ago_html: נוצרה %{time_ago}
+      closed_ago_html: נסגרה %{time_ago}
+      created_ago_by_html: נוצרה %{time_ago} על־ידי %{user}
+      closed_ago_by_html: נסגרה %{time_ago} על־ידי %{user}
+      discussion: דיון
+      join_discussion: נא להיכנס לחשבון כדי להצטרף לדיון
+      still_open: ערכת השינויים עדיין פתוחה – הדיון ייפתח אחרי שערכת השיניים תיסגר.
+      comment_by_html: הערה מאת %{user} %{time_ago}
+      hidden_comment_by_html: הערה מוסתרת מאת %{user} %{time_ago}
+      changesetxml: XML של ערכת השינויים
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: נקודות (%{count})
+      nodes_paginated: נקודות (%{x}–%{y} מתוך %{count})
+      ways: קווים (%{count})
+      ways_paginated: קווים (%{x}–%{y} מתוך %{count})
+      relations: יחסים (%{count})
+      relations_paginated: יחסים (%{x}–%{y} מתוך %{count})
     timeout:
       sorry: קבלת רשימת ערכות השינויים שביקשת אורכת זמן רב מדי, עמך הסליחה.
   changeset_comments:
@@ -1640,11 +1647,10 @@ he:
     intro_text: OpenStreetMap היא מפה של העולם, שנוצרת על־ידי אנשים כמוך, וחופשית
       לשימוש תחת רישיון פתוח.
     intro_2_create_account: נא ליצור חשבון משתמש
-    hosting_partners_html: האירוח בתמיכת %{ucl}, %{fastly}, %{bytemark}, ו%{partners}
-      נוספים.
-    partners_ucl: UCL
+    hosting_partners_2024_html: האירוח נתמך על־ידי %{fastly}, %{corpmembers} ועוד
+      %{partners}
     partners_fastly: פאסטלי
-    partners_bytemark: בייטמארק הוסטינג
+    partners_corpmembers: חברים תאגידיים אחרים ב־OSMF
     partners_partners: שותפים
     tou: תנאי השימוש
     osm_offline: מסד הנתונים של אתר OpenStreetMap אינו מקוון כעת בשל עבודות תחזוקה
@@ -1879,7 +1885,7 @@ he:
       destroy_button: מחיקה
       back: חזרה
       wrong_user: נכנסת בשם „%{user}”, אבל ההודעה שביקשת לקרוא לא נשלחה לאותו המשתמש.
-        × ×\90 ×\9c×\94×\99×\9bנס ×\91×\97ש×\91×\95×\9f ×\94× ×\9b×\95×\9f ×\9b×\93×\99 ×\9cלקרוא אותה.
+        × ×\90 ×\9c×\94×\99×\9bנס ×\9c×\97ש×\91×\95×\9f ×\94× ×\9b×\95×\9f ×\9b×\93×\99 לקרוא אותה.
     sent_message_summary:
       destroy_button: מחיקה
     heading:
@@ -1903,9 +1909,8 @@ he:
       help_text: נא להזין את כתובת הדוא״ל שהשתמשת בה כדי להירשם. אנו נשלח אליה קישור
         שאפשר להשתמש בו כדי לאפס את סיסמתך.
     create:
-      notice email on way: אנו מצטערים לשמוע שאיבדת אותה :-( אבל נשלח לדואר האלקטרוני
-        שלך מכתב שבאמצעותו אפשר לאפס אותה.
-      notice email cannot find: סליחה, הכתובת הזאת לא נמצאה.
+      send_paranoid_instructions: אם כתובת הדוא״ל שלך קיימת במסד הנתונים שלנו, יישלח
+        אליך קישור לשחזור סיסמה לכתובת הדוא״ל הזאת בעוד כמה דקות.
     edit:
       title: איפוס סיסמה
       heading: איפוס הסיסמה עבור %{user}
@@ -1981,8 +1986,8 @@ he:
           title: כניסה עם מיקרוסופט
           alt: כניסה עם חשבון מיקרוסופט
         github:
-          title: ×\9b× ×\99ס×\94 ×\91×\90×\9eצע×\95ת GitHub
-          alt: כניסה עם חשבון GitHub
+          title: ×\9b× ×\99ס×\94 ×¢×\9d ×\92×\99×\98×\94×\90×\91
+          alt: כניסה עם חשבון גיטהאב
         wikipedia:
           title: כניסה עם ויקיפדיה
           alt: כניסה עם חשבון ויקיפדיה
@@ -2589,8 +2594,8 @@ he:
       identifiable: בר זיהוי
       private: פרטי
       trackable: בר מעקב
-      by: מאת
-      in: ב
+      details_with_tags_html: '%{time_ago} מאת %{user} ב־%{tags}'
+      details_without_tags_html: '%{time_ago} מאת %{user}'
     index:
       public_traces: מסלולי GPS ציבוריים
       my_gps_traces: נתיבי ה־GPS שלי
@@ -2784,7 +2789,7 @@ he:
       display name description: שם המשתמש שלך, שמוצג בפומבי. אפשר לשנות את זה בהעדפות
         שלך.
       external auth: 'אימות עם צד שלישי:'
-      use external auth: 'לחלופין, אפשר להשתמש בגורמי צד שלישי כדי להיכנס:'
+      use external auth: לחלופין, אפשר להשתמש בגורמי צד שלישי כדי להיכנס
       auth no password: עם אימות צד שלישי אין צורך בסיסמה, אבל כלים נוספים או שרת
         יכולים להזדקק לכזה.
       continue: הרשמה
@@ -2895,9 +2900,13 @@ he:
     index:
       title: משתמשים
       heading: משתמשים
-      showing:
-        one: דף %{page} (%{first_item} מתוך %{items})
-        other: דף %{page} (%{first_item}–%{last_item} מתוך %{items})
+      older: משתמשים ישנים יותר
+      newer: משתמשים חדשים יותר
+      found_users:
+        one: נמצא משתמש אחד
+        two: נמצאו שני משתמשים
+        many: נמצאו %{count} משתמשים
+        other: נמצאו %{count} משתמשים
       summary_html: '%{name} נוצר מכתובת %{ip_address} ב־%{date}'
       summary_no_ip_html: '%{name} נוצר ב־%{date}'
       confirm: אישור משתמשים נבחרים
@@ -2956,13 +2965,13 @@ he:
       period: למשך כמה זמן מעכשיו החשבון ייחסם מביצוע פעולות API.
       back: הצגת כל החסימות
     edit:
-      title: ×\97ס×\99×\9eת ×¢×¨×\99×\9bה על %{name}
-      heading_html: ×\97ס×\99×\9eת ×¢×¨×\99×\9bה על %{name}
+      title: ×¢×¨×\99×\9bת ×\94×\97ס×\99×\9eה על %{name}
+      heading_html: ×¢×¨×\99×\9bת ×\94×\97ס×\99×\9eה על %{name}
       period: למשך כמה זמן מעכשיו החשבון ייחסם מביצוע פעולות API.
       show: הצגת החסימה הזאת
       back: הצגת כל החסימות
     filter:
-      block_expired: ×\99×\99ת×\9b×\9f ×©×\94×\97ס×\99×\9e×\94 ×\9b×\91ר ×¤×§×¢×\94 ×\95×\90×\99Ö¾×\90פשר ×\9cער×\95×\9a ×\90×\95ת×\94.
+      block_expired: החסימה כבר פקעה ואי־אפשר לערוך אותה.
       block_period: תקופת החסימה צריכה להיות אחד הערכים שאפשר לבחור ברשימה הנפתחת.
     create:
       flash: נוצרה חסימה על חשבון %{name}
@@ -2974,7 +2983,7 @@ he:
       heading: רשימת חסימות משתמש
       empty: עוד לא נעשו חסימות.
     revoke:
-      title: ×\91×\95×\98×\9c×\94 החסימה על %{block_on}
+      title: ×\91×\99×\98×\95×\9c החסימה על %{block_on}
       heading_html: ביטול החסימה של %{block_on} על־ידי %{block_by}
       time_future_html: החסימה תסתיים ב־%{time}.
       past_html: החסימה הזאת הסתיימה ב־%{time} ואי־אפשר לבטל אותה.
@@ -3035,15 +3044,14 @@ he:
     show:
       title: החשבון של %{block_on} נחסם על־ידי %{block_by}
       heading_html: החשבון של %{block_on} נחסם על־ידי %{block_by}
-      created: :תאריך היצירה
-      duration: :משך זמן
+      created: 'תאריך היצירה:'
+      duration: 'משך זמן:'
       status: 'מצב:'
       show: הצגה
       edit: עריכה
       revoke: ביטול!
       confirm: באמת?
       reason: 'סיבה לחסימה:'
-      back: צפייה בכל החסימות
       revoker: 'מבטל:'
       needs_view: המשתמש צריך להיכנס לחשבון לפני שהחסימה הזאת יכולה להתבטל.
     block:
@@ -3057,9 +3065,8 @@ he:
       reason: סיבה לחסימה
       status: מצב
       revoker_name: בוטלה על־ידי
-      showing_page: הדף %{page}
-      next: הבא »
-      previous: « הקודם
+      older: חסימות ישנות יותר
+      newer: חסימות חדשות יותר
   user_mutes:
     index:
       title: משתמשים מושתקים
@@ -3159,8 +3166,8 @@ he:
     embed:
       report_problem: דיווח על בעיה
     key:
-      title: מפת מפתח
-      tooltip: מפת מפתח
+      title: מפתח מפה
+      tooltip: מפתח מפה
       tooltip_disabled: מפתח מפה אינו זמין לשכבה הזאת
     map:
       zoom:
@@ -3179,11 +3186,11 @@ he:
           many: המרחק שלך מהנקודה הזאת הוא עד %{count} רגל
           other: המרחק שלך מהנקודה הזאת הוא עד %{count} רגל
       base:
-        standard: תקני
+        standard: תקנית
         cycle_map: מפת אופניים
         transport_map: מפת תחבורה
         tracestracktop_topo: טופוגרפיה של Tracestrack
-        hot: הומניטרי
+        hot: הומניטרית
       layers:
         header: שכבות במפה
         notes: הערות במפה
@@ -3205,11 +3212,11 @@ he:
       edit_tooltip: עריכת המפה
       edit_disabled_tooltip: להתקרב כדי לערוך את המפה
       createnote_tooltip: הוספת הערה למפה
-      createnote_disabled_tooltip: × ×\90 ×\9c×\94תקר×\91 כדי להוסיף הערה למפה
-      map_notes_zoom_in_tooltip: ×\99ש ×\9c×\94תקר×\91 כדי לראות הערות על המפה
+      createnote_disabled_tooltip: ×\94תקר×\91×\95ת כדי להוסיף הערה למפה
+      map_notes_zoom_in_tooltip: ×\94תקר×\91×\95ת כדי לראות הערות על המפה
       map_data_zoom_in_tooltip: יש להתקרב כדי לראות נתוני מפה
       queryfeature_tooltip: שאילתת ישויות
-      queryfeature_disabled_tooltip: ×\99ש ×\9c×\94תקר×\91 כדי להריץ שאילתת ישויות
+      queryfeature_disabled_tooltip: ×\94תקר×\91×\95ת כדי להריץ שאילתת ישויות
       embed_html_disabled: הטבעת HTML אינה זמינה בשכבת המפה הזאת
     changesets:
       show:
index baf8275ce44ad7897a6d47f801d7307251814078..afed0e0dd6e0f4bb838ee1bff10b91ba0fc581df 100644 (file)
@@ -280,8 +280,6 @@ hi:
         link text: यह क्या है?
       save changes button: बदलाव सहेजें
   browse:
-    created: बनाया गया
-    closed: बंद किया गया
     version: संस्करण
     in_changeset: Changeset
     anonymous: अनामक
@@ -297,21 +295,6 @@ hi:
     view_history: इतिहास देखें
     view_details: जानकारी देखें
     location: 'स्थान:'
-    changeset:
-      title: 'Changeset: %{id}'
-      belongs_to: लेखक
-      node: बिंदु (%{count})
-      node_paginated: नोड (%{count} का %{x}-%{y})
-      way: रेखाएं (%{count})
-      way_paginated: रास्तें (%{count} का %{x}-%{y})
-      relation: सम्बन्ध (%{count})
-      relation_paginated: सम्बन्ध (%{count} के %{x}-%{y})
-      changesetxml: Changeset XML
-      osmchangexml: osmChange XML
-      join_discussion: चर्चा में भाग लेने के लिए लॉग इन करें
-      discussion: चर्चा
-      still_open: चेंजसेट अभी भी खुला - चेंजसेट के एक बार बंद होने के पश्चात चर्चा
-        होगी।
     node:
       title_html: 'बिंदु: %{name}'
       history_title_html: 'नोड इतिहास: %{name}'
@@ -418,6 +401,24 @@ hi:
       feed:
         title: 'Changeset: %{id}'
         title_comment: Changeset %{id} - %{comment}
+        created: बनाया गया
+        closed: बंद किया गया
+        belongs_to: लेखक
+    show:
+      title: 'Changeset: %{id}'
+      discussion: चर्चा
+      join_discussion: चर्चा में भाग लेने के लिए लॉग इन करें
+      still_open: चेंजसेट अभी भी खुला - चेंजसेट के एक बार बंद होने के पश्चात चर्चा
+        होगी।
+      changesetxml: Changeset XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: बिंदु (%{count})
+      nodes_paginated: नोड (%{count} का %{x}-%{y})
+      ways: रेखाएं (%{count})
+      ways_paginated: रास्तें (%{count} का %{x}-%{y})
+      relations: सम्बन्ध (%{count})
+      relations_paginated: सम्बन्ध (%{count} के %{x}-%{y})
     timeout:
       sorry: माफ़ कीजिए, जिन चेंजसेट की आपने अनुरोध की थी उन्हें लाने में कुछ ज़्यादा
         ही वक्त लग गया।
index 561b5464172419164878bf7272511b9b107de9d6..d04efe349bd3a33a9eb36c147b8b12683c9021ac 100644 (file)
@@ -266,8 +266,6 @@ hr:
         email za poruku potvrde nove email adrese.
       success: Korisničke informacije su uspješno ažurirane.
   browse:
-    created: Stvoreno
-    closed: Zatvoreno
     version: Inačica
     in_changeset: Set promjena
     anonymous: anonimno
@@ -285,19 +283,6 @@ hr:
     view_history: Prikaži povijest
     view_details: Prikaži detalje
     location: 'Lokacija:'
-    changeset:
-      title: 'Set promjena: %{id}'
-      belongs_to: Autor
-      node: Točaka (%{count})
-      node_paginated: Točke (%{x}-%{y} od %{count})
-      way: Putovi (%{count})
-      way_paginated: Putovi(%{x}-%{y} od %{count})
-      relation: Relacije (%{count})
-      relation_paginated: Relacije(%{x}-%{y} od %{count})
-      changesetxml: XLM Set promjena
-      osmchangexml: osmChange XML
-      join_discussion: Prijavi se za uključivanje u raspravu
-      discussion: Razgovor
     node:
       title_html: 'Točka: %{name}'
       history_title_html: 'Povijest točke: %{name}'
@@ -402,6 +387,22 @@ hr:
       feed:
         title: Set promjena %{id}
         title_comment: Set promjena %{id} - %{comment}
+        created: Stvoreno
+        closed: Zatvoreno
+        belongs_to: Autor
+    show:
+      title: 'Set promjena: %{id}'
+      discussion: Razgovor
+      join_discussion: Prijavi se za uključivanje u raspravu
+      changesetxml: XLM Set promjena
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Točaka (%{count})
+      nodes_paginated: Točke (%{x}-%{y} od %{count})
+      ways: Putovi (%{count})
+      ways_paginated: Putovi(%{x}-%{y} od %{count})
+      relations: Relacije (%{count})
+      relations_paginated: Relacije(%{x}-%{y} od %{count})
     timeout:
       sorry: Nažalost, preuzimanje popisa setova promjena predugo traje.
   changeset_comments:
@@ -1043,8 +1044,6 @@ hr:
     intro_text: OpenStreetMap je karta svijeta, stvorena od strane ljudi (volontera/doprinositelja)
       i može se slobodno koristiti pod licencijom otvorenog koda (ODbL).
     intro_2_create_account: Stvori korisnički račun
-    hosting_partners_html: Hosting podržavaju %{ucl}, %{fastly}, %{bytemark} i drugi
-      %{partners}.
     osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
       važni radovi na održavanju.
     osm_read_only: Zbog radova na održavanju baze podataka OpenStreetMapa, istu trenutačno
@@ -1203,10 +1202,6 @@ hr:
       new password button: Reset lozinke
       help_text: Unesite email adresu koju ste koristili za otvaranje računa i poslati
         ćemo vam poveznicu kojom možete resetirati zaporku.
-    create:
-      notice email on way: Žao mi je što ste je izgubili :-( ali email je na putu
-        tako da je možete resetirati uskoro.
-      notice email cannot find: Ne mogu pronaći email adresu.
     edit:
       title: Reset lozinke
       heading: Reset lozinke za %{user}
@@ -1284,6 +1279,7 @@ hr:
         za provjeru točnosti i ažurnosti OSM podataka.
       community_driven_title: Vođen zajednicom
       open_data_title: Otvoreni podaci
+      open_data_open_data: otvoreni podaci
       legal_title: Pravno
       partners_title: Partneri
     copyright:
@@ -1301,9 +1297,25 @@ hr:
         mapping_link: počnite kartirati
       legal_babble:
         title_html: Autorska prava i Dozvola
+        introduction_1_html: OpenStreetMap%{registered_trademark_link} su %{open_data},
+          koje je licencirao %{osm_foundation_link} (OSMF) pod %{odc_odbl_link} (ODbL).
+        introduction_2_html: Slobodni ste kopirati, distribuirati, prenositi i adaptirati
+          naše podatke, dokle god navodite OpenStreetMap i njegove doprinositelje
+          kao izvor. Ako izmijenite ili nadogradite naše podatke, možete distribuirati
+          rezultate samo pod istom licencijom. Puni %{legal_code_link} objašnjava
+          vaša prava i obveze.
+        introduction_3_html: Naša dokumentacija je licencirana pod licencijom %{creative_commons_link}
+          (CC BY-SA 2.0).
         credit_title_html: Kako iskazati zasluge OpenStreetMap-a
         credit_1_html: 'Tamo gdje koristite OpenStreetMap podatke, morate učiniti
           sljedeće dvije stvari:'
+        credit_2_2: Objasnite da su podaci dostupni pod licencijom "Open Database
+          License".
+        credit_4_1_html: |-
+          Kako biste razjasnili da su podaci dostupni pod "Open
+          Database License", možete postaviti poveznicu na
+          %{this_copyright_page_link}. Alternativno, i kao uvjet ako distribuirate OSM u formi podataka, možete navesti i postaviti poveznicu izravno na tekst licencu(e). Ako oblik medija ne omogućuje korištenje poveznica (npr. tiskana djela), predlažemo da uputite Vaše čitatelje na openstreetmap.org (recimo navođenjem točne adrese ove web stranice umjesto samo imena projekta 'OpenStreetMap') i na opendatacommons.org.
+          U ovom primjeru atribucija se pojavljuje u kutu karte.
         attribution_example:
           alt: Primjer kako atribuirati OpenStreetMap na web stranici
           title: Primjer atribucije
@@ -1517,8 +1529,6 @@ hr:
       identifiable: IDENTIFICIRAJUĆI
       private: PRIVATNI
       trackable: TRACKABLE
-      by: od
-      in: u
     index:
       public_traces: Javni GNSS tragovi
       public_traces_from: Javni GNSS tragovi korisnika %{user}
@@ -1687,9 +1697,6 @@ hr:
     index:
       title: Korisnici
       heading: Korisnici
-      showing:
-        one: Stranica %{page} (%{first_item} od %{items})
-        other: Stranica %{page} (%{first_item}-%{last_item} od %{items})
       summary_html: '%{name} napravljeno sa %{ip_address} dana %{date}'
       summary_no_ip_html: '%{name} napravljeno %{date}'
       confirm: Potvrdi odabrane korisnike
@@ -1799,7 +1806,6 @@ hr:
       revoke: Opozovi!
       confirm: Jeste li sigurni?
       reason: 'Razlog za blokadu:'
-      back: Prikaži sve blokade
       revoker: 'Opozivatelj:'
       needs_view: Korisnik se mora prijaviti prije nego se blokada očisti.
     block:
@@ -1813,9 +1819,6 @@ hr:
       reason: Razlog za blokadu
       status: Status
       revoker_name: Opozvao
-      showing_page: Stranica %{page}
-      next: Sljedeća »
-      previous: « Prethodna
   notes:
     index:
       title: Bilješke stvorio ili komentirao %{user}
index 20dd33bd1781dd10f4416e828eb21b5d9265c40d..295de5cc96c3676578f1c7a1e92d72507a0b9b22 100644 (file)
@@ -45,6 +45,11 @@ hsb:
       messages:
         invalid_email_address: njezda so płaćiwa mejlkowa adresa być
         email_address_not_routable: njeje routojomna
+        display_name_is_user_n: njemóže wužiwar user_n być, chibazo n je twój wužiwarski
+          ID
+      models:
+        user_mute:
+          is_already_muted: je so hižo zněmił
     models:
       acl: Lisćina za přistupnu kontrolu
       changeset: Sadźba změnow
@@ -273,6 +278,8 @@ hsb:
           a bydlišćo so wotstronja.
         delete_display_name: Waše pokazowanske mjeno so wotstroni a da so z druhimi
           kontami znowa wužiwać.
+        confirm_delete: Sy sej wěsty?
+        cancel: Přetorhnyć
   accounts:
     edit:
       title: Konto wobdźěłać
@@ -297,6 +304,7 @@ hsb:
         agreed_with_pd: Sy tež deklarował, zo twoje změny su zjawne.
         link text: što to je?
       save changes button: Změny składować
+      delete_account: Konto zhašeć…
     go_public:
       heading: Zjawne wobdźěłowanje
       make_edits_public_button: Wšě moje změny zjawne činić
@@ -304,9 +312,9 @@ hsb:
       success_confirm_needed: Wužiwarske informacije wuspěšnje zaktualizowane. Dóstanješ
         e-mejl z namołwu, swoju nowu e-mejlowu adresu wobkrućić.
       success: Wužiwarske informacije wuspěšnje zaktualizowane.
+    destroy:
+      success: Konto je so zhašało.
   browse:
-    created: Wutworjeny
-    closed: 'Začinjeny:'
     version: Wersija
     in_changeset: Sadźba změnow
     anonymous: anonymny
@@ -326,21 +334,6 @@ hsb:
     view_history: Historiju pokazać
     view_details: Podrobnosće pokazać
     location: 'Městno:'
-    changeset:
-      title: 'Sadźba změnow: %{id}'
-      belongs_to: Awtor
-      node: Suki (%{count})
-      node_paginated: Suki (%{x}-%{y} z %{count})
-      way: Puće (%{count})
-      way_paginated: Puće (%{x}-%{y} z %{count})
-      relation: Relacije (%{count})
-      relation_paginated: Relacije (%{x}-%{y} z %{count})
-      changesetxml: Sadźba změnow XML
-      osmchangexml: osmChange XML
-      join_discussion: Přizjew so, zo by móhł(a) sobu diskutować
-      discussion: Diskusija
-      still_open: Sadźba změnow je hišće wočinjena. Diskusija so wočinja, ručež je
-        sadźba změnow začinjena.
     node:
       title_html: 'Suk: %{name}'
       history_title_html: 'Sukata historija: %{name}'
@@ -417,6 +410,7 @@ hsb:
       wikimedia_commons_link: Element %{page} na Wikimedija Commons
       telephone_link: '%{phone_number} zawołać'
       colour_preview: Přehlad barba %{colour_value}
+      email_link: E-mejl %{email}
     query:
       title: Funkcije naprašować
       introduction: Klikń na kartu, zo by susodne objekty namakał(a).
@@ -452,6 +446,36 @@ hsb:
       feed:
         title: Sadźba změnow %{id}
         title_comment: Sadźba změnow %{id} - %{comment}
+        created: Wutworjeny
+        closed: 'Začinjeny:'
+        belongs_to: Awtor
+    subscribe:
+      button: Diskusiju abonować
+    unsubscribe:
+      button: Diskusiju wotskazać
+    show:
+      title: 'Sadźba změnow: %{id}'
+      created: 'Wutworjeny: %{when}'
+      closed: 'Začinjeny: %{when}'
+      created_ago_html: Wutworjene %{time_ago}
+      closed_ago_html: Začinjeny %{time_ago}
+      created_ago_by_html: Wutworjeny %{time_ago} wot wužiwarja %{user}
+      closed_ago_by_html: Začinjeny %{time_ago} wot wužiwarja %{user}
+      discussion: Diskusija
+      join_discussion: Přizjew so, zo by móhł(a) sobu diskutować
+      still_open: Sadźba změnow je hišće wočinjena. Diskusija so wočinja, ručež je
+        sadźba změnow začinjena.
+      comment_by_html: Komentar wot %{user} %{time_ago}
+      hidden_comment_by_html: Schowany komentar wot %{user} %{time_ago}
+      changesetxml: Sadźba změnow XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Suki (%{count})
+      nodes_paginated: Suki (%{x}-%{y} z %{count})
+      ways: Puće (%{count})
+      ways_paginated: Puće (%{x}-%{y} z %{count})
+      relations: Relacije (%{count})
+      relations_paginated: Relacije (%{x}-%{y} z %{count})
     timeout:
       sorry: Bohužel je předołho trało, požadanu lisćinu změnow wotwołać.
   changeset_comments:
@@ -475,6 +499,7 @@ hsb:
       nearby mapper: Kartěrowar w bliskosći
       friend: Přećel
     show:
+      title: Moja přehladna strona
       no_home_location_html: '%{edit_profile_link} a nastaj swoje ródne město, zo
         by wužiwarjow w bliskosći widźał.'
       edit_your_profile: Wobdźěłaj swój profil
@@ -511,6 +536,7 @@ hsb:
     show:
       title: Dźenik %{user} | %{title}
       user_title: dźenik wužiwarja %{user}
+      discussion: Diskusija
       leave_a_comment: Spisaj komentar
       login_to_leave_a_comment_html: '%{login_link}, zo by komentar spisał(a)'
       login: Přizjew so
@@ -525,11 +551,11 @@ hsb:
       comment_link: Komentar k tutomu zapiskej
       reply_link: Awtorej powěsć pósłać
       comment_count:
-        few: '%{count} komentary'
-        one: Jedyn komentar
+        one: '%{count} komentar'
         two: '%{count} komentaraj'
-        zero: Žane komentary
+        few: '%{count} komentary'
         other: '%{count} komentarow'
+      no_comments: Žane komentary
       edit_link: Tutón zapisk wobdźěłać
       hide_link: Tutón zapisk schować
       unhide_link: Tutón zapisk zaso pokazać
@@ -557,17 +583,38 @@ hsb:
         title: OpenStreetMap dźenikowe zapiski
         description: Najnowše dźenikowe zapiski wužiwarjow OpenStreetMap
     comments:
+      title: Dźenikowe komentary přidate wot wužiwarja %{user}
+      heading: Dźenikowe komentary wot wužiwarja %{user}
+      subheading_html: Dźenikowe komentary přidate wot wužiwarja %{user}
       no_comments: Žane dźenikowe komentary
       post: Zapisk
       when: Hdy
       comment: Komentar
       newer_comments: Nowše komentary
       older_comments: Starše komentary
+    subscribe:
+      button: Diskusiju abonować
+    unsubscribe:
+      button: Diskusiju wotskazać
   doorkeeper:
     flash:
       applications:
         create:
           notice: Nałoženje je zregistrowane.
+    scopes:
+      email: Wašu e-mejlowu adresu pokazać
+      openid: Waše konto awtentifikować
+      phone: Waše telefonowe čisło pokazać
+      profile: Waše profilowe informacije pokazać
+  errors:
+    contact:
+      contact: kontakt
+    forbidden:
+      title: Zakazany
+    internal_server_error:
+      title: Nałoženski zmylk
+    not_found:
+      title: Dataja njeje so namakała
   friendships:
     make_friend:
       heading: '%{user} jako přećela přidać?'
@@ -583,6 +630,10 @@ hsb:
       success: '%{name} je so jako přećel wotstronił.'
       not_a_friend: '%{name} twój přećel njeje.'
   geocoder:
+    search:
+      title:
+        results_from_html: Wuslědki z %{results_link}
+        latlon: Interny
     search_osm_nominatim:
       prefix:
         aerialway:
@@ -599,8 +650,8 @@ hsb:
         aeroway:
           aerodrome: Lětanišćo
           airstrip: Startowa čara
-          apron: Lětanske předpolo
-          gate: Wrota
+          apron: Předpolo lětanišća
+          gate: Lětanske nastupišćo
           hangar: Hangar
           helipad: Helikoptrowe přizemišćo
           holding_position: Zastanišćo
@@ -609,7 +660,7 @@ hsb:
           runway: Startowa a přizemjenska čara
           taxilane: Taksijowa jězdnja
           taxiway: Lětadłowa jězdnja
-          terminal: Terminal
+          terminal: Terminal lětanišća
           windsock: Wětrowy měšk
         amenity:
           animal_boarding: Zwěrjaca pensija
@@ -669,6 +720,7 @@ hsb:
           loading_dock: Nakładna rampa
           love_hotel: Lubosćinski hotel
           marketplace: torhošćo
+          mobile_money_agent: Mobilny pjenjezowy agent
           monastery: klóšter
           money_transfer: Pjenježne přepokazanje
           motorcycle_parking: parkowanišćo za motorske
@@ -908,8 +960,8 @@ hsb:
           brownfield: lado
           cemetery: pohrjebnišćo
           commercial: přemysłownišćo
-          conservation: přirodoškitne pasmo
-          construction: twarnišćo
+          conservation: Přirodoškitne pasmo
+          construction: Twarnišćo
           farmland: rola
           farmyard: burski statok
           forest: lěs
@@ -930,7 +982,7 @@ hsb:
           reservoir: zběranski basenk
           reservoir_watershed: wodowe přitočnišćo
           residential: sydlišćo
-          retail: wobchody
+          retail: Nakupowanišćo
           village_green: nawjes
           vineyard: winica
           "yes": wužiwanje zemje
@@ -950,7 +1002,7 @@ hsb:
           fitness_station: fitnesowa stacija
           garden: zahroda
           golf_course: golfownišćo
-          horse_riding: jěchanišćo
+          horse_riding: Jěchanišćo
           ice_rink: smykanišćo
           marina: sportowy přistaw
           miniature_golf: minigolf
@@ -1191,7 +1243,7 @@ hsb:
           deli: delikatesowy wobchod
           department_store: kupnica
           discount: wobchod za tunje artikle
-          doityourself: wobchod za twaršćizny
+          doityourself: Wobchod za twaršćizny
           dry_cleaning: čisćernja
           e-cigarette: Wobcho za E-cigarety
           electronics: wobchod za elektroniku
@@ -1216,7 +1268,7 @@ hsb:
           health_food: Wobchod za přirodnu jědź
           hearing_aids: Słuchanske nastroje
           herbalist: Zelowy wobchod
-          hifi: Hi-fi
+          hifi: Wobchod Hi-Fi
           houseware: wobchod za domjace twory
           ice_cream: Lodarnja
           interior_decoration: nutřkowne wuhotowanje
@@ -1273,7 +1325,7 @@ hsb:
           artwork: wuměłska twórba
           attraction: atrakcija
           bed_and_breakfast: přenocowanje ze snědanju
-          cabin: chěžka
+          cabin: Chěžka
           camp_pitch: Campingowanišćo
           camp_site: stanowanišćo
           caravan_site: campingowanišćo za caravany
@@ -1348,8 +1400,10 @@ hsb:
       last_updated: Poslednja aktualizacija
       link_to_reports: Rozprawy sej wobhladać
       reports_count:
-        one: Jedna rozprawa
-        other: '%{count} rozprawje'
+        one: '%{count} rozprawa'
+        two: '%{count} rozprawje'
+        few: '%{count} rozprawy'
+        other: '%{count} rozprawow'
       reported_item: Zjewjeny objekt
       states:
         ignored: Ignorowany
@@ -1358,9 +1412,11 @@ hsb:
     show:
       title: '%{status} Problem čo. %{issue_id}'
       reports:
-        zero: Žane rozprawy
-        one: Jedna rozprawa
-        other: '%{count} rozprawje'
+        one: '%{count} rozprawa'
+        two: '%{count} rozprawje'
+        few: '%{count} rozprawy'
+        other: '%{count} rozprawow'
+      no_reports: Žane rozprawy
       report_created_at_html: Prěni raz rozprawjene dnja %{datetime}
       last_resolved_at_html: Posledni raz rozrisany dnja %{datetime}
       last_updated_at_html: Posledni raz aktualizowany dnja %{datetime} wot %{displayname}
@@ -1451,10 +1507,6 @@ hsb:
     intro_text: OpenStreetMap je karta swěta, wutworjena wot ludźi kaž tebje a hodźi
       so swobodnje pod wotewrjenej licencu wužiwać.
     intro_2_create_account: Załož wužiwarske konto
-    hosting_partners_html: Hosting podpěruje je so wot %{ucl}, %{bytemark} a druhich
-      %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnerow
     tou: Wužiwanske wuměnjenja
     osm_offline: Datowa banka OpenStreetMap je tuchwilu offline, dokelž so wažne hladanske
@@ -1465,6 +1517,7 @@ hsb:
     help: Pomoc
     about: Wo projekće
     copyright: Awtorske prawo
+    communities: Zhromadnosće
     community: Zhromadźenstwo
     community_blogs: Dźeniki zhromadźenstwa
     community_blogs_title: Dźeniki čłonow zhromadźenstwa OpenStreetMap
@@ -1598,10 +1651,8 @@ hsb:
         partial_changeset_without_comment: bjez komentara
       details: Dalše podrobnosće wo sadźbje změnow namakaš na %{url}.
       details_html: Dalše podrobnosće wo sadźbje změnow namakaš na %{url}.
-      unsubscribe: Zo by aktualizacije wo tutej sadźbje změnow wotskazał(a), wopytaj
-        %{url} a klikń na „wotzjewić“
-      unsubscribe_html: Zo by aktualizacije wo tutej sadźbje změnow wotskazał, wopytaj
-        %{url} a klikń na „wotskazać“
+      unsubscribe: Móžeće aktualizacije na tutej sadźbje změnow na %{url}wotskazać.
+      unsubscribe_html: Móžeće aktualizacije na tutej sadźbje změnow na %{url}wotskazać.
   confirmations:
     confirm:
       heading: Přepruwuj swoju e-mejl!
@@ -1652,6 +1703,7 @@ hsb:
       to: Komu
       subject: Tema
       date: Datum
+      actions: Akcije
     message_summary:
       unread_button: Jako njepřečitanu markěrować
       read_button: Jako přečitanu markěrować
@@ -1671,6 +1723,7 @@ hsb:
       body: Bohužel njeje powěsć z tutej ID.
     outbox:
       title: Pósłane
+      actions: Akcije
       messages:
         few: Sy %{count} powěsće pósłał(a)
         one: Sy %{count} powěsć pósłał(a)
@@ -1679,6 +1732,13 @@ hsb:
       no_sent_messages_html: Hišće njejsy žane powěsće pósłał(a). Chceš z %{people_mapping_nearby_link}
         styki nawjazać?
       people_mapping_nearby: ludźimi, kotřiž w bliskosći kartěruja
+    muted:
+      title: Zněmjene powěsće
+      messages:
+        one: '%{count} zněmjena powěsć'
+        two: Maš %{count} zněmjenej powěsći
+        few: Maš %{count} zněmjene powěsće
+        other: Maš %{count} zněmjenych powěsćow
     reply:
       wrong_user: Sy jako `%{user}' přizjewjeny, ale powěsć, na kotruž chceš wotmołwić,
         bu na druheho wužiwarja pósłana. Prošu přizjew so z prawym kontom, zo by wotmołwił(a).
@@ -1695,6 +1755,7 @@ hsb:
     heading:
       my_inbox: Moja póšta
       my_outbox: Mój póstowy wuchad
+      muted_messages: Zněmjene powěsće
     mark:
       as_read: Powěsć jako přečitanu markěrowana
       as_unread: Powěsć jako njepřečitanu markěrowana
@@ -1704,14 +1765,10 @@ hsb:
     new:
       title: Hesło zabyte
       heading: Sy hesło zabył?
-      email address: 'E-mejlowa adresa:'
+      email address: E-mejlowa adresa
       new password button: Hesło wróćo stajić
       help_text: Zapódaj mejlowu adresu, kotruž sy za registrowanje wužił, pósćelemy
         wotkaz na nju, kotryž móžeš za wróćostajenje hesła wužić.
-    create:
-      notice email on way: Sy jo zabył :-(, ale e-mejl je po puću, zo by móhł jo borze
-        wróćo stajić.
-      notice email cannot find: Wodaj, ale njemóžachmy tutu e-mejlowu adresu namakać.
     edit:
       title: Hesło wróćo stajić
       heading: Hesło za wužiwarja %{user} wróćo stajić
@@ -1721,16 +1778,16 @@ hsb:
       flash changed: Twoje hesło je so změniło.
   preferences:
     show:
-      title: Moje nastajenja
+      title: Moje preferency
       preferred_editor: Preferowany editor
       preferred_languages: Preferowane rěče
-      edit_preferences: Nastajenja wobdźěłać
+      edit_preferences: Preferency wobdźěłać
     edit:
-      title: Nastajenja wobdźěłać
-      save: Nastajenja aktualizować
+      title: Preferency wobdźěłać
+      save: Preferency aktualizować
       cancel: Přetorhnyć
     update:
-      failure: Nastajenja njedachu so aktualizować.
+      failure: Preferency njedachu so aktualizować.
     update_success_flash:
       message: Nastajenja su so zaktualizowali.
   profiles:
@@ -1753,6 +1810,9 @@ hsb:
       home location: Domjace stejnišćo
       no home location: Njejsy swoje domjace stejnišćo zapodał.
       update home location on click: Domjace stejnišćo při kliknjenju na kartu aktualizować?
+      show: Pokazać
+      delete: Zhašeć
+      undelete: Zhašenje cofnyć
     update:
       success: Profil je so zaktualizował.
       failure: Profil njeda so aktualizować.
@@ -1760,8 +1820,8 @@ hsb:
     new:
       title: Přizjewjenje
       heading: Přizjewjenje
-      email or username: 'E-mejlowa adresa abo wužiwarske mjeno:'
-      password: 'Hesło:'
+      email or username: E-mejlowa adresa abo wužiwarske mjeno
+      password: Hesło
       remember: Spomjatkować sej
       lost password link: Swoje hesło zabył?
       login_button: Přizjewjenje
@@ -1781,8 +1841,8 @@ hsb:
           title: Přizjewjenje z Facebook
           alt: Přizjewjenje z facebookowym kontom
         microsoft:
-          title: Přizjewjenje z Windows Live
-          alt: Přizjewjenje z kontom Windows Live
+          title: Přizjewjenje z Microsoft
+          alt: Přizjewjenje z kontom Microsoft
         github:
           title: Z GitHub přizjewić
           alt: Z kontom GitHub přizjewić
@@ -1799,6 +1859,8 @@ hsb:
       title: Wotzjewić
       heading: Z OpenStreetMap wotzjewić
       logout_button: Wotzjewić
+    suspended_flash:
+      support: pomoc
   shared:
     markdown_help:
       headings: Nadpisy
@@ -1813,14 +1875,15 @@ hsb:
       image: Wobraz
       alt: Alternatiwny tekst
       url: URL
+      codeblock: Kodowy blok
     richtext_field:
       edit: Wobdźěłać
       preview: Přehlad
   site:
     about:
       next: Dale
-      used_by_html: '%{name} staja kartowe daty za tysacy webstronow, aplikacijow
-        a nastroje k dispoziciji'
+      used_by_html: '%{name} kartowe daty za tysacy websydłow, mobilnych nałoženjow
+        a gratwo k dispoziciji staja'
       lede_text: OpenStreetMap twori so wot zhromadźenstwa kartěrowarjow, kiž přinošuja
         a hladaja daty wo pućach, twarjenjach, dwórnišćach a wjele wjace na cyłym
         swěće.
@@ -1829,8 +1892,15 @@ hsb:
         wužiwaja powětrowe wobrazy, GPS-nastroje a pólne karty za přepruwowanje, zo
         by OSM dokładny a aktualny był.
       community_driven_title: Wot zhromadźenstwa wutworjene
+      community_driven_osm_blog: Blog OpenStreetMap
+      community_driven_user_diaries: wužiwarske dźeniki
+      community_driven_osm_foundation: Załožba OSM
       open_data_title: Zjawne daty
+      open_data_open_data: wotewrjene daty
       legal_title: Prawniske pokiwy
+      legal_1_1_openstreetmap_foundation: Załožba OpenStreetMap
+      legal_1_1_terms_of_use: Wužiwanske wuměnjenja
+      legal_1_1_privacy_policy: Prawidła priwatnosće
       partners_title: Partnerojo
     copyright:
       foreign:
@@ -1847,8 +1917,11 @@ hsb:
         mapping_link: z kartěrowanjom započeć
       legal_babble:
         title_html: Awtorske prawo a licenca
+        introduction_1_open_data: wotewrjene daty
+        introduction_1_osm_foundation: Załožba OpenStreetMap
         credit_title_html: Kak ma so na awtorstwo OpenStreetMap pokazać
-        credit_1_html: Žadamy sej wužiwanje pokazki „&copy; sobuskutkowacy OpenStreetMap“.
+        credit_1_html: 'Hdyž daty OpenStreetMap wužiwaš, dyrbiš slědowacej dwě wěcy
+          činić:'
         attribution_example:
           alt: Přikład, kak so na webstronje na OpenStreetMap pokazuje
           title: Přikład za mjenowanje na webstronje z elektroniskej kartu
@@ -1857,6 +1930,24 @@ hsb:
         contributors_intro_html: 'Naši sobuskutkowacy su tysacy jednotliwcow. Zapřijamy
           tež wotewrjenje licencowane daty narodnych kartowych agenturow a z druhich
           žórłow, mjez nimi:'
+        contributors_at_austria: Awstriska
+        contributors_at_stadt_wien: Město Wien
+        contributors_at_land_vorarlberg: Kraj Vorarlberg
+        contributors_au_australia: Awstralija
+        contributors_ca_canada: Kanada
+        contributors_cz_czechia: Čěska
+        contributors_fi_finland: Finska
+        contributors_fi_nlsfi_license: Licenca NLSFI
+        contributors_fr_france: Francoska
+        contributors_nl_netherlands: Nižozemska
+        contributors_nz_new_zealand: Nowoseelandska
+        contributors_nz_linz_data_service: Datowa słužba LINZ
+        contributors_nz_cc_by: CC BY 4.0
+        contributors_rs_serbia: Serbiska
+        contributors_si_slovenia: Słowjenska
+        contributors_es_spain: Španiska
+        contributors_za_south_africa: Južna Afrika
+        contributors_gb_united_kingdom: Zjednoćene kralestwo
         contributors_footer_2_html: Zapřijimanje datow do OpenStreetMap njerěka, zo
           poskićowar originalnych datow OpenStreetMap připóznawa, někajku garantiju
           dodawa abo rukowanje přewozmje.
@@ -1864,6 +1955,7 @@ hsb:
         infringement_1_html: Sobuskutkowacych OSM namołwjamy, zo ženje daty ze žórłow,
           kotrež su přez awtorske prawo škitane (na př. z Google Maps abo z wućišćanych
           kartow) bjez wurazneje dowolnosće awtorow  njepřidawaja.
+        trademarks_title: Tworowe znamjenja
     index:
       js_1: Pak wužiwaš wobhladowak, kotryž JavaScript njepodpěruje, pak sy JavaScript
         znjemóžnił.
@@ -1921,6 +2013,7 @@ hsb:
             zhromadźenstwu OpenStreetMap přiidružić a sam daty přidać abo korigować.
       other_concerns:
         title: Druhe naležnosće
+        working_group: Dźěłowa skupina OSMF
     help:
       title: Wo pomoc prosyć
       introduction: OpenStreetMap ma wšelake resursy za zeznaće projekta, prašenja
@@ -1935,6 +2028,10 @@ hsb:
         url: http://wiki.openstreetmap.org/wiki/hsb:Beginners%27_guide
         title: Instrukcije za nowačkow
         description: Přez zhromadźenstwo wothladowany nawod za započatkowarjow.
+      community:
+        title: Pomoc a forum zhromadnosće
+        description: Zhromadne městno, hdźež móžeće za pomocu pytać a so wo OpenStreetMap
+          rozmołwjeć.
       mailing_lists:
         title: Rozesyłanske lisćiny
         description: Staj prašenje abo diskutuj zajimawe wěcy w šěrokim wobłuku temow
@@ -1948,6 +2045,8 @@ hsb:
           słužbach bazuja a k OpenStreetMap přeńdu.
       welcomemat:
         title: Za organizacije
+        description: Z organizaciju plany za OpenStreetMap činić? Wuslědźće na stronje
+          na powitanje, štož dyrbiće wědźeć.
       wiki:
         title: Wiki OpenStreetMap
         description: Přepytaj wiki za nadrobnej dokumentaciju OpenStreetMap
@@ -1983,15 +2082,26 @@ hsb:
           cycleway_local: Lokalna kolesowarska šćežka
           footway: Chódnik
           rail: Železnica
+          train: Ćah
           subway: Podzemska železnica
+          ferry: Přewoz
+          light_rail: Měšćanska železnica
+          tram: Nadróžna
+          trolleybus: Obus
+          bus: Bus
           cable_car: Kablowa nadróžna
-          chair_lift: sydłowy lift
+          chair_lift: Sydłowy lift
           runway: Přizemišćo
-          taxiway: lětadłowa jězdnja
+          taxiway: Lětadłowa jězdnja
           apron: Lětanišćowe předpolo
           admin: Zarjadniska hranica
+          city: Město
           forest: Hajina
           wood: Lěs
+          grass: Trawa
+          meadow: Łuka
+          bare_rock: Naha skała
+          sand: Pěsk
           golf: Golfownišćo
           park: Park
           common: Powšitkowny
@@ -2001,26 +2111,31 @@ hsb:
           commercial: Přemysłowa kónčina
           heathland: Hola
           lake: Jězor
-          reservoir: spjaty jězor
+          reservoir: Reservoir
+          glacier: Lodowc
+          reef: Rif
           farm: Farma
           brownfield: Industrijowe lado
           cemetery: Kěrchow
           allotments: Małozahrodki
           pitch: Sportnišćo
           centre: Sportowy centrum
+          beach: Brjóh
           reserve: Přirodoškitne pasmo
           military: Wojerske pasmo
           school: Šula
-          university: uniwersita
+          university: Uniwersita
+          hospital: Chorownja
           building: Wuznamne twarjenje
           station: Dwórnišćo
           summit: Wjeršk
-          peak: kónčk hory
+          peak: Wjeršk hory
           tunnel: Smužkowana kroma = tunl
           bridge: Čorna kroma = móst
           private: Priwatny přistup
           destination: Jenož za přidróžnych
           construction: Dróhi w twarje
+          bus_stop: Busowe zastanišćo
           bicycle_shop: Kolesarnja
           bicycle_parking: Kólaso parkowanišćo
           toilets: Nuzniki
@@ -2035,13 +2150,29 @@ hsb:
         title: Zakładne zapřijeća za kartěrowanje
         paragraph_1: OpenStreetMap někotre wosebite zapřijeća wužiwa. Tu su někotre
           z nich, kotrež móhli ći wužitne być.
+        editor: wobdźěłar
+        node: suk
+        way: puć
+        tag: značka
       rules:
         title: Prawidła!
+        imports: Importy
+        automated_edits: Awtomatizowane wobdźěłanja
       start_mapping: Kartěrowanje započeć
+      continue_authorization: Z awtorizaciju pokročować
       add_a_note:
         title: Nimaš chwile za wobdźěłowanje? Přidaj pokazku!
         para_1: Jeli chceš jenož drobnosć korigować a nimaš chwile, zo by so zregistrował
           a wuknył, kak so wobdźěłuje, móžeš prosće pokazku přidać.
+        the_map: karta
+    communities:
+      title: Zhromadnosće
+      local_chapters:
+        title: Lokalne zwjazki
+        list_text: 'Slědowace zhromadnosće su oficielnje jako lokalne zwjazki zregistrowane:'
+      other_groups:
+        title: Druhe skupiny
+        communities_wiki: Wikistrona zhromadnosćow
   traces:
     visibility:
       private: Priwatna (jenož jako anonymna, njezrjadowane dypki )
@@ -2117,13 +2248,13 @@ hsb:
       identifiable: IDENTIFIKUJOMNY
       private: PRIWATNY
       trackable: SĆĚHUJOMNY
-      by: wot
-      in: w
     index:
       public_traces: Zjawne GPS-ćěrje
       public_traces_from: Zjawne GPS-ćěrje wot %{user}
       description: Najnowše nahraća GPS-čarow přepytać
       tagged_with: Markěrowane přez %{tags}
+      empty_title: Hišće ničo njeje
+      wiki_page: wikistrona
       upload_trace: Ćěr nahrać
       all_traces: Wšě ćěrje
       my_traces: Moje ćěrje
@@ -2164,6 +2295,7 @@ hsb:
       oauth1_settings: Nastajenja OAUTH 1
       oauth2_applications: Nastajenja OAUTH 2
       oauth2_authorizations: Prawa OAUTH 2
+      muted_users: Zněmjeni wužiwarjo
   oauth:
     authorize:
       title: Přistup na twoje konto awtorizować
@@ -2286,6 +2418,7 @@ hsb:
       title: Registrować
       no_auto_account_create: Bohužel njemóžemy tuchwilu žane konto za tebje awtomatisce
         załožić.
+      support: pomoc
       about:
         header: Swobodny a wobdźěłujomny
       display name description: Sy wužiwarske mjeno zjawnje pokazał. Móžeš to pozdźišo
@@ -2296,6 +2429,7 @@ hsb:
         někotrym přidatnym funkcijam abo serweram móhło być trjeba.
       continue: Registrować
       terms accepted: Dźakujemy so, zo sy nowe wuměnjenja za sobuskutkowarjow akceptował!
+      privacy_policy: prawidła priwatnosće
     terms:
       title: Wuměnjenja
       heading: Wuměnjenja
@@ -2335,9 +2469,12 @@ hsb:
       my profile: Mój profil
       my settings: Moje nastajenja
       my comments: Moje komentary
-      my_preferences: Moje nastajenja
+      my_preferences: Moje preferency
+      my_dashboard: Moja přehladna strona
       blocks on me: Dostane blokowanja
       blocks by me: Date blokowanja
+      create_mute: Tutoho wužiwarja zněmić
+      destroy_mute: Zněmjenje tutoho wužiwarja zběhnyć
       edit_profile: Profil wobdźěłać
       send message: Powěsć pósłać
       diary: Dźenik
@@ -2347,6 +2484,7 @@ hsb:
       remove as friend: Přećela wotstronić
       add as friend: Přećela přidać
       mapper since: 'Kartěrowar wot:'
+      uid: 'Wužiwarski ID:'
       ct status: 'Wuměnjenja za sobuskutkowarjow:'
       ct undecided: Njerozsudźeny
       ct declined: Wotpokazany
@@ -2357,6 +2495,7 @@ hsb:
       role:
         administrator: Tutón wužiwar je administrator
         moderator: Tutón wužiwar je moderator.
+        importer: Tutón wužiwar je importer
         grant:
           administrator: Prawa administratora dać
           moderator: Prawa moderatora dać
@@ -2379,9 +2518,6 @@ hsb:
     index:
       title: Wužiwarjo
       heading: Wužiwarjo
-      showing:
-        one: Strona %{page} (%{first_item} z %{items})
-        other: Strona %{page} (%{first_item}-%{last_item} z %{items})
       summary_html: '%{name} wot %{ip_address} dnja %{date} wutworjeny'
       summary_no_ip_html: '%{name} dnja %{date} wutworjeny'
       confirm: Wubranych wužiwarjow wobkrućic
@@ -2465,6 +2601,15 @@ hsb:
       confirm: Chceš woprawdźe tute blokowanje zběhnyć?
       revoke: Zběhnyć!
       flash: Tute blokowanje je so zběhnyło.
+    revoke_all:
+      empty: '%{name} aktiwne zablokowanja nima.'
+      active_blocks:
+        one: '%{count} aktiwne zablokowanje'
+        two: '%{count} aktiwnej zablokowani'
+        few: '%{count} aktiwne zablokowanja'
+        other: '%{count} aktiwnych zablokowanjow'
+      revoke: Zběhnyć!
+      flash: Wšě aktiwne zablokowanja su zběhnjene.
     helper:
       time_future_html: Kónči so %{time}.
       until_login: Aktiwne, doniž so wužiwar njepřizjewja.
@@ -2473,9 +2618,9 @@ hsb:
       time_past_html: Je so před %{time} skónčiło.
       block_duration:
         hours:
-          few: '%{count} hodźiny'
-          one: 1 hodźina
+          one: '%{count} hodźina'
           two: '%{count} hodźinje'
+          few: '%{count} hodźiny'
           other: '%{count} hodźin'
         days:
           one: '%{count} dźeń'
@@ -2516,7 +2661,6 @@ hsb:
       revoke: Blokowanje zběhnyć!
       confirm: Chceš woprawdźe?
       reason: 'Přičina za blokowanje:'
-      back: Wšě blokowanja pokazać
       revoker: 'Zeběracy wužiwar:'
       needs_view: Wužiwar dyrbi so přizjewić, prjedy hač tute blokowanje so zběhnje.
     block:
@@ -2530,14 +2674,36 @@ hsb:
       reason: Přičina za blokowanje
       status: Status
       revoker_name: Zběhnjene wot
-      showing_page: Strona %{page}
-      next: Přichodny »
-      previous: « Předchadny
+  user_mutes:
+    index:
+      title: Zněmjeni wužiwarjo
+      my_muted_users: Moji zněmjeni wužiwarjo
+      you_have_muted_n_users:
+        one: Sy %{count} wužiwarja zněmił
+        two: Sy %{count} wužiwarjow zněmił
+        few: Sy %{count} wužiwarjow zněmił
+        other: Sy %{count} wužiwarjow zněmił
+      user_mute_explainer: Powěsće zněmjenych wužiwarjow so do separatneho póstoweho
+        dochada přesuwaja a sy e-mejlowe zdźělenki njedóstawaš.
+      user_mute_admins_and_moderators: Móžeš administratorow a moderatorow zněmić,
+        ale jich powěsće so njezněmja.
+      table:
+        thead:
+          muted_user: Zněmjeny wužiwar
+          actions: Akcije
+        tbody:
+          unmute: Zněmjenje zběhnyć
+          send_message: Powěsć pósłać
+    create:
+      notice: Sy wužiwarja %{name} zněmił.
+      error: Wužiwar %{name} njeda so zněmić. %{full_message}.
   notes:
     index:
       title: Pokazki, kotrež su so wot %{user} dali abo komentowali
       heading: Pokazki wužiwarja %{user}
-      subheading_html: Pokazki, kotrež su so wot %{user} dali abo komentowali
+      subheading_html: Pokazki, kotrež su so wot %{user} %{submitted} abo %{commented}
+      subheading_submitted: pósłali
+      subheading_commented: komentowali
       no_notes: Žane pokazy
       id: ID
       creator: Tworićel
@@ -2550,7 +2716,10 @@ hsb:
       open_title: 'Njesčinjena pokazka #%{note_name}'
       closed_title: 'Sčinjena pokazka #%{note_name}'
       hidden_title: 'Schowana pokazka #%{note_name}'
-      report: Tutón pokiw zdźělić
+      event_commented_by_html: Komentar wot %{user} %{time_ago}
+      event_commented_by_anonymous_html: Komentar wot anonymneho wužiwarja %{time_ago}
+      event_hidden_by_html: Schowany wot %{user} %{time_ago}
+      report: tutón pokazku zdźělić
       anonymous_warning: Tuta pokazka wobsahuje komentary wot anonymnych wužiwarjow,
         kotrež měli so njewotwisnje přepruwować.
       hide: Schować
@@ -2558,6 +2727,7 @@ hsb:
       reactivate: Znowa aktiwizować
       comment_and_resolve: Komentować a sčinić
       comment: Komentar
+      log_in_to_comment: Přizjewće so, zo by tutu pokazku komentował
     new:
       title: Nowa pokazka
       intro: Sy zmylk widźał abo zo něšto faluje? Informuj druhich kartografow, zo
@@ -2599,19 +2769,20 @@ hsb:
       locate:
         title: Aktualne městno pokazać
         metersPopup:
-          one: Sće mjenje hač %{count} meter wot tutoho dypka zdaleny
-          two: Sće mjenje hač %{count} metraj wot tutoho dypka zdaleny
-          few: Sće mjenje hač %{count} metry wot tutoho dypka zdaleny
-          other: Sće mjenje hač %{count} metrow wot tutoho dypka zdaleny
+          one: Sy mjenje hač %{count} meter wot tutoho dypka zdaleny
+          two: Sy mjenje hač %{count} metraj wot tutoho dypka zdaleny
+          few: Sy mjenje hač %{count} metry wot tutoho dypka zdaleny
+          other: Sy mjenje hač %{count} metrow wot tutoho dypka zdaleny
         feetPopup:
-          one: Sće mjenje hač %{count} stopu wot tutoho dypka zdaleny
-          two: Sće mjenje hač %{count} stopje wot tutoho dypka zdaleny
-          few: Sće mjenje hač %{count} stopy wot tutoho dypka zdaleny
-          other: Sće mjenje hač %{count} stopow wot tutoho dypka zdaleny
+          one: Sy mjenje hač %{count} stopu wot tutoho dypka zdaleny
+          two: Sy mjenje hač %{count} stopje wot tutoho dypka zdaleny
+          few: Sy mjenje hač %{count} stopy wot tutoho dypka zdaleny
+          other: Sy mjenje hač %{count} stopow wot tutoho dypka zdaleny
       base:
         standard: Standard
         cycle_map: Kolesowa karta
         transport_map: Wobchadna karta
+        tracestracktop_topo: Tracestrack Topo
         hot: Sobuskutkowacy humanitarneje pomocy
       layers:
         header: Kartowe runiny
@@ -2620,6 +2791,11 @@ hsb:
         gps: Zjawne GPS-ćěrje
         overlays: Woršty za pytanje za zmylkami na karće zmóžnić
         title: Runiny
+      openstreetmap_contributors: Sobuskutkowarjo OpenStreetMap
+      make_a_donation: Darić
+      website_and_api_terms: Wuměnjenja websydła a API
+      osm_france: OpenStreetMap Francoska
+      andy_allan: Andy Allan
     site:
       edit_tooltip: Kartu wobdźěłać
       edit_disabled_tooltip: Za wobdźěłanje karty powjetšić
@@ -2647,9 +2823,14 @@ hsb:
         graphhopper_bicycle: Koleso (GraphHopper)
         graphhopper_car: Awto (GraphHopper)
         graphhopper_foot: Pěši (GraphHopper)
+        fossgis_valhalla_bicycle: Koleso (Valhalla)
+        fossgis_valhalla_car: Awto (Valhalla)
+        fossgis_valhalla_foot: Pěši (Valhalla)
       descend: Spadowacy
       directions: Směry
       distance: Zdalenosć
+      distance_m: '%{distance} m'
+      distance_km: '%{distance} km'
       errors:
         no_route: Njenamakach čaru mjez tutymaj městnomaj.
         no_place: Bohužel njemóžachmy městno „%{place}“ namakać.
index 106e86b5b61b730d4f48c65a3d0e14ab6656f358..c94bc61417d4056d77072020ed0ac14f4cad1b51 100644 (file)
@@ -301,6 +301,8 @@ hu:
         retain_changeset_discussions: A módosításcsomagokhoz fűzött hozzászólásaid
           (ha vannak) megőrződnek.
         retain_email: Az e-mail-címed is megmarad.
+        recent_editing_html: Mivel nemrégiben szerkesztettél, fiókod jelenleg nem
+          törölhető. A törlés %{time} múlva lehetséges.
         confirm_delete: Biztos vagy benne?
         cancel: Mégsem
   accounts:
@@ -348,15 +350,10 @@ hu:
     destroy:
       success: Fiók törölve.
   browse:
-    created: Létrehozva
-    closed: Lezárva
-    created_ago_html: Létrehozva %{time_ago}
-    closed_ago_html: Lezárva %{time_ago}
-    created_ago_by_html: Létrehozta %{user} %{time_ago}
-    closed_ago_by_html: Lezárta %{user} %{time_ago}
     deleted_ago_by_html: Törölte %{user} %{time_ago}
     edited_ago_by_html: Szerkesztette %{user} %{time_ago}
     version: Verzió
+    redacted_version: Szerkesztett verzió
     in_changeset: Módosításcsomag
     anonymous: névtelen
     no_comment: (nincs hozzászólás)
@@ -369,25 +366,10 @@ hu:
       other: '%{count} vonal'
     download_xml: XML letöltése
     view_history: Előzmények megtekintése
+    view_unredacted_history: Módosítatlan előzményeket megtekintése
     view_details: Részletek megtekintése
+    view_redacted_data: Módosított előzményeket megtekintése
     location: 'Hely:'
-    changeset:
-      title: '%{id} módosításcsomag'
-      belongs_to: Szerző
-      node: Pontok (%{count})
-      node_paginated: 'Pontok (%{x}-%{y} ennyiből: %{count})'
-      way: Vonalak (%{count})
-      way_paginated: 'Vonalak (%{x}-%{y} ennyiből: %{count})'
-      relation: Kapcsolatok (%{count})
-      relation_paginated: 'Kapcsolatok (%{x}-%{y} ennyiből: %{count})'
-      hidden_comment_by_html: Rejtett hozzászólás %{user} felhasználótól %{time_ago}
-      comment_by_html: Hozzászólt %{user} %{time_ago}
-      changesetxml: Módosításcsomag adatai (XML)
-      osmchangexml: Módosításcsomag tartalma (osmChange XML)
-      join_discussion: Jelentkezz be, hogy bekapcsolódhass a megbeszélésbe
-      discussion: Megbeszélés
-      still_open: A módosításcsomag még nyitva van – a megbeszélés akkor nyílik meg,
-        ha a módosításcsomag lezárul.
     node:
       title_html: '%{name} pont'
       history_title_html: '%{name} pont előzményei'
@@ -465,6 +447,15 @@ hu:
       introduction: Kattints a térképre a közeli objektumok megtalálásához.
       nearby: Közeli objektumok
       enclosing: A helyet körülvevő objektumok
+  old_nodes:
+    not_found:
+      sorry: 'Sajnáljuk, nem található meg #%{id} pont %{version} verziója.'
+  old_ways:
+    not_found:
+      sorry: 'Sajnáljuk, nem található meg #%{id} vonal %{version} verziója.'
+  old_relations:
+    not_found:
+      sorry: 'Sajnáljuk, nem található meg #%{id} kapcsolat %{version} verziója.'
   changesets:
     changeset_paging_nav:
       showing_page: '%{page} oldal'
@@ -496,6 +487,46 @@ hu:
       feed:
         title: '%{id} módosításcsomag'
         title_comment: '%{id} módosításcsomag - %{comment}'
+        created: Létrehozva
+        closed: Lezárva
+        belongs_to: Szerző
+    subscribe:
+      heading: Feliratkozol a következő változáscsomag megbeszélgetésre?
+      button: Feliratkozás a megbeszélésre
+    unsubscribe:
+      heading: Leiratkozol a következő változáscsomag megbeszélgetésről?
+      button: Leiratkozás a megbeszélésről
+    heading:
+      title: '%{id} számú módosításcsomag'
+      created_by_html: 'Létrehozta: %{link_user} (%{created}).'
+    no_such_entry:
+      title: Nincs ilyen módosítócsomag
+      heading: 'Nincs naplóbejegyzés ezzel az azonosítóval: %{id}'
+      body: Sajnáljuk, nincs %{id} azonosítójú módosítócsomag. Ellenőrizd a helyességét.
+        Az is lehet, hogy rossz linkre kattintottál.
+    show:
+      title: '%{id} módosításcsomag'
+      created: 'Létrehozva: %{when}'
+      closed: 'Lezárva: %{when}'
+      created_ago_html: Létrehozva %{time_ago}
+      closed_ago_html: Lezárva %{time_ago}
+      created_ago_by_html: Létrehozta %{user} %{time_ago}
+      closed_ago_by_html: Lezárta %{user} %{time_ago}
+      discussion: Megbeszélés
+      join_discussion: Jelentkezz be, hogy bekapcsolódhass a megbeszélésbe
+      still_open: A módosításcsomag még nyitva van – a megbeszélés akkor nyílik meg,
+        ha a módosításcsomag lezárul.
+      comment_by_html: Hozzászólt %{user} %{time_ago}
+      hidden_comment_by_html: Rejtett hozzászólás %{user} felhasználótól %{time_ago}
+      changesetxml: Módosításcsomag adatai (XML)
+      osmchangexml: Módosításcsomag tartalma (osmChange XML)
+    paging_nav:
+      nodes: Pontok (%{count})
+      nodes_paginated: 'Pontok (%{x}-%{y} ennyiből: %{count})'
+      ways: Vonalak (%{count})
+      ways_paginated: 'Vonalak (%{x}-%{y} ennyiből: %{count})'
+      relations: Kapcsolatok (%{count})
+      relations_paginated: 'Kapcsolatok (%{x}-%{y} ennyiből: %{count})'
     timeout:
       sorry: Sajnáljuk, az általad kért módosításcsomagok listájának beolvasása túl
         sokáig tartott.
@@ -560,6 +591,7 @@ hu:
     show:
       title: '%{user} naplója | %{title}'
       user_title: '%{user} naplója'
+      discussion: Megbeszélés
       leave_a_comment: Hozzászólás
       login_to_leave_a_comment_html: '%{login_link} a hozzászóláshoz'
       login: Bejelentkezés
@@ -614,6 +646,12 @@ hu:
       comment: Hozzászólás
       newer_comments: Újabb hozzászólások
       older_comments: Régebbi hozzászólások
+    subscribe:
+      heading: Feliratkozol a következő naplóbejegyzés-megbeszélésre?
+      button: Feliratkozás a megbeszélésre
+    unsubscribe:
+      heading: Leiratkozol a következő naplóbejegyzés-megbeszélésről?
+      button: Leiratkozás a megbeszélésről
   doorkeeper:
     errors:
       messages:
@@ -1583,11 +1621,10 @@ hu:
     intro_text: Az OpenStreetMap egy világtérkép, amelyet hozzád hasonló emberek készítenek
       és szabad licenc alatt elérhető.
     intro_2_create_account: Felhasználói fiók létrehozása
-    hosting_partners_html: 'Az üzemeltetés támogatói: %{ucl}, %{fastly}, %{bytemark},
-      és további %{partners}.'
-    partners_ucl: UCL
+    hosting_partners_2024_html: A hostingot a %{fastly}, %{corpmembers} és más %{partners}
+      támogatják.
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: OSMF társasági tagok
     partners_partners: partnerek
     tou: Felhasználási feltételek
     osm_offline: Az OpenStreetMap-adatbázis jelenleg offline, miközben alapvető adatbázis-karbantartási
@@ -1609,6 +1646,7 @@ hu:
     more: Több
   user_mailer:
     diary_comment_notification:
+      description: 'OpenStreetMap naplóbejegyzés #%{id}'
       subject: '[OpenStreetMap] %{user} hozzászólt egy naplóbejegyzéshez'
       hi: Szia, %{to_user}!
       header: '%{from_user} hozzászólt a(z) %{subject} OpenStreetMap naplóbejegyzéshez:'
@@ -1617,6 +1655,8 @@ hu:
         vagy válaszolhatsz rá itt: %{replyurl}'
       footer_html: 'A hozzászólást elolvashatod itt: %{readurl}, hozzászólhatsz itt:
         %{commenturl} vagy válaszolhatsz rá itt: %{replyurl}'
+      footer_unsubscribe: 'Itt iratkozhatsz le a megbeszélésről: %{unsubscribeurl}'
+      footer_unsubscribe_html: 'Itt iratkozhatsz le a megbeszélésről: %{unsubscribeurl}'
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Szia %{to_user}!
@@ -1680,6 +1720,7 @@ hu:
       click_the_link: Ha ez Te vagy, akkor a jelszó alaphelyzetbe állításához kattints
         az alábbi hivatkozásra.
     note_comment_notification:
+      description: 'OpenStreetMap megjegyzés #%{id}'
       anonymous: Egy névtelen felhasználó
       greeting: Szia!
       commented:
@@ -1716,6 +1757,7 @@ hu:
       details: 'A jegyzetről további részletek találhatók itt: %{url}.'
       details_html: 'A jegyzetről további részletek találhatók itt: %{url}.'
     changeset_comment_notification:
+      description: 'OpenStreetMap módosításcsomag #%{id}'
       hi: Szia %{to_user}!
       greeting: Szia!
       commented:
@@ -1736,10 +1778,9 @@ hu:
       details: 'A módosításcsomagról további részletek találhatók itt: %{url}.'
       details_html: 'A módosításcsomagról további részletek találhatók itt: %{url}.'
       unsubscribe: 'Az ehhez a módosításcsomaghoz tartozó frissítésekről való leiratkozáshoz
-        látogass el a következő oldalra: %{url}, és kattints a „Leiratkozás” gombra.'
+        látogass el a következő oldalra: %{url}.'
       unsubscribe_html: 'Az ehhez a módosításcsomaghoz tartozó frissítésekről való
-        leiratkozáshoz látogass el a következő oldalra: %{url}, és kattints a „Leiratkozás”
-        gombra.'
+        leiratkozáshoz látogass el a következő oldalra: %{url}.'
   confirmations:
     confirm:
       heading: Nézd meg az e-mailjeidet!
@@ -1857,9 +1898,8 @@ hu:
       help_text: Add meg az e-mail-címed, amellyel regisztráltál. Küldeni fogunk egy
         hivatkozást, amellyel visszaállíthatod a jelszavad.
     create:
-      notice email on way: Sajnáljuk, hogy elvesztetted :-( de már úton van egy e-mail,
-        így nemsokára alaphelyzetbe állíthatod.
-      notice email cannot find: Sajnáljuk, az e-mail-cím nem található.
+      send_paranoid_instructions: Ha az e-mail-címed szerepel az adatbázisunkban,
+        néhány percen belül kapsz rá egy jelszó-helyreállító linket.
     edit:
       title: Jelszó alaphelyzetbe állítása
       heading: '%{user} jelszavának alaphelyzetbe állítása'
@@ -2105,10 +2145,16 @@ hu:
         contributors_ca_canada: Kanada
         contributors_cz_czechia: Csehország
         contributors_fi_finland: Finnország
+        contributors_fi_nlsfi_license: NLSFI licenc
+        contributors_fr_credit_html: '%{france}: adatokat tartalmaz a következő forrásból:
+          Direction Générale des Impôts.'
         contributors_fr_france: Franciaország
+        contributors_nl_credit_html: '%{netherlands}: &copy; AND adatokat tartalmaz,
+          2007 (%{and_link})'
         contributors_nl_netherlands: Hollandia
         contributors_nz_new_zealand: Új-Zéland
         contributors_rs_serbia: Szerbia
+        contributors_rs_rgz: Szerb Geodéziai Hatóság
         contributors_si_slovenia: Szlovénia
         contributors_si_mkgp: Mezőgazdasági, Erdészeti és Élelmiszerügyi Minisztérium
         contributors_es_spain: Spanyolország
@@ -2126,6 +2172,10 @@ hu:
           engedélye nélkül.
         infringement_2_1_online_filing_page: on-line bejelentési oldal
         trademarks_title: Védjegyek
+        trademarks_1_1_html: |-
+          Az OpenStreetMap, a nagyító logó és a State of the Map az
+          OpenStreetMap Foundation bejegyzett védjegyei. Ha kérdésed van a védjegyek használatával kapcsolatban, tekintsd meg a
+          %{trademark_policy_link} oldalunkat.
         trademarks_1_1_trademark_policy: Védjegypolitika
     index:
       js_1: Vagy egy olyan böngészőt használsz, amely nem támogatja a JavaScriptet,
@@ -2184,9 +2234,18 @@ hu:
           explanation_html: Ha bármilyen hibát találtál a térképadatokban, például
             hiányzik egy út vagy cím, a legjobb, ha csatlakozol az OpenStreetMap közösséghez
             és kijavítod az adatot saját magad.
+        add_a_note:
+          instructions_1_html: Csak kattints a %{note_icon} ikonra vagy ugyanerre
+            az ikonra a térképmegjelenítőben. Ez felrak egy helyjelölőt a térképre,
+            amelyet húzással mozgathatsz. Írj hozzá egy üzenetet, majd kattints a
+            mentésre, és a többi térképész meg fogja vizsgálni.
       other_concerns:
         title: Egyéb aggályok
+        concerns_html: Ha aggályaid vannak az adataink felhasználásával vagy a tartalommal
+          kapcsolatban, keresd fel a %{copyright_link} oldalunkat további jogi információkért,
+          vagy lépj kapcsolatba a megfelelő %{working_group_link} csoporttal.
         copyright: szerzői jogi oldal
+        working_group: OSMF munkacsoport
     help:
       title: Segítségkérés
       introduction: Az OpenStreetMap számos anyagot kínál fel ahhoz, hogy ismerkedj
@@ -2201,8 +2260,8 @@ hu:
         title: Kezdők kézikönyve
         description: A közösség által karbantartott útmutató kezdőknek.
       community:
-        title: Közösségi portál
-        description: Egy hely, ahol az OpenStreetMap a téma.
+        title: Súgó és közösségi portál
+        description: Közös hely, ahol segítséget kérhetsz és beszélgethetsz az OpenStreetMapről.
       mailing_lists:
         title: Levelezőlisták
         description: Kérdezz vagy beszélgess érdekességekről a számos tematikus vagy
@@ -2225,6 +2284,9 @@ hu:
     potlatch:
       removed: Az alapértelmezett szerkesztőd a Potlatch. Mivel az Adobe Flash Playert
         visszavonták, a Potlatch webböngészőben már nem futtatható.
+      download: az asztali alkalmazás letöltése Mac és Windows rendszerre
+      id_editor_html: Alternatív megoldásként beállíthatod alapértelmezett szerkesztőként
+        az iD-t, amely a webböngészőben fut, mint hajdanán a Potlatch. %{change_preferences_link}.
       change_preferences: Itt módosíthatja beállításait
     any_questions:
       title: Kérdésed van?
@@ -2402,6 +2464,11 @@ hu:
         list_text: 'A következő közösségek hivatalosan is Helyi Csoportként működnek:'
       other_groups:
         title: Más csoportok
+        other_groups_html: Nincs szükség arra, hogy egy csoport olyan hivatalosan
+          is létrejöjjön, mint egy helyi csoport. Valójában sok csoport nagyon is
+          sikeresen létezik informális összejövetelként vagy közösségi csoportként.
+          Ilyent bárki létrehozhat, vagy csatlakozhat ilyenhez. Bővebben a %{communities_wiki_link}in
+          olvashatsz.
         communities_wiki: Közösségek wikioldala
   traces:
     visibility:
@@ -2471,8 +2538,7 @@ hu:
       identifiable: AZONOSÍTHATÓ
       private: NEM NYILVÁNOS
       trackable: NYOMKÖVETHETŐ
-      by: 'készítette:'
-      in: 'címkék:'
+      details_without_tags_html: '%{user} által %{time_ago}'
     index:
       public_traces: Nyilvános GPS-nyomvonalak
       my_gps_traces: GPS-nyomvonalaim
@@ -2562,11 +2628,13 @@ hu:
       read_gpx: Magán nyomvonalak megtekintése
       write_gpx: GPS-nyomvonalak feltöltése
       write_notes: Jegyzetek módosítása
+      write_redactions: Térképadatok szerkesztése
       read_email: Felhasználó e-mail-címének elolvasása
       skip_authorization: Alkalmazás automatikus jóváhagyása
   oauth_clients:
     new:
       title: Új alkalmazás regisztrálása
+      disabled: Az OAuth 1 alkalmazások regisztrációja le van tiltva
     edit:
       title: Alkalmazásod szerkesztése
     show:
@@ -2650,6 +2718,7 @@ hu:
       title: Engedélyezett alkalmazásaim
       application: Alkalmazás
       permissions: Engedélyek
+      last_authorized: Utoljára engedélyezett
       no_applications_html: Még nem engedélyeztél %{oauth2} alkalmazást.
     application:
       revoke: Hozzáférés visszavonása
@@ -2665,6 +2734,9 @@ hu:
       support: támogatás
       about:
         header: Szabad és szerkeszthető
+        paragraph_1: Más térképekkel ellentétben az OpenStreetMap-et teljes mértékben
+          hozzád hasonló emberek hozzák létre, és bárki ingyenesen javíthatja, frissítheti,
+          letöltheti és használhatja.
         paragraph_2: Regisztrálj a közreműködés megkezdéséhez. A fiókod megerősítéséhez
           küldeni fogunk egy e-mailt.
       display name description: A nyilvánosan megjelenített felhasználóneved. A beállításaidban
@@ -2675,6 +2747,9 @@ hu:
         de néhány extra eszköz vagy szerver igényelhet egyet.
       continue: Regisztráció
       terms accepted: Köszönjük, hogy elfogadtad az új közreműködési feltételeket!
+      privacy_policy: adatvédelmi irányelvek
+      privacy_policy_title: Az OSMF adatvédelmi szabályzata, beleértve az e-mail címekről
+        szóló részt
     terms:
       title: Feltételek
       heading: Feltételek
@@ -2691,6 +2766,8 @@ hu:
       read_tou: Elolvastam és elfogadom a felhasználási feltételeket
       consider_pd: A fenti megállapodáson felül, a hozzájárulásaimat közkinccsé nyilvánítom
       consider_pd_why: mi ez?
+      readable_summary: ember által olvasható összefoglaló
+      informal_translations: informális fordítások
       continue: Folytatás
       decline: Elutasítás
       you need to accept or decline: A folytatáshoz kérjük, olvasd el, majd fogadd
@@ -2756,6 +2833,7 @@ hu:
           importer: Importálási hozzáférés visszavonása
       block_history: Aktív blokkolások
       moderator_history: Kiosztott blokkolások
+      revoke_all_blocks: Minden blokkolás visszavonása
       comments: Hozzászólások
       create_block: Felhasználó blokkolása
       activate_user: Felhasználó aktiválása
@@ -2773,9 +2851,11 @@ hu:
     index:
       title: Felhasználók
       heading: Felhasználók
-      showing:
-        one: '%{page}. oldal (%{first_item}. elem, összesen: %{items})'
-        other: '%{page}. oldal (%{first_item}–%{last_item}. elem, összesen: %{items})'
+      older: Régebbi felhasználók
+      newer: Újabb felhasználók
+      found_users:
+        one: '%{count} felhasználó található'
+        other: '%{count} felhasználó található'
       summary_html: '%{name} létrejött innen: %{ip_address}, ekkor: %{date}'
       summary_no_ip_html: '%{name} letrejött ekkor: %{date}'
       confirm: Kijelölt felhasználók megerősítése
@@ -2863,6 +2943,15 @@ hu:
       confirm: Biztosan vissza szeretnéd vonni ezt a blokkolást?
       revoke: Visszavonás!
       flash: Ez a blokkolás vissza lett vonva.
+    revoke_all:
+      title: '%{block_on} valamennyi blokkolásának visszavonása'
+      heading_html: '%{block_on} valamennyi blokkolásának visszavonása'
+      empty: '%{name} nem rendelkezik aktív blokkolással.'
+      active_blocks:
+        one: '%{count} aktív blokkolás'
+        other: '%{count} aktív blokkolás'
+      revoke: Visszavonás!
+      flash: Minden aktív blokkolás visszavonva.
     helper:
       time_future_html: Véget ér %{time} múlva.
       until_login: Aktív a felhasználó bejelentkezéséig.
@@ -2904,7 +2993,6 @@ hu:
       revoke: Visszavonás!
       confirm: Biztos vagy benne?
       reason: 'Blokkolás indoklása:'
-      back: Összes blokkolás megjelenítése
       revoker: 'Visszavonó:'
       needs_view: A felhasználónak be kell jelentkeznie, mielőtt a blokkolás feloldódna.
     block:
@@ -2918,22 +3006,32 @@ hu:
       reason: Blokkolás indoklása
       status: Állapot
       revoker_name: 'Visszavonta:'
-      showing_page: '%{page}. oldal'
-      next: Következő »
-      previous: « Előző
+      older: Régebbi blokkolások
+      newer: Újabb blokkolások
   user_mutes:
     index:
       title: Elnémított felhasználók
       my_muted_users: Elnémított felhasználóim
+      you_have_muted_n_users:
+        one: Elnémítottál %{count} felhasználót
+        other: Elnémítottál %{count} %{count} felhasználót
+      user_mute_explainer: A némított felhasználók üzenetei egy külön Beérkező levelek
+        mappába kerülnek, és nem kapsz e-mailes értesítéseket.
+      user_mute_admins_and_moderators: Elnémíthatsz az adminisztrátorokat és a moderátorokat,
+        de üzeneteik nem lesznek elnémítva.
       table:
         thead:
-          muted_user: Elnémított felhasználó
+          muted_user: Elnémított felhasználók
           actions: Műveletek
         tbody:
           unmute: Némítás feloldása
           send_message: Üzenet küldése
     create:
       notice: 'Elnémítottad őt: %{name}.'
+      error: '%{name} nem némítható el. %{full_message}.'
+    destroy:
+      notice: Feloldottad %{name} némítását.
+      error: A felhasználó némítását nem sikerült feloldani. Kérlek próbáld újra.
   notes:
     index:
       title: '%{user} által beküldött vagy kommentált jegyzetek'
@@ -2954,9 +3052,13 @@ hu:
       closed_title: '%{note_name} megoldott jegyzet'
       hidden_title: '%{note_name} rejtett jegyzet'
       event_opened_by_html: Létrehozta %{user} %{time_ago}
+      event_opened_by_anonymous_html: Létrehozta egy névtelen felhasználó %{time_ago}
       event_commented_by_html: Hozzászólt %{user} %{time_ago}
+      event_commented_by_anonymous_html: Hozzászólt egy névtelen felhasználó %{time_ago}
       event_closed_by_html: Megoldotta %{user} %{time_ago}
+      event_closed_by_anonymous_html: Megoldotta egy névtelen felhasználó %{time_ago}
       event_reopened_by_html: Újraaktiválta %{user} %{time_ago}
+      event_reopened_by_anonymous_html: Újraaktiválta egy névtelen felhasználó %{time_ago}
       event_hidden_by_html: Elrejtette %{user} %{time_ago}
       report: jegyzet bejelentése
       anonymous_warning: Ez a jegyzet névtelen felhasználók hozzászólásait is tartalmazza,
@@ -3036,6 +3138,10 @@ hu:
         overlays: További rétegek engedélyezése a térkép hibáinak javítása érdekében
         title: Rétegek
       openstreetmap_contributors: OpenStreetMap közreműködők
+      make_a_donation: Adományozz
+      website_and_api_terms: Webhely és API feltételek
+      osm_france: OpenStreetMap Franciaország
+      hotosm_name: Humanitárius OpenStreetMap csapat
     site:
       edit_tooltip: Térkép szerkesztése
       edit_disabled_tooltip: Közelíts a térkép szerkesztéséhez
index 714f6538009af7f6d4e8ed390af128456cd51ab9..bb971556a9267162e2ffd09754c7db14393ffada 100644 (file)
@@ -323,15 +323,10 @@ ia:
     destroy:
       success: Conto delite.
   browse:
-    created: Create a
-    closed: Claudite a
-    created_ago_html: Create %{time_ago}
-    closed_ago_html: Claudite %{time_ago}
-    created_ago_by_html: Create %{time_ago} per %{user}
-    closed_ago_by_html: Claudite %{time_ago} per %{user}
     deleted_ago_by_html: Delite %{time_ago} per %{user}
     edited_ago_by_html: Modificate %{time_ago} per %{user}
     version: Version
+    redacted_version: Version censurate
     in_changeset: Gruppo de modificationes
     anonymous: anonyme
     no_comment: (sin commento)
@@ -344,25 +339,11 @@ ia:
       other: '%{count} vias'
     download_xml: Discargar XML
     view_history: Vider historia
+    view_unredacted_history: Vider historia non censurate
     view_details: Vider detalios
+    view_redacted_data: Vider datos censurate
+    view_redaction_message: Vider message de censura
     location: 'Loco:'
-    changeset:
-      title: 'Gruppo de modificationes: %{id}'
-      belongs_to: Autor
-      node: Nodos (%{count})
-      node_paginated: Nodos (%{x}-%{y} de %{count})
-      way: Vias (%{count})
-      way_paginated: Vias (%{x}-%{y} de %{count})
-      relation: Relationes (%{count})
-      relation_paginated: Relationes (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Commento celate de %{user} %{time_ago}
-      comment_by_html: Commento de %{user} %{time_ago}
-      changesetxml: XML del gruppo de modificationes
-      osmchangexml: XML osmChange
-      join_discussion: Aperi session pro unir te al discussion
-      discussion: Discussion
-      still_open: Le gruppo de modificationes es ancora aperte. Le discussion se aperira
-        quando le gruppo de modificationes essera claudite.
     node:
       title_html: 'Nodo: %{name}'
       history_title_html: 'Historia del nodo: %{name}'
@@ -480,6 +461,46 @@ ia:
       feed:
         title: Gruppo de modificationes %{id}
         title_comment: Gruppo de modificationes %{id} - %{comment}
+        created: Create a
+        closed: Claudite a
+        belongs_to: Autor
+    subscribe:
+      heading: Abonar te al sequente discussion de gruppo de modificationes?
+      button: Abonar te al discussion
+    unsubscribe:
+      heading: Disabonar te del sequente discussion de gruppo de modificationes?
+      button: Disabonar te del discussion
+    heading:
+      title: Gruppo de modificationes %{id}
+      created_by_html: Create per %{link_user} le %{created}.
+    no_such_entry:
+      title: Gruppo de modificationes non trovate
+      heading: 'Nulle entrata con le ID: %{id}'
+      body: Non existe un gruppo de modificationes con le ID %{id}. Per favor verifica
+        le orthographia, o pote esser que le ligamine que tu sequeva es incorrecte.
+    show:
+      title: 'Gruppo de modificationes: %{id}'
+      created: 'Create: %{when}'
+      closed: 'Claudite: %{when}'
+      created_ago_html: Create %{time_ago}
+      closed_ago_html: Claudite %{time_ago}
+      created_ago_by_html: Create %{time_ago} per %{user}
+      closed_ago_by_html: Claudite %{time_ago} per %{user}
+      discussion: Discussion
+      join_discussion: Aperi session pro unir te al discussion
+      still_open: Le gruppo de modificationes es ancora aperte. Le discussion se aperira
+        quando le gruppo de modificationes essera claudite.
+      comment_by_html: Commento de %{user} %{time_ago}
+      hidden_comment_by_html: Commento celate de %{user} %{time_ago}
+      changesetxml: XML del gruppo de modificationes
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nodos (%{count})
+      nodes_paginated: Nodos (%{x}-%{y} de %{count})
+      ways: Vias (%{count})
+      ways_paginated: Vias (%{x}-%{y} de %{count})
+      relations: Relationes (%{count})
+      relations_paginated: Relationes (%{x}-%{y} de %{count})
     timeout:
       sorry: Le lista de gruppos de modificationes que tu requestava tardava troppo
         de tempore pro esser recuperate.
@@ -545,6 +566,7 @@ ia:
     show:
       title: Diario de %{user} | %{title}
       user_title: Diario de %{user}
+      discussion: Discussion
       leave_a_comment: Lassar un commento
       login_to_leave_a_comment_html: '%{login_link} pro lassar un commento'
       login: Aperir session
@@ -597,6 +619,12 @@ ia:
       comment: Commento
       newer_comments: Commentos plus recente
       older_comments: Commentos plus ancian
+    subscribe:
+      heading: Abonar te al sequente discussion de entrata de diario?
+      button: Abonar te al discussion
+    unsubscribe:
+      heading: Disabonar te del sequente discussion de entrata de diario?
+      button: Disabonar te del discussion
   doorkeeper:
     errors:
       messages:
@@ -1572,11 +1600,10 @@ ia:
     intro_text: OpenStreetMap es un carta del mundo, create per gente como tu e libere
       de usar sub un licentia aperte.
     intro_2_create_account: Crea un conto de usator
-    hosting_partners_html: Le allogiamento web es supportate per %{ucl}, %{fastly},
-      %{bytemark} e altere %{partners}.
-    partners_ucl: UCL
+    hosting_partners_2024_html: Le allogiamento web es supportate per %{fastly}, %{corpmembers}
+      e altere %{partners}.
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: Membros corporative de OSMF
     partners_partners: partners
     tou: Conditiones de uso
     osm_offline: Le base de datos de OpenStreetMap non es disponibile al momento debite
@@ -1598,6 +1625,7 @@ ia:
     more: Plus
   user_mailer:
     diary_comment_notification:
+      description: 'Entrata de diario de OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} commentava un entrata de diario'
       hi: Salute %{to_user},
       header: '%{from_user} ha commentate le entrata recente de diario OpenStreetMap
@@ -1608,6 +1636,8 @@ ia:
         o inviar un message al autor a %{replyurl}
       footer_html: Tu pote etiam leger le commento sur %{readurl} e tu pote commentar
         sur %{commenturl} o inviar un message al autor sur %{replyurl}
+      footer_unsubscribe: Tu pote disabonar te del discussion sur %{unsubscribeurl}
+      footer_unsubscribe_html: Tu pote disabonar te del discussion sur %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Salute %{to_user},
@@ -1673,6 +1703,7 @@ ia:
       click_the_link: Si isto es tu, per favor clicca sur le ligamine hic infra pro
         reinitialisar tu contrasigno.
     note_comment_notification:
+      description: 'Nota OpenStreetMap #%{id}'
       anonymous: Un usator anonyme
       greeting: Salute,
       commented:
@@ -1712,6 +1743,7 @@ ia:
       details: Plus detalios sur le nota pote esser trovate a %{url}.
       details_html: Plus detalios sur le nota pote esser trovate a %{url}.
     changeset_comment_notification:
+      description: 'Gruppo de modificationes OpenStreetMap #%{id}'
       hi: Salute %{to_user},
       greeting: Salute,
       commented:
@@ -1734,10 +1766,10 @@ ia:
         %{url}.
       details_html: Plus detalios sur le gruppo de modificationes pote esser trovate
         a %{url}.
-      unsubscribe: Pro disabonar te del actualisationes de iste gruppo de modificationes,
-        visita %{url} e clicca sur "Disabonar".
-      unsubscribe_html: Pro disabonar te del actualisationes de iste gruppo de modificationes,
-        visita %{url} e clicca sur "Disabonar".
+      unsubscribe: Tu pote disabonar te del actualisationes de iste gruppo de modificationes
+        sur %{url}.
+      unsubscribe_html: Tu pote disabonar te del actualisationes de iste gruppo de
+        modificationes sur %{url}.
   confirmations:
     confirm:
       heading: Verifica tu e-mail!
@@ -1820,18 +1852,18 @@ ia:
         one: '%{count message silentiate'
         other: Tu ha %{count} messages silentiate
     reply:
-      wrong_user: Tu es authenticate como "%{user}", ma le message al qual tu vole
-        responder non ha essite inviate a iste usator. Per favor aperi un session
-        como le usator correcte pro poter responder.
+      wrong_user: Tu es authenticate como ‘%{user}’, ma le message al qual tu vole
+        responder non ha essite inviate a iste usator. Per favor aperi session como
+        le usator correcte pro poter responder.
     show:
       title: Leger message
       reply_button: Responder
       unread_button: Marcar como non legite
       destroy_button: Deler
       back: Retornar
-      wrong_user: Tu es authenticate como "%{user}", ma le message que tu vole leger
-        non ha essite inviate per o a iste usator. Per favor aperi un session como
-        le usator correcte pro poter leger lo.
+      wrong_user: Tu es authenticate como ‘%{user}’, ma le message que tu vole leger
+        non ha essite inviate per o a iste usator. Per favor aperi session como le
+        usator correcte pro poter leger lo.
     sent_message_summary:
       destroy_button: Deler
     heading:
@@ -1855,9 +1887,9 @@ ia:
       help_text: Entra le adresse de e-mail que tu usava pro inscriber te, e nos te
         inviara un ligamine que tu pote usar pro reinitialisar tu contrasigno.
     create:
-      notice email on way: Es infortunate que tu lo perdeva :-( ma nos te ha inviate
-        un e-mail que te permittera de reinitialisar lo.
-      notice email cannot find: Non poteva trovar iste adresse de e-mail, pardono.
+      send_paranoid_instructions: Si tu adresse de e-mail existe in nostre base de
+        datos, tu recipera in qualque minutas un ligamine de recuperation de contrasigno
+        a tu adresse de e-mail.
     edit:
       title: Reinitialisar contrasigno
       heading: Reinitialisar le contrasigno de %{user}
@@ -2268,8 +2300,8 @@ ia:
         title: Guida pro comenciantes
         description: Guida pro comenciantes, mantenite per le communitate.
       community:
-        title: Foro del communitate
-        description: Un sito commun de conversation sur OpenStreetMap.
+        title: Foro de assistentia e communitate
+        description: Un loco commun ubi cercar adjuta e conversar sur OpenStreetMap.
       mailing_lists:
         title: Listas de diffusion
         description: Pone un question o discute cosas interessante sur un varietate
@@ -2553,8 +2585,8 @@ ia:
       identifiable: IDENTIFICABILE
       private: PRIVATE
       trackable: TRACIABILE
-      by: per
-      in: in
+      details_with_tags_html: '%{time_ago} per %{user} in %{tags}'
+      details_without_tags_html: '%{time_ago} per %{user}'
     index:
       public_traces: Tracias GPS public
       my_gps_traces: Mi tracias GPS
@@ -2650,6 +2682,7 @@ ia:
   oauth_clients:
     new:
       title: Registrar un nove application
+      disabled: Le registration de applicationes OAuth 1 ha essite disactivate
     edit:
       title: Modificar tu application
     show:
@@ -2733,6 +2766,7 @@ ia:
       title: Mi applicationes autorisate
       application: Application
       permissions: Permissiones
+      last_authorized: Ultime autorisation
       no_applications_html: Tu non ha ancora autorisate applicationes %{oauth2}.
     application:
       revoke: Revocar accesso
@@ -2869,9 +2903,11 @@ ia:
     index:
       title: Usatores
       heading: Usatores
-      showing:
-        one: Pagina %{page} (%{first_item} de %{items})
-        other: Pagina %{page} (%{first_item}-%{last_item} de %{items})
+      older: Usatores plus ancian
+      newer: Usatores plus nove
+      found_users:
+        one: '%{count} usator trovate'
+        other: '%{count} usatores trovate'
       summary_html: '%{name} create ab %{ip_address} le %{date}'
       summary_no_ip_html: '%{name} create le %{date}'
       confirm: Confirmar usatores seligite
@@ -3010,7 +3046,6 @@ ia:
       revoke: Revocar!
       confirm: Es tu secur?
       reason: 'Motivo del blocada:'
-      back: Vider tote le blocadas
       revoker: 'Revocator:'
       needs_view: Le usator debe aperir un session ante que iste blocada es cancellate.
     block:
@@ -3024,9 +3059,8 @@ ia:
       reason: Motivo del blocada
       status: Stato
       revoker_name: Revocate per
-      showing_page: Pagina %{page}
-      next: Sequente »
-      previous: « Precedente
+      older: Blocos plus ancian
+      newer: Blocos plus nove
   user_mutes:
     index:
       title: Usatores silentiate
index c930a0a2b87cfc61dd94e4f8969e03333ffb9ebf..55a8bc97f28ab73f10d746fc9d7e765e7ea9248c 100644 (file)
@@ -32,6 +32,7 @@
 # Author: Polos
 # Author: RXerself
 # Author: Rachmat04
+# Author: Rafka Aditia
 # Author: Reksa Tresna
 # Author: Relly Komaruzaman
 # Author: Rizkiahmadz
@@ -342,12 +343,6 @@ id:
     destroy:
       success: Akun Telah Dihapus.
   browse:
-    created: Dibuat
-    closed: Ditutup
-    created_ago_html: Dibuat %{time_ago}
-    closed_ago_html: Ditutup %{time_ago}
-    created_ago_by_html: Dibuat %{time_ago} oleh %{user}
-    closed_ago_by_html: Ditutup %{time_ago} oleh %{user}
     deleted_ago_by_html: Dihapus %{time_ago} oleh %{user}
     edited_ago_by_html: Disunting %{time_ago} oleh %{user}
     version: Versi
@@ -363,23 +358,6 @@ id:
     view_history: Versi terdahulu
     view_details: Lihat Rincian
     location: 'Lokasi:'
-    changeset:
-      title: 'Set Perubahan: %{id}'
-      belongs_to: Pembuat
-      node: Simpul (%{count})
-      node_paginated: Simpul (%{x}-%{y} dari %{count})
-      way: Jalan (%{count})
-      way_paginated: Jalan (%{x}-%{y} dari %{count})
-      relation: Hubungan (%{count})
-      relation_paginated: Hubungan (%{x}-%{y} dari %{count})
-      hidden_comment_by_html: Komentar tersembunyi dari %{user} %{time_ago}
-      comment_by_html: Komentar dari %{user} %{time_ago}
-      changesetxml: Set Perubahan XML
-      osmchangexml: osmChange XML
-      join_discussion: Masuk untuk bergabung diskusi
-      discussion: Diskusi
-      still_open: Set perubahan masih terbuka - diskusi akan dibuka ketika set perubahan
-        telah ditutup.
     node:
       title_html: 'Simpul: %{name}'
       history_title_html: 'Riwayat Simpul: %{name}'
@@ -494,6 +472,30 @@ id:
       feed:
         title: Set Perubahan %{id}
         title_comment: Set Perubahan %{id} - %{comment}
+        created: Dibuat
+        closed: Ditutup
+        belongs_to: Pembuat
+    show:
+      title: 'Set Perubahan: %{id}'
+      created_ago_html: Dibuat %{time_ago}
+      closed_ago_html: Ditutup %{time_ago}
+      created_ago_by_html: Dibuat %{time_ago} oleh %{user}
+      closed_ago_by_html: Ditutup %{time_ago} oleh %{user}
+      discussion: Diskusi
+      join_discussion: Masuk untuk bergabung diskusi
+      still_open: Set perubahan masih terbuka - diskusi akan dibuka ketika set perubahan
+        telah ditutup.
+      comment_by_html: Komentar dari %{user} %{time_ago}
+      hidden_comment_by_html: Komentar tersembunyi dari %{user} %{time_ago}
+      changesetxml: Set Perubahan XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Simpul (%{count})
+      nodes_paginated: Simpul (%{x}-%{y} dari %{count})
+      ways: Jalan (%{count})
+      ways_paginated: Jalan (%{x}-%{y} dari %{count})
+      relations: Hubungan (%{count})
+      relations_paginated: Hubungan (%{x}-%{y} dari %{count})
     timeout:
       sorry: Maaf, daftar kumpulan set perubahan yang Anda minta terlalu lama untuk
         diambil.
@@ -557,9 +559,10 @@ id:
     show:
       title: Catatan harian %{user} | %{title}
       user_title: Catatan harian %{user}
+      discussion: Diskusi
       leave_a_comment: Tinggalkan komentar
       login_to_leave_a_comment_html: '%{login_link} untuk meninggalkan komentar'
-      login: Masuk
+      login: Masuk log
     no_such_entry:
       title: Tidak ada entri catatan harian tersebut
       heading: 'Tidak ada entri dengan id: %{id}'
@@ -1577,11 +1580,7 @@ id:
     intro_text: OpenStreetMap adalah peta dunia, diciptakan oleh orang-orang seperti
       Anda dan bebas untuk digunakan di bawah lisensi terbuka.
     intro_2_create_account: Buat Akun
-    hosting_partners_html: Hosting didukung oleh %{ucl}, %{fastly}, %{bytemark}, dan
-      %{partners} lainnya.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Hosting Bytemark
     partners_partners: mitra
     tou: Ketentuan Penggunaan
     osm_offline: Database OpenStreetMap saat ini sedang dimatikan karena sedang dilakukan
@@ -1613,6 +1612,8 @@ id:
         berkomentar pada %{commenturl} atau membalas pada %{replyurl}
       footer_html: Anda juga dapat membaca komentar di %{readurl} dan Anda dapat berkomentar
         di %{commenturl} atau mengirim pesan kepada penulisnya di %{replyurl}
+      footer_unsubscribe: Anda dapat berhenti berlangganan diskusi di %{unsubscribeurl}
+      footer_unsubscribe_html: Anda dapat berhenti berlangganan diskusi di %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Halo %{to_user},
@@ -1674,6 +1675,7 @@ id:
       click_the_link: Jika ini Anda, silahkan klik link di bawah ini untuk menyetel
         ulang kata sandi.
     note_comment_notification:
+      description: 'Catatan OpenStreetMap #%{id}'
       anonymous: Seorang pengguna anonim
       greeting: Halo,
       commented:
@@ -1718,6 +1720,7 @@ id:
       details: Rincian lebih lanjut mengenai catatan dapat ditemukan di %{url}.
       details_html: Rincian lebih lanjut mengenai catatan dapat ditemukan di %{url}.
     changeset_comment_notification:
+      description: 'Set perubahan OpenStreetMap #%{id}'
       hi: Halo %{to_user},
       greeting: Halo,
       commented:
@@ -1739,10 +1742,10 @@ id:
       details: Rincian lebuh lanjut soal perubahan ini dapat dilihat di %{url}.
       details_html: Rincian lebih lanjut tentang set perubahan ini dapat dilihat di
         %{url}.
-      unsubscribe: Untuk berhenti berlangganan pembaruan perubahan set ini, kunjungi
-        %{url} dan kli "Berhenti berlangganan".
-      unsubscribe_html: Untuk berhenti berlangganan pembaruan perubahan set ini, kunjungi
-        %{url} dan tekan "Berhenti berlangganan".
+      unsubscribe: Anda dapat berhenti berlangganan pembaruan set perubahan ini di
+        %{url}.
+      unsubscribe_html: Anda dapat berhenti berlangganan pembaruan set perubahan ini
+        di %{url}.
   confirmations:
     confirm:
       heading: Periksa surel Anda!
@@ -1823,16 +1826,17 @@ id:
       messages:
         other: '%{count} pesan yang dibisukan'
     reply:
-      wrong_user: Anda login sebagai '%{user}' tapi pesan yang Anda balas tidak terkirim
-        ke pengguna. Silahkan login sebagai pengguna yang benar untuk membalas.
+      wrong_user: Anda masuk log sebagai '%{user}' tapi pesan yang Anda balas tidak
+        terkirim ke pengguna. Silahkan masuk log sebagai pengguna yang benar untuk
+        membalas.
     show:
       title: Baca pesan
       reply_button: Balas
       unread_button: Tandai belum dibaca
       destroy_button: Hapus
       back: Kembali
-      wrong_user: Anda login sebagai '%{user}' tetapi pesan yang anda balas tidak
-        dikirim oleh atau untuk pengguna tersebut. Silahkan login sebagai pengguna
+      wrong_user: Anda masuk log sebagai '%{user}' tetapi pesan yang anda balas tidak
+        dikirim oleh atau untuk pengguna tersebut. Silahkan masuk log sebagai pengguna
         yang benar untuk membacanya.
     sent_message_summary:
       destroy_button: Hapus
@@ -1858,9 +1862,9 @@ id:
         mengirim link ke alamat tersebut yang dapat Anda gunakan untuk menyetel ulang
         kata sandi Anda.
     create:
-      notice email on way: Maaf sudah hilang :-( namun sebuah email telah dikirimkan
-        agar Anda dapat segera mengatur ulang.
-      notice email cannot find: Tidak dapat menemukan alamat email tersebut, maaf.
+      send_paranoid_instructions: Jika alamat surel Anda ada di basis data kami, Anda
+        akan menerima tautan pemulihan kata sandi di alamat surel Anda dalam beberapa
+        menit.
     edit:
       title: Setel ulang kata sandi
       heading: Setel ulang kata sandi untuk %{user}
@@ -1913,13 +1917,13 @@ id:
       failure: Tidak dapat memperbarui profil.
   sessions:
     new:
-      title: Login
-      heading: Login
+      title: Masuk log
+      heading: Masuk log
       email or username: Alamat Email atau Nama Pengguna
       password: Kata Sandi
       remember: Ingat saya
       lost password link: Kehilangan kata sandi Anda?
-      login_button: Login
+      login_button: Masuk log
       register now: Daftar sekarang
       with external: 'Atau, gunakan pihak ketiga untuk masuk:'
       no account: Belum memiliki akun?
@@ -1931,25 +1935,25 @@ id:
           alt: Masuk log dengan URL OpenID
         google:
           title: Masuk log dengan Google
-          alt: Masuk dengan Google OpenID
+          alt: Masuk log dengan Google OpenID
         facebook:
-          title: Masuk dengan Facebook
-          alt: Masuk dengan akun Facebook
+          title: Masuk log dengan Facebook
+          alt: Masuk log dengan akun Facebook
         microsoft:
-          title: Masuk dengan Microsoft
-          alt: Masuk dengan akun Microsoft
+          title: Masuk log dengan Microsoft
+          alt: Masuk log dengan Akun Microsoft
         github:
           title: Masuk dengan GitHub.
-          alt: Masuk dengan Akun GitHub.
+          alt: Masuk log dengan Akun GitHub.
         wikipedia:
           title: Masuk log dengan Wikipedia
-          alt: Masuk log dengan akun Wikipedia
+          alt: Masuk log dengan Akun Wikipedia
         wordpress:
           title: Masuk log dengan Wordpress
           alt: Masuk log dengan Wordpress OpenID
         aol:
           title: Masuk log dengan AOL
-          alt: Masuk dengan AOL OpenID
+          alt: Masuk log dengan AOL OpenID
     destroy:
       title: Logout
       heading: Logout dari OpenStreetMap
@@ -2261,7 +2265,7 @@ id:
         title: Pedoman Pemula
         description: Panduan yang ditunjang komunitas bagi pemula.
       community:
-        title: Forum komunitas
+        title: Forum Bantuan & Komunitas
         description: Forum bincang-bincang OpenStreetMap.
       mailing_lists:
         title: Daftar Alamat
@@ -2543,8 +2547,6 @@ id:
       identifiable: DIIDENTIFIKASI
       private: PRIBADI
       trackable: DILACAK
-      by: oleh
-      in: dalam
     index:
       public_traces: Jejak GPS Umum
       my_gps_traces: Jejak GPS Saya
@@ -2858,9 +2860,6 @@ id:
     index:
       title: Pengguna
       heading: Pengguna
-      showing:
-        one: Page %{page} (%{first_item} dari %{items})
-        other: Page %{page} (%{first_item}-%{last_item} of %{items})
       summary_html: '%{name} dibuat dari %{ip_address} pada %{date}'
       summary_no_ip_html: '%{name} dibuat pada %{date}'
       confirm: Konfirmasi Pengguna yang Dipilih
@@ -2996,7 +2995,6 @@ id:
       revoke: Batalkan!
       confirm: Apakah Anda yakin?
       reason: 'Alasan untuk blokir:'
-      back: Lihat semua blokir
       revoker: 'Pembatal:'
       needs_view: Pengguna harus log in sebelum blokir ini dihapus.
     block:
@@ -3010,9 +3008,6 @@ id:
       reason: Alasan untuk blokir
       status: Status
       revoker_name: Dibatalkan oleh
-      showing_page: Halaman %{page}
-      next: Berikutnya »
-      previous: « Sebelumnya
   user_mutes:
     index:
       title: Pengguna yang Dibisukan
index dc7dd7427b4fd76709f00533191ce13a747eb144..df04164cdbf3664ac00fd20c01b3f751ed81ae30 100644 (file)
@@ -330,12 +330,6 @@ is:
     destroy:
       success: Aðgangi eytt.
   browse:
-    created: Búið til
-    closed: Lokað
-    created_ago_html: Búið til %{time_ago}
-    closed_ago_html: Lokað %{time_ago}
-    created_ago_by_html: Búið til %{time_ago} af %{user}
-    closed_ago_by_html: Lokað %{time_ago} af %{user}
     deleted_ago_by_html: Eytt %{time_ago} af %{user}
     edited_ago_by_html: Breytt %{time_ago} af %{user}
     version: Útgáfa
@@ -355,23 +349,6 @@ is:
     location: 'Staðsetning:'
     common_details:
       coordinates_html: '%{latitude}, %{longitude}'
-    changeset:
-      title: 'Breytingasett: %{id}'
-      belongs_to: Höfundur
-      node: Liðir (%{count})
-      node_paginated: Liðir (%{x}-%{y} af %{count})
-      way: Leiðir (%{count})
-      way_paginated: Leiðir (%{x}-%{y} af %{count})
-      relation: Vensl (%{count})
-      relation_paginated: Vensl (%{x}-%{y} af %{count})
-      hidden_comment_by_html: Falin umsögn frá %{user} %{time_ago}
-      comment_by_html: Umsögn frá %{user} %{time_ago}
-      changesetxml: XML breytingasetts
-      osmchangexml: XML osmChange
-      join_discussion: Skráðu þig inn til að taka þátt í umræðunni
-      discussion: Umræða
-      still_open: Breytingasett er enn opið - Umræða mun opnast þegar breytingasettinu
-        hefur verið lokað.
     node:
       title_html: 'Liður: %{name}'
       history_title_html: 'Saga hnúts: %{name}'
@@ -482,6 +459,30 @@ is:
       feed:
         title: Breytingasett %{id}
         title_comment: Breytingasett %{id} - %{comment}
+        created: Búið til
+        closed: Lokað
+        belongs_to: Höfundur
+    show:
+      title: 'Breytingasett: %{id}'
+      created_ago_html: Búið til %{time_ago}
+      closed_ago_html: Lokað %{time_ago}
+      created_ago_by_html: Búið til %{time_ago} af %{user}
+      closed_ago_by_html: Lokað %{time_ago} af %{user}
+      discussion: Umræða
+      join_discussion: Skráðu þig inn til að taka þátt í umræðunni
+      still_open: Breytingasett er enn opið - Umræða mun opnast þegar breytingasettinu
+        hefur verið lokað.
+      comment_by_html: Umsögn frá %{user} %{time_ago}
+      hidden_comment_by_html: Falin umsögn frá %{user} %{time_ago}
+      changesetxml: XML breytingasetts
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Liðir (%{count})
+      nodes_paginated: Liðir (%{x}-%{y} af %{count})
+      ways: Leiðir (%{count})
+      ways_paginated: Leiðir (%{x}-%{y} af %{count})
+      relations: Vensl (%{count})
+      relations_paginated: Vensl (%{x}-%{y} af %{count})
     timeout:
       sorry: Því miður, það tók of langan tíma að ná í listann yfir þau breytingasett
         sem þú baðst um.
@@ -1551,11 +1552,7 @@ is:
     intro_text: OpenStreetMap er heimskort gert af fólki eins og þér. Það er gefið
       út með opnu hugbúnaðarleyfi og það kostar ekkert að nota það.
     intro_2_create_account: Búa til notandaaðgang
-    hosting_partners_html: Vefhýsing er studd af %{ucl},%{fastly}, %{bytemark} og
-      öðrum %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: samstarfsaðilum
     tou: Notkunarskilmálar
     osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
@@ -1824,9 +1821,6 @@ is:
       new password button: Endurstilla lykilorð
       help_text: Sláðu inn netfangið sem þú skráðir þig með, við munum senda tengil
         á það sem þú getur notað til að breyta lykilorðinu þínu.
-    create:
-      notice email on way: Nýtt lykilorð er á leiðinni í innhólfið þitt.
-      notice email cannot find: Þetta netfang fannst ekki.
     edit:
       title: Endurstilla lykilorð
       heading: Endurstilla lykilorð fyrir %{user}
@@ -2563,8 +2557,6 @@ is:
       identifiable: AUÐKENNANLEGT
       private: EINKA
       trackable: REKJANLEGT
-      by: frá
-      in: í
     index:
       public_traces: Allir ferlar
       my_gps_traces: GPS ferlarnir mínir
@@ -2879,9 +2871,6 @@ is:
     index:
       title: Notendur
       heading: Notendur
-      showing:
-        one: Síða %{page} (%{first_item} af %{items})
-        other: Síða %{page} (%{first_item}-%{last_item} af %{items})
       summary_html: '%{name} var útbúinn frá %{ip_address} þann %{date}'
       summary_no_ip_html: '%{name} útbúinn þann %{date}'
       confirm: Staðfesta valda notendur
@@ -3012,7 +3001,6 @@ is:
       revoke: Eyða banninu
       confirm: Ertu viss?
       reason: 'Ástæða banns:'
-      back: Listi yfir öll bönn
       revoker: 'Eytt af:'
       needs_view: Notandinn þarf að innskrá sig áður en bannið fellur úr gildi.
     block:
@@ -3026,9 +3014,6 @@ is:
       reason: Ástæða banns
       status: Staða
       revoker_name: Eytt af
-      showing_page: Síða %{page}
-      next: Næsta »
-      previous: « Fyrri
   user_mutes:
     index:
       table:
index 846ec9139840f3cc6c83091872615f1a125b806f..0d5c829304d2bdf3c7e6f21f0aa4abadfa099f11 100644 (file)
@@ -26,6 +26,7 @@
 # Author: Jlrb+
 # Author: Kaitu
 # Author: Karika
+# Author: LametinoWiki
 # Author: Lollo
 # Author: Lorelai87
 # Author: Lorem Ipsum
@@ -98,6 +99,8 @@ it:
       messages:
         invalid_email_address: non sembra essere un indirizzo e-mail valido
         email_address_not_routable: non è instradabile
+        display_name_is_user_n: non puoi essere user_n a meno che n non sia il tuo
+          ID utente
       models:
         user_mute:
           is_already_muted: è già silenziato
@@ -379,15 +382,10 @@ it:
     destroy:
       success: Account eliminato.
   browse:
-    created: Creato
-    closed: Chiuso
-    created_ago_html: Creato %{time_ago}
-    closed_ago_html: Chiuso %{time_ago}
-    created_ago_by_html: Creato %{time_ago} da %{user}
-    closed_ago_by_html: Chiuso %{time_ago} da %{user}
     deleted_ago_by_html: Cancellato %{time_ago} da %{user}
     edited_ago_by_html: Modificato %{time_ago} da %{user}
     version: Versione
+    redacted_version: Versione rimossa
     in_changeset: Gruppo di modifiche
     anonymous: anonimo
     no_comment: (nessun commento)
@@ -400,25 +398,11 @@ it:
       other: '%{count} percorsi'
     download_xml: Scarica XML
     view_history: Visualizza cronologia
+    view_unredacted_history: Visualizza la cronologia non oscurata
     view_details: Vedi dettagli
+    view_redacted_data: Mostra dati rimossi
+    view_redaction_message: Vedi messaggio di rimozione
     location: 'Posizione:'
-    changeset:
-      title: 'Gruppo di modifiche: %{id}'
-      belongs_to: Autore
-      node: Nodi (%{count})
-      node_paginated: Nodi (%{x}-%{y} di %{count})
-      way: Percorsi (%{count})
-      way_paginated: Percorsi (%{x}-%{y} di %{count})
-      relation: Relazioni (%{count})
-      relation_paginated: Relazioni (%{x}-%{y} di %{count})
-      hidden_comment_by_html: Commento nascosto da %{user} %{time_ago}
-      comment_by_html: Commento da %{user} %{time_ago}
-      changesetxml: Gruppo di modifiche XML
-      osmchangexml: XML in formato osmChange
-      join_discussion: Accedi per unirti alla discussione
-      discussion: Discussione
-      still_open: Il gruppo di modifiche è ancora aperto - le discussioni saranno
-        disponibili quando verrà chiuso.
     node:
       title_html: 'Nodo: %{name}'
       history_title_html: 'Cronologia nodo: %{name}'
@@ -497,6 +481,15 @@ it:
       introduction: Clicca sulla cartina per disponibilità nei pressi.
       nearby: Disponibilità nei pressi
       enclosing: Elementi inglobanti
+  old_nodes:
+    not_found:
+      sorry: 'Impossibile trovare il nodo #%{id} alla versione %{version}.'
+  old_ways:
+    not_found:
+      sorry: 'Impossibile trovare il percorso #%{id} alla versione %{version}.'
+  old_relations:
+    not_found:
+      sorry: 'Impossibile trovare la relazione #%{id} alla versione %{version}.'
   changesets:
     changeset_paging_nav:
       showing_page: Pagina %{page}
@@ -528,6 +521,46 @@ it:
       feed:
         title: Gruppo di modifiche %{id}
         title_comment: Gruppo di modifiche %{id} - %{comment}
+        created: Creato
+        closed: Chiuso
+        belongs_to: Autore
+    subscribe:
+      heading: Vuoi iscriverti alla seguente discussione del gruppo di modifiche?
+      button: Iscriviti alla discussione
+    unsubscribe:
+      heading: Annullare l'iscrizione alla seguente discussione del gruppo di modifiche?
+      button: Annulla l'iscrizione alla discussione
+    heading:
+      title: Gruppo di modifiche %{id}
+      created_by_html: Creato da %{link_user} il %{created}.
+    no_such_entry:
+      title: Gruppo di modifiche non trovato
+      heading: 'Nessuna voce con l''ID: %{id}'
+      body: Non esiste alcun gruppo di modifiche con l’ID %{id}. Controlla la digitazione
+        o che il collegamento sul quale hai cliccato non sia errato.
+    show:
+      title: 'Gruppo di modifiche: %{id}'
+      created: 'Creato: %{when}'
+      closed: 'Chiuso: %{when}'
+      created_ago_html: Creato %{time_ago}
+      closed_ago_html: Chiuso %{time_ago}
+      created_ago_by_html: Creato %{time_ago} da %{user}
+      closed_ago_by_html: Chiuso %{time_ago} da %{user}
+      discussion: Discussione
+      join_discussion: Accedi per unirti alla discussione
+      still_open: Il gruppo di modifiche è ancora aperto - le discussioni saranno
+        disponibili quando verrà chiuso.
+      comment_by_html: Commento da %{user} %{time_ago}
+      hidden_comment_by_html: Commento nascosto da %{user} %{time_ago}
+      changesetxml: Gruppo di modifiche XML
+      osmchangexml: XML in formato osmChange
+    paging_nav:
+      nodes: Nodi (%{count})
+      nodes_paginated: Nodi (%{x}-%{y} di %{count})
+      ways: Percorsi (%{count})
+      ways_paginated: Percorsi (%{x}-%{y} di %{count})
+      relations: Relazioni (%{count})
+      relations_paginated: Relazioni (%{x}-%{y} di %{count})
     timeout:
       sorry: Spiacenti, l'elenco dei gruppi di modifiche che hai richiesto ha impiegato
         troppo tempo per poter essere recuperato.
@@ -645,6 +678,12 @@ it:
       comment: Commento
       newer_comments: Commenti più recenti
       older_comments: Commenti più vecchi
+    subscribe:
+      heading: Vuoi iscriverti alla seguente discussione sul diario?
+      button: Iscriviti alla discussione
+    unsubscribe:
+      heading: Annullare l'iscrizione alla seguente discussione sul diario?
+      button: Annulla l'iscrizione alla discussione
   doorkeeper:
     errors:
       messages:
@@ -1619,11 +1658,10 @@ it:
     intro_text: OpenStreetMap è una mappa del mondo, creata da persone come te e libera
       da utilizzare secondo una licenza aperta.
     intro_2_create_account: Crea un account utente
-    hosting_partners_html: L'hosting è supportato da %{ucl}, %{fastly}, %{bytemark},
+    hosting_partners_2024_html: L'hosting è supportato da %{fastly}, %{corpmembers}
       e da altri %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: Membri aziendali dell'OSMF
     partners_partners: partner
     tou: Condizioni d'uso
     osm_offline: Il database di OpenStreetMap è al momento non in linea per permettere
@@ -1645,6 +1683,7 @@ it:
     more: Altro
   user_mailer:
     diary_comment_notification:
+      description: 'Voce del diario OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} ha commentato una voce del diario'
       hi: Ciao %{to_user},
       header: '%{from_user} ha commentato la voce del diario OpenStreetMap con l''oggetto
@@ -1655,6 +1694,8 @@ it:
         oppure inviare un messaggio all'autore su %{replyurl}
       footer_html: Puoi anche leggere il commento su %{readurl} e puoi commentare
         su %{commenturl} oppure inviare un messaggio all'autore su %{replyurl}
+      footer_unsubscribe: Puoi annullare l'iscrizione alla discussione su %{unsubscribeurl}
+      footer_unsubscribe_html: Puoi annullare l'iscrizione alla discussione su %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Ciao %{to_user},
@@ -1692,6 +1733,8 @@ it:
           punto.
         other: sia stato caricato con successo con %{trace_points} su un totale di
           %{count} punti.
+      all_your_traces_html: Puoi vedere tutte le tue tracce GPX caricate con successo
+        su %{url}.
       subject: '[OpenStreetMap] Importazione GPX completata con successo'
     signup_confirm:
       subject: '[OpenStreetMap] Benvenuti su OpenStreetMap'
@@ -1718,6 +1761,7 @@ it:
       click_the_link: Se sei tu, per favore clicca sul link sotto per resettare la
         password
     note_comment_notification:
+      description: 'Nota OpenStreetMap #%{id}'
       anonymous: Un utente anonimo
       greeting: Ciao,
       commented:
@@ -1756,6 +1800,7 @@ it:
       details: Ulteriori dettagli sulla nota possono essere trovati su %{url}.
       details_html: Ulteriori dettagli sulla nota possono essere trovati su %{url}.
     changeset_comment_notification:
+      description: 'Gruppo di modifiche OpenStreetMap #%{id}'
       hi: Ciao %{to_user},
       greeting: Ciao,
       commented:
@@ -1900,10 +1945,8 @@ it:
         a cui verrà inviato un collegamento che permetterà la reimpostazione della
         propria password.
     create:
-      notice email on way: Siamo spiacenti che tu l'abbia persa :-( ma una email ti
-        è stata spedita in modo che tu la possa presto reimpostare.
-      notice email cannot find: Spiacenti, ma non è possibile trovare l'indirizzo
-        email.
+      send_paranoid_instructions: Se il tuo indirizzo e-mail esiste nel nostro database,
+        entro pochi minuti riceverai un link di recupero al tuo indirizzo e-mail.
     edit:
       title: Reimposta password
       heading: Reimposta password per %{user}
@@ -1975,10 +2018,10 @@ it:
           alt: Accedi con un OpenID di Google
         facebook:
           title: Accedi con Facebook
-          alt: Accedi con un account Facebook
+          alt: Accedi con un'utenza Facebook
         microsoft:
           title: Accedi con Microsoft
-          alt: Accedi con un account Microsoft
+          alt: Accedi con un'utenza Microsoft
         github:
           title: Accedi con GitHub
           alt: Effettua l'acceso con un'utenza GitHub
@@ -2444,6 +2487,7 @@ it:
           bicycle_shop: Negozio di biciclette
           bicycle_rental: Noleggio biciclette
           bicycle_parking: Parcheggio per biciclette
+          bicycle_parking_small: Piccolo parcheggio per biciclette
           toilets: Bagni pubblici
     welcome:
       title: Benvenuto!
@@ -2600,8 +2644,8 @@ it:
       identifiable: IDENTIFICABILE
       private: PRIVATO
       trackable: TRACCIABILE
-      by: da
-      in: in
+      details_with_tags_html: '%{time_ago} da %{user} in %{tags}'
+      details_without_tags_html: '%{time_ago} da %{user}'
     index:
       public_traces: Tracciati GPS pubblici
       my_gps_traces: Le mie tracce GPS
@@ -2692,11 +2736,13 @@ it:
       read_gpx: Leggi tracciati GPS privati
       write_gpx: Carica tracciati GPS
       write_notes: Modifica le note
+      write_redactions: Rimuovi dati cartografici
       read_email: Leggere indirizzo di posta elettronica utente
       skip_authorization: Approvazione automatica applicazione
   oauth_clients:
     new:
       title: Registra una nuova applicazione
+      disabled: La registrazione delle applicazioni OAuth 1 è stata disabilitata
     edit:
       title: Modifica la tua applicazione
     show:
@@ -2779,6 +2825,7 @@ it:
       title: Le mie applicazioni autorizzate
       application: Applicazione
       permissions: Permessi
+      last_authorized: Ultima autorizzazione
       no_applications_html: Non hai ancora alcuna applicazione %{oauth2}.
     application:
       revoke: Revoca accesso
@@ -2916,9 +2963,11 @@ it:
     index:
       title: Utenti
       heading: Utenti
-      showing:
-        one: Pagina %{page} (%{first_item} di %{items})
-        other: Pagina %{page} (%{first_item}-%{last_item} di %{items})
+      older: Utenti più vecchi
+      newer: Utenti più recenti
+      found_users:
+        one: '%{count} utente trovato'
+        other: '%{count} utenti trovati'
       summary_html: '%{name} creato da %{ip_address} il %{date}'
       summary_no_ip_html: '%{name} creato il %{date}'
       confirm: Conferma Utenti Selezionati
@@ -3059,7 +3108,6 @@ it:
       revoke: Revoca!
       confirm: Sei sicuro?
       reason: 'Motivazione del blocco:'
-      back: Visualizza tutti i blocchi
       revoker: 'Revocatore:'
       needs_view: L'utente deve collegarsi prima che questo blocco sia cancellato.
     block:
@@ -3073,9 +3121,13 @@ it:
       reason: Motivo del blocco
       status: Stato
       revoker_name: Revocato da
-      showing_page: Pagina %{page}
-      next: Successivo »
-      previous: « Precedente
+    navigation:
+      all_blocks: Tutti i blocchi
+      blocks_on_me: Blocchi su di me
+      blocks_on_user: Blocchi su %{user}
+      blocks_by_me: Blocchi applicati da me
+      blocks_by_user: Blocchi imposti da %{user}
+      block: 'Blocco #%{id}'
   user_mutes:
     index:
       title: Utenti silenziati
index f719d5538023d310ac3d2f0348c7536a9cce20be..218c87d3c4e9a926e5e533a636228263ac139bdd 100644 (file)
@@ -5,7 +5,9 @@
 # Author: Aefgh39622
 # Author: Ajeje Brazorf
 # Author: Amire80
+# Author: Aphaia
 # Author: Atysn
+# Author: Chqaz
 # Author: CmplstofB
 # Author: Danieldegroot2
 # Author: Endres
@@ -102,6 +104,9 @@ ja:
       messages:
         invalid_email_address: 有効なメールアドレスではないようです
         email_address_not_routable: ルート作成できません
+      models:
+        user_mute:
+          is_already_muted: さんはすでにミュートされています
     models:
       acl: アクセスコントロールリスト
       changeset: 変更セット
@@ -143,13 +148,13 @@ ja:
         url: メインのアプリケーションの URL(必須)
         callback_url: コールバック URL
         support_url: サポート URL
-        allow_read_prefs: ユーザー設定を読み込む。
-        allow_write_prefs: 利用者設定を変更する
-        allow_write_diary: æ\97¥è¨\98ã\82¨ã\83³ã\83\88ã\83ªã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\80\81ã\82³ã\83¡ã\83³ã\83\88ã\81\99ã\82\8bã\80\81å\8f\8bé\81\94ã\82\92ä½\9cã\82\8bã\80\82
-        allow_write_api: 地図を変更する
-        allow_read_gpx: 非公開GPSトレースを読み込む
+        allow_read_prefs: 利用者設定を読み込む
+        allow_write_prefs: 利用者設定を変更する
+        allow_write_diary: æ\97¥è¨\98ã\82¨ã\83³ã\83\88ã\83ªã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\83»ã\82³ã\83¡ã\83³ã\83\88ã\81\99ã\82\8bã\83»å\8f\8bé\81\94ã\82\92ä½\9cã\82\8b
+        allow_write_api: 地図を変更する
+        allow_read_gpx: 非公開GPSトレースを読み込む
         allow_write_gpx: GPSトレースをアップロードする
-        allow_write_notes: メモを変更する
+        allow_write_notes: メモを変更する
       diary_comment:
         body: 本文
       diary_entry:
@@ -195,7 +200,7 @@ ja:
         auth_uid: 認証 ID
         email: メール
         email_confirmation: メールアドレスの確認
-        new_email: 新しいメール アドレス
+        new_email: 新しいメールアドレス
         active: アクティブ
         display_name: 表示名
         description: プロフィールの説明
@@ -212,7 +217,7 @@ ja:
       trace:
         tagstring: カンマ区切り
       user_block:
-        reason: ユーザーがブロックされている理由です。メッセージは多くの人の目にふれることになるため、できるだけ冷静かつ理性的になり、できるだけ丁寧に状況を説明するようにしてください。すべての利用者がコミュニティ固有の用語を理解しているわけではないため、分かりやすい用語を使うように努めてください。
+        reason: 利用者がブロックされている理由です。メッセージは多くの人の目にふれることになるため、できるだけ冷静かつ理性的になり、できるだけ丁寧に状況を説明するようにしてください。すべての利用者がコミュニティ固有の用語を理解しているわけではないため、分かりやすい用語を使うように努めてください。
         needs_view: このブロックを解消するには、先に利用者がログインする必要がありますか?
       user:
         new_email: (非公開)
@@ -274,7 +279,7 @@ ja:
         title: OpenStreetMap メモ
         description_all: 報告されたメモ、コメントされたメモ、または閉じられたメモのリスト
         description_area: あなたのエリア [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
-          に関する注記で報告済みまたはコメント付きあるいは解決済みの一覧
+          に関する報告済み・コメント付き・解決済みメモの一覧
         description_item: メモ %{id} の RSS フィード
         opened: 新しいメモ (%{place} 付近)
         commented: 新しいコメント (%{place} 付近)
@@ -306,7 +311,7 @@ ja:
     edit:
       title: アカウントの編集
       my settings: 設定
-      current email address: 現在のメール アドレス
+      current email address: 現在のメールアドレス
       external auth: 外部認証
       openid:
         link: https://wiki.openstreetmap.org/wiki/JA:OpenID?uselang=ja
@@ -321,8 +326,8 @@ ja:
       contributor terms:
         heading: 協力者規約
         agreed: あなたは、新しい協力者規約を承諾しています。
-        not yet agreed: あなたはまだ新しい投稿規約を承諾していません。
-        review link text: ã\81\94é\83½å\90\88ã\81®è\89¯ã\81\84æ\99\82ã\81«ã\81\93ã\81®ã\83ªã\83³ã\82¯ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦æ\96°ã\81\97ã\81\84å\8d\94å\8a\9bè\80\85è¦\8fç´\84ã\82\92確èª\8dã\81®ä¸\8aã\80\81æ\89¿è«¾ã\81\97ã\81¦ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82
+        not yet agreed: ã\81\82ã\81ªã\81\9fã\81¯ã\80\81ã\81¾ã\81 æ\96°ã\81\97ã\81\84æ\8a\95稿è¦\8fç´\84ã\82\92æ\89¿è«¾ã\81\97ã\81¦ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82
+        review link text: ご都合の良い時にこのリンクをクリックして新しい協力者規約を確認の上、承諾してください。
         agreed_with_pd: また、あなたは、自分の編集結果がパブリックドメインにあるべきだと考えているということも宣言しています。
         link text: これは何ですか?
       save changes button: 変更を保存
@@ -331,23 +336,17 @@ ja:
       heading: 公開編集
       currently_not_public: 現在、あなたの編集内容は匿名であり、他の人があなたにメッセージを送ったり、あなたの位置情報を確認したりすることはできません。編集内容を表示し、Web
         サイトを通じて他の人があなたに連絡できるようにするには、下のボタンをクリックしてください。
-      only_public_can_edit: 0.6 API 変更以来,地図データを公開ユーザーだけが編集できます.
+      only_public_can_edit: 0.6 API 変更以来、地図データを登録利用者だけが編集できます.
       find_out_why: 理由を明らかにする
       email_not_revealed: あなたのメールアドレスが公開されることはありません
-      not_reversible: このアクションを元に戻すことはできず、すべての新規ユーザーはデフォルトで公開になります。
+      not_reversible: このアクションを元に戻すことはできず、すべての新規利用者はデフォルトで公開になります。
       make_edits_public_button: 自分の編集をすべて公開する
     update:
       success_confirm_needed: 利用者情報を更新しました。新着メールを確認して新しいメール アドレスを検証してください。
-      success: ユーザー情報を更新しました。
+      success: 利用者情報を更新しました。
     destroy:
-      success: アカウントを削除しました
+      success: アカウントを削除しました
   browse:
-    created: 作成
-    closed: クローズ
-    created_ago_html: '%{time_ago} に作成'
-    closed_ago_html: '%{time_ago}に閉じられました'
-    created_ago_by_html: '%{user}が%{time_ago}に作成'
-    closed_ago_by_html: '%{user}が%{time_ago}に閉じました'
     deleted_ago_by_html: '%{user}が%{time_ago}に削除'
     edited_ago_by_html: '%{user}が%{time_ago}に編集'
     version: バージョン
@@ -363,20 +362,6 @@ ja:
     view_history: 履歴を表示
     view_details: 詳細を表示
     location: '場所:'
-    changeset:
-      title: '変更セット: %{id}'
-      belongs_to: 著者
-      node: ノード (%{count})
-      node_paginated: ノード (%{x}-%{y} / %{count})
-      way: ウェイ (%{count}件)
-      way_paginated: ウェイ (%{x}-%{y} / %{count})
-      relation: リレーション (%{count}件)
-      relation_paginated: リレーション (%{x}-%{y} / %{count})
-      changesetxml: 変更セット XML
-      osmchangexml: OSM 差分 XML
-      join_discussion: 議論に参加するにはログインしてください
-      discussion: 議論
-      still_open: 変更セットが開いたままです - 議論を行うには変更セットを閉じる必要があります。
     node:
       title_html: 'ノード: %{name}'
       history_title_html: 'ノード: %{name} の履歴'
@@ -480,8 +465,29 @@ ja:
       feed:
         title: 変更セット %{id}
         title_comment: 変更セット %{id} - %{comment}
+        created: 作成
+        closed: クローズ
+        belongs_to: 著者
     subscribe:
       button: 議論に参加する
+    show:
+      title: '変更セット: %{id}'
+      created_ago_html: '%{time_ago} に作成'
+      closed_ago_html: '%{time_ago}に閉じられました'
+      created_ago_by_html: '%{user}が%{time_ago}に作成'
+      closed_ago_by_html: '%{user}が%{time_ago}に閉じました'
+      discussion: 議論
+      join_discussion: 議論に参加するにはログインしてください
+      still_open: 変更セットが開いたままです - 議論を行うには変更セットを閉じる必要があります。
+      changesetxml: 変更セット XML
+      osmchangexml: OSM 差分 XML
+    paging_nav:
+      nodes: ノード (%{count})
+      nodes_paginated: ノード (%{x}-%{y} / %{count})
+      ways: ウェイ (%{count}件)
+      ways_paginated: ウェイ (%{x}-%{y} / %{count})
+      relations: リレーション (%{count}件)
+      relations_paginated: リレーション (%{x}-%{y} / %{count})
     timeout:
       sorry: 申し訳ありませんが、要求した変更セットの一覧は時間がかかりすぎたため取得できませんでした。
   changeset_comments:
@@ -506,16 +512,16 @@ ja:
       friend: 友達
     show:
       title: 私のダッシュボード
-      no_home_location_html: '%{edit_profile_link}そして、近くのユーザーが表示されるように自宅の場所を設定します。'
+      no_home_location_html: '%{edit_profile_link}そして、近くの利用者が表示されるように自宅の場所を設定します。'
       edit_your_profile: プロフィールの編集
-      my friends: 友だち
+      my friends: 友
       no friends: あなたはまだ誰も友達として登録していません。
       nearby users: 周辺にいるその他の利用者
       no nearby users: あなたの活動地域周辺に他のマッパーはいないようです。
       friends_changesets: 友達による変更セット
       friends_diaries: 友達の日記エントリ
-      nearby_changesets: 周辺の利用者のメモ
-      nearby_diaries: 周辺のユーザーの日記エントリ
+      nearby_changesets: 周辺の利用者の変更セット
+      nearby_diaries: 周辺の利用者の日記エントリ
   diary_entries:
     new:
       title: 日記エントリの新規作成
@@ -523,11 +529,11 @@ ja:
       location: 位置
       use_map_link: 地図を使用
     index:
-      title: å\88©ç\94¨è\80\85ã\81\95ã\82\93ã\81®æ\97¥è¨\98
+      title: 利用者の日記
       title_friends: 友達の日記
       title_nearby: 周辺の利用者の日記
       user_title: '%{user}さんの日記'
-      in_language_title: '%{language} の日記エントリ'
+      in_language_title: '%{language}の日記エントリ'
       new: 日記エントリを新規作成
       new_title: 自分の日記にエントリを新規作成
       my_diary: 自分の日記
@@ -550,13 +556,13 @@ ja:
       body: ID が %{id} のコメントや日記は存在しません。URLにスペルミスがないか確認をしてください。またはリンク元が間違っています。
     diary_entry:
       posted_by_html: '%{link_user} が %{created} に投稿 (%{language_link}) 。'
-      updated_at_html: 最終更新日 %{updated}
+      updated_at_html: 最終更新日 %{updated}
       comment_link: このエントリにコメント
       reply_link: 筆者にメッセージを送る
       comment_count:
         other: '%{count} コメント'
       no_comments: (コメントなし)
-      edit_link: この記事の編集
+      edit_link: このエントリを編集
       hide_link: このエントリを隠す
       unhide_link: このエントリを表示
       confirm: 確認
@@ -611,13 +617,13 @@ ja:
       heading: '%{user} を友達に追加しますか?'
       button: 友達に追加
       success: '%{name} と友達になりました!'
-      failed: '%{name} を友達と登録できませんでした。'
+      failed: '%{name} を友達として登録できませんでした。'
       already_a_friend: あなたは %{name} と既に友達です。
       limit_exceeded: 短い間隔で大量の友達申請を送っていますね。しばらくしてから友達申請してください。
     remove_friend:
       heading: '%{user} を友達から削除しますか?'
       button: 友達を解除
-      success: '%{name} ã\81¨ã\81®å\8f\8bé\81\94ã\82\92解除しました。'
+      success: '%{name} ã\82\92å\8f\8bé\81\94ã\81\8bã\82\89解除しました。'
       not_a_friend: '%{name} は友達ではありません。'
   geocoder:
     search_osm_nominatim:
@@ -651,7 +657,7 @@ ja:
         amenity:
           animal_boarding: 動物宿泊施設
           animal_shelter: 動物保護施設
-          arts_centre: アート センター
+          arts_centre: アートセンター
           atm: ATM
           bank: 銀行
           bar: バー
@@ -669,7 +675,7 @@ ja:
           cafe: 喫茶店
           car_rental: レンタカー
           car_sharing: カーシェアリング
-          car_wash: 洗車
+          car_wash: 洗車
           casino: 賭場
           charging_station: 充電ステーション
           childcare: 保育所
@@ -677,14 +683,14 @@ ja:
           clinic: 診療所
           clock: 時計
           college: 短期大学・専門学校
-          community_centre: コミュニティ センター
+          community_centre: コミュニティセンター
           conference_centre: 会議施設
           courthouse: 裁判所
           crematorium: 火葬場
           dentist: 歯科医
           doctors: 医師
-          drinking_water: é£²ã\81¿æ°´
-          driving_school: 自動車学校
+          drinking_water: æ°´é£²ã\81¿å ´
+          driving_school: 自動車教習所
           embassy: 大使館
           events_venue: イベント会場
           fast_food: ファストフード
@@ -723,7 +729,7 @@ ja:
           post_box: 郵便ポスト
           post_office: 郵便局
           prison: 刑務所
-          pub: パブ
+          pub: 居酒屋
           public_bath: 公衆浴場
           public_bookcase: ブックポスト
           public_building: 公共建築物
@@ -742,7 +748,7 @@ ja:
           telephone: 公衆電話
           theatre: 劇場
           toilets: トイレ
-          townhall: 市庁舎
+          townhall: タウンホール
           training: トレーニング施設
           university: 大学
           vehicle_inspection: 車検場
@@ -761,8 +767,8 @@ ja:
           administrative: 行政境界
           census: 国勢調査の境界
           national_park: 国立公園
-          political: 選挙区
-          protected_area: 保護された領域
+          political: 選挙区の境界
+          protected_area: 保護
           "yes": 境界
         bridge:
           aqueduct: 水道橋
@@ -823,7 +829,7 @@ ja:
           sport: スポーツクラブ
           "yes": クラブ
         craft:
-          beekeeper: 養蜂
+          beekeeper: 養蜂
           blacksmith: 金属加工
           brewery: 醸造所
           carpenter: 工務店
@@ -838,7 +844,7 @@ ja:
           hvac: 空調システム施工業
           metal_construction: 鉄工所
           painter: 塗装業
-          photographer: 撮影者
+          photographer: 写真館
           plumber: 配管業
           roofer: 屋根施工業
           sawmill: 製材所
@@ -870,11 +876,11 @@ ja:
           corridor: 通路
           crossing: 交差点
           cycleway: 自転車道
-          elevator: エレベータ
+          elevator: エレベータ
           emergency_access_point: 緊急アクセスポイント
           emergency_bay: 緊急停車帯
           footway: 歩道
-          ford: 
+          ford: 洗い越し
           give_way: 前方優先道路標識
           living_street: 住宅街
           milestone: マイルストーン
@@ -919,7 +925,7 @@ ja:
           battlefield: 戦場
           boundary_stone: 境界石
           building: 歴史的な建物
-          bunker: 貯蔵庫
+          bunker: 掩体壕
           cannon: 引退大砲
           castle: 城
           charcoal_pile: 炭窯跡
@@ -930,9 +936,9 @@ ja:
           heritage: 遺産
           hollow_way: 切土 (堀切)
           house: 住宅
-          manor: 荘園
+          manor: 歴史的邸宅
           memorial: 記念碑
-          milestone: 古い道標
+          milestone: 歴史的な道標
           mine: 鉱山
           mine_shaft: 竪坑
           monument: 記念碑
@@ -945,7 +951,7 @@ ja:
           tower: 塔
           wayside_chapel: 祠 (ほこら)
           wayside_cross: 道路際の十字架
-          wayside_shrine: 道祖神
+          wayside_shrine: 路傍の神仏
           wreck: 沈没船
           "yes": 史跡
         junction:
@@ -1076,7 +1082,7 @@ ja:
         military:
           airfield: 軍用飛行場
           barracks: バラック
-          bunker: 貯蔵庫
+          bunker: 掩体壕
           checkpoint: 検問所
           trench: 溝
           "yes": 軍用施設
@@ -1407,8 +1413,8 @@ ja:
       not_updated: 更新はありません
       search: 検索
       search_guidance: '検索の問題点:'
-      user_not_found: ユーザーが存在しません
-      issues_not_found: このような問題はありません
+      user_not_found: 利用者が存在しません
+      issues_not_found: このような問題はありません
       status: 状態
       reports: 報告
       last_updated: 最近の更新
@@ -1463,7 +1469,7 @@ ja:
         intro: サイトの仲裁者にレポートを送信する前に、以下の各点をご確認ください。
         not_just_mistake: 問題が単純ミスでないと確証している
         unable_to_fix: ご自身またはコミュニティの仲間の皆さんの手を借りて取り組んだが、問題を修正できなかった
-        resolve_with_user: 当事者であるユーザとすでに問題解決を試みた
+        resolve_with_user: 当事者である利用者とすでに問題解決を試みた
       categories:
         diary_entry:
           spam_label: この日誌の内容はスパムを含む/スパムである
@@ -1479,7 +1485,7 @@ ja:
           spam_label: この利用者プロフィールはスパムを含む/スパムである
           offensive_label: この利用者プロフィールは卑猥/違法である
           threat_label: この利用者プロフィールは脅迫を含む
-          vandal_label: このユーザは破壊者である
+          vandal_label: この利用者は破壊者である
           other_label: その他
         note:
           spam_label: この注記はスパムである
@@ -1495,7 +1501,7 @@ ja:
     home: ホーム地点に移動
     logout: ログアウト
     log_in: ログイン
-    sign_up: ユーザー登録
+    sign_up: 利用者登録
     start_mapping: マッピングを開始
     edit: 編集
     history: 履歴
@@ -1512,10 +1518,7 @@ ja:
     intro_header: OpenStreetMap へようこそ!
     intro_text: OpenStreetMap は、あなたのような人々が作成した世界地図であり、オープン ライセンスの下で自由に利用できます。
     intro_2_create_account: 新しい利用者アカウントを作成
-    hosting_partners_html: ホスティングは、%{ucl}、%{fastly}、%{bytemark}、およびその他の%{partners}によってサポートされています。
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: バイトマーク ホスティング
     partners_partners: パートナー
     tou: 利用規約
     osm_offline: OpenStreetMap のデータベースはメンテナンスのため一時的に停止しています。
@@ -1665,11 +1668,13 @@ ja:
       to: 宛先
       subject: 件名
       date: 日付
+      actions: 操作
     message_summary:
       unread_button: 未読にする
       read_button: 既読にする
       reply_button: 返信
       destroy_button: 削除
+      unmute_button: 受信箱へ移動
     new:
       title: メッセージの送信
       send_message_to_html: '%{name} への新規メッセージ送信'
@@ -1683,10 +1688,15 @@ ja:
       body: 申し訳ありませんが、この ID のメッセージはありません。
     outbox:
       title: 送信箱
+      actions: 操作
       messages:
         other: '%{count} 件の送信済みメッセージがあります'
       no_sent_messages_html: 送信したメッセージはまだありません。%{people_mapping_nearby_link}とお近づきになってはいかがですか?
       people_mapping_nearby: 近所でマッピングしている人々
+    muted:
+      title: ミュートされたメッセージ
+      messages:
+        other: '%{count} 件のミュートされたメッセージがあります'
     reply:
       wrong_user: あなたは「%{user}」としてログインしていますが、返信しようとしたメッセージはこの利用者宛てではありません。返信するには、正しい利用者としてログインしてください。
     show:
@@ -1695,15 +1705,19 @@ ja:
       unread_button: 未読にする
       destroy_button: 削除
       back: 戻る
-      wrong_user: あなたは「%{user}」としてログインしていますが、閲覧しようとしたメッセージは、この利用者が送信したものでも、この利用者宛てのものでもありません。メッセージを閲覧するには、正しいユーザーとしてログインしてください。
+      wrong_user: あなたは「%{user}」としてログインしていますが、閲覧しようとしたメッセージは、この利用者が送信したものでも、この利用者宛てのものでもありません。メッセージを閲覧するには、正しい利用者としてログインしてください。
     sent_message_summary:
       destroy_button: 削除
     heading:
       my_inbox: 自分の受信箱
-      my_outbox: 自分の送信ボックス
+      my_outbox: 自分の送信箱
+      muted_messages: ミュートされたメッセージ
     mark:
       as_read: 既読メッセージ
       as_unread: 未読メッセージ
+    unmute:
+      notice: メッセージは受信箱に移動されました
+      error: メッセージを受信箱に移動できませんでした。
     destroy:
       destroyed: メッセージを削除しました
   passwords:
@@ -1712,10 +1726,9 @@ ja:
       heading: パスワードを忘れた場合はこちら
       email address: 'メールアドレス:'
       new password button: パスワードを再設定
-      help_text: ユーザー登録に使用したメール アドレスを入力してください。そのアドレス宛に、パスワードを再設定するためのリンクをお送りします。
+      help_text: 利用者登録に使用したメール アドレスを入力してください。そのアドレス宛に、パスワードを再設定するためのリンクをお送りします。
     create:
-      notice email on way: すみません。紛失してしまいました :-( しかし、メールをお送りしたので、すぐにリセットできるでしょう。
-      notice email cannot find: 申し訳ありませんが、このメール アドレスは見つかりません。
+      send_paranoid_instructions: メールアドレスが当サイトのデータベースに存在する場合、数分以内にあなたのメールアドレスにパスワード復元リンクが送信されます。
     edit:
       title: パスワードの再設定
       heading: '%{user} のパスワードのリセット'
@@ -1756,7 +1769,9 @@ ja:
       home location: ホーム地点
       no home location: あなたはまだホーム地点を登録していません。
       update home location on click: ホーム地点を、地図上のクリックした地点に変更
+      show: 表示
       delete: 削除
+      undelete: 削除を取り消し
     update:
       success: プロフィール更新済み。
       failure: プロファイルを更新できませんでした。
@@ -1772,11 +1787,11 @@ ja:
       register now: 今すぐ登録
       with external: 'サードパーティのアカウントでもログインできます:'
       no account: アカウントを持っていませんか?
-      auth failure: ç\94³ã\81\97訳ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\81\8cã\80\81å\85¥å\8a\9bã\81\97ã\81\9fæ\83\85å ±ã\81§ログインできませんでした。
+      auth failure: ç\94³ã\81\97訳ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\81\8cã\80\81å\85¥å\8a\9bã\81\95ã\82\8cã\81\9fæ\83\85å ±ã\81§ã\81¯ログインできませんでした。
       openid_logo_alt: OpenID でログイン
       auth_providers:
         openid:
-          title: OpenIDでログイン
+          title: OpenID でログイン
           alt: OpenID URLでログイン
         google:
           title: Googleでログイン
@@ -1827,16 +1842,16 @@ ja:
     about:
       next: 次へ
       used_by_html: '%{name} は数千ものウェブサイト、モバイル アプリ、ハードウェア機器に地図データを提供しています'
-      lede_text: OpenStreetMapã\81¯ã\80\81é\81\93è·¯ã\80\81é\80\9aè·¯ã\80\81ã\82«ã\83\95ã\82§ã\80\81é\89\84é\81\93é§\85ã\81ªã\81©ã\80\81ä¸\96ç\95\8c中ã\81«ã\81\82ã\82\8bã\81\99ã\81¹ã\81¦ã\81®ã\82\82ã\81®ã\81«é\96¢ã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92æ\8f\90ä¾\9bã\83»ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9eã\83\83ã\83\91ã\83¼ã\81®ã\82³ã\83\9fã\83¥ã\83\8bã\83\86ã\82£ã\81«ã\82\88ã\81£ã\81¦æ§\8bç¯\89ã\81\95ã\82\8cã\81¾ã\81\97ã\81\9f
+      lede_text: OpenStreetMapã\81¯ã\80\81é\81\93è·¯ã\80\81é\80\9aè·¯ã\80\81ã\82«ã\83\95ã\82§ã\80\81é\89\84é\81\93é§\85ã\81ªã\81©ã\80\81ä¸\96ç\95\8c中ã\81«ã\81\82ã\82\8bã\81\99ã\81¹ã\81¦ã\81®ã\82\82ã\81®ã\81«é\96¢ã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92æ\8f\90ä¾\9bã\83»ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9eã\83\83ã\83\91ã\83¼ã\81®ã\82³ã\83\9fã\83¥ã\83\8bã\83\86ã\82£ã\81«ã\82\88ã\81£ã\81¦æ§\8bç¯\89ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99
       local_knowledge_title: 地元の情報
       local_knowledge_html: OpenStreetMapは地域の知識を強調します。協力者は航空写真やGPS機器、ローテクのフィールド地図を使用して、OpenStreetMapが正確で最新の状態であることを確認します。
       community_driven_title: コミュニティ主導
-      community_driven_1_html: OpenStreetMapのコミュニティは多様で、情熱的で、毎日成長しています。協力者には地図作りマニア、GISの専門家、OpenStreetMapサーバーを稼働させている技術者、被災地の地図作りをする人道主義者などを含みます。コミュニティについて詳しくは、%{osm_blog_link}、%{user_diaries_link}、%{community_blogs_link}と%{osm_foundation_link}のウェブサイトをご覧ください。
+      community_driven_1_html: OpenStreetMapのコミュニティは多様で、情熱的で、毎日成長しています。協力者には地図作りマニア、GISの専門家、OpenStreetMapサーバーを稼働させている技術者、被災地の地図作りをする人道支援家などを含みます。コミュニティについて詳しくは、%{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_community_blogs: コミュニティブログ
       community_driven_osm_foundation: OSM財団
-      open_data_title: オープン データ
+      open_data_title: オープンデータ
       open_data_1_html: OpenStreetMapは%{open_data}です。利用者はOpenStreetMapと協力者の著作権を表示すれば、いかなる目的にも無料で利用することができます。もし何らかの方法でデータを変更したり二次データを作成したりした場合も、同じライセンス条件下でのみ結果を配布できます。詳しくは、%{copyright_license_link}をご覧ください。
       open_data_open_data: オープンデータ
       open_data_copyright_license: 著作権とライセンス
@@ -1901,8 +1916,8 @@ ja:
     edit:
       not_public: あなたの編集結果を公開できません。
       not_public_description_html: このようなことをしない限り、あなたは地図を編集できません。あなたは%{user_page}から編集内容を公開できます。
-      user_page_link: ユーザーページ
-      anon_edits_link_text: ã\81ªã\81\9cã\81\93ã\82\8cã\82\8cã\81\8cäº\8bä¾\8bã\81ªã\81®ã\81\8bã\82\92è¦\8bる。
+      user_page_link: 利用者ページ
+      anon_edits_link_text: ã\81ªã\81\9cã\81\9dã\81\86ã\81ªã\81®ã\81\8bã\82\92調ã\81¹る。
       id_not_configured: iDが設定されていません。
       no_iframe_support: あなたのブラウザーは、この機能に必須の HTML iframe に未対応です。
     export:
@@ -1945,7 +1960,7 @@ ja:
         description: OpenStreetMap の基礎を網羅しているこのクイック ガイドから始めましょう。
       beginners_guide:
         title: 初心者向けの手引き
-        description: ã\82³ã\83\9fã\83¥ã\83\8bã\83\86ã\82£ã\81¯ã\80\81å\88\9då¿\83è\80\85å\90\91ã\81\91ã\82¬ã\82¤ã\83\89ã\81\8c整備しています。
+        description: ã\82³ã\83\9fã\83¥ã\83\8bã\83\86ã\82£ã\81\8cã\80\81å\88\9då¿\83è\80\85å\90\91ã\81\91ã\82¬ã\82¤ã\83\89ã\82\92整備しています。
       community:
         title: コミュニティフォーラム
       mailing_lists:
@@ -1965,10 +1980,10 @@ ja:
         description: 詳細な OpenStreetMap の説明が書かれたウィキを参照します。
     potlatch:
       removed: お使いの OpenStreetMap エディタは既定では Potlatch が選択されています。 Adobe Flash Player
-        の撤退により、 Potlatch is はウェブブラウザ上で利用できなくなりました。
-      download: macOS および Windows 用のデスクトップ アプリケーションのダウンロード
-      id_editor_html: 代わりに、デフォルトのエディターを iD に設定することもできます。iD は、以前のPotlatchのように、Web ブラウザーで実行されます。
-        %{change_preferences_link}。
+        の撤退により、 Potlatch はウェブブラウザ上で利用できなくなりました。
+      download: MacOS および Windows 用のデスクトップ アプリケーションのダウンロード
+      id_editor_html: 代わりに、デフォルトのエディターを iD に設定することもできます。iD は、以前の Potlatchのように、Web
+        ブラウザーで実行されます。 %{change_preferences_link}。
     any_questions:
       title: 何か質問はありますか?
       get_help_here: ヘルプを取得
@@ -2057,9 +2072,12 @@ ja:
         an_editor_html: '%{editor}は、地図を編集できるプログラムやウェブサイトです。'
         editor: 編集者
         node: ノード
+        way: ウェイ
         tag: タグ
       rules:
         title: ルール
+        imports: インポート
+        automated_edits: 自動編集
       start_mapping: マッピングを開始
       add_a_note:
         title: 編集する時間がないためメモを残します
@@ -2069,14 +2087,23 @@ ja:
         the_map: マップ
     communities:
       title: コミュニティ
+      lede_text: |-
+        世界中の人びとが OpenStreetMap に貢献し、OpenStreetMap を使用しています。
+        多くは個人として参加していますが、コミュニティをつくる人たちもいます。
+        コミュニティにはさまざまなサイズがあり、小さな町から複数の国からなる大規模な地域まで多岐に渡る地理的範囲を表示しています。
+        コミュニティには公式のものも、非公式のものもあります。
       local_chapters:
-        title: 地域支部
+        title: 地域別協会
+        about_text: 地域別協会とは、国レベルまたは地域レベルのグループのうち非営利法人を設立するという正式な手順を踏んだものです。地域の政府・企業・メディアとやり取りする際に、地域別協会はその地域の地図とマッパーを代表します。また
+          OpenStreetMap Foundation (OSMF) と提携し、法的な著作権管理機関へのリンクを提供します。
+        list_text: 以下のコミュニティは、地域別協会として正式に設立されています。
       other_groups:
         title: その他のグループ
         other_groups_html: |-
           国・地域別協会と同等の公式なグループを設立する必要はありません。
           実際に多くのグループが非公式な集まりとして、または
           コミュニティグループとして非常にうまく存続しています。誰でもこれらを設定または参加できます。 %{communities_wiki_link} で詳細をお読みください。
+        communities_wiki: コミュニティウィキのページ
   traces:
     visibility:
       private: 非公開 (匿名、点は順不同)
@@ -2141,8 +2168,6 @@ ja:
       identifiable: 識別可能
       private: 非公開
       trackable: 追跡可能
-      by: '投稿者:'
-      in: 'タグ:'
     index:
       public_traces: 公開GPSトレース
       my_gps_traces: 自作のGPSトレース
@@ -2186,13 +2211,14 @@ ja:
       oauth1_settings: OAuth 1 設定
       oauth2_applications: OAuth 2 アプリケーション
       oauth2_authorizations: OAuth 2 認証
+      muted_users: ミュートした利用者
   oauth:
     authorize:
       title: あなたのアカウントへのアクセスの認証
       request_access_html: アプリケーション %{app_name} があなたのアカウント%{user} への接続許可を求めています。そのアプリケーションに以下を許可してもよいかどうかを確認してください。単独もしくは複数の許可を与えることができます。
       allow_to: 'クライアント アプリケーションに以下の操作を許可する:'
       allow_read_prefs: 自分の利用者設定を読み込む。
-      allow_write_prefs: 自分のユーザー設定を変更する。
+      allow_write_prefs: 自分の利用者設定を変更する。
       allow_write_diary: 日記エントリを作成する、コメントする、友達を作る。
       allow_write_api: 地図を変更する。
       allow_read_gpx: 自分の非公開GPSトレースを読み込む。
@@ -2212,14 +2238,14 @@ ja:
     permissions:
       missing: この機能についてアプリケーションにアクセスを許可していません。
     scopes:
-      read_prefs: ユーザー設定の読み込み
-      write_prefs: ユーザー設定の変更
-      write_diary: æ\97¥è¨\98ã\82¨ã\83³ã\83\88ã\83ªã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\80\81ã\82³ã\83¡ã\83³ã\83\88ã\81\99ã\82\8bã\80\81å\8f\8bé\81\94ã\82\92ä½\9cã\82\8bã\80\82
+      read_prefs: 利用者設定の読み込み
+      write_prefs: 利用者設定の変更
+      write_diary: æ\97¥è¨\98ã\82¨ã\83³ã\83\88ã\83ªã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\83»ã\82³ã\83¡ã\83³ã\83\88ã\81\99ã\82\8bã\83»å\8f\8bé\81\94ã\82\92ä½\9cã\82\8b
       write_api: マップの修正
       read_gpx: 非公開GPSトレースを読む
-      write_gpx: GPSトレースをアップロードする
-      write_notes: メモを変更する
-      read_email: ユーザーのメールアドレスを読む
+      write_gpx: GPSトレースをアップロードする
+      write_notes: メモを変更する
+      read_email: 利用者のメールアドレスを読む
       skip_authorization: 自動的に申請を承認する
   oauth_clients:
     new:
@@ -2308,7 +2334,7 @@ ja:
       confirm_revoke: このアプリケーションへのアクセスを取り消しますか?
   users:
     new:
-      title: ユーザー登録
+      title: 利用者登録
       no_auto_account_create: 残念ながら、現在、自動ではアカウントを作成できません。
       support: サポート
       about:
@@ -2317,7 +2343,7 @@ ja:
       external auth: 'サードパーティ認証:'
       use external auth: サードパーティのアカウントでもログインできます
       auth no password: サードパーティ認証があるとパスワードは不要ですが、それでもその他のツールやサーバーが必要な場合があります。
-      continue: ユーザー登録
+      continue: 利用者登録
       terms accepted: 新しい協力者規約を承諾していただき、ありがとうございます!
       privacy_policy: プライバシー・ポリシー
     terms:
@@ -2364,7 +2390,8 @@ ja:
       my_dashboard: 私のダッシュボード
       blocks on me: 自分に与えられたブロック
       blocks by me: 自分が実行したブロック
-      create_mute: この利用者をミュートする
+      create_mute: この利用者をミュート
+      destroy_mute: この利用者のミュートを解除
       edit_profile: プロフィールを編集
       send message: メッセージを送信
       diary: 日記
@@ -2377,13 +2404,13 @@ ja:
       ct status: '協力者規約:'
       ct undecided: 未決定
       ct declined: 拒否
-      email address: 'メール アドレス:'
+      email address: 'メールアドレス:'
       created from: '作成日:'
       status: '状態:'
       spam score: 'スパム評価:'
       role:
-        administrator: このユーザーは管理者です
-        moderator: このユーザーはモデレーターです
+        administrator: この利用者は管理者です
+        moderator: この利用者はモデレーターです
         grant:
           administrator: 管理者権限を許可
           moderator: モデレーター権限を許可
@@ -2394,12 +2421,12 @@ ja:
       moderator_history: 実行したブロック
       comments: コメント
       create_block: この利用者をブロック
-      activate_user: このユーザーを有効化
-      confirm_user: このユーザーを確認
-      unconfirm_user: このユーザーへの承認を取り消す
-      unsuspend_user: このユーザーの権限停止を解除
+      activate_user: この利用者を有効化
+      confirm_user: この利用者を確認
+      unconfirm_user: この利用者への承認を取り消す
+      unsuspend_user: この利用者の権限停止を解除
       hide_user: この利用者を表示しない
-      unhide_user: このユーザーを再表示
+      unhide_user: この利用者を再表示
       delete_user: この利用者を削除
       confirm: 確認
       report: この利用者を通報
@@ -2407,14 +2434,11 @@ ja:
       flash success: あなたの編集はすべて公開され、あなたは編集できるようになりました。
     index:
       title: 利用者
-      heading: ユーザー
-      showing:
-        one: '%{page} ページ (%{items} 件中 %{first_item} 件目)'
-        other: '%{page} ページ (%{items} 件中 %{first_item}-%{last_item} 件目)'
+      heading: 利用者
       summary_html: '%{name} は %{ip_address}から%{date}に作成されました。'
       summary_no_ip_html: '%{name} は%{date}に作成されました。'
       confirm: 選択した利用者を承認
-      hide: 選択したユーザーを隠す
+      hide: 選択した利用者を非表示
       empty: 該当する利用者が見つかりません
     suspended:
       title: アカウント停止
@@ -2436,8 +2460,8 @@ ja:
     filter:
       not_a_role: 文字列「%{role}」は、有効な権限ではありません。
       already_has_role: 利用者は既に %{role} 権限を付与されています。
-      doesnt_have_role: ユーザーに %{role} 権限が付与されていません。
-      not_revoke_admin_current_user: 現在のユーザに管理者権限がありません。
+      doesnt_have_role: 利用者に %{role} 権限が付与されていません。
+      not_revoke_admin_current_user: 現在の利用者から管理者権限を剥奪することはできません。
     grant:
       title: 権限付与の確認
       heading: 権限付与の確認
@@ -2460,12 +2484,12 @@ ja:
     new:
       title: '%{name} のブロックの作成'
       heading_html: '%{name} のブロックの作成'
-      period: ユーザーが今からどれくらいの間、APIからブロックされるか。
+      period: 利用者が今からどれくらいの間、APIからブロックされるか。
       back: すべてのブロックを表示
     edit:
       title: '%{name} のブロックの編集'
       heading_html: '%{name} のブロックの編集'
-      period: ユーザーが今からどれくらいの間、APIからブロックされるか。
+      period: 利用者が今からどれくらいの間、APIからブロックされるか。
       show: このブロックを閲覧
       back: すべてのブロックを閲覧
     filter:
@@ -2523,7 +2547,6 @@ ja:
       revoke: 取り消す!
       confirm: 本当によろしいですか?
       reason: 'ブロックの理由:'
-      back: すべてのブロックを表示
       revoker: '取消:'
       needs_view: ブロックを解除するには、利用者はログインし直す必要があります。
     block:
@@ -2537,9 +2560,27 @@ ja:
       reason: ブロックされた理由
       status: 状態
       revoker_name: 取り消し者
-      showing_page: ページ %{page}
-      next: 次へ »
-      previous: « 前へ
+  user_mutes:
+    index:
+      title: ミュートした利用者
+      my_muted_users: ミュートした利用者
+      you_have_muted_n_users:
+        other: '%{count} 人の利用者をミュートしています'
+      user_mute_explainer: ミュートされた利用者のメッセージは別の受信箱に移動され、メール通知は届かなくなります。
+      user_mute_admins_and_moderators: 管理者とモデレーターをミュートすることはできますが、そのメッセージはミュートされません。
+      table:
+        thead:
+          muted_user: ミュートした利用者
+          actions: 操作
+        tbody:
+          unmute: ミュートを解除
+          send_message: メッセージを送信
+    create:
+      notice: '%{name} をミュートしました。'
+      error: '%{name} をミュートできませんでした。%{full_message}。'
+    destroy:
+      notice: '%{name} のミュートを解除しました。'
+      error: 利用者のミュートを解除できませんでした。もう一度お試しください。
   notes:
     index:
       title: '%{user} さんが投稿またはコメントしたメモ'
@@ -2565,11 +2606,11 @@ ja:
       comment_and_resolve: コメント & 解決
       comment: コメント
       report_link_html: このメモに削除が必要な機密情報が含まれている場合は、%{link}してください。
-      other_problems_resolved: 他の問題には、解くだけで十分です。
+      other_problems_resolved: その他の問題には、解決で十分です。
     new:
       title: 新しいメモ
       intro: 間違いや情報の抜けがありましたか? 他のマッパーが修正できるよう、お知らせください。マーカーを正しい位置に移動し、問題を説明するメモを入力します。
-      advice: 投稿した地図メモは公開され、地図の更新に利用されます。そのため、著作権保護された地図や一覧情報からの転用情報や、個人情報の入力は行わないでください。
+      advice: 投稿したメモは公開され、地図の更新に利用されます。そのため、著作権保護された地図や一覧情報からの転用情報や、個人情報の入力は行わないでください。
       add: メモを追加
   javascripts:
     close: 閉じる
@@ -2627,7 +2668,7 @@ ja:
     site:
       edit_tooltip: 地図を編集
       edit_disabled_tooltip: 地図を編集するには拡大してください
-      createnote_tooltip: 今後の修正のために地図にメモを残す
+      createnote_tooltip: 地図にメモを残す
       createnote_disabled_tooltip: メモを地図に追加するには拡大してください
       map_notes_zoom_in_tooltip: 地図メモを閲覧するには拡大してください
       map_data_zoom_in_tooltip: 地図データを閲覧するには拡大してください
@@ -2730,16 +2771,16 @@ ja:
       node: ノード
       way: ウェイ
       relation: リレーション
-      nothing_found: 地物が見つかりませんでした
+      nothing_found: 地物が見つかりません
       error: '%{server}接続のエラーです: %{error}'
       timeout: '%{server}接続が時間切れです'
     context:
       directions_from: ここから出発する道順
       directions_to: ここへの道順
-      add_note: ã\83©ã\83\99ã\83«をここに追加
+      add_note: ã\83¡ã\83¢をここに追加
       show_address: アドレスを表示
       query_features: 地物を検索
-      centre_map: ã\81\93ã\81\93ã\81§å\9c°å\9b³ã\82\92中央ã\81«ç½®ã\81\8f
+      centre_map: ã\81\93ã\81\93ã\82\92å\9c°å\9b³ã\81®ä¸­å¿\83ã\81«ã\81\99ã\82\8b
   redactions:
     edit:
       heading: 改訂の編集
index baf9f28ed311b00f53e03fdb6ca75f00b203ee7d..5de173aa9d679f3ce54e65d52cd4611f961935c7 100644 (file)
@@ -137,8 +137,6 @@ ka:
         link text: რა არის ეს?
       save changes button: ცვლილებების შენახვა
   browse:
-    created: შეიქმნა
-    closed: დახურულია
     version: ვერსია
     in_changeset: ცვლილებების პაკეტი
     anonymous: ანონიმი
@@ -147,18 +145,6 @@ ka:
     view_history: ისტორიის ნახვა
     view_details: დეტალების ნახვა
     location: 'მდებარეობა:'
-    changeset:
-      title: 'ცვლილებების პაკეტი: %{id}'
-      belongs_to: ავტორი
-      node: წერტილები (%{count})
-      node_paginated: წერტილები (%{x}-%{y} %{count}-დან)
-      way: ხაზები (%{count})
-      way_paginated: ხაზები (%{x}-%{y} %{count}-დან)
-      relation: ურთიერთობები (%{count})
-      relation_paginated: ურთიერთობები (%{x}-%{y} %{count}-დან)
-      changesetxml: ცვლილებების პაკეტის XML
-      osmchangexml: osmChange XML
-      discussion: განხილვა
     node:
       title_html: 'წერტილი: %{name}'
       history_title_html: 'წერტილის ისტორია: %{name}'
@@ -228,6 +214,21 @@ ka:
       feed:
         title: ცვლილებების პაკეტი %{id}
         title_comment: ცვლილებების პაკეტი %{id} - %{comment}
+        created: შეიქმნა
+        closed: დახურულია
+        belongs_to: ავტორი
+    show:
+      title: 'ცვლილებების პაკეტი: %{id}'
+      discussion: განხილვა
+      changesetxml: ცვლილებების პაკეტის XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: წერტილები (%{count})
+      nodes_paginated: წერტილები (%{x}-%{y} %{count}-დან)
+      ways: ხაზები (%{count})
+      ways_paginated: ხაზები (%{x}-%{y} %{count}-დან)
+      relations: ურთიერთობები (%{count})
+      relations_paginated: ურთიერთობები (%{x}-%{y} %{count}-დან)
   changeset_comments:
     comment:
       commented_at_by_html: განაახლა %{when} წინ მომხმარებელმა %{user}
@@ -977,7 +978,6 @@ ka:
       identifiable: იდენტიფიცირებადი
       private: პირადი
       trackable: კონტროლირებადი
-      by: 'ავტორი:'
   oauth:
     authorize:
       allow_write_api: რუკის შეცვლა.
@@ -1080,7 +1080,6 @@ ka:
       revoke: განბლოკვა!
       confirm: დარწმუნებული ხართ?
       reason: 'დაბლოკვის მიზეზი:'
-      back: ყველა ბლოკირების ჩვენება
       revoker: 'განმბლოკველი:'
       needs_view: სანამ მოხდება ბლოკის მოხსნა, მანამდე საჭიროა მომხმარებლის დარეგისტრირება
     block:
@@ -1094,9 +1093,6 @@ ka:
       reason: დაბლოკვის მიზეზი
       status: სტატუსი
       revoker_name: განბლოკილია
-      showing_page: გვერდი %{page}
-      next: შემდეგი »
-      previous: « წინა
   notes:
     index:
       creator: შემქმნელი
index bde2c84e104e7d92eadc2f85838e9e6469e3223b..22963af6a58d89c8c9a4e0610083b02967ad8fdf 100644 (file)
@@ -232,8 +232,6 @@ kab:
     update:
       success: Talɣut n useqdac tettwasnifel akken iwata
   browse:
-    created: Yettwarna
-    closed: Yemdel
     version: Lqem
     in_changeset: Agraw n usnifel
     anonymous: udrig
@@ -243,21 +241,6 @@ kab:
     view_history: Sken amazray
     view_details: Wali talqayt
     location: 'Adig:'
-    changeset:
-      title: 'Agraw n usnifel: %{id}'
-      belongs_to: Ameskar
-      node: Tikerras (%{count})
-      node_paginated: Tikerras (%{x}-%{y} si %{count})
-      way: Iberdan (%{count})
-      way_paginated: Iberdan (%{x}-%{y} si %{count})
-      relation: Assaɣen (%{count})
-      relation_paginated: Assaɣen (%{x}-%{y} si %{count})
-      changesetxml: XML n ugraw n ibeddilen
-      osmchangexml: XML osmChange
-      join_discussion: Qqen akken ad tedduḍ ar usqerdec
-      discussion: Asqerdec
-      still_open: Tagrumma isenfilen zgan ldin - asqerdec ad yili mara isenfilen meṛṛa
-        ttwamedlen.
     node:
       title_html: 'Takerrist: %{name}'
       history_title_html: 'Amazray n tkerrist: %{name}'
@@ -356,6 +339,24 @@ kab:
       feed:
         title: Agraw n usnifel %{id}
         title_comment: Agraw n ubeddel %{id} - %{comment}
+        created: Yettwarna
+        closed: Yemdel
+        belongs_to: Ameskar
+    show:
+      title: 'Agraw n usnifel: %{id}'
+      discussion: Asqerdec
+      join_discussion: Qqen akken ad tedduḍ ar usqerdec
+      still_open: Tagrumma isenfilen zgan ldin - asqerdec ad yili mara isenfilen meṛṛa
+        ttwamedlen.
+      changesetxml: XML n ugraw n ibeddilen
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Tikerras (%{count})
+      nodes_paginated: Tikerras (%{x}-%{y} si %{count})
+      ways: Iberdan (%{count})
+      ways_paginated: Iberdan (%{x}-%{y} si %{count})
+      relations: Assaɣen (%{count})
+      relations_paginated: Assaɣen (%{x}-%{y} si %{count})
     timeout:
       sorry: Suref-aɣ, tabdart n igrawen n usnifel i d-sutreḍ tettwai ddeqs n wakud
         akkena d d-ali.
@@ -794,8 +795,6 @@ kab:
     intro_text: OpenStreetMap d takarḍa n umadal, rnna-tt yemdanen am kečč d tilellit
       i useqdec ddaw n turagt tilellit.
     intro_2_create_account: Rnu amiḍan n useqdac
-    partners_ucl: UCL
-    partners_bytemark: Tanezduɣt n Bytemark
     partners_partners: imendiden
     osm_offline: Taffa n isefka n OpenStreetMap ur teqqin ara yakan tura imi aseǧǧem
       ilaqen yettwaselkam akken ad teddu akken iwata.
@@ -1142,8 +1141,6 @@ kab:
       edit_map: Ẓreg takarḍa
       public: AZAYEZ
       private: USLIG
-      by: sɣuṛ
-      in: di
     index:
       public_traces: Lǧerrat GPS tizuyaz
       public_traces_from: Lǧerrat tizuyaz tizuyza n %{user}
@@ -1282,9 +1279,6 @@ kab:
     index:
       title: Iseqdacen
       heading: Iseqdacen
-      showing:
-        one: Asebter %{page} (%{first_item} ɣef %{items})
-        other: Asebter %{page} (%{first_item}-%{last_item} ɣef %{items})
       summary_html: '%{name} yettwarna si %{ip_address} di %{date}'
       summary_no_ip_html: '%{name} yettwarna di  %{date}'
       confirm: Sentem iseqdacen yettwafernen
@@ -1325,7 +1319,6 @@ kab:
       revoke: Ḥwi!
       confirm: Tebɣiḍ?
       reason: 'Taɣzint n  usewḥel:'
-      back: Sken akk isewḥal
       needs_view: Aseqdac-agi yesra ad yeqqen send ad yettwakkes u sewḥel.
     block:
       show: Sken
@@ -1337,9 +1330,6 @@ kab:
       reason: Taɣzint n  usewḥel
       status: Addad
       revoker_name: Isewḥel-it
-      showing_page: Asebter %{page}
-      next: Ar zdat»
-      previous: « ar deffir
   notes:
     index:
       heading: Tizmilin n %{user}
index da3d4ddfc5348920bff3c727ecfa8e0905dab917..5e86447b855bdf0e24ec2a11fd88aa3fb10e0fa1 100644 (file)
@@ -228,7 +228,6 @@ kk-cyrl:
     destroy:
       success: Тіркелгі жойылды.
   browse:
-    closed: Жабық
     version: Нұсқа
     in_changeset: Өңдеме дестесі
     anonymous: аноним
@@ -243,14 +242,6 @@ kk-cyrl:
     view_history: Тарихын көру
     view_details: Егжей-тегжейін көру
     location: 'Географиялық орны:'
-    changeset:
-      title: 'Өңдеме дестесі: %{id}'
-      node: Нүктелер (%{count})
-      way: Сызықтар (%{count})
-      relation: Қатынастар (%{count})
-      changesetxml: Өңдеме дестесінің XML-і
-      osmchangexml: osmChange XML
-      discussion: Талқылау
     node:
       title_html: 'Нүкте: %{name}'
       history_title_html: 'Нүкте тарихы: %{name}'
@@ -321,6 +312,16 @@ kk-cyrl:
       load_more: Көбірек жүктеу
       feed:
         title: Өңдеме дестесі %{id}
+        closed: Жабық
+    show:
+      title: 'Өңдеме дестесі: %{id}'
+      discussion: Талқылау
+      changesetxml: Өңдеме дестесінің XML-і
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Нүктелер (%{count})
+      ways: Сызықтар (%{count})
+      relations: Қатынастар (%{count})
   changeset_comments:
     comment:
       commented_at_by_html: '%{when} %{user} жаңартқан'
@@ -831,9 +832,7 @@ kk-cyrl:
     user_diaries: Қолданушылардың күнделіктері
     edit_with: '%{editor} көмегімен өңдеу'
     intro_header: OpenStreetMap-ке қош келдіңіз!
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     help: Анықтама
     about: Жоба туралы
     copyright: Авторлық құқықтар
@@ -1092,8 +1091,6 @@ kk-cyrl:
       edit: Өңдеу
     blocks:
       reason: 'Бұғаттау себебі:'
-      next: Келесі »
-      previous: « Алдыңғы
   notes:
     index:
       description: Сипаттама
index 88cc6e7b8603e552a8e42c8451832be432502658..77e530ce15a1d35a466d3a33ea4aaad71ce75946 100644 (file)
@@ -111,8 +111,6 @@ km:
         ដើម្បីបញ្ជាក់អាសយដ្ឋានអ៊ីមែលថ្មីរបស់អ្នក។
       success: ព័ត៌មានអ្នកប្រើប្រាស់​ បានបន្ទាន់សម័យដោយជោគជ័យ​។
   browse:
-    created: បាន​បង្កើត​
-    closed: បាន​បិទ
     version: កំណែ
     in_changeset: សំណុំបន្លាស់ប្ដូរ
     anonymous: អនាមិក
@@ -122,18 +120,6 @@ km:
     view_history: មើល​ប្រវត្តិ​
     view_details: មើលព័ត៌មានលម្អិត​
     location: ទីតាំង​៖​
-    changeset:
-      title: សំណុំបន្លាស់ប្ដូរ៖ %{id}
-      belongs_to: អ្នក​បង្កើត
-      node: ខ្នែងចំនួន (%{count})
-      node_paginated: ខ្នែងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
-      way: ផ្លូវចំនួន (%{count})
-      way_paginated: ផ្លូវចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
-      relation: ទំនាក់ទំនងចំនួន (%{count})
-      relation_paginated: ទំនាក់ទំនងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
-      changesetxml: សំណុំបន្លាស់ប្ដូរ​ XML
-      join_discussion: កត់ឈ្មោះចូលដើម្បីចូលរួមពិភាក្សា
-      discussion: ការពិភាក្សា
     node:
       title_html: ខ្នែង៖ %{name}
       history_title_html: ប្រវត្តិខ្នែង៖ %{name}
@@ -206,6 +192,21 @@ km:
       feed:
         title: សំណុំបន្លាស់ប្ដូរ​ %{id}
         title_comment: សំណុំបន្លាស់ប្តូរ​ %{id} - %{comment}
+        created: បាន​បង្កើត​
+        closed: បាន​បិទ
+        belongs_to: អ្នក​បង្កើត
+    show:
+      title: សំណុំបន្លាស់ប្ដូរ៖ %{id}
+      discussion: ការពិភាក្សា
+      join_discussion: កត់ឈ្មោះចូលដើម្បីចូលរួមពិភាក្សា
+      changesetxml: សំណុំបន្លាស់ប្ដូរ​ XML
+    paging_nav:
+      nodes: ខ្នែងចំនួន (%{count})
+      nodes_paginated: ខ្នែងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
+      ways: ផ្លូវចំនួន (%{count})
+      ways_paginated: ផ្លូវចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
+      relations: ទំនាក់ទំនងចំនួន (%{count})
+      relations_paginated: ទំនាក់ទំនងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count})
   dashboards:
     contact:
       km away: ចម្ងាយ %{count} គ.ម.
@@ -743,8 +744,6 @@ km:
       edit_map: កែប្រែផែនទី​
       public: សាធារណៈ​
       private: ឯកជន​
-      by: ដោយ​
-      in: ក្នុង​
     index:
       tagged_with: '  បានដាកស្លាកជា %{tags}'
   oauth_clients:
index af159d052c3547634510f3f7627a9ccdbe220150..061519ece75744338ad659a485edaae598e55aa5 100644 (file)
@@ -218,8 +218,6 @@ kn:
     destroy:
       success: ಖಾತೆಯನ್ನು ಅಳಿಸಲಾಗಿದೆ.
   browse:
-    created: ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟ
-    closed: ಮುಚ್ಚಲಾಗಿದೆ
     version: ಆವೃತ್ತಿ
     in_changeset: ಬದಲಾವಣೆಗಳು
     anonymous: ಅನಾಮಧೇಯ
@@ -229,17 +227,6 @@ kn:
     view_history: ಇತಿಹಾಸವನ್ನು ನೋಡಿ
     view_details: ವಿವರಣೆ ನೋಡಿ
     location: 'ಸ್ಥಳ:'
-    changeset:
-      title: 'ಬದಲಾವಣೆಗಳು: %{id}'
-      belongs_to: ಕರ್ತೃ
-      node: ನೋಡ್ಸ್  (%{count})
-      node_paginated: ನೋಡ್ಸ್  (%{x}-%{y} ರ %{count})
-      way: ರೀತಿಯಲ್ಲಿ (%{count})
-      way_paginated: ದಾರಿಗಳು (%{x}-%{y} ರ %{count})
-      relation: ಸಂಬಂಧಗಳು (%{count})
-      relation_paginated: ಸಂಬಂಧಗಳು(%{x}-%{y} of %{count})
-      join_discussion: ‍ಚರ್ಚೆಗೆ ಸೇರಲು ಲಾಗ್ ಇನ್ ಆಗಿರಿ
-      discussion: ಚರ್ಚೆ
     node:
       title_html: 'ನೋಡ್: %{name}'
       history_title_html: 'ನೊಡ್ ನ ಇತಿಹಾಸ: %{name}'
@@ -317,6 +304,20 @@ kn:
       feed:
         title: ಬದಲಾವಣೆಗಳು %{id}
         title_comment: ಬದಲಾವಣೆಗಳು %{id} - %{comment}
+        created: ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟ
+        closed: ಮುಚ್ಚಲಾಗಿದೆ
+        belongs_to: ಕರ್ತೃ
+    show:
+      title: 'ಬದಲಾವಣೆಗಳು: %{id}'
+      discussion: ಚರ್ಚೆ
+      join_discussion: ‍ಚರ್ಚೆಗೆ ಸೇರಲು ಲಾಗ್ ಇನ್ ಆಗಿರಿ
+    paging_nav:
+      nodes: ನೋಡ್ಸ್  (%{count})
+      nodes_paginated: ನೋಡ್ಸ್  (%{x}-%{y} ರ %{count})
+      ways: ರೀತಿಯಲ್ಲಿ (%{count})
+      ways_paginated: ದಾರಿಗಳು (%{x}-%{y} ರ %{count})
+      relations: ಸಂಬಂಧಗಳು (%{count})
+      relations_paginated: ಸಂಬಂಧಗಳು(%{x}-%{y} of %{count})
     timeout:
       sorry: ಕ್ಷಮಿಸಿ, ನೀವು ಕೇಳಿದ ಬದಲಾವಣಾ ಪಟ್ಟಿ ಪಡೆಯಲು ದೀರ್ಘ ಸಮಯ ಬೇಕಾಯಿತು.
   changeset_comments:
@@ -679,8 +680,6 @@ kn:
     export_data: ದತ್ತಾಂಶ ರಫ್ತುಮಾಡು
     intro_header: ಒಪನ್ ಸ್ಟ್ರೀಟ್ ಮ್ಯಾಪ್ ಗೆ  ಸುಸ್ವಾಗತ!
     intro_2_create_account: ಹೊಸ ಬಳಕೆದಾರ ಖಾತೆಯನ್ನು ರಚಿಸಿ
-    partners_ucl: ಯುಸಿಎಲ್
-    partners_bytemark: ಬೈಟ್ಮಾರ್ಕ್ ಹೋಸ್ಟಿಂಗ್
     tou: ಬಳಕೆಯ ನಿಬಂಧನೆಗಳು
     help: ಸಹಾಯ
     about: ನಮ್ಮ ಬಗ್ಗೆ
index 6e1f58c769d06748cd43c72e99c50c184bb41cb6..55230c783c4b22bf8dfb240e4de633e8dd5fdfa4 100644 (file)
@@ -323,12 +323,6 @@ ko:
     destroy:
       success: 계정이 삭제되었습니다.
   browse:
-    created: 만들어짐
-    closed: 닫힘
-    created_ago_html: '%{time_ago}에 생성됨'
-    closed_ago_html: '%{time_ago}에 닫힘'
-    created_ago_by_html: '%{time_ago}에 %{user}님이 생성함'
-    closed_ago_by_html: '%{time_ago}에 %{user}님이 닫음'
     deleted_ago_by_html: '%{time_ago}에 %{user}님이 삭제함'
     edited_ago_by_html: '%{time_ago}에 %{user}님이 편집함'
     version: 버전
@@ -344,22 +338,6 @@ ko:
     view_history: 역사 보기
     view_details: 자세한 내용 보기
     location: '위치:'
-    changeset:
-      title: '바뀜집합: %{id}'
-      belongs_to: 저자
-      node: 교점(%{count})
-      node_paginated: 교점(%{count}개 중 %{x}-%{y})
-      way: 길(%{count})
-      way_paginated: 길(%{count}개 중 %{x}-%{y})
-      relation: 관계(%{count})
-      relation_paginated: 관계(%{count}개 중 %{x}-%{y})
-      hidden_comment_by_html: '%{time_ago} %{user}님의 비밀 의견'
-      comment_by_html: '%{time_ago} %{user}님의 의견'
-      changesetxml: 바뀜집합 XML
-      osmchangexml: osmChange XML
-      join_discussion: 토론에 참여하려면 로그인하세요
-      discussion: 토론
-      still_open: 바뀜집합이 아직 열려 있습니다 - 토론은 바뀜집합이 닫히면 시작됩니다.
     node:
       title_html: '교점: %{name}'
       history_title_html: '교점 역사: %{name}'
@@ -465,6 +443,30 @@ ko:
       feed:
         title: 바뀜집합 %{id}
         title_comment: 바뀜집합 %{id} - %{comment}
+        created: 만들어짐
+        closed: 닫힘
+        belongs_to: 저자
+    show:
+      title: '바뀜집합: %{id}'
+      created: '생성 시기: %{when}'
+      created_ago_html: '%{time_ago}에 생성됨'
+      closed_ago_html: '%{time_ago}에 닫힘'
+      created_ago_by_html: '%{time_ago}에 %{user}님이 생성함'
+      closed_ago_by_html: '%{time_ago}에 %{user}님이 닫음'
+      discussion: 토론
+      join_discussion: 토론에 참여하려면 로그인하세요
+      still_open: 바뀜집합이 아직 열려 있습니다 - 토론은 바뀜집합이 닫히면 시작됩니다.
+      comment_by_html: '%{time_ago} %{user}님의 의견'
+      hidden_comment_by_html: '%{time_ago} %{user}님의 비밀 의견'
+      changesetxml: 바뀜집합 XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: 교점(%{count})
+      nodes_paginated: 교점(%{count}개 중 %{x}-%{y})
+      ways: 길(%{count})
+      ways_paginated: 길(%{count}개 중 %{x}-%{y})
+      relations: 관계(%{count})
+      relations_paginated: 관계(%{count}개 중 %{x}-%{y})
     timeout:
       sorry: 죄송합니다, 요청하는 바뀜집합 목록을 가져오는 데 너무 오래 걸렸습니다.
   changeset_comments:
@@ -1495,10 +1497,7 @@ ko:
     intro_text: 오픈스트리트맵 (OpenStreetMap)은 여러분과 같은 사람들이 만들어, 개방형 라이선스에 따라 자유롭게 사용할 수
       있는 세계 지도입니다.
     intro_2_create_account: 사용자 계정을 만드세요
-    hosting_partners_html: 호스팅은 %{ucl}, %{fastly}, %{bytemark}, 다른 %{partners}에서 지원합니다.
-    partners_ucl: UCL
     partners_fastly: 빠르게
-    partners_bytemark: 바이트마크 호스팅
     partners_partners: 협력단체
     tou: 이용 약관
     osm_offline: 데이터베이스 점검을 위해 현재 오픈스트리트맵의 데이터가 오프라인 상태에 있습니다.
@@ -1714,9 +1713,6 @@ ko:
       email address: '이메일 주소:'
       new password button: 비밀번호 재설정
       help_text: 가입할 때 사용한 이메일 주소를 입력하세요, 비밀번호를 재설정하여 사용할 수 있는 링크를 보내드립니다.
-    create:
-      notice email on way: 비밀번호를 잊었다니, 안타깝습니다 :-( 비밀번호 재설정을 할 수 있도록 이메일이 발송되었습니다.
-      notice email cannot find: 이메일 주소를 찾지 못해 죄송합니다.
     edit:
       title: 비밀번호 재설정
       heading: '%{user}의 비밀번호 재설정'
@@ -1773,7 +1769,7 @@ ko:
       lost password link: 비밀번호를 잊으셨나요?
       login_button: 로그인
       register now: 지금 등록하세요
-      with external: 다른 제3자 로그인 방식 사용하기
+      with external: '다른 제3자 로그인 방식 사용하기:'
       no account: 계정이 없나요?
       auth failure: 죄송합니다, 입력한 정보로 로그인할 수 없습니다.
       openid_logo_alt: OpenID로 로그인
@@ -2299,8 +2295,6 @@ ko:
       identifiable: 식별 가능
       private: 비공개
       trackable: 추적 가능
-      by: 사용자
-      in: 위치
     index:
       public_traces: 공개 GPS 궤적
       my_gps_traces: 내 GPS 궤적
@@ -2588,9 +2582,6 @@ ko:
     index:
       title: 사용자
       heading: 사용자
-      showing:
-        one: '%{page}쪽(%{items} 중 %{first_item} 부분)'
-        other: '%{page}쪽(%{items} 중 %{first_item}-%{last_item} 부분)'
       summary_html: '%{name}님이 %{date}에 %{ip_address}에서 만들어짐'
       summary_no_ip_html: '%{name}이(가) %{date}에 만들어짐'
       confirm: 선택한 사용자 확인
@@ -2705,7 +2696,6 @@ ko:
       revoke: 해제!
       confirm: 확실합니까?
       reason: '차단 이유:'
-      back: 모든 차단 보기
       revoker: '해제:'
       needs_view: 차단 해제하기 전에 다시 로그인해야합니다.
     block:
@@ -2719,9 +2709,6 @@ ko:
       reason: 차단 이유
       status: 상태
       revoker_name: 해제자
-      showing_page: '%{page}쪽'
-      next: 다음 »
-      previous: « 이전
   notes:
     index:
       title: '%{user} 님이 제출했거나 덧글을 남긴 참고'
index 0cbe9713c293f9a8afa5d70c79d6ec47410269e9..6a4251096414452910889ba3c76de6cc25c17b94 100644 (file)
@@ -330,8 +330,6 @@ ksh:
       public: ÖFFENTLESCH
       private: PRĖVAAT
       trackable: NOHTRÄCKBAA
-      by: vum
-      in: en
     index:
       public_traces: Öffentlesche GPS-Opnahme
       public_traces_from: Öffentlesche GPS-Opnahme vum %{user}
index 45a4c5007021f806128f6cc9c594fa08149c036f..f32e21b0cbcaeaf17726f59f788ce30386104a97 100644 (file)
@@ -317,8 +317,6 @@ ku-Latn:
     destroy:
       success: Hesab Hate Jêbirin.
   browse:
-    created: Hate çêkirin
-    closed: Hate girtin
     version: Guherto
     in_changeset: Qeyda Guhartinan
     anonymous: anonîm
@@ -334,23 +332,6 @@ ku-Latn:
     view_history: Dîrokê Bibîne
     view_details: Detayan Bibîne
     location: 'Cih:'
-    changeset:
-      title: Desteya guhertinanː %{id}
-      belongs_to: Xwedî
-      node: Nuqte (%{count})
-      node_paginated: Nuqte (%{x}-%{y} ji %{count} heban)
-      way: Rê (%{count})
-      way_paginated: Rê (%{x}-%{y} ji %{count})
-      relation: Eleqe (%{count})
-      relation_paginated: Eleqe (%{x}-%{y} bi tevahî %{count})
-      hidden_comment_by_html: Şîroveya veşartî ji %{user} %{time_ago}
-      comment_by_html: Şîroveya ji %{user} %{time_ago}
-      changesetxml: Desteya guhartinan a XML
-      osmchangexml: osmChange XML
-      join_discussion: Ji bo ku beșdarî guftûgoyan bibî têkeve
-      discussion: Gotûbêj
-      still_open: Qeyda guhartinan hê jî vekirî ye - wê gotûbêj piştî ku qeyda guhartinan
-        hate girtin vebibe.
     node:
       title_html: 'Girêk: %{name}'
       history_title_html: Dîroka Nuqteyêː %{name}
@@ -460,6 +441,26 @@ ku-Latn:
       feed:
         title: Desteya guhartinan %{id}
         title_comment: Desteya guhartinan %{id} - %{comment}
+        created: Hate çêkirin
+        closed: Hate girtin
+        belongs_to: Xwedî
+    show:
+      title: Desteya guhertinanː %{id}
+      discussion: Gotûbêj
+      join_discussion: Ji bo ku beșdarî guftûgoyan bibî têkeve
+      still_open: Qeyda guhartinan hê jî vekirî ye - wê gotûbêj piştî ku qeyda guhartinan
+        hate girtin vebibe.
+      comment_by_html: Şîroveya ji %{user} %{time_ago}
+      hidden_comment_by_html: Şîroveya veşartî ji %{user} %{time_ago}
+      changesetxml: Desteya guhartinan a XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Nuqte (%{count})
+      nodes_paginated: Nuqte (%{x}-%{y} ji %{count} heban)
+      ways: Rê (%{count})
+      ways_paginated: Rê (%{x}-%{y} ji %{count})
+      relations: Eleqe (%{count})
+      relations_paginated: Eleqe (%{x}-%{y} bi tevahî %{count})
     timeout:
       sorry: Bibore, bidestxistina lîsteya desteyên guhartinan ê ku te xwest demeke
         dirêj girt.
@@ -1523,11 +1524,7 @@ ku-Latn:
     intro_text: OpenStreetMap xerîteyekî dinyayê ye ku ji aliyê kesên wek te ve tê
       çêkirin û emilandina we belaş e û di bin lîsansa azad de ye.
     intro_2_create_account: Ji xwe re hesabekî çêbike
-    hosting_partners_html: Xizmeta hewandinê tê piştgirîkirin ji aliyê %{ucl}, %{fastly},
-      %{bytemark}, û %{partners} din ve.
-    partners_ucl: University College London
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: şirîkên me
     tou: Mercên Bikaranînê
     osm_offline: Databasa OpenStreetMapê vê gavê offline e ji ber ku niha xebatên
@@ -1793,10 +1790,6 @@ ku-Latn:
       new password button: Şîfreyê nû bike
       help_text: E-peyama ku te pê xwe qeydkiribû binivîse, em ê ji te re lînkek bişînin
         tu yê bi wê lînkê bikaribî şîfreya xwe nû bikî.
-    create:
-      notice email on way: Bibore, te wê wenda kir :-( lê belê e-peyamekî nû di rê
-        de ye. Lewma tu dikarî di nêz de wê nû bikî.
-      notice email cannot find: Bibore, ev adrêsa e-peyamê nehate dîtin.
     edit:
       title: Şîfreyê nû bike
       heading: Şîfreyê nû bike ji bo %{user}
@@ -2241,8 +2234,6 @@ ku-Latn:
       identifiable: DIKARE WERE NASKIRIN
       private: XISÛSÎ
       trackable: DIKARE WERE ŞOPANDIN
-      by: ji
-      in: di
     index:
       public_traces: Şopên GPSê yên giştî (ji her kesê re vekirî)
       my_gps_traces: Şopên min ên GPSê
@@ -2534,9 +2525,6 @@ ku-Latn:
     index:
       title: Bikarhêner
       heading: Bikarhêner
-      showing:
-        one: Rûpel %{page} (%{first_item} - bi tevahî %{items})
-        other: Rûpel %{page} (%{first_item}-%{last_item} - bi tevahî %{items})
       summary_html: '%{name} ji aliyê %{ip_address} ve di %{date} de hate çêkirin'
       summary_no_ip_html: '%{name} di %{date} de hate çêkirin'
       confirm: Bikarhênerên bijartî bipejirîne
@@ -2670,7 +2658,6 @@ ku-Latn:
       revoke: Betal bike!
       confirm: Tu piştrast î?
       reason: 'Sedema astengkirinê:'
-      back: Hemû astengiyan bibîne
       revoker: Yê ku rakiriyeː
       needs_view: Divê bikarhêner berî ku ev astengî rabe têbikeve.
     block:
@@ -2684,9 +2671,6 @@ ku-Latn:
       reason: Sedema astengkirinê
       status: Rewş
       revoker_name: Yê ku betal kiriyeː
-      showing_page: Rûpel %{page}
-      next: Pêşve »
-      previous: « Paşve
   notes:
     index:
       title: Notên ku ji aliyê %{user} ve hatine şandin an jî şirovekirin
index f4569fa30f8f679a5f6f3d613ad82c0cb11d18ad..d6c833447832962daaef561445d7bd5444360f05 100644 (file)
@@ -309,8 +309,6 @@ lb:
     destroy:
       success: Benotzerkont geläscht.
   browse:
-    created: Ugeluecht
-    closed: Zou
     version: Versioun
     in_changeset: Set vun Ännerungen
     anonymous: anonym
@@ -326,21 +324,6 @@ lb:
     view_history: Versioune weisen
     view_details: Detailer weisen
     location: 'Plaz:'
-    changeset:
-      title: 'Set vun Ännerungen: %{id}'
-      belongs_to: Auteur
-      node: Kniet (%{count})
-      node_paginated: Kniet (%{x}–%{y} vu(n) %{count})
-      way: Weeër (%{count})
-      way_paginated: Weeër (%{x}–%{y} vu(n) %{count})
-      relation: Relatiounen (%{count})
-      relation_paginated: Relatiounen (%{x}-%{y} vu(n) %{count})
-      changesetxml: XML mam Set vun Ännerungen
-      osmchangexml: osmChange XML
-      join_discussion: Loggt Iech an, fir bei der Diskussioun matzemaachen
-      discussion: Diskussioun
-      still_open: Den Ännerungssaz ass nach op. 'Diskussioun gëtt opgemaach, esoubal
-        wéi den Ännerungssaz zou ass.
     node:
       title_html: 'Knuet: %{name}'
       history_title_html: 'Versioune vum Knuet: %{name}'
@@ -449,6 +432,24 @@ lb:
       feed:
         title: 'Set vun Ännerungen: %{id}'
         title_comment: Set vun Ännerungen %{id} - %{comment}
+        created: Ugeluecht
+        closed: Zou
+        belongs_to: Auteur
+    show:
+      title: 'Set vun Ännerungen: %{id}'
+      discussion: Diskussioun
+      join_discussion: Loggt Iech an, fir bei der Diskussioun matzemaachen
+      still_open: Den Ännerungssaz ass nach op. 'Diskussioun gëtt opgemaach, esoubal
+        wéi den Ännerungssaz zou ass.
+      changesetxml: XML mam Set vun Ännerungen
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Kniet (%{count})
+      nodes_paginated: Kniet (%{x}–%{y} vu(n) %{count})
+      ways: Weeër (%{count})
+      ways_paginated: Weeër (%{x}–%{y} vu(n) %{count})
+      relations: Relatiounen (%{count})
+      relations_paginated: Relatiounen (%{x}-%{y} vu(n) %{count})
     timeout:
       sorry: Et leider ze laang gedauert, déi ugefuerdert Ännerungssätz ofzeruffen.
   changeset_comments:
@@ -1493,11 +1494,7 @@ lb:
     intro_text: OpenStreetMap ass eng Kaart vun der Welt, déi vu Leit wéi Iech gemaach
       gouf an déi fräi ënner enger oppener Lizenz benotzt ka ginn.
     intro_2_create_account: E Benotzerkont uleeën
-    hosting_partners_html: Den Hosting gëtt vun %{ucl}, %{fastly}, %{bytemark} an
-      anere(n) %{partners} ënnerstëtzt.
-    partners_ucl: '''''University College'''' zu London'
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: Partneren
     tou: Benotzungs-Bedéngungen
     osm_offline: D'OpenStreetMap Datebank ass elo net disponibel well dru geschafft
@@ -1733,9 +1730,9 @@ lb:
         Kontakt ophuelen?
       people_mapping_nearby: Mapperen an der Noperschaft
     reply:
-      wrong_user: Du bass als '%{user}' ugemellt, awer d'Noriicht, déis du beäntwere
-        wollts, gouf un en anere Benotzer geschéckt. Mell dech fir d'Beäntwerte wannechgelift
-        mat dem richtege Benotzer un.
+      wrong_user: Dir sidd als '%{user}' ugemellt, awer d'Noriicht, déi Dir beäntwere
+        wollt, gouf un en anere Benotzer geschéckt. Mellt Iech fir d'Beäntwerte wannechgelift
+        mat dem richtege Benotzerkont un.
     show:
       title: Message liesen
       reply_button: Äntwerten
@@ -1764,10 +1761,6 @@ lb:
       help_text: Wannechgelift gëff deng E-Mail-Adress an, mat däers du dech ugemellt
         has. Mir wäerten dir dann e Link schécken, mat dems du däi Passwuert zerécksetze
         kanns.
-    create:
-      notice email on way: Eng E-Mail mat Hiweiser fir d'Zerécksetze vum Passwuert
-        gouf un dech versent.
-      notice email cannot find: Déi E-Mail-Adress konnt net fonnt ginn, pardon.
     edit:
       title: Passwuert zrécksetzen
       heading: Passwuert fir %{user} zrécksetzen
@@ -1819,13 +1812,13 @@ lb:
       failure: De Profil konnt net aktualiséiert ginn.
   sessions:
     new:
-      title: Umellen
-      heading: Umellen
+      title: Aloggen
+      heading: Aloggen
       email or username: E-Mail-Adress oder Benotzernumm
       password: Passwuert
       remember: Sech u mech erënneren
       lost password link: Hutt Dir Äert Passwuert vergiess?
-      login_button: Umellen
+      login_button: Aloggen
       register now: Elo aschreiwen
       with external: 'Benotzt alternativ eng Drëtt Partei fir anzeloggen:'
       no account: Hutt Dir kee Benotzerkont?
@@ -1833,29 +1826,29 @@ lb:
       openid_logo_alt: Alogge mat enger OpenID
       auth_providers:
         openid:
-          title: Alogge mat OpenID
-          alt: Alogge mat enger OpenID URL
+          title: Mat OpenID aloggen
+          alt: Mat enger OpenID-URL aloggen
         google:
-          title: Alogge mat Google
-          alt: Alogge mat enger Google OpenID
+          title: Mat Google aloggen
+          alt: Mat enger Google-OpenID aloggen
         facebook:
           title: Mat Facebook aloggen
-          alt: Mat engem Facebook Benotzerkont aloggen
+          alt: Mat engem Facebook-Kont aloggen
         microsoft:
           title: Mat Microsoft aloggen
-          alt: Mat engem Microsoft-Benotzerkont aloggen
+          alt: Mat engem Microsoft-Kont aloggen
         github:
           title: Mat GitHub aloggen
-          alt: Mat engem GitHub-Konto aloggen
+          alt: Mat engem GitHub-Kont aloggen
         wikipedia:
           title: Mat Wikipedia aloggen
           alt: Mat engem Wikipedia-Benotzerkont aloggen
         wordpress:
-          title: Alogge mat Wordpress
-          alt: Alogge mat enger Wordpress OpenID
+          title: Mat Wordpress aloggen
+          alt: Mat enger Wordpress-OpenID aloggen
         aol:
-          title: Alogge mat AOL
-          alt: Alogge mat enger AOL OpenID
+          title: Mat AOL aloggen
+          alt: Mat enger AOL-OpenID aloggen
     destroy:
       title: Ofmellen
       heading: Vun OpenStreetMap ofmellen
@@ -2132,8 +2125,6 @@ lb:
       public: ËFFENTLECH
       private: PRIVAT
       trackable: VERFOLLEGBAR
-      by: vum
-      in: an
     index:
       public_traces: Ëffentlech GPS Spueren
       public_traces_from: Ëffentlech GPS-Spuere vu(n) %{user}
@@ -2295,6 +2286,11 @@ lb:
     index:
       title: Benotzer
       heading: Benotzer
+      older: Eeler Benotzer
+      newer: Méi nei Benotzer
+      found_users:
+        one: '%{count} Benotzer fonnt'
+        other: '%{count} Benotzer fonnt'
       confirm: Erausgesicht Benotzer confirméieren
       hide: Erausgesicht Benotzer vrstoppen
       empty: Et goufe keng sou Benotzer fonnt
@@ -2377,7 +2373,6 @@ lb:
       revoke: Ophiewen!
       confirm: Sidd Dir sécher?
       reason: 'Grond fir d''Spär:'
-      back: All Späre weisen
     block:
       not_revoked: (net opgehuewen)
       show: Weisen
@@ -2388,9 +2383,6 @@ lb:
       reason: Grond fir d'Spär
       status: Status
       revoker_name: Opgehuewe vum
-      showing_page: Säit %{page}
-      next: Nächst »
-      previous: « Vireg
   user_mutes:
     index:
       table:
index 7c569cd1616a30add6905646c621591d7870fa25..8cf035c0682f79011304cdf2f8147a7b9398316a 100644 (file)
@@ -366,12 +366,6 @@ lt:
     destroy:
       success: Paskyra ištrinta.
   browse:
-    created: Sukurtas
-    closed: Uždarytas
-    created_ago_html: Sukurta %{time_ago}
-    closed_ago_html: Uždaryta %{time_ago}
-    created_ago_by_html: Sukurta %{user} %{time_ago}
-    closed_ago_by_html: Uždaryta %{user} %{time_ago}
     deleted_ago_by_html: Ištrinta %{user} %{time_ago}
     edited_ago_by_html: Redaguota %{user} %{time_ago}
     version: Versija
@@ -393,23 +387,6 @@ lt:
     view_history: Žiūrėti istoriją
     view_details: Žiūrėti detales
     location: 'Vieta:'
-    changeset:
-      title: 'Pakeitimas: %{id}'
-      belongs_to: Autorius
-      node: Taškų (%{count})
-      node_paginated: Taškų (%{x}-%{y} iš %{count})
-      way: Keliai (%{count})
-      way_paginated: Keliai (%{x}-%{y} iš %{count})
-      relation: Ryšiai (%{count})
-      relation_paginated: Ryšiai (%{x}-%{y} iš %{count})
-      hidden_comment_by_html: Paslėptas komentaras nuo %{user} %{time_ago}
-      comment_by_html: Komentaras nuo %{user} %{time_ago}
-      changesetxml: Pakeitimo XML
-      osmchangexml: osmChange XML
-      join_discussion: Prisijunkite norėdami dalyvauti aptarime
-      discussion: Diskusija
-      still_open: Pakeitimas vis dar atidarytas - diskusija prasidės tik uždarius
-        pakeitimą.
     node:
       title_html: 'Taškas: %{name}'
       history_title_html: 'Taško istorija: %{name}'
@@ -525,6 +502,30 @@ lt:
       feed:
         title: Pakeitimas %{id}
         title_comment: Pakeitimas %{id} - %{comment}
+        created: Sukurtas
+        closed: Uždarytas
+        belongs_to: Autorius
+    show:
+      title: 'Pakeitimas: %{id}'
+      created_ago_html: Sukurta %{time_ago}
+      closed_ago_html: Uždaryta %{time_ago}
+      created_ago_by_html: Sukurta %{user} %{time_ago}
+      closed_ago_by_html: Uždaryta %{user} %{time_ago}
+      discussion: Diskusija
+      join_discussion: Prisijunkite norėdami dalyvauti aptarime
+      still_open: Pakeitimas vis dar atidarytas - diskusija prasidės tik uždarius
+        pakeitimą.
+      comment_by_html: Komentaras nuo %{user} %{time_ago}
+      hidden_comment_by_html: Paslėptas komentaras nuo %{user} %{time_ago}
+      changesetxml: Pakeitimo XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Taškų (%{count})
+      nodes_paginated: Taškų (%{x}-%{y} iš %{count})
+      ways: Keliai (%{count})
+      ways_paginated: Keliai (%{x}-%{y} iš %{count})
+      relations: Ryšiai (%{count})
+      relations_paginated: Ryšiai (%{x}-%{y} iš %{count})
     timeout:
       sorry: Atsiprašome, bet jūsų prašytų pakeitimų ištraukimas užtruko per ilgai.
   changeset_comments:
@@ -1566,11 +1567,7 @@ lt:
     intro_text: OpenStreetMap yra pasaulio žemėlapis, kuriamas žmonių, tokių kaip
       jūs. Jis atviras ir laisvas - naudojamas pagal atvirą licenciją.
     intro_2_create_account: sukurti naudotojo paskyrą
-    hosting_partners_html: Hostinimo paslaugas teikia %{ucl}, %{fastly}, %{bytemark}
-      ir kiti %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark serveris
     partners_partners: partneriai
     tou: Naudojimo sąlygos
     osm_offline: Šiuo metu OpenStreetMap duomenų bazė išjungta, nes vykdomi svarbūs
@@ -1832,10 +1829,6 @@ lt:
       help_text: Įveskite elektroninio pašto adresą, kurį naudojote užsiregistruodami.
         Mes atsiųsime nuorodą į elektroninį paštą, kurią galėsite naudoti norėdami
         iš naujo nustatyti slaptažodį.
-    create:
-      notice email on way: Apgailestaujame, kad praradote slaptažodį :-( bet elektroninis
-        laiškas jau išsiųstas, tad greitai slaptažodį atstatysite.
-      notice email cannot find: Gaila, bet toks e-pašto adresas nerastas.
     edit:
       title: Iš naujo nustatyti slaptažodį
       heading: Iš naujo nustatyti naudotojo %{user} slaptažodį
@@ -2423,8 +2416,6 @@ lt:
       identifiable: IDENTIFIKUOJAMAS
       private: PRIVATUS
       trackable: ATSEKAMAS
-      by: (emptypage)
-      in: į
     index:
       public_traces: Vieši GPS pėdsakai
       my_gps_traces: Mano GPS pėdsakai
@@ -2708,9 +2699,6 @@ lt:
     index:
       title: Naudotojai
       heading: Naudotojai
-      showing:
-        one: Puslapis %{page} (%{first_item} visų %{items})
-        other: Puslapis %{page} (%{first_item}-%{last_item} visų %{items})
       summary_html: '%{name} sukurta %{ip_address} %{date}'
       summary_no_ip_html: '%{name} sukurta %{date}'
       confirm: Patvirtinti pažymėtus naudotojus
@@ -2854,7 +2842,6 @@ lt:
       revoke: Atšaukti!
       confirm: Ar tikrai?
       reason: 'Blokavimo priežastis:'
-      back: Peržiūrėti visus blokavimus
       revoker: 'Atšaukėjas:'
       needs_view: Naudotojas turi prisijungti, kad jo blokavimas būtų panaikintas.
     block:
@@ -2868,9 +2855,6 @@ lt:
       reason: Blokavimo priežastis
       status: Būsena
       revoker_name: Atšaukė
-      showing_page: Puslapis %{page}
-      next: Kitas »
-      previous: « Ankstesnis
   notes:
     index:
       title: Pastabas pateikė arba komentavo %{user}
index 7dfbe95f70f91f1e80407f20b3747ae8f3311628..43a84bbadb4e9ee027010a9fd51970e641221042 100644 (file)
@@ -250,10 +250,6 @@ lv:
     destroy:
       success: Konts dzēsts.
   browse:
-    created: Izveidots
-    closed: Aizvērts
-    created_ago_html: Izveidots %{time_ago}
-    closed_ago_html: Slēgts %{time_ago}
     version: Versija
     in_changeset: Izmaiņu kopa
     anonymous: anonīms
@@ -267,19 +263,6 @@ lv:
     view_history: Skatīt vēsturi
     view_details: Skatīt detaļas
     location: 'Atrašanās vieta:'
-    changeset:
-      title: 'Izmaiņu kopa: %{id}'
-      belongs_to: Autors
-      node: Punkti (%{count})
-      node_paginated: Punkti (%{x}-%{y} no %{count})
-      way: Ceļi (%{count})
-      way_paginated: Ceļi (%{x}-%{y} no %{count})
-      relation: Relācijas (%{count})
-      relation_paginated: Relācijas (%{x}-%{y} no %{count})
-      changesetxml: Izmaiņu kopas XML
-      osmchangexml: osmChange XML
-      join_discussion: Ieejiet sistēmā lai pievienotos diskusijai
-      discussion: Diskusija
     node:
       title_html: 'Punkts: %{name}'
       history_title_html: 'Punkta vēsture: %{name}'
@@ -375,6 +358,24 @@ lv:
       feed:
         title: Izmaiņu kopa %{id}
         title_comment: Izmaiņu kopa %{id} - %{comment}
+        created: Izveidots
+        closed: Aizvērts
+        belongs_to: Autors
+    show:
+      title: 'Izmaiņu kopa: %{id}'
+      created_ago_html: Izveidots %{time_ago}
+      closed_ago_html: Slēgts %{time_ago}
+      discussion: Diskusija
+      join_discussion: Ieejiet sistēmā lai pievienotos diskusijai
+      changesetxml: Izmaiņu kopas XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Punkti (%{count})
+      nodes_paginated: Punkti (%{x}-%{y} no %{count})
+      ways: Ceļi (%{count})
+      ways_paginated: Ceļi (%{x}-%{y} no %{count})
+      relations: Relācijas (%{count})
+      relations_paginated: Relācijas (%{x}-%{y} no %{count})
     timeout:
       sorry: Atvainojiet, jūsu pieprasīto izmaiņu kopu ielāde prasīja pārāk daudz
         laika.
@@ -1203,8 +1204,6 @@ lv:
     intro_text: OpenStreetMap ir pasaules karte, kuru veido cilvēki kā tu, un tā ir
       bezmaksas lietošanai zem atvērtas licences.
     intro_2_create_account: Izveidot lietotāja kontu
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partneri
     tou: Lietošanas noteikumi
     osm_offline: OpenStreetMap datubāze šobrīd nav pieejama, tiek veikti svarīgi datubāzes
@@ -1413,10 +1412,6 @@ lv:
       new password button: Atiestatīt paroli
       help_text: Ievadiet e-pasta adresi, kuru izmantojāt, lai reģistrētos, mēs Jums
         nosūtīsim saiti uz to, lai Jūs varētu atjaunot savu paroli.
-    create:
-      notice email on way: Atvaino, tu to pazaudēji :-( , bet e-pasts jau ir ceļā,
-        lai tu viņu drīz varētu atjaunot.
-      notice email cannot find: Atvaino, nevaru atrast šo epasta adresi.
     edit:
       title: Atiestatīt paroli
       heading: Atcelt %{user} paroli
@@ -1833,8 +1828,6 @@ lv:
       identifiable: IDENTIFICĒJAMS
       private: PRIVĀTS
       trackable: ATSEKOJAMS
-      by: "no"
-      in: iekš
     index:
       public_traces: Publiskās GPS trases
       public_traces_from: Publiskas GPS trases no %{user}
@@ -2027,9 +2020,6 @@ lv:
     index:
       title: Lietotāji
       heading: Lietotāji
-      showing:
-        one: Lapa %{page} (%{first_item} no %{items})
-        other: Lapa %{page} (%{first_item}-%{last_item} no %{items})
       summary_html: '%{name} izveidoja no %{ip_address} @ %{date}'
       summary_no_ip_html: '%{name} izveidoja @ %{date}'
       confirm: Apstiprināt atlasītos lietotājus
@@ -2136,7 +2126,6 @@ lv:
       revoke: Atsaukt!
       confirm: Vai esat pārliecināts?
       reason: 'Bloķēšanas iemesls:'
-      back: Skatīt visus bloķējumus
       revoker: 'Atsaucējs:'
       needs_view: Lietotājam ir jāautorizējas, pirms liegums tiks notīrīts.
     block:
@@ -2150,9 +2139,6 @@ lv:
       reason: Iemesls liegumam
       status: Statuss
       revoker_name: Atsaucis
-      showing_page: Rāda lapu %{page}
-      next: Nākamais »
-      previous: « Iepriekšējais
   notes:
     index:
       title: Piezīmes, kuras veidojis vai komentējis %{user}
index 758e16149126e58a6a89f4fe4e81e9529724b41a..97cdb1e0ac5653416b6d368f3d389fea39bca905 100644 (file)
@@ -320,15 +320,10 @@ mk:
     destroy:
       success: Сметката е избришана.
   browse:
-    created: Создадено
-    closed: Затворено
-    created_ago_html: Создадено %{time_ago}
-    closed_ago_html: Затворено %{time_ago}
-    created_ago_by_html: Создадено %{time_ago} од %{user}
-    closed_ago_by_html: Затворено %{time_ago} од %{user}
     deleted_ago_by_html: Избришано %{time_ago} од %{user}
     edited_ago_by_html: Изменето %{time_ago} од %{user}
     version: Верзија
+    redacted_version: Исправена верзија
     in_changeset: Измени
     anonymous: анонимец
     no_comment: (нема коментари)
@@ -341,25 +336,11 @@ mk:
       other: '%{count} патишта'
     download_xml: Преземи XML
     view_history: Погл. историја
+    view_unredacted_history: Погл. неизменета историја
     view_details: Погл. подробности
+    view_redacted_data: Погл. исправена верзија
+    view_redaction_message: Погл. порака за измената
     location: 'Местоположба:'
-    changeset:
-      title: 'Измена: %{id}'
-      belongs_to: Автор
-      node: Јазли (%{count})
-      node_paginated: Јазли (%{x}-%{y} од вкупно %{count})
-      way: Патишта (%{count})
-      way_paginated: Патишта (%{x}-%{y} од вкупно %{count})
-      relation: Односи (%{count})
-      relation_paginated: Односи (%{x}-%{y} од вкупно %{count})
-      hidden_comment_by_html: Скриен коментар од %{user} %{time_ago}
-      comment_by_html: Коментар од %{user} %{time_ago}
-      changesetxml: XML за измените
-      osmchangexml: osmChange XML
-      join_discussion: Најавете се за да се приклучите во разговорот
-      discussion: Разговор
-      still_open: Измените сè уште се отворени — разговорот ќе се отвори штом ќе се
-        затворат измените.
     node:
       title_html: 'Јазол: %{name}'
       history_title_html: 'Историја на јазолот: %{name}'
@@ -476,6 +457,9 @@ mk:
       feed:
         title: Измени %{id}
         title_comment: Измени %{id} - %{comment}
+        created: Создадено
+        closed: Затворено
+        belongs_to: Автор
     subscribe:
       heading: Да ве претплатам на слединов разговор за измени?
       button: Претплати се на разговорот
@@ -490,6 +474,29 @@ mk:
       heading: 'Нема ставка со назнаката: %{id}'
       body: Жалиме, но не постојат измени со назнаката %{id}. Проверете да не сте
         згрешиле во пишувањето, или пак да не сте стиснале на погрешна врска.
+    show:
+      title: 'Измена: %{id}'
+      created: 'Создадено: %{when}'
+      closed: 'Затворено: %{when}'
+      created_ago_html: Создадено %{time_ago}
+      closed_ago_html: Затворено %{time_ago}
+      created_ago_by_html: Создадено %{time_ago} од %{user}
+      closed_ago_by_html: Затворено %{time_ago} од %{user}
+      discussion: Разговор
+      join_discussion: Најавете се за да се приклучите во разговорот
+      still_open: Измените сè уште се отворени — разговорот ќе се отвори штом ќе се
+        затворат измените.
+      comment_by_html: Коментар од %{user} %{time_ago}
+      hidden_comment_by_html: Скриен коментар од %{user} %{time_ago}
+      changesetxml: XML за измените
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Јазли (%{count})
+      nodes_paginated: Јазли (%{x}-%{y} од вкупно %{count})
+      ways: Патишта (%{count})
+      ways_paginated: Патишта (%{x}-%{y} од вкупно %{count})
+      relations: Односи (%{count})
+      relations_paginated: Односи (%{x}-%{y} од вкупно %{count})
     timeout:
       sorry: За жал, на списокот на промени што го побаравте му требаше предолго за
         да се добие.
@@ -1583,11 +1590,10 @@ mk:
     intro_text: OpenStreetMap е карта на светот создадена од луѓе како вас и се нуди
       за слободна употреба под отворена лиценца.
     intro_2_create_account: Создајте корисничка сметка
-    hosting_partners_html: Вдомувањето е поддржано од %{ucl}, %{fastly}, %{bytemark}
+    hosting_partners_2024_html: Вдомувањето е поддржано од %{fastly}, %{corpmembers},
       и други %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: вдомителот „Bytemark“
+    partners_corpmembers: Корпоративни членови на OSMF
     partners_partners: партнери
     tou: Услови на употреба
     osm_offline: Базата на податоци на  OpenStreetMap моментално е исклучена додека
@@ -1863,9 +1869,8 @@ mk:
       help_text: Внесете ја е-поштенската адреса со која се зачленивте, и ќе ви пратиме
         врска каде ќе наведете нова лозинка.
     create:
-      notice email on way: Жалиме, ова истече :-( но ви пративме нова порака на е-пошта,
-        па наскоро повторно ќе можете да ја смените.
-      notice email cannot find: Жалам, не можев да ја пронајдам таа адреса
+      send_paranoid_instructions: Ако вашата е-пошта е веќе заведена во нашата база,
+        за неколку минути на неа ќе добиете напатствија за лозинката.
     edit:
       title: Смени лозинка
       heading: Смени лозинка за %{user}
@@ -2561,8 +2566,8 @@ mk:
       identifiable: ПРЕПОЗНАТЛИВО
       private: ЛИЧНО
       trackable: ПРОСЛЕДЛИВ
-      by: од
-      in: во
+      details_with_tags_html: '%{time_ago} од %{user} во %{tags}'
+      details_without_tags_html: '%{time_ago} од %{user}'
     index:
       public_traces: Јавни ГПС-траги
       my_gps_traces: Мои ГПС-траги
@@ -2877,9 +2882,11 @@ mk:
     index:
       title: Корисници
       heading: Корисници
-      showing:
-        one: Страница %{page} (%{first_item} од %{items})
-        other: Страница %{page} (%{first_item}-%{last_item} од %{items})
+      older: Постари корисници
+      newer: Понови корисници
+      found_users:
+        one: Најдов %{count} корисник
+        other: Најдов %{count} корисници
       summary_html: '%{name} создадено од %{ip_address} на %{date}'
       summary_no_ip_html: '%{name} создадено на %{date}'
       confirm: Потврди ги одбраните корисници
@@ -3021,7 +3028,6 @@ mk:
       revoke: Поништи!
       confirm: Дали сте сигурни?
       reason: 'Причина за блокирање:'
-      back: Преглед на сите блокови
       revoker: 'Поништувач:'
       needs_view: Овој корисник мора да се најави пред да се исчисти блокот.
     block:
@@ -3035,9 +3041,15 @@ mk:
       reason: Причина за блокирање
       status: Статус
       revoker_name: 'Поништил:'
-      showing_page: Страница %{page}
-      next: Следна »
-      previous: « Претходна
+      older: Постари блокови
+      newer: Понови блокови
+    navigation:
+      all_blocks: Сите блокови
+      blocks_on_me: Добиени блокови
+      blocks_on_user: Блокови за %{user}
+      blocks_by_me: Извршени болокови
+      blocks_by_user: Блокови од %{user}
+      block: Блок бр. %{id}
   user_mutes:
     index:
       title: Замолкнати корисници
index 0588febb397b0f64781cfb4c3660bd2ca19337cc..0404ed3d33cec350d7df10343a88b83718dee435 100644 (file)
@@ -93,8 +93,6 @@ mo:
     go_public:
       heading: 'Редактаря публикэ:'
   browse:
-    created: Креат
-    closed: Ынкис
     version: Версиуне
     anonymous: аноним
     no_comment: (фэрэ коментариу)
@@ -103,16 +101,6 @@ mo:
     view_history: Екзаминаря историкулуй
     view_details: Май деталият
     location: 'Ситуаре:'
-    changeset:
-      belongs_to: Аутор
-      node: Пункте (%{count})
-      node_paginated: Пункте (%{x}-%{y} дин %{count})
-      way: Кэй (%{count})
-      way_paginated: Кэй (%{x}-%{y} дин %{count})
-      relation: Релаций (%{count})
-      relation_paginated: Релаций (%{x}-%{y} дин %{count})
-      join_discussion: Вэ ругэм сэ ынтраць ын конт пентру а вэ алэтура дискуцией
-      discussion: Дискуцие
     node:
       title_html: 'Пункт: %{name}'
     way:
@@ -156,6 +144,21 @@ mo:
     changesets:
       user: Утилизатор
       comment: Коментариу
+    index:
+      feed:
+        created: Креат
+        closed: Ынкис
+        belongs_to: Аутор
+    show:
+      discussion: Дискуцие
+      join_discussion: Вэ ругэм сэ ынтраць ын конт пентру а вэ алэтура дискуцией
+    paging_nav:
+      nodes: Пункте (%{count})
+      nodes_paginated: Пункте (%{x}-%{y} дин %{count})
+      ways: Кэй (%{count})
+      ways_paginated: Кэй (%{x}-%{y} дин %{count})
+      relations: Релаций (%{count})
+      relations_paginated: Релаций (%{x}-%{y} дин %{count})
   dashboards:
     show:
       my friends: Приетений мей
@@ -532,8 +535,6 @@ mo:
     intro_text: OpenStreetMap есте о хартэ а лумий, креатэ де оамень ка ши думнявоастрэ,
       ши поате фи утилизатэ ын мод либер суб о личенцэ дескисэ.
     intro_2_create_account: Креаць ун конт де утилизатор
-    partners_ucl: Колеӂиул Университар дин Лондра (UCL)
-    partners_bytemark: Хостингул Bytemark
     partners_partners: партенерь
     help: Ажутор
     about: Деспре проект
index f5d0fcc0e47878b2cbe35c6457b2c6e2cc01a33c..c5f915a8fb8e9d866c324b9ff7a30c8a85b3b002 100644 (file)
@@ -194,8 +194,6 @@ mr:
         link text: हे काय आहे?
       save changes button: बदल जतन करा
   browse:
-    created: बनविले
-    closed: बंद केले
     version: आवृत्ती
     in_changeset: बदलसंच
     anonymous: अनामिक
@@ -211,18 +209,6 @@ mr:
     view_history: इतिहास पहा
     view_details: तपशील पहा
     location: 'ठिकाण:'
-    changeset:
-      title: 'बदलसंच: %{id}'
-      belongs_to: लेखक
-      node: गाठी (%{count})
-      node_paginated: गाठी (%{x}-%{y}, %{count} पैकी)
-      way: मार्ग (%{count})
-      way_paginated: मार्ग (%{x}-%{y}, %{count} पैकी)
-      relation: संबंध (%{count})
-      relation_paginated: संबंध (%{x}-%{y}, %{count} पैकी)
-      changesetxml: बदलसंच XML
-      osmchangexml: osmChange XML
-      join_discussion: चर्चेत सहभागी होण्यासाठी सनोंद प्रवेश करा
     node:
       title_html: 'गाठ: %{name}'
       history_title_html: 'गाठीचा इतिहास: %{name}'
@@ -311,6 +297,21 @@ mr:
       feed:
         title: बदलसंच %{id}
         title_comment: बदलसंच %{id} - %{comment}
+        created: बनविले
+        closed: बंद केले
+        belongs_to: लेखक
+    show:
+      title: 'बदलसंच: %{id}'
+      join_discussion: चर्चेत सहभागी होण्यासाठी सनोंद प्रवेश करा
+      changesetxml: बदलसंच XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: गाठी (%{count})
+      nodes_paginated: गाठी (%{x}-%{y}, %{count} पैकी)
+      ways: मार्ग (%{count})
+      ways_paginated: मार्ग (%{x}-%{y}, %{count} पैकी)
+      relations: संबंध (%{count})
+      relations_paginated: संबंध (%{x}-%{y}, %{count} पैकी)
     timeout:
       sorry: क्षमा असावी, आपण मागितलेली बदलसंचाची यादी मिळविण्यास फार वेळ लागला.
   changeset_comments:
@@ -856,8 +857,6 @@ mr:
     intro_text: ओपनस्ट्रीटमॅप हा जगाचा नकाशा आहे, जो आपल्यासारख्या लोकांनी तयार केला
       आहे, व जो खुल्या परवान्यांतर्गत वापरास मुक्त आहे.
     intro_2_create_account: सदस्यखाते तयार करा
-    partners_ucl: UCL VR सेंटर
-    partners_bytemark: बाईटमार्क होस्टिंग
     partners_partners: भागीदार
     osm_offline: डाटाबेसचे आवश्यक देखरेखीचे काम असल्यामुळे ओपनस्ट्रीटमॅप डाटाबेस ही
       जालावेगळी करण्यात आलेली आहे.
@@ -1264,8 +1263,6 @@ mr:
       identifiable: ओळखण्याजोगी
       private: खाजगी
       trackable: मागोव्याजोगा
-      by: तर्फे
-      in: आत
     index:
       public_traces: सार्वजनिक GPS अनुरेख
       my_gps_traces: माझ्या GPS अनुरेखा
@@ -1354,9 +1351,6 @@ mr:
     index:
       title: सदस्य
       heading: सदस्य
-      showing:
-        one: पान %{page} (%{first_item}, %{items} पैकी)
-        other: पान %{page} (%{first_item}-%{last_item}, %{items}पैकी)
   user_blocks:
     helper:
       block_duration:
@@ -1372,10 +1366,6 @@ mr:
         years:
           one: '%{count} वर्ष'
           other: '%{count} वर्षे'
-    blocks:
-      showing_page: पान %{page}
-      next: पुढील »
-      previous: « मागील
   notes:
     show:
       title: 'टीप: %{id}'
index 7f60547208f5f5eff103e01fc42d56b555e99eed..5737994fce3e97652c0ba66417488d02949d2536 100644 (file)
@@ -270,8 +270,6 @@ ms:
     destroy:
       success: Akaun Terhapus.
   browse:
-    created: Tercipta
-    closed: Tertutup
     version: Versi
     in_changeset: Set Ubah
     anonymous: awanama
@@ -281,19 +279,6 @@ ms:
     view_history: Lihat Sejarah
     view_details: Lihat Butiran
     location: 'Lokasi:'
-    changeset:
-      title: 'Set Ubah: %{id}'
-      belongs_to: Pengarang
-      node: Nod (%{count})
-      node_paginated: Nod (%{x}-%{y} / %{count})
-      way: Jalan (%{count})
-      way_paginated: Jalan (%{x}-%{y} / %{count})
-      relation: Hubungan (%{count})
-      relation_paginated: Hubungan (%{x}-%{y} / %{count})
-      changesetxml: XML Set Ubah
-      osmchangexml: XML osmChange
-      join_discussion: Daftar masuk untuk perbincangan
-      discussion: Perbincangan
     node:
       title_html: 'Nod: %{name}'
       history_title_html: 'Sejarah Nod: %{name}'
@@ -392,6 +377,22 @@ ms:
       feed:
         title: Set Ubah %{id}
         title_comment: Set Ubah %{id} - %{comment}
+        created: Tercipta
+        closed: Tertutup
+        belongs_to: Pengarang
+    show:
+      title: 'Set Ubah: %{id}'
+      discussion: Perbincangan
+      join_discussion: Daftar masuk untuk perbincangan
+      changesetxml: XML Set Ubah
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Nod (%{count})
+      nodes_paginated: Nod (%{x}-%{y} / %{count})
+      ways: Jalan (%{count})
+      ways_paginated: Jalan (%{x}-%{y} / %{count})
+      relations: Hubungan (%{count})
+      relations_paginated: Hubungan (%{x}-%{y} / %{count})
     timeout:
       sorry: Maaf, senarai set perubahan yang anda minta mengambil masa yang terlalu
         lama untuk diambil.
@@ -1199,8 +1200,6 @@ ms:
     intro_text: OpenStreetMap ialah peta dunia yang diwujudkan oleh insan seperti
       anda, dan bebas digunakan dengan berlandaskan lesen terbuka.
     intro_2_create_account: Buka akaun pengguna
-    partners_ucl: Pusat VR UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: rakan-rakan kongsi
     tou: Syarat-Syarat Penggunaan
     osm_offline: Pangkalan data OpenStreetMap kini diputuskan sambungannya sementara
@@ -1399,11 +1398,6 @@ ms:
       new password button: Set semula kata laluan
       help_text: Isikan alamat e-mel yang anda gunakan untuk mendaftar. Kami akan
         menge-melkan pautan untuk anda mengeset semula kata laluan anda.
-    create:
-      notice email on way: Kesiannya anda sudah terlupa kata laluan :-( tetapi kami
-        akan menghantar satu pesanan e-mel untuk anda mengesetnya semula tidak lama
-        lagi.
-      notice email cannot find: Maaf, alamat e-mel itu tidak dapat dijumpai.
     edit:
       title: Set semula kata laluan
       heading: Set Semula Kata Laluan untuk %{user}
@@ -1831,8 +1825,6 @@ ms:
       identifiable: BOLEH DIKENAL PASTI
       private: PERIBADI
       trackable: BOLEH DIJEJAKI
-      by: oleh
-      in: dalam
     index:
       public_traces: Jejak GPS umum
       my_gps_traces: Jejak GPS Saya
@@ -1871,6 +1863,7 @@ ms:
         tidak semestinya harus bersetuju, tetapi mesti membacanya.
     settings_menu:
       account_settings: Tetapan Akaun
+      muted_users: Pengguna yang Diredamkan
   oauth:
     authorize:
       title: Benarkan akses kepada akaun anda
@@ -2054,9 +2047,6 @@ ms:
     index:
       title: Pengguna
       heading: Pengguna
-      showing:
-        one: Halaman %{page} (%{first_item} / %{items})
-        other: Halaman %{page} (%{first_item}-%{last_item} / %{items})
       summary_html: '%{name} diwujudkan dari %{ip_address} pada %{date}'
       summary_no_ip_html: '%{name} diwujudkan pada %{date}'
       confirm: Sahkan Pengguna-Pengguna Terpilih
@@ -2155,7 +2145,6 @@ ms:
       revoke: Tarik Balik!
       confirm: Adakah anda pasti?
       reason: 'Sebab sekatan:'
-      back: Lihat semua sekatan
       revoker: 'Penarik balik:'
       needs_view: Pengguna perlu log masuk sebelum sekatan ini dapat ditarik balik.
     block:
@@ -2169,9 +2158,9 @@ ms:
       reason: Sebab sekatan
       status: Status
       revoker_name: Ditarik balik oleh
-      showing_page: Halaman %{page}
-      next: Berikutnya »
-      previous: « Sebelumnya
+  user_mutes:
+    index:
+      title: Pengguna yang Diredamkan
   notes:
     index:
       title: Nota yang dikemukakan atau diulas oleh %{user}
index 3cd4ae52b9cf106e322145705e6c6a0f1d63eec6..8501a5764448cfefbbfc4d16f828cdf88be2dc21 100644 (file)
@@ -136,18 +136,12 @@ my:
       current email address: လက်ရှိ အီးမေးလ်လိပ်စာ
       save changes button: ပြောင်းလဲမှုများကို သိမ်းရန်
   browse:
-    created: ဖန်တီးလိုက်သည်
-    closed: ပိတ်လိုက်သည်
     version: ဗားရှင်း
     anonymous: အမည်မသိ
     no_comment: (မှတ်ချက် မရှိ)
     view_history: ရာဇဝင်ကြည့်ရန်
     view_details: အသေးစိပ် ကြည့်ရန်
     location: 'တည်နေရာ:'
-    changeset:
-      belongs_to: စာရေးသူ
-      join_discussion: ဆွေးနွေးရန် လော့အင်ဝင်ပါ
-      discussion: ဆွေးနွေးချက်
     relation:
       members: အဖွဲ့ဝင်များ
     not_found:
@@ -178,6 +172,13 @@ my:
       area: ဧရိယာ
     index:
       load_more: ပိုမိုခေါ်ယူရန်
+      feed:
+        created: ဖန်တီးလိုက်သည်
+        closed: ပိတ်လိုက်သည်
+        belongs_to: စာရေးသူ
+    show:
+      discussion: ဆွေးနွေးချက်
+      join_discussion: ဆွေးနွေးရန် လော့အင်ဝင်ပါ
   changeset_comments:
     comment:
       commented_at_by_html: '%{user} က %{when} အကြာက မွမ်းမံခဲ့သည်'
@@ -775,9 +776,6 @@ my:
     blocks:
       creator_name: ဖန်တီးသူ
       status: အခြေအနေ
-      showing_page: စာမျက်နှာ %{page}
-      next: ရှေ့ »
-      previous: « ယခင်က
   notes:
     index:
       creator: ဖန်တီးသူ
index 2ddd305c0d9e87c916048365b14b50d4ffe447d3..22914652e72c4d4a7a6d2bb4e688b14fe528edc1 100644 (file)
@@ -317,8 +317,6 @@ nb:
     destroy:
       success: Kontoen er slettet.
   browse:
-    created: Opprettet
-    closed: Lukket
     version: Versjon
     in_changeset: Endringssett
     anonymous: anonym
@@ -334,21 +332,6 @@ nb:
     view_history: Vis historikk
     view_details: Vis detaljer
     location: 'Posisjon:'
-    changeset:
-      title: 'Endringssett: %{id}'
-      belongs_to: Forfatter
-      node: Noder (%{count})
-      node_paginated: Noder (%{x}-%{y} av %{count})
-      way: Strekninger (%{count})
-      way_paginated: Strekninger (%{x}-%{y} av %{count})
-      relation: Forbindelser (%{count})
-      relation_paginated: Forbindelser (%{x}-%{y} av %{count})
-      changesetxml: XML for endringssett
-      osmchangexml: osmChange-XML
-      join_discussion: Logg inn for å delta i diskusjonen
-      discussion: Diskusjon
-      still_open: Endringssettet er fortsatt åpent – diskusjonen åpner når endringssettet
-        er lukket.
     node:
       title_html: 'Node: %{name}'
       history_title_html: 'Node-historikk: %{name}'
@@ -452,8 +435,26 @@ nb:
       feed:
         title: Endringssett %{id}
         title_comment: 'Endringsforløp: %{id} - %{comment}'
+        created: Opprettet
+        closed: Lukket
+        belongs_to: Forfatter
     no_such_entry:
       heading: 'Ingen oppføring med ID-en: %{id}'
+    show:
+      title: 'Endringssett: %{id}'
+      discussion: Diskusjon
+      join_discussion: Logg inn for å delta i diskusjonen
+      still_open: Endringssettet er fortsatt åpent – diskusjonen åpner når endringssettet
+        er lukket.
+      changesetxml: XML for endringssett
+      osmchangexml: osmChange-XML
+    paging_nav:
+      nodes: Noder (%{count})
+      nodes_paginated: Noder (%{x}-%{y} av %{count})
+      ways: Strekninger (%{count})
+      ways_paginated: Strekninger (%{x}-%{y} av %{count})
+      relations: Forbindelser (%{count})
+      relations_paginated: Forbindelser (%{x}-%{y} av %{count})
     timeout:
       sorry: Listen over endringssett du ba om tok for lang tid å hente.
   changeset_comments:
@@ -1388,10 +1389,6 @@ nb:
     intro_text: OpenStreetMap er et kart over verden, skapt av mennesker som deg,
       og gratis å bruke under en åpen lisens.
     intro_2_create_account: Opprett en brukerkonto
-    hosting_partners_html: Hosting støttes av %{ucl}, %{fastly}, %{bytemark}, og andre
-      %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnere
     tou: Bruksvilkår
     osm_offline: OpenStreetMap databasen er for øyeblikket utilgjengelig mens essensielt
@@ -1608,10 +1605,6 @@ nb:
       new password button: Nullstill passord
       help_text: Skriv inn e-postadressen du brukte for å registrere deg, og vi vil
         sende deg ei lenke som du kan bruke til å nullstille passordet ditt.
-    create:
-      notice email on way: Synd at du mistet det, men en e-post er på vei slik at
-        du kan tilbakestille det snart.
-      notice email cannot find: Klarte ikke finne den e-postadressen. Beklager.
     edit:
       title: Nullstill passord
       heading: Nullstill passord for %{user}
@@ -2027,8 +2020,6 @@ nb:
       identifiable: IDENTIFISERBAR
       private: PRIVAT
       trackable: SPORBAR
-      by: av
-      in: i
     index:
       public_traces: Offentlig GPS-spor
       public_traces_from: Offentlige GPS-spor fra %{user}
@@ -2254,9 +2245,8 @@ nb:
     index:
       title: Brukere
       heading: Brukere
-      showing:
-        one: Side %{page} (%{first_item} av %{items})
-        other: Side %{page} (%{first_item}-%{last_item} av %{items})
+      older: Eldre brukere
+      newer: Nyere brukere
       summary_html: '%{name} opprettet fra %{ip_address} den %{date}'
       summary_no_ip_html: '%{name} opprettet %{date}'
       confirm: Bekreft valgte brukere
@@ -2379,7 +2369,6 @@ nb:
       revoke: Tilbakekall!
       confirm: Er du sikker?
       reason: 'Årsak for blokkering:'
-      back: Vis alle blokkeringer
       revoker: 'Tilbakekaller:'
       needs_view: Brukeren må logge inn før denne blokkeringen blir fjernet.
     block:
@@ -2393,9 +2382,6 @@ nb:
       reason: Årsak for blokkering
       status: Status
       revoker_name: Tilbakekalt av
-      showing_page: Side %{page}
-      next: Neste »
-      previous: « Forrige
   notes:
     index:
       title: Merknader sendt inn eller kommentert på av %{user}
index 3ed6f362433bf7e3a0bbf90d32c97e992ad0d221..acaed1b3ceb859ccb9831105d5a25a0868af09c1 100644 (file)
@@ -566,8 +566,6 @@ nds:
       edit_map: Koort ännern
       public: APEN
       private: PRIVAAT
-      by: von
-      in: in
   oauth_clients:
     show:
       edit: Details ännern
index 79f9b86742835eb70784651d7762be24051498bd..b5d6cdb3c3c5a5921593836fd353ce3a4ccab885 100644 (file)
@@ -150,8 +150,6 @@ ne:
         Check your email for a note to confirm your new email address.
       success: प्रयोगकर्ताको जानकारीहरू सफलतापूर्वक अध्यावधिक गरियो।
   browse:
-    created: सृजना गरिएको
-    closed: समापन भएको
     version: संस्करण
     in_changeset: परिवर्नहरू
     anonymous: अज्ञात
@@ -161,19 +159,6 @@ ne:
     view_history: इतिहास हेर्नुहोस्
     view_details: बिस्तृतमा हेर्नुहोस्
     location: 'स्थान:'
-    changeset:
-      title: 'परिवर्तनहरू: %{id}'
-      belongs_to: रचयिता
-      node: अंशहरू (%{count})
-      node_paginated: अंशहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
-      way: बाटोहरू (%{count})
-      way_paginated: बाटोहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
-      relation: सम्बन्धहरू (%{count})
-      relation_paginated: सम्बन्धहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
-      changesetxml: चेन्जसेट XML
-      osmchangexml: osmChange XML
-      join_discussion: छलफलमा भाग लिन लग इन गर्नुहोस्
-      discussion: छलफल
     node:
       title_html: 'अंश: %{name}'
       history_title_html: 'अंशको इतिहास: %{name}'
@@ -271,6 +256,22 @@ ne:
       feed:
         title: 'परिवर्तनहरू: %{id}'
         title_comment: परिवर्तनहरू %{id} - %{comment}
+        created: सृजना गरिएको
+        closed: समापन भएको
+        belongs_to: रचयिता
+    show:
+      title: 'परिवर्तनहरू: %{id}'
+      discussion: छलफल
+      join_discussion: छलफलमा भाग लिन लग इन गर्नुहोस्
+      changesetxml: चेन्जसेट XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: अंशहरू (%{count})
+      nodes_paginated: अंशहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
+      ways: बाटोहरू (%{count})
+      ways_paginated: बाटोहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
+      relations: सम्बन्धहरू (%{count})
+      relations_paginated: सम्बन्धहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
     timeout:
       sorry: माफ गर्नुहोला, तपाईंले खोज्नुभएको परिवर्तनहरूको सूची प्राप्त गर्न निकै
         समय लाग्यो ।
@@ -1036,8 +1037,6 @@ ne:
       edit_map: नक्सा सम्पादन गर्ने
       public: सार्वजनिक
       private: निजी
-      by: द्वारा
-      in: मा
     index:
       public_traces: सारवजनिक GPS ट्रेसहरु
       public_traces_from: '%{user}बाट सार्वकनिक GPS ट्रेसहरु'
@@ -1123,9 +1122,6 @@ ne:
     blocks:
       creator_name: सर्जक
       status: वस्तुस्थिति
-      showing_page: पृष्ठ %{page}
-      next: अर्को »
-      previous: « अघिल्लो
   notes:
     index:
       id: आईडी
index fdfb6a8ef4e2c0bed56d619487af4790c1a03e49..2695fe8b67853f8b49b499e416ef0c39fcec3c52 100644 (file)
@@ -103,6 +103,9 @@ nl:
       messages:
         invalid_email_address: lijkt geen geldig e-mailadres te zijn
         email_address_not_routable: is niet routeerbaar
+      models:
+        user_mute:
+          is_already_muted: is al gedempt
     models:
       acl: Toegangscontrolelijst
       changeset: Wijzigingenset
@@ -379,15 +382,10 @@ nl:
     destroy:
       success: Account verwijderd.
   browse:
-    created: Aangemaakt
-    closed: Gesloten
-    created_ago_html: Gemaakt %{time_ago}
-    closed_ago_html: Gesloten %{time_ago}
-    created_ago_by_html: '%{time_ago} gemaakt door %{user}'
-    closed_ago_by_html: '%{time_ago} gesloten door %{user}'
     deleted_ago_by_html: '%{time_ago} verwijderd door %{user}'
     edited_ago_by_html: '%{time_ago} bewerkt door %{user}'
     version: Versie
+    redacted_version: Geredigeerde versie
     in_changeset: Wijzigingenset
     anonymous: anoniem
     no_comment: (geen opmerking)
@@ -400,25 +398,11 @@ nl:
       other: '%{count} wegen'
     download_xml: XML downloaden
     view_history: Geschiedenis weergeven
+    view_unredacted_history: Niet-geredigeerde geschiedenis bekijken
     view_details: Details weergeven
+    view_redacted_data: Geredigeerde gegevens bekijken
+    view_redaction_message: Redactiebericht bekijken
     location: 'Locatie:'
-    changeset:
-      title: 'Wijzigingenset: %{id}'
-      belongs_to: Auteur
-      node: Knooppunten (%{count})
-      node_paginated: Knooppunten (%{x}-%{y} van %{count})
-      way: Wegen (%{count})
-      way_paginated: Wegen (%{x}-%{y} van %{count})
-      relation: Relaties (%{count})
-      relation_paginated: Relaties (%{x}-%{y} van %{count})
-      hidden_comment_by_html: Verborgen reactie van %{user}, %{time_ago}
-      comment_by_html: Reactie van %{user}, %{time_ago}
-      changesetxml: Wijzigingenset-XML
-      osmchangexml: osmChange-XML
-      join_discussion: Meld u aan om mee te praten
-      discussion: Overleg
-      still_open: Wijzigingenset is nog open – overleg gaat open zodra de wijzigingenset
-        wordt afgesloten.
     node:
       title_html: 'Knooppunt: %{name}'
       history_title_html: 'Knooppuntgeschiedenis: %{name}'
@@ -538,6 +522,46 @@ nl:
       feed:
         title: Wijzigingenset %{id}
         title_comment: Wijzigingenset %{id} - %{comment}
+        created: Aangemaakt
+        closed: Gesloten
+        belongs_to: Auteur
+    subscribe:
+      heading: Abonneren op de volgende discussie over wijzigingenreeks?
+      button: Op discussie abonneren
+    unsubscribe:
+      heading: Afmelden voor de volgende discussie over wijzigingenreeks
+      button: Van discussie afmelden
+    heading:
+      title: Wijzigingenreeks %{id}
+      created_by_html: Gemaakt door %{link_user} op %{created}.
+    no_such_entry:
+      title: Een dergelijke wijzigingenreeks bestaat niet
+      heading: 'Geen gegevens met de id: %{id}'
+      body: Er is geen wijzigingenreeks met de id %{id}. Controleer uw spelling, of
+        wellicht is de lijk die u hebt gevolgd foutief.
+    show:
+      title: 'Wijzigingenset: %{id}'
+      created: 'Aangemaakt: %{when}'
+      closed: 'Gesloten: %{when}'
+      created_ago_html: Gemaakt %{time_ago}
+      closed_ago_html: Gesloten %{time_ago}
+      created_ago_by_html: '%{time_ago} gemaakt door %{user}'
+      closed_ago_by_html: '%{time_ago} gesloten door %{user}'
+      discussion: Overleg
+      join_discussion: Meld u aan om mee te praten
+      still_open: Wijzigingenset is nog open – overleg gaat open zodra de wijzigingenset
+        wordt afgesloten.
+      comment_by_html: Reactie van %{user}, %{time_ago}
+      hidden_comment_by_html: Verborgen reactie van %{user}, %{time_ago}
+      changesetxml: Wijzigingenset-XML
+      osmchangexml: osmChange-XML
+    paging_nav:
+      nodes: Knooppunten (%{count})
+      nodes_paginated: Knooppunten (%{x}-%{y} van %{count})
+      ways: Wegen (%{count})
+      ways_paginated: Wegen (%{x}-%{y} van %{count})
+      relations: Relaties (%{count})
+      relations_paginated: Relaties (%{x}-%{y} van %{count})
     timeout:
       sorry: Het oproepen van de lijst met wijzigingensets die u hebt opgevraagd duurde
         te lang.
@@ -601,6 +625,7 @@ nl:
     show:
       title: Dagboek van %{user} | %{title}
       user_title: Dagboek van %{user}
+      discussion: Overleg
       leave_a_comment: Een reactie achterlaten
       login_to_leave_a_comment_html: U moet moet zich %{login_link} om te kunnen reageren
       login: Aanmelden
@@ -654,6 +679,12 @@ nl:
       comment: Reactie
       newer_comments: Nieuwere reacties
       older_comments: Oudere reacties
+    subscribe:
+      heading: Abonneren op de volgende dagboekaantekeningendiscussie?
+      button: Op discussie abonneren
+    unsubscribe:
+      heading: Afmelden voor de volgende dagboekaantekeningendiscussie?
+      button: Van discussie afmelden
   doorkeeper:
     errors:
       messages:
@@ -1628,11 +1659,7 @@ nl:
     intro_text: OpenStreetMap is een kaart van de wereld, gemaakt door mensen zoals
       u en vrij te gebruiken onder een open licentie.
     intro_2_create_account: Maak een account aan
-    hosting_partners_html: Hosting wordt ondersteund door %{ucl}, %{fastly}, %{bytemark},
-      en andere %{partners}.
-    partners_ucl: het UCL VR Centre
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partners
     tou: Gebruiksvoorwaarden
     osm_offline: De OpenStreetMap-database is momenteel niet beschikbaar wegens het
@@ -1788,10 +1815,9 @@ nl:
         partial_changeset_without_comment: zonder reactie
       details: Meer details over de wijzigingenset kunt u vinden op %{url}.
       details_html: Meer details over de wijzigingenset kunt u vinden op %{url}.
-      unsubscribe: Om u af te melden van de updates van deze wijzigingenset, ga naar
-        %{url} en klik op "Afmelden".
-      unsubscribe_html: Om geen meldingen meer te krijgen over deze wijzigingset,
-        gaat u naar %{url} en klikt u op "Afmelden".
+      unsubscribe: U kunt afmelden voor updates van deze wijzigingensetop %{url}.
+      unsubscribe_html: U kunt u afmelden voor updates van deze wijzigingenset op
+        %{url}.
   confirmations:
     confirm:
       heading: Controleer uw e-mail
@@ -1840,11 +1866,13 @@ nl:
       to: Aan
       subject: Onderwerp
       date: Datum
+      actions: Handelingen
     message_summary:
       unread_button: Markeren als ongelezen
       read_button: Markeren als gelezen
       reply_button: Antwoorden
       destroy_button: Verwijderen
+      unmute_button: Naar Inbox verplaatsen
     new:
       title: Bericht verzenden
       send_message_to_html: Een persoonlijk bericht naar %{name} verzenden
@@ -1859,12 +1887,15 @@ nl:
       body: Er is geen bericht met dat ID.
     outbox:
       title: Postvak UIT
+      actions: Handelingen
       messages:
         one: U hebt één verzonden bericht
         other: U hebt %{count} verzonden berichten
       no_sent_messages_html: U hebt nog geen berichten verzonden. Waarom legt u geen
         contact met %{people_mapping_nearby_link}?
       people_mapping_nearby: dichtbijzijnde mappers
+    muted:
+      title: Gedempte berichten
     reply:
       wrong_user: U bent aangemeld als "%{user}", maar het bericht waarop u wilt antwoorden
         is niet aan die gebruiker gericht. Meld u aan als de juiste gebruiker om te
@@ -1901,10 +1932,6 @@ nl:
       help_text: Voer het e-mailadres in dat u hebt opgegeven bij uw registratie.
         We sturen u dan een webkoppeling die u kunt gebruiken om uw wachtwoord opnieuw
         in te stellen.
-    create:
-      notice email on way: Spijtig om te horen dat u het vergeten bent, maar er is
-        een e-mail onderweg zodat u uw wachtwoord opnieuw kunt instellen.
-      notice email cannot find: Dat e-mailadres kon helaas niet worden gevonden.
     edit:
       title: Wachtwoord opnieuw instellen
       heading: Wachtwoord voor %{user} opnieuw instellen
@@ -2397,6 +2424,7 @@ nl:
           cycleway_national: Nationale fietsroute
           cycleway_regional: Regionale fietsroute
           cycleway_local: Lokale fietsroute
+          cycleway_mtb: Mountainbikeroute
           footway: Voetpad
           rail: Spoorweg
           train: Trein
@@ -2412,6 +2440,8 @@ nl:
           taxiway: Taxibaan
           apron: Luchthavenplatform
           admin: Bestuurlijke grens
+          capital: Hoofdstad
+          city: Stad
           orchard: Boomgaard
           vineyard: Wijngaard
           forest: Bos
@@ -2434,6 +2464,7 @@ nl:
           lake: Meer
           reservoir: Reservoir
           glacier: Gletsjer
+          reef: Rif
           wetland: Moeras
           farm: Boerderij
           brownfield: Braakliggend terrein
@@ -2609,8 +2640,6 @@ nl:
       identifiable: IDENTIFICEERBAAR
       private: PERSOONLIJK
       trackable: TRACEERBAAR
-      by: door
-      in: in
     index:
       public_traces: Openbare gps-trajecten
       my_gps_traces: Mijn GPS-traces
@@ -2700,6 +2729,7 @@ nl:
       read_gpx: Persoonlijke gps-trajecten lezen
       write_gpx: Gps-trajecten uploaden
       write_notes: Opmerkingen wijzigen
+      write_redactions: Kaartgegevens redigeren
       read_email: E-mailadres lezen
       skip_authorization: Toepassing automatisch goedkeuren
   oauth_clients:
@@ -2907,6 +2937,7 @@ nl:
           importer: Importeurstoegang intrekken
       block_history: Actieve blokkades
       moderator_history: Uitgevoerde blokkades
+      revoke_all_blocks: Alle blokkades opheffen
       comments: Reacties
       create_block: Deze gebruiker blokkeren
       activate_user: Deze gebruiker activeren
@@ -2923,9 +2954,8 @@ nl:
     index:
       title: Gebruikers
       heading: Gebruikers
-      showing:
-        one: Pagina %{page} (%{first_item} van %{items})
-        other: Pagina %{page} (%{first_item}-%{last_item} van %{items})
+      older: Oudere gebruikers
+      newer: Nieuwere gebruikers
       summary_html: '%{name} aangemaakt vanaf %{ip_address} op %{date}'
       summary_no_ip_html: '%{name} aangemaakt op %{date}'
       confirm: Geselecteerde gebruikers bevestigen
@@ -3018,6 +3048,16 @@ nl:
       confirm: Weet u zeker dat u deze blokkade wilt intrekken?
       revoke: Intrekken
       flash: Deze blokkade is ingetrokken.
+    revoke_all:
+      title: Alle blokkeringen op %{block_on} intrekken
+      heading_html: Alle blokkeringen op %{block_on} intrekken
+      empty: '%{name} heeft geen actieve blokkeringen.'
+      confirm: Weet u zeker dat u %{active_blocks} wilt intrekken?
+      active_blocks:
+        one: '%{count} actieve blokkering'
+        other: '%{count} actieve blokkeringen'
+      revoke: Intrekken
+      flash: Alle actieve blokkeringen zijn ingetrokken.
     helper:
       time_future_html: Vervalt over %{time}.
       until_login: Actief totdat de gebruiker zich aanmeldt.
@@ -3059,7 +3099,6 @@ nl:
       revoke: Intrekken
       confirm: Weet u het zeker?
       reason: 'Reden voor blokkade:'
-      back: Alle blokkades weergeven
       revoker: 'Ingetrokken door:'
       needs_view: De gebruiker moet zich aanmelden voordat deze blokkade wordt verwijderd.
     block:
@@ -3073,9 +3112,6 @@ nl:
       reason: Reden voor blokkade
       status: Status
       revoker_name: Ingetrokken door
-      showing_page: Pagina %{page}
-      next: Volgende »
-      previous: « Vorige
   user_mutes:
     index:
       title: Gedempte gebruikers
@@ -3090,8 +3126,10 @@ nl:
       table:
         thead:
           muted_user: Gedempte gebruiker
+          actions: Handelingen
         tbody:
           unmute: Dempen opheffen
+          send_message: Bericht verzenden
     create:
       notice: Je hebt %{name} gedempt.
       error: '%{name} kan niet worden gedempt. %{full_message}.'
index ef6732bec1705b2be9e3969abb8371ace1e4b5d1..58e2e53023f284c263da80e02216454442087df2 100644 (file)
@@ -239,7 +239,7 @@ nn:
           andre kontoar.
         retain_caveats: Somme opplysingar vil verte tatt vare på, til og med etter
           at kontoen din er sletta.
-        retain_edits: Eventuelle redigeringer av kartdatabasen vil behaldast.
+        retain_edits: Eventuelle endringar av kartdatabasen vil behaldast.
         retain_traces: Spor du har lasta opp vil behaldast.
         retain_diary_entries: Innlegg og kommentarar frå deg i brukardagboken vil
           verte tekne vare på, men skylte frå ålmenta.
@@ -296,12 +296,6 @@ nn:
     destroy:
       success: Kontoen er sletta.
   browse:
-    created: Oppretta
-    closed: Attlaten
-    created_ago_html: Oppretta %{time_ago}
-    closed_ago_html: Lukka %{time_ago}
-    created_ago_by_html: Oppretta %{time_ago} av %{user}
-    closed_ago_by_html: Lukka %{time_ago} av %{user}
     deleted_ago_by_html: Sletta %{time_ago} av %{user}
     edited_ago_by_html: Redigert %{time_ago} av %{user}
     version: 'Versjon:'
@@ -319,23 +313,6 @@ nn:
     view_history: Vis historikk
     view_details: Vis detaljar
     location: 'Plassering:'
-    changeset:
-      title: Endringssett %{id}
-      belongs_to: Skapar
-      node: Punkt (%{count})
-      node_paginated: Punkt (%{x}-%{y} av %{count})
-      way: Strekningar (%{count})
-      way_paginated: Strekningar (%{x}-%{y} av %{count})
-      relation: Samhøve (%{count})
-      relation_paginated: Samhøve (%{x}–%{y} av %{count})
-      hidden_comment_by_html: Skylt kommentar frå %{user} %{time_ago}
-      comment_by_html: Kommentar frå %{user} %{time_ago}
-      changesetxml: XML for endringssett
-      osmchangexml: osmChange XML
-      join_discussion: Logg inn for å vere med i diskusjonen
-      discussion: Ordskifte
-      still_open: Endringssettet er framleis ope – det vert opna for diskusjon når
-        endringssettet vert lukka.
     node:
       title_html: 'Punkt: %{name}'
       history_title_html: 'Punkthistorikk: %{name}'
@@ -442,6 +419,30 @@ nn:
       feed:
         title: Endringssett %{id}
         title_comment: 'Endringssett: %{id} - %{comment}'
+        created: Oppretta
+        closed: Attlaten
+        belongs_to: Skapar
+    show:
+      title: Endringssett %{id}
+      created_ago_html: Oppretta %{time_ago}
+      closed_ago_html: Lukka %{time_ago}
+      created_ago_by_html: Oppretta %{time_ago} av %{user}
+      closed_ago_by_html: Lukka %{time_ago} av %{user}
+      discussion: Ordskifte
+      join_discussion: Logg inn for å vere med i diskusjonen
+      still_open: Endringssettet er framleis ope – det vert opna for diskusjon når
+        endringssettet vert lukka.
+      comment_by_html: Kommentar frå %{user} %{time_ago}
+      hidden_comment_by_html: Skylt kommentar frå %{user} %{time_ago}
+      changesetxml: XML for endringssett
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Punkt (%{count})
+      nodes_paginated: Punkt (%{x}-%{y} av %{count})
+      ways: Strekningar (%{count})
+      ways_paginated: Strekningar (%{x}-%{y} av %{count})
+      relations: Samhøve (%{count})
+      relations_paginated: Samhøve (%{x}–%{y} av %{count})
     timeout:
       sorry: Lista over endringssett du ba om tok for lang tid å hente.
   changeset_comments:
@@ -1470,11 +1471,7 @@ nn:
     intro_text: OpenStreetMap er eit verdskart, laga av folk som deg. Kartet er gratis
       å bruke under ein open lisens.
     intro_2_create_account: Opprett ein brukarkonto
-    hosting_partners_html: Drifta er støtta av %{ucl}, %{fastly}, %{bytemark} og andre
-      %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnarar
     tou: Bruksvilkår
     osm_offline: OpenStreetMap databasen er for augneblunken utilgjengelig medan essensielt
@@ -1726,10 +1723,6 @@ nn:
       new password button: Nullstill passord
       help_text: Skriv inn e-postadressa du brukte for å registrere deg, og me vil
         sende deg ei lenkje som du kan bruke til å nullstille passordet ditt.
-    create:
-      notice email on way: Synd at du mista det, men ein e-post er på veg slik at
-        du kan tilbakestille det snart.
-      notice email cannot find: Klarte ikkje finne den e-postadressa. Beklagar.
     edit:
       title: Nullstill passord
       heading: Nullstill passord for %{user}
@@ -2266,8 +2259,6 @@ nn:
       identifiable: IDENTIFISERBAR
       private: PRIVAT
       trackable: SPORBAR
-      by: av
-      in: i
     index:
       public_traces: Offentlege GPS-spor
       public_traces_from: Offentlege GPS-spor frå %{user}
@@ -2450,9 +2441,6 @@ nn:
     index:
       title: Brukarar
       heading: Brukarar
-      showing:
-        one: Side %{page} (%{first_item} av %{items})
-        other: Sside %{page} (%{first_item}-%{last_item} av %{items})
       summary_html: '%{name} oppretta frå %{ip_address} den %{date}'
       summary_no_ip_html: '%{name} oppretta %{date}'
       confirm: Stadfest valde brukarar
@@ -2552,7 +2540,6 @@ nn:
       revoke: Tilbakekall!
       confirm: Er du sikker?
       reason: 'Årsak for blokkering:'
-      back: Vis alle blokkeringar
       revoker: 'Tilbakekaller:'
       needs_view: Brukaren må logge inn før denne blokkeringa vert fjerna.
     block:
@@ -2566,9 +2553,6 @@ nn:
       reason: Årsak for blokkering
       status: Status
       revoker_name: Tilbakekalt av
-      showing_page: Side %{page}
-      next: Neste »
-      previous: « Forrige
   notes:
     index:
       heading: '%{user} sine merknadar'
index e9ed1945f816c202523cc0cc15fe5aa3b5e7ef37..3422dd68ef1256ec94b708179c9a116f78637572 100644 (file)
@@ -278,12 +278,6 @@ nqo:
     destroy:
       success: ߖߊ߬ߕߋ߬ߘߊ ߓߘߊ߫ ߖߏ߰ߛߌ߫.
   browse:
-    created: ߛߌ߲ߘߌߣߍ߲
-    closed: ߘߊߕߎ߲߯ߣߍ߲
-    created_ago_html: ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{time_ago}
-    closed_ago_html: ߘߊߕߎ߯ߣߍ߲߫ ߦߋ߫ %{time_ago}
-    created_ago_by_html: ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{time_ago} %{user} ߓߟߏ߫
-    closed_ago_by_html: ߘߊߕߎ߲߯ߣߍ߲߫ ߦߋ߫ %{time_ago} ߟߊ߫ %{user} ߓߟߏ߫
     deleted_ago_by_html: ߖߏ߰ߛߌ߬ߣߍ߲߬ ߦߋ߫ %{time_ago} ߟߋ߬ ߟߊ߫ %{user} ߓߟߏ߫
     edited_ago_by_html: ߡߊߙߟߍ߬ߡߊ߲߬ߣߍ߲߬ ߦߋ߫ %{time_ago} ߟߋ߬ ߟߊ߫ %{user} ߓߟߏ߫
     version: ߦߌߟߡߊ
@@ -295,23 +289,6 @@ nqo:
     view_history: ߘߐ߬ߝߐ ߘߐߜߍ߫
     view_details: ߝߊߙߊ߲ߝߊ߯ߛߟߌ ߘߐߜߍ߫
     location: ߘߌ߲߬ߞߌߙߊ
-    changeset:
-      title: 'ߟߊ߬ߘߏ߲߬ߠߌ߲ ߡߊ߬ߝߊ߬ߟߋ߲߬ߠߌ߲: %{id}'
-      belongs_to: ߛߓߍߦߟߊ
-      node: ߥߎߙߋ߲ߛߋ߲ %{count}
-      node_paginated: ߥߎߙߋ߲ߛߋ߲ %{x}-%{y} ߦߋ߫ %{count}
-      way: ߛߌߟߊ (%{count})
-      way_paginated: ߛߌߟߊ (%{x}-%{y} ߦߋ߫ %{count})
-      relation: ߕߍߓߊ߯ߦߊ (%{count})
-      relation_paginated: ߕߍߓߊ߯ߦߊ (%{x}-%{y} %{count})
-      hidden_comment_by_html: ߞߊ߲߬ߞߎߡߊ ߥߣߊ߬ߙߌ߬ߣߍ߲߬ ߦߋ߫ %{user} ߡߊ߬ %{time_ago} ߟߊ߫
-      comment_by_html: ߞߊ߲߬ߞߎߡߊ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫ %{time_ago} ߡߊ߬
-      changesetxml: XML ߟߊ߬ߘߏ߲߬ߠߌ߲ ߡߊߝߊ߬ߟߋ߲߫
-      osmchangexml: ߏ.ߛ.ߡ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ XML
-      join_discussion: ߌ ߜߊ߲߬ߞߎ߲߫ ߞߊ߬ ߕߘߍ߬ ߡߙߌߣߊ߲߫ ߦߌߘߊ ߘߐ߫
-      discussion: ߘߊߘߐߖߊߥߏ
-      still_open: ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊߞߊ߬ߝߏ߬ߣߍ߲ ߠߎ߬ ߟߊߞߊ߬ߣߍ߲߫ ߦߋ߫ ߡߎߣߎ߲߬ - ߘߊߘߐߖߊߥߏ
-        ߘߌ߫ ߘߊߦߟߍ߬ ߣߌ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊߞߊ߬ߝߏ߬ߣߍ߲ ߠߎ߬ ߕߎ߯ ߘߊ߫ ߕߎ߬ߡߊ ߡߍ߲ ߠߊ߫.
     node:
       title_html: 'ߥߎߙߋ߲ߛߋ߲: %{name}'
       history_title_html: 'ߥߎߙߋ߲ߛߋ߲ ߘߐ߬ߝߐ: %{name}'
@@ -409,6 +386,30 @@ nqo:
       feed:
         title: ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߙߎ %{id}
         title_comment: ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߙߎ %{id} - %{comment}
+        created: ߛߌ߲ߘߌߣߍ߲
+        closed: ߘߊߕߎ߲߯ߣߍ߲
+        belongs_to: ߛߓߍߦߟߊ
+    show:
+      title: 'ߟߊ߬ߘߏ߲߬ߠߌ߲ ߡߊ߬ߝߊ߬ߟߋ߲߬ߠߌ߲: %{id}'
+      created_ago_html: ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{time_ago}
+      closed_ago_html: ߘߊߕߎ߯ߣߍ߲߫ ߦߋ߫ %{time_ago}
+      created_ago_by_html: ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{time_ago} %{user} ߓߟߏ߫
+      closed_ago_by_html: ߘߊߕߎ߲߯ߣߍ߲߫ ߦߋ߫ %{time_ago} ߟߊ߫ %{user} ߓߟߏ߫
+      discussion: ߘߊߘߐߖߊߥߏ
+      join_discussion: ߌ ߜߊ߲߬ߞߎ߲߫ ߞߊ߬ ߕߘߍ߬ ߡߙߌߣߊ߲߫ ߦߌߘߊ ߘߐ߫
+      still_open: ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊߞߊ߬ߝߏ߬ߣߍ߲ ߠߎ߬ ߟߊߞߊ߬ߣߍ߲߫ ߦߋ߫ ߡߎߣߎ߲߬ - ߘߊߘߐߖߊߥߏ
+        ߘߌ߫ ߘߊߦߟߍ߬ ߣߌ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊߞߊ߬ߝߏ߬ߣߍ߲ ߠߎ߬ ߕߎ߯ ߘߊ߫ ߕߎ߬ߡߊ ߡߍ߲ ߠߊ߫.
+      comment_by_html: ߞߊ߲߬ߞߎߡߊ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫ %{time_ago} ߡߊ߬
+      hidden_comment_by_html: ߞߊ߲߬ߞߎߡߊ ߥߣߊ߬ߙߌ߬ߣߍ߲߬ ߦߋ߫ %{user} ߡߊ߬ %{time_ago} ߟߊ߫
+      changesetxml: XML ߟߊ߬ߘߏ߲߬ߠߌ߲ ߡߊߝߊ߬ߟߋ߲߫
+      osmchangexml: ߏ.ߛ.ߡ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ XML
+    paging_nav:
+      nodes: ߥߎߙߋ߲ߛߋ߲ %{count}
+      nodes_paginated: ߥߎߙߋ߲ߛߋ߲ %{x}-%{y} ߦߋ߫ %{count}
+      ways: ߛߌߟߊ (%{count})
+      ways_paginated: ߛߌߟߊ (%{x}-%{y} ߦߋ߫ %{count})
+      relations: ߕߍߓߊ߯ߦߊ (%{count})
+      relations_paginated: ߕߍߓߊ߯ߦߊ (%{x}-%{y} %{count})
     timeout:
       sorry: ߤߊߞߍ߬ߕߏ߫߸ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊߞߊ߬ߝߏ߬ߣߍ߲ ߛߙߍߘߍ ߡߍ߲ ߡߊߢߌߣߌ߲ ߦߴߌ ߘߐ߫ ߌ ߓߟߏ߫߸
         ߊ߬ ߓߘߊ߫ ߥߛߎ߬ ߖߊ߲߬ߓߊ ߟߋ߬ ߕߵߊ߬ ߡߊߛߐ߬ߘߐ߲ ߘߐ߫.
@@ -1091,7 +1092,6 @@ nqo:
     intro_text: ߏߔߌ߲߫ ߛߕߑߙߌߕ ߡߊߔ ߦߋ߫ ߘߎߢߊ߫ ߔߊ߬ߔߘߊ ߟߋ߬ ߘߌ߫߸ ߡߍ߲ ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ ߡߐ߱ ߟߎ߬
       ߓߟߏ߫ ߦߏ߫ ߌߟߋ߸ ߊ߬ ߟߊߓߊ߯ߙߊ ߦߋ߫ ߛߙߊ߬ߓߊߟߌ ߟߋ߬ ߘߌ߫ ߟߊ߬ߘߤߊ߬ߟߌ߫ ߘߊߦߟߍ߬ߣߍ߲ ߞߘߐ߫.
     intro_2_create_account: ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߘߊߦߟߍ߬
-    partners_ucl: UCL
     partners_fastly: ߝߊߛߕߑߟߋ߫
     partners_partners: ߞߊ߬ߝߏ߬ߢߐ߲߮ ߠߎ߬
     tou: ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ ߛߙߊߕߌ
@@ -1296,10 +1296,6 @@ nqo:
       new password button: ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߬
       help_text: ߢ:ߞߏ߲ߘߏ ߟߊߘߏ߲߬ ߌ ߞߊ߬ ߡߍ߲ ߠߊߓߊ߯ߙߊ߫ ߞߵߌ ߜߊ߲߬ߞߎ߲߫߸ ߊ߲ ߘߌ߫ ߛߘߌ߬ߜߋ߲ ߗߴߌ
         ߡߵߊ߬ ߟߊ߫ ߌ ߘߴߏ߬ ߟߊߓߊ߯ߙߊ߫ ߞߵߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߫.
-    create:
-      notice email on way: ߤߊߞߍ߬ߕߏ߫ ߌ ߓߘߊ߫ ߓߐߣߵߊ߬ ߘߐ߫:-(ߒ߬ߞߊ߬ ߗߋߛߓߍ ߘߏ߫ ߦߴߊ߬ ߞߣߐ߫
-        ߏ߬ ߘߐ߫ ߌ ߘߌ߫ ߛߴߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫ ߠߊ߫ ߖߏߣߊ߫.
-      notice email cannot find: ߢ:ߞߏ߲ߘߏ ߛߊ߲߬ߓߊ߬ߕߐ߮ ߏ߬ ߕߴߛߋ߫ ߢߌߣߌ߲߫ ߠߊ߫߸ ߤߊߞߍ߬ߕߏ߫.
     edit:
       title: ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߬
       heading: ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߫ %{user} ߦߋ߫
@@ -1585,8 +1581,6 @@ nqo:
       identifiable: ߡߊ߬ߟߐ߲߬ߕߊ
       private: ߘߎ߲߬ߘߎ߬ߡߊ
       trackable: ߜߙߋ߬ߓߐ߬ߕߊ
-      by: ߞߊ߬ ߝߘߊ߫
-      in: ߘߐ߫
     index:
       public_traces: ߜߍߘߐ߫ GPS ߜߋ߬ߙߋ ߟߎ߬
       public_traces_from: ߜߍߘߐ߫ ߜߙߋ ߟߎ߬ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫
@@ -1828,9 +1822,6 @@ nqo:
     blocks:
       creator_name: ߛߌ߲ߘߌߟߊ߲
       reason: ߓߊ߬ߟߊ߲߬ߠߌ߲ ߞߎ߲߭
-      showing_page: ߞߐߜߍ %{page}
-      next: ߟߊ߬ߕߎ߲߰ߠߊ »
-      previous: ߕߊ߬ߡߌ߲߬ߣߍ߲
   notes:
     index:
       no_notes: ߦߟߌߣߐ߫ ߛߌ߫ ߕߴߦߋ߲߬
index d1ff013c15a4386f281f836f49f97ea69e32ae9d..0b42826528f295b99730c3d32ee38addaffc9b98 100644 (file)
@@ -7,6 +7,7 @@
 # Author: Gasconoc
 # Author: Gravitystorm
 # Author: Guilhelma
+# Author: Lhanars
 # Author: Macofe
 # Author: OpenStreetMap-oc
 # Author: Quentí
@@ -314,8 +315,6 @@ oc:
     destroy:
       success: Còmpte suprimit...
   browse:
-    created: Creat
-    closed: Plegat
     version: Version
     in_changeset: Grop de modificacions
     anonymous: anonim
@@ -331,21 +330,6 @@ oc:
     view_history: Mostrar l’istoric
     view_details: Mostrar lei detalhs
     location: 'Emplaçament :'
-    changeset:
-      title: 'Grop de modificacions : %{id}'
-      belongs_to: Autor
-      node: Nos (%{count})
-      node_paginated: Nos (%{x} a %{y} sus %{count})
-      way: Linha (%{count})
-      way_paginated: Linhas (%{x} a %{y} sus %{count})
-      relation: Relacions (%{count})
-      relation_paginated: Relacions (%{x} a %{y} sus %{count})
-      changesetxml: Grop de modificacions XML
-      osmchangexml: osmChange XML
-      join_discussion: Se connectar per rejónher la discussion
-      discussion: Discussion
-      still_open: Ensemble de modificacions totjorn dobèrt — la discussion se dobrirà
-        un còp que l’ensemble de modificacions serà plegat.
     node:
       title_html: 'Nos : %{name}'
       history_title_html: 'Istoric dau nos : %{name}'
@@ -453,6 +437,24 @@ oc:
       feed:
         title: Grop de modificacions %{id}
         title_comment: Grop de modificacions %{id} – %{comment}
+        created: Creat
+        closed: Plegat
+        belongs_to: Autor
+    show:
+      title: 'Grop de modificacions : %{id}'
+      discussion: Discussion
+      join_discussion: Se connectar per rejónher la discussion
+      still_open: Ensemble de modificacions totjorn dobèrt — la discussion se dobrirà
+        un còp que l’ensemble de modificacions serà plegat.
+      changesetxml: Grop de modificacions XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Nos (%{count})
+      nodes_paginated: Nos (%{x} a %{y} sus %{count})
+      ways: Linha (%{count})
+      ways_paginated: Linhas (%{x} a %{y} sus %{count})
+      relations: Relacions (%{count})
+      relations_paginated: Relacions (%{x} a %{y} sus %{count})
     timeout:
       sorry: O planhèm, la lista deis gropes de modificacions qu'avètz demandada met
         tròp de temps per èsser recuperada.
@@ -577,6 +579,9 @@ oc:
       applications:
         create:
           notice: S'es enregistrat l'aplicacion.
+  errors:
+    contact:
+      contact_url: https://wiki.openstreetmap.org/wiki/Contact
   friendships:
     make_friend:
       heading: Ajustar %{user} per amic ?
@@ -1489,11 +1494,7 @@ oc:
     intro_text: OpenStreetMap es una mapa dau monde, creada per de personas coma vos
       e liura d’utilizacion sota licéncia liura.
     intro_2_create_account: Creatz un compte d'utilizaire
-    hosting_partners_html: L'aubergament es pres en carga per %{ucl}, %{fastly}, %{bytemark},
-      e d'autres %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Albergament Bytemark
     partners_partners: partenaris
     tou: Condicions d'utilizacion
     osm_offline: La basa de donadas de OpenStreetMap es actualament fòra linha; una
@@ -1734,10 +1735,6 @@ oc:
       heading: Avètz perdut vòstre senhal ?
       email address: 'Adreça de corrièr electronic :'
       new password button: Mandar un senhal novèl
-    create:
-      notice email on way: Un e-mail vos es estat mandat per reïnicializar vòstre
-        senhal.
-      notice email cannot find: Adreça email introbabla, o planhèm.
     edit:
       title: Reïnicializar lo senhal
       heading: Reïnicializar lo senhal de %{user}
@@ -2127,8 +2124,6 @@ oc:
       identifiable: IDENTIFICABLE
       private: PRIVAT
       trackable: PISTABLE
-      by: per
-      in: dins
     index:
       public_traces: Traças GPS publicas
       my_gps_traces: Traças GPS
@@ -2310,9 +2305,6 @@ oc:
     index:
       title: Utilizaires
       heading: Utilizaires
-      showing:
-        one: Afichatge de la pagina %{page} (%{first_item} sus %{items})
-        other: Afichatge de la pagina %{page} (%{first_item}-%{last_item} sus %{items})
       summary_html: '%{name} creat dempuèi %{ip_address} lo %{date}'
       summary_no_ip_html: '%{name} creat lo %{date}'
       confirm: Confirmar los utilizaires seleccionats
@@ -2423,7 +2415,6 @@ oc:
       revoke: Revocar !
       confirm: Sètz segur ?
       reason: 'Motiu del blocatge :'
-      back: Afichar totes los blocatges
       revoker: 'Revocador :'
       needs_view: L'utilizaire se deu connectar abans qu'aqueste blocatge siá suprimit.
     block:
@@ -2437,9 +2428,6 @@ oc:
       reason: Motiu del blocatge
       status: Estatut
       revoker_name: Revocat per
-      showing_page: Pagina %{page}
-      next: Seguent »
-      previous: « Precedent
   notes:
     index:
       title: Nòtas somesas o comentadas per %{user}
index de583cce945b9e48b583172a7425609f34e441eb..28b7c1d8d064c76203de2c72edd4a2098012dfca 100644 (file)
@@ -5,6 +5,7 @@
 # Author: Babanwalia
 # Author: Bgo eiu
 # Author: Jimidar
+# Author: Kuldeepburjbhalaike
 # Author: Satnam S Virdi
 # Author: Tow
 ---
@@ -157,8 +158,6 @@ pa:
     go_public:
       make_edits_public_button: ਮੇਰੀਆਂ ਸਾਰੀਆਂ ਸੋਧਾਂ ਜਨਤਕ ਕਰੋ
   browse:
-    created: ਬਣਾਇਆ ਗਿਆ
-    closed: ਬੰਦ ਹੋਇਆ
     version: ਵਰਜਨ
     in_changeset: ਤਬਦੀਲੀਆਂ
     anonymous: ਬੇਪਛਾਣ
@@ -168,11 +167,6 @@ pa:
     view_history: ਅਤੀਤ ਵੇਖੋ
     view_details: ਵੇਰਵੇ ਵੇਖੋ
     location: 'ਸਥਿਤੀ:'
-    changeset:
-      title: 'ਤਬਦੀਲੀ ਲੜੀ: %{id}'
-      belongs_to: ਲੇਖਕ
-      changesetxml: ਤਬਦੀਲੀ ਲੜੀ XML
-      discussion: ਚਰਚਾ
     relation:
       members: ਜੀਅ
     relation_member:
@@ -226,6 +220,13 @@ pa:
       feed:
         title: ਤਬਦੀਲੀ ਲੜੀ %{id}
         title_comment: ਤਬਦੀਲੀ ਲੜੀ %{id} - %{comment}
+        created: ਬਣਾਇਆ ਗਿਆ
+        closed: ਬੰਦ ਹੋਇਆ
+        belongs_to: ਲੇਖਕ
+    show:
+      title: 'ਤਬਦੀਲੀ ਲੜੀ: %{id}'
+      discussion: ਚਰਚਾ
+      changesetxml: ਤਬਦੀਲੀ ਲੜੀ XML
   dashboards:
     contact:
       km away: '%{count}ਕਿ.ਮੀ. ਪਰ੍ਹਾਂ'
@@ -244,7 +245,7 @@ pa:
     show:
       leave_a_comment: ਕੋਈ ਟਿੱਪਣੀ ਛੱਡੋ
       login_to_leave_a_comment_html: ਟਿੱਪਣੀ ਛੱਡਣ ਵਾਸਤੇ %{login_link}
-      login: à¨²à©\8cà¨\97à¨\87ਨ
+      login: à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b
     no_such_entry:
       title: ਅਜਿਹਾ ਕੋਈ ਡਾਇਰੀ ਇੰਦਰਾਜ ਨਹੀਂ
     diary_entry:
@@ -735,7 +736,6 @@ pa:
     export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
     edit_with: '%{editor} ਨਾਲ ਸੋਧੋ'
     intro_2_create_account: ਇੱਕ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਉ
-    partners_bytemark: ਬਾਈਟਮਾਰਕ ਹੋਸਟਿੰਗ
     partners_partners: ਜੋੜੀਦਾਰ
     help: ਮਦਦ
     about: ਬਾਬਤ
@@ -828,13 +828,13 @@ pa:
       no home location: ਤੁਸੀਂ ਆਪਣੇ ਘਰ ਦੀ ਸਥਿਤੀ ਨਹੀਂ ਦੱਸੀ ਹੈ।
   sessions:
     new:
-      title: à¨²à©\8cà¨\97à¨\87ਨ
-      heading: à¨²à©\8cà¨\97à¨\87ਨ
+      title: à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b
+      heading: à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b
       email or username: 'ਈਮੇਲ ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰ-ਨਾਂ:'
       password: 'ਪਛਾਣ-ਸ਼ਬਦ:'
       remember: ਮੈਨੂੰ ਯਾਦ ਰੱਖੋ
       lost password link: ਆਪਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਗੁਆ ਦਿੱਤਾ?
-      login_button: à¨²à©\8cà¨\97à¨\87ਨ
+      login_button: à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b
       register now: ਹੁਣੇ ਰਜਿਸਟਰ ਕਰੋ
       no account: ਖਾਤਾ ਨਹੀਂ ਹੈ?
     destroy:
@@ -999,8 +999,6 @@ pa:
       identifiable: ਪਛਾਣਯੋਗ
       private: ਨਿੱਜੀ
       trackable: ਪੈੜ ਕੱਢਣਯੋਗ
-      by: ਵੱਲੋਂ
-      in: ਵਿੱਚ
     index:
       tagged_with: '%{tags} ਨਾਲ਼ ਨਿਸ਼ਾਨਦੇਹ'
       upload_trace: ਕੋਈ ਖੁਰਾ-ਖੋਜ ਚੜ੍ਹਾਉ
@@ -1113,7 +1111,6 @@ pa:
       edit: ਸੋਧੋ
       confirm: ਕੀ ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ?
       reason: 'ਰੋਕ ਦਾ ਕਾਰਨ:'
-      back: ਸਾਰੀਆਂ ਰੋਕਾਂ ਵੇਖੋ
       revoker: 'ਪਰਤਾਉਣ ਵਾਲ਼ਾ:'
     block:
       show: ਵਿਖਾਉ
@@ -1124,8 +1121,6 @@ pa:
       creator_name: ਸਿਰਜਣਹਾਰ
       reason: ਰੋਕ ਦਾ ਕਾਰਨ
       status: ਦਰਜਾ
-      next: ਅਗਲਾ »
-      previous: « ਪਿਛਲਾ
   notes:
     index:
       creator: ਸਿਰਜਣਹਾਰ
index 9c36ded2eb4a2b9ffaa42d8dda0b4de1b5e422f5..0995fe264e03fab8153ee4c4996475694d4eb839 100644 (file)
@@ -406,12 +406,6 @@ pl:
     destroy:
       success: Konto zostało usunięte.
   browse:
-    created: Utworzone
-    closed: Zamknięte
-    created_ago_html: Utworzone %{time_ago}
-    closed_ago_html: Zamknięte %{time_ago}
-    created_ago_by_html: Utworzone %{time_ago} przez %{user}
-    closed_ago_by_html: Zamknięte %{time_ago} przez %{user}
     deleted_ago_by_html: Usunięte %{time_ago} przez %{user}
     edited_ago_by_html: Edytowane %{time_ago} przez %{user}
     version: Wersja
@@ -433,23 +427,6 @@ pl:
     view_history: Wyświetl historię
     view_details: Wyświetl szczegóły
     location: 'Położenie:'
-    changeset:
-      title: 'Zestaw zmian: %{id}'
-      belongs_to: Autor
-      node: Węzły (%{count})
-      node_paginated: Węzły (%{x}-%{y} z %{count})
-      way: Linie (%{count})
-      way_paginated: Linie (%{x}-%{y} z %{count})
-      relation: Relacje (%{count})
-      relation_paginated: Relacje (%{x}-%{y} z %{count})
-      hidden_comment_by_html: Ukryty komentarz od użytkownika %{user} %{time_ago}
-      comment_by_html: Komentarz od %{user} %{time_ago}
-      changesetxml: XML w formacie zestawu zmian
-      osmchangexml: XML w formacie osmChange
-      join_discussion: Zaloguj się, aby dołączyć do dyskusji
-      discussion: Dyskusja
-      still_open: Zestaw zmian jest wciąż otwarty – dyskusja będzie możliwa, gdy zostanie
-        on zamknięty.
     node:
       title_html: 'Węzeł: %{name}'
       history_title_html: 'Historia węzła: %{name}'
@@ -562,6 +539,34 @@ pl:
       feed:
         title: Zestaw zmian %{id}
         title_comment: Zestaw zmian %{id} - %{comment}
+        created: Utworzone
+        closed: Zamknięte
+        belongs_to: Autor
+    heading:
+      title: Zestaw zmian %{id}
+    show:
+      title: 'Zestaw zmian: %{id}'
+      created: 'Utworzony: %{when}'
+      closed: 'Zamknięty: %{when}'
+      created_ago_html: Utworzone %{time_ago}
+      closed_ago_html: Zamknięte %{time_ago}
+      created_ago_by_html: Utworzone %{time_ago} przez %{user}
+      closed_ago_by_html: Zamknięte %{time_ago} przez %{user}
+      discussion: Dyskusja
+      join_discussion: Zaloguj się, aby dołączyć do dyskusji
+      still_open: Zestaw zmian jest wciąż otwarty – dyskusja będzie możliwa, gdy zostanie
+        on zamknięty.
+      comment_by_html: Komentarz od %{user} %{time_ago}
+      hidden_comment_by_html: Ukryty komentarz od użytkownika %{user} %{time_ago}
+      changesetxml: XML w formacie zestawu zmian
+      osmchangexml: XML w formacie osmChange
+    paging_nav:
+      nodes: Węzły (%{count})
+      nodes_paginated: Węzły (%{x}-%{y} z %{count})
+      ways: Linie (%{count})
+      ways_paginated: Linie (%{x}-%{y} z %{count})
+      relations: Relacje (%{count})
+      relations_paginated: Relacje (%{x}-%{y} z %{count})
     timeout:
       sorry: Niestety, pobieranie listy żądanych zestawów zmian trwało zbyt długo.
   changeset_comments:
@@ -624,6 +629,7 @@ pl:
     show:
       title: Dziennik użytkownika %{user} | %{title}
       user_title: Dziennik użytkownika %{user}
+      discussion: Dyskusja
       leave_a_comment: Zostaw komentarz
       login_to_leave_a_comment_html: '%{login_link}, aby dodać komentarz'
       login: Zaloguj się
@@ -1639,11 +1645,7 @@ pl:
     intro_text: OpenStreetMap to mapa świata stworzona przez ludzi takich jak ty i
       z możliwością użycia pod otwartą licencją.
     intro_2_create_account: Utwórz konto
-    hosting_partners_html: Hosting obsługuje %{ucl}, %{fastly}, %{bytemark}, a także
-      %{partners}.
-    partners_ucl: University College London
     partners_fastly: Fastly
-    partners_bytemark: Hosting Bytemark
     partners_partners: partnerzy
     tou: Warunki użytkowania
     osm_offline: Baza danych OpenStreetMap jest niedostępna na czas ważnych zadań
@@ -1905,10 +1907,6 @@ pl:
       new password button: Wyczyść hasło
       help_text: Proszę wprowadzić adres e-mail używany do logowania. Zostanie wysłany
         na niego odnośnik służący do wyczyszczenia hasła.
-    create:
-      notice email on way: Przykro nam z powodu utraty hasła. Wiadomość, która umożliwi
-        jego wyczyszczenie, jest już w drodze.
-      notice email cannot find: Niestety, nie odnaleziono tego adresu e-mail.
     edit:
       title: Wyczyść hasło
       heading: Czyszczenie hasła użytkownika %{user}
@@ -2523,8 +2521,6 @@ pl:
       identifiable: IDENTYFIKOWALNY
       private: PRYWATNY
       trackable: MOŻLIWY DO ŚLEDZENIA
-      by: utworzony przez użytkownika
-      in: w
     index:
       public_traces: Publiczne ślady GPS
       my_gps_traces: Moje ślady GPS
@@ -2835,9 +2831,6 @@ pl:
     index:
       title: Użytkownicy
       heading: Użytkownicy
-      showing:
-        one: Strona %{page} (%{first_item} z %{items})
-        other: Strona %{page} (%{first_item}-%{last_item} z %{items})
       summary_html: '%{name} utworzony z adresu %{ip_address} dnia %{date}'
       summary_no_ip_html: '%{name} utworzony %{date}'
       confirm: Zatwierdź zaznaczonych użytkowników
@@ -2977,7 +2970,6 @@ pl:
       revoke: Odwołaj!
       confirm: Na pewno?
       reason: 'Przyczyna blokady:'
-      back: Pokaż wszystkie blokady
       revoker: 'Cofający uprawnienia:'
       needs_view: Użytkownik musi się zalogować, zanim blokada zostanie zdjęta.
     block:
@@ -2991,9 +2983,6 @@ pl:
       reason: Powód blokady
       status: Status
       revoker_name: Odwołana przez
-      showing_page: Strona %{page}
-      next: Następna »
-      previous: « Poprzednia
   user_mutes:
     index:
       table:
index b429a70a18a6aebec660016e3ecb43261753cfac..a8acc3691bb6b8162ca4d60ba184c2183fe48c1d 100644 (file)
@@ -276,8 +276,6 @@ pnb:
     destroy:
       success: کھاتہ مٹایا۔
   browse:
-    created: 'بݨاؤݨ:'
-    closed: 'بند کرن:'
     version: ورژن
     in_changeset: تبدیلیاں
     anonymous: بے پچاݨ
@@ -295,19 +293,6 @@ pnb:
     location: 'ستھتی:'
     common_details:
       coordinates_html: '%{latitude}; %{longitude}'
-    changeset:
-      title: 'تبدیلیاں: %{id}'
-      belongs_to: لیکھک
-      node: نوڈ (⁠%{count}⁠)
-      node_paginated: نوڈ (⁠%{count} وچ %{x} توں %{y}⁠)
-      way: راہ (⁠%{count}⁠)
-      way_paginated: راہ (⁠%{count} وچ %{x} توں %{y}⁠)
-      relation: سمبندھ (⁠%{count}⁠)
-      relation_paginated: سمبندھ (⁠%{count} وچ %{x} توں %{y}⁠)
-      changesetxml: تبدیلیاں لئی سروت دی فائل
-      osmchangexml: تبدیلیاں لئی سروت دی فائل فارماٹ
-      join_discussion: ایہہ گل بات جوڑن لئی تسیں لوگ‌این کر سکدیو
-      discussion: گل بات
     node:
       title_html: 'نوڈ: %{name}'
       history_title_html: 'نوڈ دا اتیت: %{name}'
@@ -409,6 +394,22 @@ pnb:
       feed:
         title: 'تبدیلیاں: %{id}'
         title_comment: تبدیلیاں نمبر %{id} • %{comment}
+        created: 'بݨاؤݨ:'
+        closed: 'بند کرن:'
+        belongs_to: لیکھک
+    show:
+      title: 'تبدیلیاں: %{id}'
+      discussion: گل بات
+      join_discussion: ایہہ گل بات جوڑن لئی تسیں لوگ‌این کر سکدیو
+      changesetxml: تبدیلیاں لئی سروت دی فائل
+      osmchangexml: تبدیلیاں لئی سروت دی فائل فارماٹ
+    paging_nav:
+      nodes: نوڈ (⁠%{count}⁠)
+      nodes_paginated: نوڈ (⁠%{count} وچ %{x} توں %{y}⁠)
+      ways: راہ (⁠%{count}⁠)
+      ways_paginated: راہ (⁠%{count} وچ %{x} توں %{y}⁠)
+      relations: سمبندھ (⁠%{count}⁠)
+      relations_paginated: سمبندھ (⁠%{count} وچ %{x} توں %{y}⁠)
     timeout:
       sorry: افسوس، تبدیلیاں دیاں لڑیاں نہیں لبھ سکیاں، ٹائم آؤٹ ہوگیا سی۔
   changeset_comments:
@@ -1213,9 +1214,7 @@ pnb:
     tag_line: آزاد نقشہ جو جہڑے جہڑے سودھ سکدے اے
     intro_header: اوپن سٹریٹ میپ تے سواگت اے!
     intro_2_create_account: ورتنوالے دا کھاتہ بݨاؤݨ
-    partners_ucl: یو سی ایل
     partners_fastly: فَیستلی
-    partners_bytemark: بائیٹمارک ہوستِنگ
     partners_partners: جوڑیدار
     tou: ورتن شرطاں
     help: مدد
@@ -1394,9 +1393,6 @@ pnb:
       email address: 'ای‌میل پتہ:'
       new password button: پاس‌ورڈ فیر بݨایو
       help_text: تہاڈے ای‌میل دا پتہ جو پاس‌ورڈ فیر بݨاؤݨ دی کڑی بھیج سکاں‌گی اے۔
-    create:
-      notice email on way: اچھا، ای‌میل تے مدد دی کڑی بھیجاں‌گی اے
-      notice email cannot find: افسوس، اوہ ای‌میل دا پتہ نہیں لبھ سکیا
     edit:
       title: پاس‌ورڈ فیر بݨایو
       reset: پاس‌ورڈ فیر بݨایو
@@ -1745,8 +1741,6 @@ pnb:
       identifiable: پچھاݨیوگ
       private: نجی
       trackable: پیڑ کڈھݨیوگ
-      by: لیکھک
-      in: اے۔ ایہہ ٹیگ
     index:
       public_traces: عام کھرے کھوجاں
       my_gps_traces: میرے کھرے
@@ -1926,9 +1920,6 @@ pnb:
     index:
       title: ورتنوالے
       heading: ورتنوالے
-      showing:
-        one: صفحہ %{page} (%{items} وچ %{first_item})
-        other: صفحہ %{page} (%{items} وچ%{first_item}} توں %{last_item} نوں)
       confirm: چݨے ہوۓ ورتنوالیاں دی تصدیق کرو
       hide: چݨے ہوۓ ورتنوالے لُکاؤ
       empty: کوئی میل کھاندے ورتنوالے نہیں لبھے
@@ -1992,7 +1983,6 @@ pnb:
       edit: سودھو
       revoke: پرتاؤ!
       confirm: پکے؟
-      back: ساریاں روکاں ویکھو
       revoker: 'پرتاؤݨ والا:'
     block:
       not_revoked: (نہیں پرتائی دتی گئی)
@@ -2004,9 +1994,6 @@ pnb:
       creator_name: لیکھک
       reason: روک دا کارن
       status: درجہ
-      showing_page: صفحہ نمبر %{page}
-      next: اگلا »
-      previous: « پچھلا
   notes:
     index:
       heading: '%{user} دے نوٹ'
index a118d65ed2cc5e7c2323ed58e7b4dec03843ab44..2796408464d5693dc5b3b1ec48fc4f50035c180b 100644 (file)
@@ -94,8 +94,6 @@ ps:
         link text: دا څه دی؟
       save changes button: بدلونونه خوندي کول
   browse:
-    created: جوړ شو
-    closed: تړل شوی
     relation:
       members: غړي
     relation_member:
@@ -120,6 +118,10 @@ ps:
       user: کارن
       comment: تبصره
       area: سيمه
+    index:
+      feed:
+        created: جوړ شو
+        closed: تړل شوی
   dashboards:
     popup:
       friend: ملگری
index b7c94fe4acb12b14269590e15f5ffbe96f1d6242..e5dd5182001d75d05df5f9e9bed61573e1e91602 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: AntMadeira
 # Author: Athena in Wonderland
+# Author: B3rnas
 # Author: Caiofernandes
 # Author: Crazymadlover
 # Author: Danieldegroot2
@@ -68,8 +69,8 @@ pt-PT:
         create: Registar
         update: Atualizar
       redaction:
-        create: Criar supressão
-        update: Gravar supressão
+        create: Criar redação
+        update: Gravar redação
       trace:
         create: Enviar
         update: Gravar alterações
@@ -361,15 +362,10 @@ pt-PT:
     destroy:
       success: Conta apagada.
   browse:
-    created: Criado
-    closed: Fechado
-    created_ago_html: Criado há %{time_ago}
-    closed_ago_html: Fechado há %{time_ago}
-    created_ago_by_html: Criado há %{time_ago} por %{user}
-    closed_ago_by_html: Fechado há %{time_ago} por %{user}
     deleted_ago_by_html: Eliminado há %{time_ago} por %{user}
     edited_ago_by_html: Editado há %{time_ago} por %{user}
     version: Versão
+    redacted_version: Versão reduzida
     in_changeset: Conjunto de alterações
     anonymous: anónimo
     no_comment: (sem comentário)
@@ -382,25 +378,11 @@ pt-PT:
       other: '%{count} vias'
     download_xml: Transferir XML
     view_history: Ver histórico
+    view_unredacted_history: Ver histórico não editado
     view_details: Ver detalhes
+    view_redacted_data: Ver dados reduzidos
+    view_redaction_message: Ver mensagem de redação
     location: 'Localização:'
-    changeset:
-      title: 'Conjunto de alterações: %{id}'
-      belongs_to: Autor
-      node: Nós (%{count})
-      node_paginated: Nós (%{x}-%{y} of %{count})
-      way: Linhas (%{count})
-      way_paginated: Linhas (%{x}-%{y} de %{count})
-      relation: Relações (%{count})
-      relation_paginated: Relações (%{x}-%{y} of %{count})
-      hidden_comment_by_html: Comentário ocultado por %{user} há %{time_ago}
-      comment_by_html: Comentário de %{user} há %{time_ago}
-      changesetxml: XML do conjunto de alterações
-      osmchangexml: XML no formato osmChange
-      join_discussion: Inicia sessão para te juntares à discussão
-      discussion: Discussão
-      still_open: O conjunto de alterações continua aberto. A discussão será iniciada
-        assim que o conjunto de alterações for fechado.
     node:
       title_html: 'Nó: %{name}'
       history_title_html: 'Histórico do Nó: %{name}'
@@ -480,6 +462,15 @@ pt-PT:
       introduction: Clica no mapa para descobrir elementos próximos.
       nearby: Elementos próximos
       enclosing: Elementos delimitadores
+  old_nodes:
+    not_found:
+      sorry: 'Desculpe, o nó #%{id} versão %{version} não foi encontrado.'
+  old_ways:
+    not_found:
+      sorry: 'Desculpe, não foi possível encontrar #%{id} versão %{version}.'
+  old_relations:
+    not_found:
+      sorry: 'Desculpe, a relação #%{id} versão %{version} não foi encontrada.'
   changesets:
     changeset_paging_nav:
       showing_page: Página %{page}
@@ -511,6 +502,46 @@ pt-PT:
       feed:
         title: Conjunto de alterações %{id}
         title_comment: Conjunto de alterações %{id} - %{comment}
+        created: Criado
+        closed: Fechado
+        belongs_to: Autor
+    subscribe:
+      heading: Deseja subscrever à seguinte discussão do conjunto de mudanças?
+      button: Inscreva-se na discussão
+    unsubscribe:
+      heading: Cancelar a inscrição na seguinte discussão do conjunto de alterações?
+      button: Cancelar inscrição da discussão
+    heading:
+      title: Conjunto de alterações %{id}
+      created_by_html: Criado por %{link_user} em %{created}.
+    no_such_entry:
+      title: Não existe tal conjunto de alterações
+      heading: 'Nenhuma entrada com o id: %{id}'
+      body: Desculpe, não há conjunto de alterações com o id %{id}. Verifique a ortografia,
+        ou talvez o link em que clicou esteja errado.
+    show:
+      title: 'Conjunto de alterações: %{id}'
+      created: 'Criado: %{when}'
+      closed: 'Fechado: %{when}'
+      created_ago_html: Criado há %{time_ago}
+      closed_ago_html: Fechado há %{time_ago}
+      created_ago_by_html: Criado há %{time_ago} por %{user}
+      closed_ago_by_html: Fechado há %{time_ago} por %{user}
+      discussion: Discussão
+      join_discussion: Inicia sessão para te juntares à discussão
+      still_open: O conjunto de alterações continua aberto. A discussão será iniciada
+        assim que o conjunto de alterações for fechado.
+      comment_by_html: Comentário de %{user} há %{time_ago}
+      hidden_comment_by_html: Comentário ocultado por %{user} há %{time_ago}
+      changesetxml: XML do conjunto de alterações
+      osmchangexml: XML no formato osmChange
+    paging_nav:
+      nodes: Nós (%{count})
+      nodes_paginated: Nós (%{x}-%{y} of %{count})
+      ways: Linhas (%{count})
+      ways_paginated: Linhas (%{x}-%{y} de %{count})
+      relations: Relações (%{count})
+      relations_paginated: Relações (%{x}-%{y} of %{count})
     timeout:
       sorry: Lamentamos, mas a lista de conjuntos de alterações que pediste excedeu
         o tempo limite de resposta.
@@ -577,6 +608,7 @@ pt-PT:
     show:
       title: Diário de %{user} | %{title}
       user_title: Diário de %{user}
+      discussion: Discussão
       leave_a_comment: Deixar um comentário
       login_to_leave_a_comment_html: '%{login_link} para deixar um comentário'
       login: Iniciar sessão
@@ -631,6 +663,13 @@ pt-PT:
       comment: Comentário
       newer_comments: Comentários mais recentes
       older_comments: Comentários mais antigos
+    subscribe:
+      heading: Pretendes acompanhar a seguinte discussão sobre a entrada no diário?
+      button: Acompanhar discussão
+    unsubscribe:
+      heading: Pretendes deixar de acompanhar a seguinte discussão sobre a entrada
+        no diário?
+      button: Deixar de acompanhar a discussão
   doorkeeper:
     errors:
       messages:
@@ -1604,11 +1643,10 @@ pt-PT:
     intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como tu e de
       uso livre sob uma licença aberta.
     intro_2_create_account: Cria uma conta de utilizador
-    hosting_partners_html: O alojamento é suportado por %{ucl}, %{fastly}, %{bytemark}
+    hosting_partners_2024_html: O alojamento é suportado por %{fastly}, %{corpmembers}
       e outros %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: membros corporativos OSMF
     partners_partners: parceiros
     tou: Condições de utilização
     osm_offline: A base de dados do OpenStreetMap está indisponível devido a trabalhos
@@ -1630,6 +1668,7 @@ pt-PT:
     more: Mais
   user_mailer:
     diary_comment_notification:
+      description: 'Entrada no Diário OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} comentou uma publicação de diário'
       hi: Olá, %{to_user}.
       header: '%{from_user} comentou a publicação de diário OpenStreetMap com o assunto
@@ -1640,6 +1679,8 @@ pt-PT:
         ou enviar uma mensagem ao autor em %{replyurl}
       footer_html: Também podes ler o comentário em %{readurl} e comentar em %{commenturl}
         ou enviar uma mensagem ao autor em %{replyurl}
+      footer_unsubscribe: Podes deixar de acompanhar a discussão em %{unsubscribeurl}
+      footer_unsubscribe_html: Podes deixar de acompanhar a discussão em %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Olá, %{to_user}.
@@ -1702,6 +1743,7 @@ pt-PT:
       click_the_link: Se foste tu, clica na ligação seguinte para criares uma nova
         palavra-passe.
     note_comment_notification:
+      description: Nota OpenStreetMap n.º %{id}
       anonymous: Um utilizador anónimo
       greeting: Olá,
       commented:
@@ -1740,6 +1782,7 @@ pt-PT:
       details: Podes ver mais detalhes sobre a nota em %{url}.
       details_html: Podes ver mais detalhes sobre a nota em %{url}.
     changeset_comment_notification:
+      description: Conjunto de alterações n.º %{id}
       hi: Olá, %{to_user}.
       greeting: Olá,
       commented:
@@ -1762,10 +1805,10 @@ pt-PT:
         %{url}.
       details_html: Podes encontrar mais informações sobre o conjunto de alterações
         em %{url}.
-      unsubscribe: Para deixares de receber atualizações sobre este conjunto de alterações,
-        visita %{url} e clica em "Anular subscrição".
-      unsubscribe_html: Para deixares de receber atualizações sobre este conjunto
-        de alterações, visita %{url} e clica em "Anular subscrição".
+      unsubscribe: Podes deixar de acompanhar as atualizações deste conjunto de alterações
+        em %{url}.
+      unsubscribe_html: Podes deixar de acompanhar as atualizações deste conjunto
+        de alterações em %{url}.
   confirmations:
     confirm:
       heading: Consulta o teu e-mail!
@@ -1878,15 +1921,14 @@ pt-PT:
     new:
       title: Palavra-passe esquecida
       heading: Esqueceste a palavra-passe?
-      email address: 'Endereço eletrónico:'
+      email address: Endereço de correio eletrónico
       new password button: Repor palavra-passe
       help_text: Introduz o endereço de correio eletrónico que usaste para criar a
         conta. Enviar-te-emos uma ligação que poderás usar para repor a palavra-passe.
     create:
-      notice email on way: Lamentamos que a tenhas perdido :-( mas já te enviámos
-        um e-mail para que possas repô-la em breve.
-      notice email cannot find: Lamentamos, mas não foi possível encontrar esse endereço
-        eletrónico.
+      send_paranoid_instructions: Se o teu endereço de correio eletrónico existir
+        na nossa base de dados, receberás uma ligação de recuperação de palavra-passe
+        nesse mesmo endereço dentro de minutos.
     edit:
       title: Repor palavra-passe
       heading: Repor palavra-passe para %{user}
@@ -1938,14 +1980,14 @@ pt-PT:
   sessions:
     new:
       title: Entrar
-      heading: Iniciar Sessão
-      email or username: 'E-mail ou nome de utilizador:'
-      password: 'Palavra-passe:'
+      heading: Iniciar sessão
+      email or username: 'E-mail ou Nome de utilizador:'
+      password: Palavra-passe
       remember: Ficar autenticado entre sessões
       lost password link: Perdeste a tua palavra-passe?
       login_button: Iniciar sessão
       register now: Regista-te agora
-      with external: 'Em alternativa, podes iniciar sessão com um serviço externo:'
+      with external: 'Em alternativa, usa um serviço externo para iniciares sessão:'
       no account: Não tens uma conta?
       auth failure: Lamentamos, mas não foi possível iniciar sessão com os dados fornecidos.
       openid_logo_alt: Iniciar sessão com um OpenID
@@ -1957,8 +1999,8 @@ pt-PT:
           title: Iniciar sessão com Google
           alt: Iniciar sessão com um OpenID do Google
         facebook:
-          title: Iniciar sessão com Facebook
-          alt: Iniciar sessão com uma conta do Facebook
+          title: Iniciar sessão com Facebook
+          alt: Iniciar sessão com uma conta Facebook
         microsoft:
           title: Iniciar sessão com Microsoft
           alt: Iniciar sessão com uma conta Microsoft
@@ -1966,8 +2008,8 @@ pt-PT:
           title: Iniciar sessão com GitHub
           alt: Iniciar sessão com uma conta GitHub
         wikipedia:
-          title: Iniciar sessão através da Wikipédia
-          alt: Iniciar a sessão com uma conta da Wikipédia
+          title: Iniciar sessão com a Wikipédia
+          alt: Iniciar sessão com uma conta Wikipédia
         wordpress:
           title: Iniciar sessão com Wordpress
           alt: Iniciar sessão com um OpenID do Wordpress
@@ -2285,8 +2327,8 @@ pt-PT:
         title: Guia para Principiantes
         description: Guia para principiantes atualizado pela comunidade.
       community:
-        title: Fórum da comunidade
-        description: Um local partilhado para conversas sobre o OpenStreetMap.
+        title: Ajuda e Fórum da Comunidade
+        description: Um local partilhado para procurar ajuda e conversar sobre o OpenStreetMap.
       mailing_lists:
         title: Listas de E-mail
         description: Faz uma pergunta ou debate temas interessantes numa vasta gama
@@ -2568,8 +2610,8 @@ pt-PT:
       identifiable: IDENTIFICÁVEL
       private: PRIVADO
       trackable: RASTREÁVEL
-      by: por
-      in: em
+      details_with_tags_html: '%{time_ago} por %{user} em %{tags}'
+      details_without_tags_html: '%{time_ago} por %{user}'
     index:
       public_traces: Rotas de GPS Públicas
       my_gps_traces: As minhas rotas GPS
@@ -2666,6 +2708,7 @@ pt-PT:
   oauth_clients:
     new:
       title: Registar uma nova aplicação
+      disabled: O registo com aplicações OAuth 1 foi desativado
     edit:
       title: Edita a tua aplicação
     show:
@@ -2749,6 +2792,7 @@ pt-PT:
       title: As minhas aplicações autorizadas
       application: Aplicação
       permissions: Permissões
+      last_authorized: Última autorização
       no_applications_html: Não autorizaste nenhuma aplicação %{oauth2}.
     application:
       revoke: Revogar Acesso
@@ -2771,8 +2815,7 @@ pt-PT:
       display name description: O nome de utilizador ficará visível publicamente.
         Poderás alterar o nome posteriormente nas configurações do teu perfil.
       external auth: 'Autenticação por terceiros:'
-      use external auth: Em alternativa, utiliza um serviço externo para iniciares
-        sessão
+      use external auth: Em alternativa, usa um serviço externo para iniciares sessão
       auth no password: Com a autenticação através de terceiros, não é necessário
         introduzir a palavra-passe, mas certos servidores ou ferramentas poderão precisar
         de uma.
@@ -2890,9 +2933,11 @@ pt-PT:
     index:
       title: Utilizadores
       heading: Utilizadores
-      showing:
-        one: Página %{page} (%{first_item} de %{items})
-        other: Página %{page} (%{first_item}-%{last_item} de %{items})
+      older: Utilizadores mais antigos
+      newer: Utilizadores mais recentes
+      found_users:
+        one: '%{count} utilizador encontrado'
+        other: '%{count} utilizadores encontrados'
       summary_html: '%{name} criado com o ip %{ip_address} em %{date}'
       summary_no_ip_html: '%{name} criado em %{date}'
       confirm: Confirmar utilizadores selecionados
@@ -2917,8 +2962,9 @@ pt-PT:
       heading: O teu ID ainda não está associado a uma conta do OpenStreetMap.
       option_1: Se ainda não tens conta no OpenStreetMap, por favor, preenche o seguinte
         formulário.
-      option_2: Se já tiveres conta, podes iniciar sessão utilizando o teu nome de
-        utilizador e palavra-passe e associar a conta ao teu ID nas definições.
+      option_2: Se já tiveres uma conta, podes iniciar sessão na tua conta usando
+        o teu nome de utilizador e a palavra-passe e, em seguida, associar a conta
+        ao teu ID nas tuas definições de utilizador.
   user_role:
     filter:
       not_a_role: A expressão `%{role}' não é um cargo válido.
@@ -3035,7 +3081,6 @@ pt-PT:
       revoke: Revogar!
       confirm: Tens a certeza?
       reason: 'Razão do bloqueio:'
-      back: Ver todos os bloqueios
       revoker: 'Quem revogou:'
       needs_view: O utilizador tem de iniciar sessão antes de este bloqueio terminar.
     block:
@@ -3049,9 +3094,8 @@ pt-PT:
       reason: Motivo do bloqueio
       status: Estado
       revoker_name: Revogado por
-      showing_page: Página %{page}
-      next: Seguinte »
-      previous: « Anterior
+      older: Blocos mais antigos
+      newer: Blocos mais recentes
   user_mutes:
     index:
       title: Utilizadores Silenciados
index 23b5298a775a1c5f136ce6fa02d1866ac1f5f04e..8d7789cd0420e54591bc24a2637a4cd55a68f8de 100644 (file)
@@ -31,6 +31,7 @@
 # Author: JasonZe
 # Author: Jgpacker
 # Author: Jgrocha
+# Author: Lc97
 # Author: Leosls
 # Author: Luckas
 # Author: Luckas Blade
@@ -380,12 +381,6 @@ pt:
     destroy:
       success: Conta eliminada.
   browse:
-    created: Criado
-    closed: Fechado
-    created_ago_html: Criado há %{time_ago}
-    closed_ago_html: Fechado %{time_ago}
-    created_ago_by_html: Criado há %{time_ago} por %{user}
-    closed_ago_by_html: Fechado %{time_ago} por %{user}
     deleted_ago_by_html: Excluído há %{time_ago} por %{user}
     edited_ago_by_html: Editado há %{time_ago} por %{user}
     version: Versão
@@ -403,23 +398,6 @@ pt:
     view_history: Ver histórico
     view_details: Ver detalhes
     location: 'Localização:'
-    changeset:
-      title: 'Conjunto de alterações: %{id}'
-      belongs_to: Autor
-      node: Pontos (%{count})
-      node_paginated: Pontos (%{x}-%{y} de %{count})
-      way: Linhas (%{count})
-      way_paginated: Linhas (%{x}-%{y} de %{count})
-      relation: Relações (%{count})
-      relation_paginated: Relações (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Comentário ocultado por %{user} há %{time_ago}
-      comment_by_html: Comentário de %{user} há %{time_ago}
-      changesetxml: XML do conjunto de alterações
-      osmchangexml: XML osmChange
-      join_discussion: Entrar para participar da discussão
-      discussion: Discussão
-      still_open: O conjunto de alterações continua em aberto - A discussão será iniciada
-        assim que for fechado o conjunto de alterações.
     node:
       title_html: 'Ponto: %{name}'
       history_title_html: 'Histórico do ponto: %{name}'
@@ -527,6 +505,30 @@ pt:
       feed:
         title: Conjunto de alterações %{id}
         title_comment: Conjunto de alterações %{id} - %{comment}
+        created: Criado
+        closed: Fechado
+        belongs_to: Autor
+    show:
+      title: 'Conjunto de alterações: %{id}'
+      created_ago_html: Criado há %{time_ago}
+      closed_ago_html: Fechado %{time_ago}
+      created_ago_by_html: Criado há %{time_ago} por %{user}
+      closed_ago_by_html: Fechado %{time_ago} por %{user}
+      discussion: Discussão
+      join_discussion: Entrar para participar da discussão
+      still_open: O conjunto de alterações continua em aberto - A discussão será iniciada
+        assim que for fechado o conjunto de alterações.
+      comment_by_html: Comentário de %{user} há %{time_ago}
+      hidden_comment_by_html: Comentário ocultado por %{user} há %{time_ago}
+      changesetxml: XML do conjunto de alterações
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Pontos (%{count})
+      nodes_paginated: Pontos (%{x}-%{y} de %{count})
+      ways: Linhas (%{count})
+      ways_paginated: Linhas (%{x}-%{y} de %{count})
+      relations: Relações (%{count})
+      relations_paginated: Relações (%{x}-%{y} de %{count})
     timeout:
       sorry: A lista de conjuntos de alterações solicitada está demorando demais para
         chegar.
@@ -1617,11 +1619,7 @@ pt:
     intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como você e
       de uso livre sob uma licença aberta.
     intro_2_create_account: Criar uma conta de usuário
-    hosting_partners_html: O hospedagem é suportada por %{ucl}, %{fastly}, %{bytemark}
-      e outros %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Hospedagem Bytemark
     partners_partners: parceiros
     tou: Termo de uso
     osm_offline: A base de dados do OpenStreetMap está fora do ar para manutenção.
@@ -1893,10 +1891,6 @@ pt:
       new password button: Redefinir senha
       help_text: Digite o endereço de e-mail que você usou para se conectar e enviaremos
         um link que você poderá usar para redefinir a sua senha.
-    create:
-      notice email on way: Um e-mail foi enviado para que você possa escolher outra
-        senha.
-      notice email cannot find: Não foi possível encontrar esse endereço de e-mail.
     edit:
       title: Redefinir senha
       heading: Redefinir Senha de %{user}
@@ -2593,8 +2587,6 @@ pt:
       identifiable: IDENTIFICÁVEL
       private: PRIVADO
       trackable: RASTREÁVEL
-      by: por
-      in: em
     index:
       public_traces: Trilhas públicas de GPS
       my_gps_traces: Minhas trilhas GPS
@@ -2909,9 +2901,11 @@ pt:
     index:
       title: Usuários
       heading: Usuários
-      showing:
-        one: Página %{page} (%{first_item} de %{items})
-        other: Página %{page} (%{first_item}-%{last_item} de %{items})
+      older: Usuários antigos
+      newer: Novos usuários
+      found_users:
+        one: '%{count} usuário encontrado'
+        other: '%{count} usuários encontrados'
       summary_html: '%{name} criado no computador %{ip_address} em %{date}'
       summary_no_ip_html: '%{name} criado em %{date}'
       confirm: Confirmar Usuários Selecionados
@@ -3049,7 +3043,6 @@ pt:
       revoke: Cancelar!
       confirm: Tem certeza?
       reason: 'Razão do bloqueio:'
-      back: Ver todos os bloqueios
       revoker: 'Quem retirou:'
       needs_view: O usuário precisa se logar para esse bloqueio ser retirado.
     block:
@@ -3063,9 +3056,6 @@ pt:
       reason: Razão para o bloqueio
       status: Status
       revoker_name: Retirado por
-      showing_page: Página %{page}
-      next: Próximo »
-      previous: « Anterior
   user_mutes:
     index:
       title: Usuários silenciados
index a99bce959e3e5d586e877f6419ee361eb3afe719..21aad7862aed395ea4185fd962bc01f77bca237b 100644 (file)
@@ -6,6 +6,7 @@
 # Author: Buraddo
 # Author: C1pr1an
 # Author: Cevamihnea
+# Author: Cristina S
 # Author: EddyPetrisor
 # Author: GabiBil
 # Author: Gravitystorm
@@ -345,12 +346,6 @@ ro:
     destroy:
       success: Contul Este Șters.
   browse:
-    created: Creat
-    closed: Închis
-    created_ago_html: Creat %{time_ago}
-    closed_ago_html: Închis %{time_ago}
-    created_ago_by_html: Creat %{time_ago} de %{user}
-    closed_ago_by_html: Închis %{time_ago} de către %{user}
     deleted_ago_by_html: Șters %{time_ago} de %{user}
     edited_ago_by_html: Editat %{time_ago} de %{user}
     version: Versiune
@@ -370,23 +365,6 @@ ro:
     view_history: Vezi istoric
     view_details: Vezi detalii
     location: 'Amplasament:'
-    changeset:
-      title: 'Set de modificări: %{id}'
-      belongs_to: Autor
-      node: Noduri (%{count})
-      node_paginated: Noduri (%{x}-%{y} din %{count})
-      way: Căi (%{count})
-      way_paginated: Căi (%{x}-%{y} din %{count})
-      relation: Comunicații (%{count})
-      relation_paginated: Comunicații (%{x}-%{y} din %{count})
-      hidden_comment_by_html: Comentariu ascuns de la %{user} %{time_ago}
-      comment_by_html: Comentariu de la %{user} %{time_ago}
-      changesetxml: Set de modificări XML
-      osmchangexml: XML osmChange
-      join_discussion: Conectați-vă pentru a vă alătura discuției
-      discussion: Discuție
-      still_open: Setul de schimbări este deschis - discuția se va deschide atunci
-        când setul de schimbări este închis.
     node:
       title_html: 'Nod: %{name}'
       history_title_html: 'Istoricul nodului: %{name}'
@@ -498,6 +476,30 @@ ro:
       feed:
         title: 'Set de modificări: %{id}'
         title_comment: Set de modificări %{id} — %{comment}
+        created: Creat
+        closed: Închis
+        belongs_to: Autor
+    show:
+      title: 'Set de modificări: %{id}'
+      created_ago_html: Creat %{time_ago}
+      closed_ago_html: Închis %{time_ago}
+      created_ago_by_html: Creat %{time_ago} de %{user}
+      closed_ago_by_html: Închis %{time_ago} de către %{user}
+      discussion: Discuție
+      join_discussion: Conectați-vă pentru a vă alătura discuției
+      still_open: Setul de schimbări este deschis - discuția se va deschide atunci
+        când setul de schimbări este închis.
+      comment_by_html: Comentariu de la %{user} %{time_ago}
+      hidden_comment_by_html: Comentariu ascuns de la %{user} %{time_ago}
+      changesetxml: Set de modificări XML
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Noduri (%{count})
+      nodes_paginated: Noduri (%{x}-%{y} din %{count})
+      ways: Căi (%{count})
+      ways_paginated: Căi (%{x}-%{y} din %{count})
+      relations: Comunicații (%{count})
+      relations_paginated: Comunicații (%{x}-%{y} din %{count})
     timeout:
       sorry: Ne pare rău, preluarea listei de modificări pe care ați solicitat-o a
         durat prea mult.
@@ -1586,11 +1588,7 @@ ro:
     intro_text: OpenStreetMap este o hartă a lumii, creată de oameni ca tine și liberă
       pentru utilizare sub o licență deschisă.
     intro_2_create_account: Creează un cont de utilizator
-    hosting_partners_html: Gazduirea este susținută de %{ucl}, %{fastly}, %{bytemark}
-      și alți %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Găzduire Bytemark
     partners_partners: parteneri
     tou: Termeni de Utilizare
     osm_offline: Baza de date OpenStreetMap este în prezent offline, în timp ce se
@@ -1850,10 +1848,6 @@ ro:
       new password button: Resetare parolă
       help_text: Introduceți adresa de e-mail pe care ați utilizat-o pentru a vă înscrie,
         vom trimite un link la aceasta pe care îl puteți utiliza pentru a reseta parola.
-    create:
-      notice email on way: Ne pare rău că ați pierdut-o :-( dar un e-mail este pe
-        drum, astfel încât să puteți să-l resetați în curând.
-      notice email cannot find: Nu am putut găsi adresa de e-mail, îmi pare rău.
     edit:
       title: Resetare parolă
       heading: Resetați parola pentru %{user}
@@ -1919,7 +1913,7 @@ ro:
       auth_providers:
         openid:
           title: Login with OpenID
-          alt: Conectați-vă cu o adresă URL OpenID
+          alt: Conectați-vă cu un URL OpenID
         google:
           title: Autentificare cu Google
           alt: Conectați-vă cu un Google OpenID
@@ -1930,7 +1924,7 @@ ro:
           title: Conectare cu Microsoft
           alt: Conectare cu un Cont Microsoft
         github:
-          title: Conectați-vă cu GitHub
+          title: Conectare cu GitHub
           alt: Conectați-vă cu un cont GitHub
         wikipedia:
           title: Autentificare la Wikipedia
@@ -1940,7 +1934,7 @@ ro:
           alt: Conectați-vă cu un cont Wordpress OpenID
         aol:
           title: Conectați-vă cu AOL
-          alt: Conectați-vă cu un AOL OpenID
+          alt: Conectare cu un AOL OpenID
     destroy:
       title: Ieșire
       heading: Deconectare din OpenStreetMap
@@ -2554,8 +2548,6 @@ ro:
       identifiable: IDENTIFICABILĂ
       private: PRIVAT
       trackable: URMĂRITĂ
-      by: de
-      in: în
     index:
       public_traces: Trasee GPS publice
       my_gps_traces: Track-uri GPS
@@ -2870,9 +2862,6 @@ ro:
     index:
       title: Utilizatori
       heading: Utilizatori
-      showing:
-        one: Page %{page} (%{first_item} of %{items})
-        other: Page %{page} (%{first_item}-%{last_item} of %{items})
       summary_html: '%{name} creat de %{ip_address} pe %{date}'
       summary_no_ip_html: '%{name} creat pe %{date}'
       confirm: Confirmați utilizatorii selectați
@@ -2901,8 +2890,8 @@ ro:
         utilizând formularul de mai jos.
       option_2: |-
         Dacă aveți deja un cont, vă puteți conecta la contul dvs.
-        utilizând numele de utilizator și parola și apoi asociați contul
-        cu ID-ul în setările utilizatorului.
+        folosind numele de utilizator și parola și apoi puteți asocia contul
+        cu ID-ul dvs. în setările utilizatorului.
   user_role:
     filter:
       not_a_role: Șirul `%{role}' nu este un rol valid.
@@ -3012,7 +3001,6 @@ ro:
       revoke: Revocă!
       confirm: Sunteți sigur(ă)?
       reason: 'Motivul blocării:'
-      back: Vezi toate blocările
       revoker: Revocă!
       needs_view: Utilizatorul trebuie să se conecteze înainte ca această blocare
         să fie ștearsă
@@ -3027,9 +3015,6 @@ ro:
       reason: Motivul blocării
       status: Stare
       revoker_name: Revocat de
-      showing_page: Pagina %{page}
-      next: Următoarea »
-      previous: « Precedenta
   user_mutes:
     index:
       table:
index d22c9bbf16b63036a50a4086ef09838a331ed23c..cdc88533e2b1c828bed27f7f30e276eff2f7454e 100644 (file)
@@ -25,6 +25,7 @@
 # Author: DDPAT
 # Author: Danieldegroot2
 # Author: Diralik
+# Author: Dirruw'o
 # Author: Dmitry-s93
 # Author: Dr&mx
 # Author: Edible Melon
@@ -423,11 +424,6 @@ ru:
     destroy:
       success: Учётная запись удалена.
   browse:
-    created: Создано
-    closed: Закрыто
-    created_ago_html: Создано %{time_ago}
-    closed_ago_html: Закрыто %{time_ago}
-    created_ago_by_html: Создал %{time_ago} %{user}
     edited_ago_by_html: Редактировал %{time_ago} %{user}
     version: Версия
     in_changeset: Пакет правок
@@ -448,22 +444,6 @@ ru:
     view_history: Посмотреть историю
     view_details: Подробнее
     location: 'Географическое положение:'
-    changeset:
-      title: 'Пакет правок: %{id}'
-      belongs_to: Автор
-      node: Точки (%{count})
-      node_paginated: Точки (%{x}-%{y} из %{count})
-      way: Линии (%{count})
-      way_paginated: Линии (%{x}-%{y} из %{count})
-      relation: Отношения (%{count})
-      relation_paginated: Отношения (%{x}-%{y} из %{count})
-      comment_by_html: Комментарий от %{user} %{time_ago}
-      changesetxml: XML пакета правок
-      osmchangexml: osmChange XML
-      join_discussion: Войдите в систему, чтобы присоединиться к обсуждению
-      discussion: Обсуждение
-      still_open: Пакет правок ещё открыт. Обсуждение будет доступно, как только пакет
-        правок будет закрыт.
     node:
       title_html: 'Точка: %{name}'
       history_title_html: 'История точки: %{name}'
@@ -576,6 +556,28 @@ ru:
       feed:
         title: Пакет правок %{id}
         title_comment: Пакет правок %{id} — %{comment}
+        created: Создано
+        closed: Закрыто
+        belongs_to: Автор
+    show:
+      title: 'Пакет правок: %{id}'
+      created_ago_html: Создано %{time_ago}
+      closed_ago_html: Закрыто %{time_ago}
+      created_ago_by_html: Создал %{time_ago} %{user}
+      discussion: Обсуждение
+      join_discussion: Войдите в систему, чтобы присоединиться к обсуждению
+      still_open: Пакет правок ещё открыт. Обсуждение будет доступно, как только пакет
+        правок будет закрыт.
+      comment_by_html: Комментарий от %{user} %{time_ago}
+      changesetxml: XML пакета правок
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Точки (%{count})
+      nodes_paginated: Точки (%{x}-%{y} из %{count})
+      ways: Линии (%{count})
+      ways_paginated: Линии (%{x}-%{y} из %{count})
+      relations: Отношения (%{count})
+      relations_paginated: Отношения (%{x}-%{y} из %{count})
     timeout:
       sorry: К сожалению, список пакетов правок, который вы запросили, требует слишком
         много времени для извлечения.
@@ -641,7 +643,7 @@ ru:
       user_title: Дневник пользователя %{user}
       leave_a_comment: Оставить комментарий
       login_to_leave_a_comment_html: '%{login_link}, чтобы оставить комментарий'
-      login: Ð\9fÑ\80едÑ\81Ñ\82авÑ\8cÑ\82еÑ\81Ñ\8c
+      login: Ð\92ойÑ\82и
     no_such_entry:
       title: Нет такой записи в дневнике
       heading: Нет записи с номером %{id}
@@ -1621,11 +1623,9 @@ ru:
     intro_text: OpenStreetMap является картой мира, созданной такими же людьми, как
       и вы, и может свободно использоваться под открытой лицензией.
     intro_2_create_account: Создайте учётную запись
-    hosting_partners_html: Хостинг поддерживается %{ucl}, %{fastly}, %{bytemark} и
+    hosting_partners_2024_html: Хостинг поддерживается %{fastly}, %{corpmembers} и
       другими %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: партнёрами
     tou: Условия использования
     osm_offline: База данных OpenStreetMap в данный момент не доступна, так как проводится
@@ -1894,10 +1894,6 @@ ru:
       new password button: Вышлите мне новый пароль
       help_text: Введите адрес вашей электронной почты, который вы использовали для
         подписки, и мы вышлем инструкции, как можно обновить ваш пароль.
-    create:
-      notice email on way: Жаль, что вы потеряли пароль :-( но ничего, скоро придёт
-        письмо и вы сможете поменять свой пароль.
-      notice email cannot find: Такой адрес не зарегистрирован.
     edit:
       title: Повторная установка пароля
       heading: Повторная установка пароля для %{user}
@@ -1982,7 +1978,7 @@ ru:
           alt: Вход с использованием учётной записи в Википедии
         wordpress:
           title: Войти с помощью Wordpress
-          alt: Войти с помощью Wordpress OpenID
+          alt: Войти с помощью Wordpress OpenI
         aol:
           title: Войти с помощью AOL
           alt: Войти с помощью AOL OpenID
@@ -2498,8 +2494,8 @@ ru:
       identifiable: ИДЕНТИФИЦИРУЕМЫЙ
       private: ЧАСТНЫЙ
       trackable: ОТСЛЕЖИВАЕМЫЙ
-      by: 'Автор:'
-      in: 'с тегами:'
+      details_with_tags_html: '%{time_ago} от %{user} в %{tags}'
+      details_without_tags_html: '%{time_ago} от %{user}'
     index:
       public_traces: Общедоступные GPS-треки
       my_gps_traces: Мои GPS-треки
@@ -2696,7 +2692,7 @@ ru:
       display name description: Ваше имя, как оно будет видно другим пользователям.
         Вы сможете изменить его позже в настройках.
       external auth: 'Внешний сайт с учётной записью:'
-      use external auth: Ð\9bибо Ð²Ð¾Ñ\81полÑ\8cзÑ\83йÑ\82еÑ\81Ñ\8c Ð°ÐºÐºÐ°Ñ\83нÑ\82ом Ñ\81 Ð´Ñ\80Ñ\83гого Ñ\81айÑ\82а
+      use external auth: Ð\90лÑ\8cÑ\82еÑ\80наÑ\82ивно, Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\82Ñ\80еÑ\82Ñ\8cе Ð»Ð¸Ñ\86о Ð´Ð»Ñ\8f Ð²Ñ\85ода Ð² Ñ\81иÑ\81Ñ\82емÑ\83.
       auth no password: С внешним логином пароль не обязателен, но в некоторых случаях
         он необходим
       continue: Зарегистрироваться
@@ -2803,9 +2799,8 @@ ru:
     index:
       title: Пользователи
       heading: Пользователи
-      showing:
-        one: Страница %{page} (%{first_item} из %{items})
-        other: Страница %{page} (%{first_item}-%{last_item} из %{items})
+      older: Участники с большим стажем
+      newer: Новые участники
       summary_html: '%{name} создан %{date}, с адреса %{ip_address}'
       summary_no_ip_html: '%{name} создан %{date}'
       confirm: Подтвердить выделенных пользователей
@@ -2944,7 +2939,6 @@ ru:
       revoke: Разблокировать!
       confirm: Вы уверены?
       reason: 'Причина блокировки:'
-      back: Показать все блокировки
       revoker: 'Разблокировавший:'
       needs_view: Пользователь должен зарегистрироваться, прежде чем это блокирование
         будет снято.
@@ -2959,9 +2953,6 @@ ru:
       reason: Причина блокировки
       status: Состояние
       revoker_name: Разблокировал
-      showing_page: Страница %{page}
-      next: Следующая →
-      previous: ← Предыдущая
   user_mutes:
     index:
       table:
index bc6fff49d9c114c2ae75b27c6c7c729da2f9247b..31cd0a1c5c35a3fa1a60d54c31e2243796937984 100644 (file)
@@ -140,21 +140,12 @@ sat:
         link text: ᱱᱤᱭᱟᱹ ᱫᱚ ᱪᱮᱫ?
       save changes button: ᱵᱚᱫᱚᱞᱠᱚ ᱪᱟᱺᱪᱟᱣ ᱢᱮ
   browse:
-    created: ᱛᱮᱭᱟᱨᱱᱟ
-    closed: ᱵᱚᱸᱫᱚ
     anonymous: ᱵᱟᱝ ᱵᱟᱰᱟᱭ
     no_comment: (ᱚᱠᱛᱚ ᱵᱟᱝ)
     download_xml: XML ᱰᱟᱩᱱᱞᱚᱰ ᱢᱮ
     view_history: ᱱᱟᱜᱟᱢ ᱧᱮᱞᱢᱮ
     view_details: ᱵᱤᱵᱨᱚᱱ ᱧᱮᱞ ᱢᱮ
     location: 'ᱡᱟᱭᱜᱟ:'
-    changeset:
-      belongs_to: ᱚᱱᱚᱞᱤᱭᱟᱹ
-      node: (%{count}) ᱜᱟᱸᱴᱷᱠᱚ
-      way: (%{count}) ᱦᱚᱨᱠᱚ
-      relation: ᱥᱟᱹᱜᱟᱹᱭᱠᱩ (%{count})
-      relation_paginated: ᱥᱟᱹᱜᱟᱹᱭᱠᱩ (%{x}-%{y} of %{count})
-      discussion: ᱜᱟᱞᱢᱟᱨᱟᱣ
     node:
       title_html: ᱜᱟᱸᱴᱷ:%{name}
       history_title_html: 'ᱜᱟᱸᱴᱷ ᱨᱮᱭᱟᱜ ᱦᱤᱛᱟᱹᱞ: %{name}'
@@ -216,6 +207,17 @@ sat:
       area: ᱡᱟᱭᱜᱟ
     index:
       load_more: ᱟᱨᱦᱚᱸ ᱞᱟᱫᱮ ᱢᱮ
+      feed:
+        created: ᱛᱮᱭᱟᱨᱱᱟ
+        closed: ᱵᱚᱸᱫᱚ
+        belongs_to: ᱚᱱᱚᱞᱤᱭᱟᱹ
+    show:
+      discussion: ᱜᱟᱞᱢᱟᱨᱟᱣ
+    paging_nav:
+      nodes: (%{count}) ᱜᱟᱸᱴᱷᱠᱚ
+      ways: (%{count}) ᱦᱚᱨᱠᱚ
+      relations: ᱥᱟᱹᱜᱟᱹᱭᱠᱩ (%{count})
+      relations_paginated: ᱥᱟᱹᱜᱟᱹᱭᱠᱩ (%{x}-%{y} of %{count})
   dashboards:
     popup:
       your location: ᱟᱢᱟᱜ ᱡᱟᱭᱜᱟ
@@ -668,9 +670,6 @@ sat:
       edit: ᱥᱟᱯᱲᱟᱣ
     blocks:
       status: ᱫᱚᱥᱟ
-      showing_page: ᱥᱟᱦᱴᱟ %{page}
-      next: ᱤᱱᱟ ᱛᱟᱭᱚᱢ >>
-      previous: « ᱛᱟᱭᱚᱢ
   notes:
     show:
       title: '%{id} :ᱠᱷᱟᱴᱟᱹ ᱚᱞ'
index b96c20584007b7cb7dbe27791f91bef01f458a85..541977c724aa71bcfcdb91258b489ec03e6dd007 100644 (file)
@@ -326,12 +326,6 @@ sc:
     destroy:
       success: Contu iscantzelladu.
   browse:
-    created: Creadu
-    closed: Serradu
-    created_ago_html: Creadu %{time_ago}
-    closed_ago_html: Tancadu %{time_ago}
-    created_ago_by_html: Creadu %{time_ago} dae %{user}
-    closed_ago_by_html: Tancadu %{time_ago} dae %{user}
     deleted_ago_by_html: Iscantzelladu %{time_ago} dae %{user}
     edited_ago_by_html: Modificadu %{time_ago} dae %{user}
     version: Versione
@@ -349,23 +343,6 @@ sc:
     view_history: Càstia sa cronologia
     view_details: Mustrat sos detàllios
     location: 'Logu:'
-    changeset:
-      title: 'Annantu de modìficas: %{id}'
-      belongs_to: Autore
-      node: Nodos (%{count})
-      node_paginated: Nodos (%{x}-%{y} de %{count})
-      way: Lìnias (%{count})
-      way_paginated: Lìnias (%{x}-%{y} de %{count})
-      relation: Relatziones (%{count})
-      relation_paginated: Relatziones (%{x}-%{y} de %{count})
-      hidden_comment_by_html: Cummentu cuadu de %{user} %{time_ago}
-      comment_by_html: Cummentu de %{user} %{time_ago}
-      changesetxml: XML de s'annantu de modìficas
-      osmchangexml: XML in formadu osmChange
-      join_discussion: Intra pro t'aunire a s'arresonu
-      discussion: Arresonu
-      still_open: Annantu de modìficas galu abertu - s'arresonu s'at a abèrrere cando
-        s'annantu de modìficas s'at a serrare.
     node:
       title_html: 'Nodu: %{name}'
       history_title_html: 'Istòria de su nodu: %{name}'
@@ -476,6 +453,30 @@ sc:
       feed:
         title: Annantu de modìficas %{id}
         title_comment: Grupu de modìficas %{id} - %{comment}
+        created: Creadu
+        closed: Serradu
+        belongs_to: Autore
+    show:
+      title: 'Annantu de modìficas: %{id}'
+      created_ago_html: Creadu %{time_ago}
+      closed_ago_html: Tancadu %{time_ago}
+      created_ago_by_html: Creadu %{time_ago} dae %{user}
+      closed_ago_by_html: Tancadu %{time_ago} dae %{user}
+      discussion: Arresonu
+      join_discussion: Intra pro t'aunire a s'arresonu
+      still_open: Annantu de modìficas galu abertu - s'arresonu s'at a abèrrere cando
+        s'annantu de modìficas s'at a serrare.
+      comment_by_html: Cummentu de %{user} %{time_ago}
+      hidden_comment_by_html: Cummentu cuadu de %{user} %{time_ago}
+      changesetxml: XML de s'annantu de modìficas
+      osmchangexml: XML in formadu osmChange
+    paging_nav:
+      nodes: Nodos (%{count})
+      nodes_paginated: Nodos (%{x}-%{y} de %{count})
+      ways: Lìnias (%{count})
+      ways_paginated: Lìnias (%{x}-%{y} de %{count})
+      relations: Relatziones (%{count})
+      relations_paginated: Relatziones (%{x}-%{y} de %{count})
     timeout:
       sorry: S'elencu de annantos de modìficas chi as pedidu at bisongiadu de tropu
         tempus pro lu recuperare.
@@ -1570,11 +1571,7 @@ sc:
     intro_text: OpenStreetMap est una mapa de su mundu, creada dae persones che a
       tie e de impreu lìberu suta de una litzèntzia aberta.
     intro_2_create_account: Crea unu contu de utente
-    hosting_partners_html: S'allògiu est a càrrigu de %{ucl}, %{fastly}, %{bytemark}
-      e de àteros %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: sòtzios
     tou: Conditziones de impreu
     osm_offline: In custu momentu sa base de datos de OpenStreetMap est foras de lìnia,
@@ -1840,11 +1837,6 @@ sc:
       help_text: Inserta s'indiritzu de posta chi as impreadu pro ti registrare, l'amus
         a imbiare unu ligàmene chi as a pòdere impreare pro ripristinare sa crae de
         intrada tua.
-    create:
-      notice email on way: Nos dispraghet chi l'apas pèrdida :-( ma t'amus imbiadu
-        unu messàgiu de posta eletrònica pro chi la potzas ripristinare.
-      notice email cannot find: A dolu mannu non semus resèssidos a agatare custu
-        indiritzu de posta eletrònica.
     edit:
       title: Riprìstina sa crae de intrada
       heading: Riprìstina sa crae de intrada pro %{user}
@@ -2530,8 +2522,6 @@ sc:
       identifiable: IDENTIFICÀBILE
       private: PRIVADU
       trackable: ARRASTÀBILE
-      by: De
-      in: in
     index:
       public_traces: Rastas GPS pùblicas
       my_gps_traces: Rastas GPS meas
@@ -2849,9 +2839,6 @@ sc:
     index:
       title: Utentes
       heading: Utentes
-      showing:
-        one: Pàgina %{page} (%{first_item} de %{items})
-        other: Pàgina %{page} (%{first_item}-%{last_item} de %{items})
       summary_html: '%{name} creadu dae %{ip_address} su %{date}'
       summary_no_ip_html: '%{name} creadu su %{date}'
       confirm: Cunfirma sos utentes seletzionados
@@ -2985,7 +2972,6 @@ sc:
       revoke: Rèvoca!
       confirm: Seguru ses?
       reason: 'Resone de su blocu:'
-      back: Pòmpia totu sos blocos
       revoker: 'Revocadore:'
       needs_view: S'utente tenet bisòngiu de s'autenticare in antis chi custu blocu
         bèngiat iscantzelladu.
@@ -3000,9 +2986,6 @@ sc:
       reason: Resone de su blocu
       status: Istadu
       revoker_name: Revocadu dae
-      showing_page: Pàgina %{page}
-      next: Imbeniente »
-      previous: « Pretzedente
   notes:
     index:
       title: Notas insertadas o cummentadas dae %{user}
index a5f351844fb354882b42ce3a327e490046786312..e4983f4f4cd53a6fd933f7b169d793c20eba024b 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: Ajeje Brazorf
 # Author: Gmelfi
+# Author: LametinoWiki
 # Author: Macofe
 # Author: Pippinu
 # Author: Sarvaturi
@@ -29,6 +30,7 @@ scn:
         create: Riggistra
         update: Agghiorna
       oauth2_application:
+        create: Riggistrati
         update: Aggiorna
       redaction:
         create: Crea l'occultamentu
@@ -80,6 +82,8 @@ scn:
       client_application:
         callback_url: URL di callback
         support_url: URL di l'assistenza
+        allow_write_prefs: canciari li mpustazzioni d'utenti.
+        allow_write_diary: criari vuci dû diariu, cummenti e fari amici.
         allow_write_api: cancia la cartina
         allow_read_gpx: lèggi li sò tracciati GPS privati.
         allow_write_gpx: càrrica li tracciati GPS
@@ -89,11 +93,13 @@ scn:
       diary_entry:
         user: Utenti
         title: Oggettu
+        body: Corpu
         latitude: Latitùdini
         longitude: Loncitùdini
         language_code: Lingua
       doorkeeper/application:
         name: Nomu
+        redirect_uri: URI di rimannu
       friend:
         user: Utenti
         friend: Amicu
@@ -119,6 +125,7 @@ scn:
         description: Discrizzioni
       user:
         email: Posta elittrònica
+        email_confirmation: 'Cunvàlida dâ posta elittrònica:'
         new_email: Nnirizzu di posta elittrònica novu
         active: Attivu
         display_name: Nomu ammustratu
@@ -233,8 +240,6 @@ scn:
     destroy:
       success: Cuntu cancillatu.
   browse:
-    created: Criatu
-    closed: Chiudutu
     version: Virsioni
     in_changeset: Gruppu di canciamenti
     anonymous: anònimu
@@ -244,19 +249,6 @@ scn:
     view_history: Talìa la crunuluggìa
     view_details: Talìa li dittagghî
     location: 'Locu:'
-    changeset:
-      title: 'Gruppu di canciamenti: %{id}'
-      belongs_to: Auturi
-      node: Gruppa (%{count})
-      node_paginated: Gruppa (%{x}-%{y} di %{count})
-      way: Camini (%{count})
-      way_paginated: Camini (%{x}-%{y} di %{count})
-      relation: Rilazzioni (%{count})
-      relation_paginated: Rilazzioni (%{x}-%{y} di %{count})
-      changesetxml: XML dû gruppu di canciamenti
-      osmchangexml: XML osmChange
-      join_discussion: Pi participari ntâ discussioni trasi
-      discussion: Discussioni
     node:
       title_html: 'Gruppu: %{name}'
       history_title_html: 'Crunuluggìa dû gruppu: %{name}'
@@ -335,7 +327,7 @@ scn:
     changeset_paging_nav:
       showing_page: Pàggina %{page}
       next: Appressu »
-      previous: « Prima
+      previous: « Arreri
     changeset:
       anonymous: Anònimu
       no_edits: (nuddu canciamentu)
@@ -361,6 +353,22 @@ scn:
       feed:
         title: Gruppu di canciamenti %{id}
         title_comment: Gruppu di canciamenti %{id} - %{comment}
+        created: Criatu
+        closed: Chiudutu
+        belongs_to: Auturi
+    show:
+      title: 'Gruppu di canciamenti: %{id}'
+      discussion: Discussioni
+      join_discussion: Pi participari ntâ discussioni trasi
+      changesetxml: XML dû gruppu di canciamenti
+      osmchangexml: XML osmChange
+    paging_nav:
+      nodes: Gruppa (%{count})
+      nodes_paginated: Gruppa (%{x}-%{y} di %{count})
+      ways: Camini (%{count})
+      ways_paginated: Camini (%{x}-%{y} di %{count})
+      relations: Rilazzioni (%{count})
+      relations_paginated: Rilazzioni (%{x}-%{y} di %{count})
     timeout:
       sorry: Purtroppu, ci vosi troppu tempu pi pigghiari la lista dî gruppi di canciamenti
         c'addumannasti.
@@ -1026,8 +1034,6 @@ scn:
     intro_text: OpenStreetMap è na cartina dû munnu, criata di genti comu a tìa e
       lìbbira a adupirari secunnu na licenza graputa.
     intro_2_create_account: Crea un cuntu d'utenti
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: cullabburatura
     osm_offline: La basi di dati d'OpenStreetMap comu a ora nun è n lìnia pirchì si
       stannu facennu travagghî di manutinzioni funnamintali.
@@ -1239,10 +1245,6 @@ scn:
       new password button: Azzera la palora d'òrdini
       help_text: Scrivi lu nnirizzu di posta elittrònica c'adupirasti quannu ti scrivisti,
         e ci mannamu nu culligamentu chi poi adupirari p'azzirari la tò palora d'òrdini.
-    create:
-      notice email on way: Ni dispiaci chi la pirdisti :-( pirò ti sta arrivannu nu
-        missaggiu di posta elittrònica pi menzu dû quali prestu la poi azzirari.
-      notice email cannot find: Putroppu nun s'attrova stu nnirizzu di posta elittrònica.
     edit:
       title: Azzera la palora d'òrdini
       heading: Azziramentu dâ palora d'òrdini di %{user}
@@ -1619,8 +1621,6 @@ scn:
       identifiable: IDINTIFICÀBBILI
       private: PRIVATA
       trackable: TRACCIÀBBILI
-      by: di
-      in: nta
     index:
       public_traces: Tracciati GPS pùbblici
       public_traces_from: Tracciati GPS pùbblici di %{user}
@@ -1829,9 +1829,6 @@ scn:
     index:
       title: Utenti
       heading: Utenti
-      showing:
-        one: Pàggina %{page} (%{first_item} di %{items})
-        other: Pàggina %{page} (%{first_item}-%{last_item} di %{items})
       summary_html: '%{name} criatu di %{ip_address} lu %{date}'
       summary_no_ip_html: '%{name} criatu lu %{date}'
       confirm: Cunferma a l'utenti scigghiuti
@@ -1943,7 +1940,6 @@ scn:
       revoke: Rèvuca!
       confirm: Sî sicuru?
       reason: 'Mutivu dû bloccu:'
-      back: Talìa tutti li blocchi
       revoker: 'Rivucaturi:'
       needs_view: L'utenti havi a tràsiri prima chi stu bloccu veni livatu.
     block:
@@ -1957,9 +1953,6 @@ scn:
       reason: Mutivu dû bloccu
       status: Statu
       revoker_name: Arrivucatu di
-      showing_page: Pàggina %{page}
-      next: Appressu »
-      previous: « Arreri
   notes:
     index:
       title: Noti scritti o cummintati di l'utenti %{user}
index 53982031b4a2a37a54eb56551a3491df9194a368..389717a4e0cf52090eae8b4b6bca1a78e458bd0c 100644 (file)
@@ -104,8 +104,6 @@ sco:
     edit:
       title: Eedit accoont
   browse:
-    created: Creatit
-    closed: Closed
     version: Version
     in_changeset: Chyngeset
     anonymous: anonymous
@@ -115,19 +113,6 @@ sco:
     view_history: View History
     view_details: View Details
     location: 'Location:'
-    changeset:
-      title: 'Chyngeset: %{id}'
-      belongs_to: Author
-      node: Nodes (%{count})
-      node_paginated: Nodes (%{x}-%{y} of %{count})
-      way: Ways (%{count})
-      way_paginated: Ways (%{x}-%{y} of %{count})
-      relation: Relations (%{count})
-      relation_paginated: Relations (%{x}-%{y} of %{count})
-      changesetxml: Chyngeset XML
-      osmchangexml: osmChange XML
-      join_discussion: Log in tae jyn the discussion
-      discussion: Discussion
     node:
       title_html: 'Node: %{name}'
       history_title_html: 'Node History: %{name}'
@@ -216,6 +201,22 @@ sco:
       feed:
         title: Chyngeset %{id}
         title_comment: Chyngeset %{id} - %{comment}
+        created: Creatit
+        closed: Closed
+        belongs_to: Author
+    show:
+      title: 'Chyngeset: %{id}'
+      discussion: Discussion
+      join_discussion: Log in tae jyn the discussion
+      changesetxml: Chyngeset XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Nodes (%{count})
+      nodes_paginated: Nodes (%{x}-%{y} of %{count})
+      ways: Ways (%{count})
+      ways_paginated: Ways (%{x}-%{y} of %{count})
+      relations: Relations (%{count})
+      relations_paginated: Relations (%{x}-%{y} of %{count})
     timeout:
       sorry: Sorry, the leet o chyngesets ye requestit teuk too lang tae retrieve.
   changeset_comments:
@@ -764,8 +765,6 @@ sco:
     intro_text: OpenStreetMap is a cairt o the warld, creatit bi fowk lik ye an free
       tae uise unner an open license.
     intro_2_create_account: Create a uiser accoont
-    partners_ucl: the UCL VR Centre
-    partners_bytemark: Bytemark Hosting
     partners_partners: pairtners
     osm_offline: The OpenStreetMap database is currently offline while essential database
       maintenance wirk is carried oot.
index 2644b50e08dd73c9fe31459b36e072ba96b94a45..5576d97f7d6d7744c3e71fb76caf98f4b21db872 100644 (file)
@@ -249,9 +249,6 @@ sh:
         imejl za porukom za potvrdu nove adrese.
       success: Korisničke informacije su uspješno osvježene.
   browse:
-    changeset:
-      join_discussion: Prijavite se za uključivanje u raspravu
-      discussion: Razgovor
     tag_details:
       wikidata_link: '%{page} stavka na Wikidata'
       wikipedia_link: Članak o %{page} na Wikipediji
@@ -276,6 +273,9 @@ sh:
       title_user_link_html: Setovi promjena od %{user_link}
       title_friend: Promjene mojih prijatelja
       title_nearby: Promjene obližnjih korisnika
+    show:
+      discussion: Razgovor
+      join_discussion: Prijavite se za uključivanje u raspravu
   diary_entries:
     new:
       title: Novi zapis u dnevnik
@@ -501,11 +501,7 @@ sh:
     intro_text: OpenStreetMap je karta svijeta stvorena od strane ljudi kao što ste
       vi i može se slobodno koristiti pod licencom otvorenog koda.
     intro_2_create_account: Napravi korisnički račun
-    hosting_partners_html: Hosting podržavaju %{ucl}, %{fastly}, %{bytemark} i drugi
-      %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partneri
     tou: Uslovi korištenja
     osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
index be2e6014a868861d5c9e8bb63a12192816a37baf..0ac667e3f1c3b8faa9b1e875d3067dd8c0951a1c 100644 (file)
@@ -345,12 +345,6 @@ sk:
     destroy:
       success: Účet bol odstránený.
   browse:
-    created: Vytvorené
-    closed: Uzavreté
-    created_ago_html: Vytvorené %{time_ago}
-    closed_ago_html: Zatvorené %{time_ago}
-    created_ago_by_html: Vytvorené %{time_ago} používateľom %{user}
-    closed_ago_by_html: Zatvorené %{time_ago} používateľom %{user}
     deleted_ago_by_html: Odstránené %{time_ago} používateľom %{user}
     edited_ago_by_html: Upravené %{time_ago} používateľom %{user}
     version: Verzia
@@ -372,23 +366,6 @@ sk:
     view_history: Zobraziť históriu
     view_details: Zobraziť detaily
     location: 'Poloha:'
-    changeset:
-      title: 'Sada zmien: %{id}'
-      belongs_to: Autor
-      node: Uzly (%{count})
-      node_paginated: Uzly (%{x}–%{y} z %{count})
-      way: Cesty (%{count})
-      way_paginated: Cesty (%{x}–%{y} z %{count})
-      relation: Relácie (%{count})
-      relation_paginated: Relácie (%{x}–%{y} z %{count})
-      hidden_comment_by_html: Skrytý komentár od používateľa %{user} %{time_ago}
-      comment_by_html: Komentár od používateľa %{user} %{time_ago}
-      changesetxml: XML sady zmien
-      osmchangexml: osmChange XML
-      join_discussion: Zapojte sa do diskusie
-      discussion: Diskusia
-      still_open: Sada zmien stále otvorená - diskusia bude otvorená, keď bude sada
-        zmien uzatvorená.
     node:
       title_html: 'Uzol: %{name}'
       history_title_html: 'História uzla: %{name}'
@@ -501,6 +478,30 @@ sk:
       feed:
         title: Sada zmien %{id}
         title_comment: Sada zmien %{id} - %{comment}
+        created: Vytvorené
+        closed: Uzavreté
+        belongs_to: Autor
+    show:
+      title: 'Sada zmien: %{id}'
+      created_ago_html: Vytvorené %{time_ago}
+      closed_ago_html: Zatvorené %{time_ago}
+      created_ago_by_html: Vytvorené %{time_ago} používateľom %{user}
+      closed_ago_by_html: Zatvorené %{time_ago} používateľom %{user}
+      discussion: Diskusia
+      join_discussion: Zapojte sa do diskusie
+      still_open: Sada zmien stále otvorená - diskusia bude otvorená, keď bude sada
+        zmien uzatvorená.
+      comment_by_html: Komentár od používateľa %{user} %{time_ago}
+      hidden_comment_by_html: Skrytý komentár od používateľa %{user} %{time_ago}
+      changesetxml: XML sady zmien
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Uzly (%{count})
+      nodes_paginated: Uzly (%{x}–%{y} z %{count})
+      ways: Cesty (%{count})
+      ways_paginated: Cesty (%{x}–%{y} z %{count})
+      relations: Relácie (%{count})
+      relations_paginated: Relácie (%{x}–%{y} z %{count})
     timeout:
       sorry: Ľutujeme, ale vami požadovaný zoznam sád zmien sa načítaval príliš dlho.
   changeset_comments:
@@ -1488,11 +1489,7 @@ sk:
     intro_text: OpenStreetMap je mapa sveta, vytvorené ľuďmi ako vy, voľne využiteľná
       pod slobodnou licenciou.
     intro_2_create_account: Založte si konto
-    hosting_partners_html: Hosting podporuje %{ucl}, %{fastly}, %{bytemark} a ďalší
-      %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partneri
     tou: Podmienky používania
     osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ čo potrebná údržba
@@ -1728,10 +1725,6 @@ sk:
       new password button: Resetnúť heslo
       help_text: Vložte emailovú adresu, ktorú ste uviedli pri registrácii, pošleme
         vám odkaz, pomocou ktorého si budete môcť nastaviť nové heslo.
-    create:
-      notice email on way: Škoda zabudnutého hesla :-( ale e-mail je už na ceste,
-        takže si čoskoro budete môcť zvoliť nové.
-      notice email cannot find: Ľutujeme, túto e-mailovú adresu nie je možné nájsť.
     edit:
       title: Resetnúť heslo
       heading: Resetnúť heslo pre %{user}
@@ -2314,8 +2307,6 @@ sk:
       identifiable: IDENTIFIKOVATEĽNÁ
       private: SÚKROMNÁ
       trackable: STOPOVATEĽNÁ
-      by: od
-      in: v
     index:
       public_traces: Verejné GPS stopy
       public_traces_from: Verejné GPS stopy od %{user}
@@ -2554,9 +2545,6 @@ sk:
     index:
       title: Používatelia
       heading: Používatelia
-      showing:
-        one: Zobrazuje sa stránka %{page} (%{first_item} z %{items})
-        other: Zobrazuje sa stránka %{page} (%{first_item}–%{last_item} z %{items})
       summary_html: '%{name} založené %{date} z %{ip_address}'
       summary_no_ip_html: '%{name} založený %{date}'
       confirm: Potvrdiť zvolených používateľov
@@ -2678,7 +2666,6 @@ sk:
       revoke: Odvolať!
       confirm: Ste si istý?
       reason: 'Dôvod blokovania:'
-      back: Zobraziť všetky blokovania
       revoker: 'Odvolal:'
       needs_view: Aby sa blok zmazal, požívateľ sa musí najprv prihlásiť.
     block:
@@ -2692,9 +2679,6 @@ sk:
       reason: Dôvod pre blokovanie
       status: Stav
       revoker_name: Zrušil
-      showing_page: Strana %{page}
-      next: Ďalšia stránka »
-      previous: « Predchádzajúca stránka
   notes:
     index:
       title: Poznámky vytvorené alebo komentované používateľom %{user}
index ef823dfc9babad53c99035a9e7b32254da68921c..cd252515db9095596fcd75a9107f93890f530ddd 100644 (file)
@@ -189,10 +189,6 @@ skr-arab:
     destroy:
       success: کھاتہ مٹ ڳیا۔
   browse:
-    created: بݨ ڳیا
-    closed: بند تھیا
-    created_ago_html: '%{time_ago} خلقیا'
-    closed_ago_html: '%{time_ago} بند تھیا'
     version: ورژن
     in_changeset: تبدیلیاں
     anonymous: گمنام
@@ -202,12 +198,6 @@ skr-arab:
     view_history: تاریخچہ ݙیکھو
     view_details: تفصیل ݙکھاؤ
     location: 'محل وقوع:'
-    changeset:
-      title: تبدیلیاں:%{id}
-      belongs_to: مصنف
-      node: نوݙاں(%{count})
-      way: رستے(%{count})
-      discussion: بحث مباحثہ
     node:
       title_html: 'نوڈ: %{name}'
       history_title_html: نوݙ تاریخچہ:%{name}
@@ -268,6 +258,18 @@ skr-arab:
       title: تبدیلیاں
       empty: تبدیلیاں کائنی لبھیاں۔
       load_more: ٻئے لوݙ کرو
+      feed:
+        created: بݨ ڳیا
+        closed: بند تھیا
+        belongs_to: مصنف
+    show:
+      title: تبدیلیاں:%{id}
+      created_ago_html: '%{time_ago} خلقیا'
+      closed_ago_html: '%{time_ago} بند تھیا'
+      discussion: بحث مباحثہ
+    paging_nav:
+      nodes: نوݙاں(%{count})
+      ways: رستے(%{count})
   dashboards:
     contact:
       km away: '%{count} کلومیٹر دور'
@@ -994,7 +996,6 @@ skr-arab:
     issues: مسئلے
     data: ڈیٹا
     export_data: ڈَیٹا برامد کرو
-    partners_ucl: یو سی ایل
     partners_fastly: تکھیرے
     partners_partners: بھائیوال
     tou: ورتݨ شرطاں
index b620b0168f00f9015a8825abccc7c78053f2da32..da660c4f633e5d2b17590bf5d12934425aafa3d9 100644 (file)
@@ -359,15 +359,10 @@ sl:
     destroy:
       success: Račun izbrisan.
   browse:
-    created: Ustvarjeno
-    closed: Zaprto
-    created_ago_html: Ustvaril_a %{time_ago}
-    closed_ago_html: Zaprto %{time_ago}
-    created_ago_by_html: Ustvaril %{user} %{time_ago}
-    closed_ago_by_html: Zaprl_a %{time_ago} %{user}
     deleted_ago_by_html: Izbrisal %{user} %{time_ago}
     edited_ago_by_html: Uredil_a %{user} %{time_ago}
     version: Različica
+    redacted_version: Skrita različica
     in_changeset: Nabor sprememb
     anonymous: anonimni
     no_comment: (brez komentarja)
@@ -384,25 +379,11 @@ sl:
       other: '%{count} poti'
     download_xml: Prenesi XML
     view_history: Ogled zgodovine
+    view_unredacted_history: Ogled neskrite zgodovine
     view_details: Prikaz podrobnosti
+    view_redacted_data: Ogled skritih podatkov
+    view_redaction_message: Ogled sporočila o redigiranju
     location: 'Lokacija:'
-    changeset:
-      title: 'Nabor sprememb: %{id}'
-      belongs_to: Avtor
-      node: Vozlišč (%{count})
-      node_paginated: Vozlišča (%{x}-%{y} od %{count})
-      way: Poti (%{count})
-      way_paginated: Poti (%{x}-%{y} od %{count})
-      relation: Relacije (%{count})
-      relation_paginated: Zveze (%{x}-%{y} od %{count})
-      hidden_comment_by_html: Skrit komentar %{user} %{time_ago}
-      comment_by_html: Komentar %{user} %{time_ago}
-      changesetxml: Nabor sprememb XML
-      osmchangexml: osmChange XML
-      join_discussion: Prijavite se za pridružitev pogovoru
-      discussion: Pogovor
-      still_open: Nabor sprememb je še vedno odprt – pogovor se bo začel, ko bo nabor
-        sprememb zaprt.
     node:
       title_html: 'Vozlišče: %{name}'
       history_title_html: 'Zgodovina vozlišča: %{name}'
@@ -523,6 +504,9 @@ sl:
       feed:
         title: Nabor sprememb %{id}
         title_comment: Nabor sprememb %{id} – %{comment}
+        created: Ustvarjeno
+        closed: Zaprto
+        belongs_to: Avtor
     subscribe:
       heading: Se želite prijaviti na naslednjo razprave o naboru sprememb?
       button: Prijava na razpravo
@@ -537,6 +521,27 @@ sl:
       heading: Zapisa z id-jem %{id} ni
       body: Oprostite, nabora sprememb z oznako %{id} ni. Prosimo, preverite črkovanje
         in povezavo, ki ste jo kliknili.
+    show:
+      title: 'Nabor sprememb: %{id}'
+      created_ago_html: Ustvaril_a %{time_ago}
+      closed_ago_html: Zaprto %{time_ago}
+      created_ago_by_html: Ustvaril %{user} %{time_ago}
+      closed_ago_by_html: Zaprl_a %{time_ago} %{user}
+      discussion: Pogovor
+      join_discussion: Prijavite se za pridružitev pogovoru
+      still_open: Nabor sprememb je še vedno odprt – pogovor se bo začel, ko bo nabor
+        sprememb zaprt.
+      comment_by_html: Komentar %{user} %{time_ago}
+      hidden_comment_by_html: Skrit komentar %{user} %{time_ago}
+      changesetxml: Nabor sprememb XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Vozlišč (%{count})
+      nodes_paginated: Vozlišča (%{x}-%{y} od %{count})
+      ways: Poti (%{count})
+      ways_paginated: Poti (%{x}-%{y} od %{count})
+      relations: Relacije (%{count})
+      relations_paginated: Zveze (%{x}-%{y} od %{count})
     timeout:
       sorry: Žal je trajalo pridobivanje zahtevanega nabora sprememb predolgo.
   changeset_comments:
@@ -682,7 +687,7 @@ sl:
     scopes:
       address: Ogled vašega fizičnega naslova
       email: Ogled vašega e-poštnega naslova
-      openid: Preverite pristnost svojega računa
+      openid: Avtenticirajte svoj račun
       phone: Ogled vaše telefonske številke
       profile: Ogled vaših profilnih podatkov
   errors:
@@ -1627,11 +1632,7 @@ sl:
     intro_text: OpenStreetMap je zemljevid sveta, ki ga ustvarjajo ljudje, kot ste
       vi, in brezplačen za uporabo pod odprto licenco.
     intro_2_create_account: Ustvarite uporabniški račun
-    hosting_partners_html: Gostovanje omogočajo %{ucl}, %{fastly}, %{bytemark} in
-      drugi %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partnerji
     tou: Pogoji uporabe
     osm_offline: Baza OpenStreetMap zaradi izvajanja nujnih vzdrževalnih del trenutno
@@ -1923,11 +1924,6 @@ sl:
       new password button: Pošlji mi novo geslo
       help_text: Vpišite e-poštni naslov, s katerim ste se registrirali. Poslali vam
         bomo povezavo za ponastavitev gesla.
-    create:
-      notice email on way: E-pismo z vsemi potrebnimi podatki za nastavitev novega
-        gesla je že na poti.
-      notice email cannot find: Oprostite, toda vnesenega e-poštnega naslova ni bilo
-        mogoče najti.
     edit:
       title: Ponastavitev gesla
       heading: Ponastavi geslo za %{user}
@@ -2629,8 +2625,6 @@ sl:
       identifiable: DOLOČLJIVA
       private: ZASEBNA
       trackable: SLEDLJIVA
-      by: Uporabnik
-      in: v
     index:
       public_traces: Javne sledi GPS
       my_gps_traces: Moje GPS-sledi
@@ -2715,7 +2709,7 @@ sl:
     permissions:
       missing: Aplikaciji niste dovolili dostopa do te funkcije
     scopes:
-      openid: Vstop z uporabo OpenStreetMap
+      openid: Prijava z uporabo OpenStreetMap
       read_prefs: Branje uporabniških prilagoditev
       write_prefs: Spreminjanje uporabniških nastavitev
       write_diary: Ustvarjajte dnevniške zapise, komentarje in sklepajte prijateljstva
@@ -2947,9 +2941,6 @@ sl:
     index:
       title: Uporabniki
       heading: Uporabniki
-      showing:
-        one: Stran %{page} (%{first_item} od %{items})
-        other: Stran %{page} (%{first_item}-%{last_item} od %{items})
       summary_html: '%{name} ustvarjen iz %{ip_address} dne %{date}'
       summary_no_ip_html: '%{name} ustvarjen dne %{date}'
       confirm: Potrdi izbrane uporabnike
@@ -2959,8 +2950,7 @@ sl:
       title: Račun zaklenjen
       heading: Račun zaklenjen
       support: podpora
-      automatically_suspended: Oprostite, vaš račun je bil blokiran zaradi sumljive
-        dejavnosti.
+      automatically_suspended: Vaš račun je bil žal blokiran zaradi sumljive dejavnosti.
       contact_support_html: To odločitev bo kmalu pregledal administrator, lahko pa
         se obrnete na %{support_link}, če se želite o tem pogovoriti.
     auth_failure:
@@ -2971,7 +2961,7 @@ sl:
       invalid_scope: Neveljaven obseg
       unknown_error: Avtentikacija ni uspela
     auth_association:
-      heading: Vaš ID še ni povezan z računom OpenStreetMap.
+      heading: Vaš ID še ni povezan z OpenStreetMap računom.
       option_1: Če ste novi v OpenStreetMapu, prosimo, ustvarite nov račun z uporabo
         spodnjega obrazca.
       option_2: Če že imate račun, se lahko prijavite s svojim uporabniškim imenom
@@ -3097,7 +3087,6 @@ sl:
       revoke: Prekliči!
       confirm: Ste prepričani?
       reason: 'Razlog za blokiranje:'
-      back: Prikaži vsa blokiranja
       revoker: 'Preklical:'
       needs_view: Uporabnik se mora za pretek blokiranja prijaviti.
     block:
@@ -3111,9 +3100,8 @@ sl:
       reason: Razlog za blokiranje
       status: Stanje
       revoker_name: Preklical
-      showing_page: Stran %{page}
-      next: Naprej »
-      previous: « Prejšnja
+    navigation:
+      block: 'Blokiraj #%{id}'
   user_mutes:
     index:
       title: Utišani uporabniki
index 604314a0d3ec3f3712acd1d7b316055299804945..ae9a032febf439007ad914f99442aeda8704b91f 100644 (file)
@@ -156,8 +156,6 @@ sq:
         emailin tuaj për një shënim për të konfirmuar adresën e re të emailit tuaj.
       success: Informacioni i përdoruesit u përditësua me sukses.
   browse:
-    created: Krijuar
-    closed: Mbyllur
     version: Versioni
     in_changeset: Grupi i Ndryshimeve
     anonymous: Anonim
@@ -167,19 +165,6 @@ sq:
     view_history: Shiko Historikun
     view_details: Shiko Detajet
     location: 'Vendndodhja:'
-    changeset:
-      title: 'Grupi i Ndryshimeve: %{id}'
-      belongs_to: Autori
-      node: Nyjet (%{count})
-      node_paginated: Nyjet (%{x}-%{y} nga %{count})
-      way: Mënyrat (%{count})
-      way_paginated: Mënyrat (%{x}-%{y} nga %{count})
-      relation: Marrëdhëniet (%{count})
-      relation_paginated: Marrëdhëniet (%{x}-%{y} nga %{count})
-      changesetxml: Grupi i ndryshimeve në XML
-      osmchangexml: osmNdrsyhimi XML
-      join_discussion: Identifikohuni për t'iu bashkuar diskutimit
-      discussion: Diskutim
     node:
       title_html: 'Nyja: %{name}'
       history_title_html: 'Historiku i nyjës: %{name}'
@@ -277,6 +262,22 @@ sq:
       feed:
         title: 'Grupi i ndryshimeve: %{id}'
         title_comment: Grupi i ndryshimeve %{id} - %{comment}
+        created: Krijuar
+        closed: Mbyllur
+        belongs_to: Autori
+    show:
+      title: 'Grupi i Ndryshimeve: %{id}'
+      discussion: Diskutim
+      join_discussion: Identifikohuni për t'iu bashkuar diskutimit
+      changesetxml: Grupi i ndryshimeve në XML
+      osmchangexml: osmNdrsyhimi XML
+    paging_nav:
+      nodes: Nyjet (%{count})
+      nodes_paginated: Nyjet (%{x}-%{y} nga %{count})
+      ways: Mënyrat (%{count})
+      ways_paginated: Mënyrat (%{x}-%{y} nga %{count})
+      relations: Marrëdhëniet (%{count})
+      relations_paginated: Marrëdhëniet (%{x}-%{y} nga %{count})
     timeout:
       sorry: Na vjen keq, lista e ndryshimeve që ju kërkuat zgjati shumë për t'u rikuperuar.
   changeset_comments:
@@ -1010,11 +1011,6 @@ sq:
       help_text: Shkruani adresën e emailit që keni përdorur për tu regjistruar, ne
         do të dërgojmë një lidhje të cilën mund të përdorni për të rivendosur fjalëkalimin
         tuaj.
-    create:
-      notice email on way: Na vjen keq e keni humbur atë :-( por një email është në
-        rrugëtim kështu që ju mund të rivendosni atë së shpejti.
-      notice email cannot find: Na vjen keq, ne nuk arritë ta gjejmë adresën e emailit
-        të dhënë.
     edit:
       title: Rivendos fjalëkalimin
       heading: Rivendos fjalëkalimin për %{user}
@@ -1238,8 +1234,6 @@ sq:
       identifiable: E IDENTIFIKUESHME
       private: PRIVAT
       trackable: E GJURMUESHME
-      by: nga
-      in: në
     index:
       public_traces: Gjurmët publike të GPS
       public_traces_from: Gjurmët publike të GPS nga %{user}
@@ -1339,9 +1333,6 @@ sq:
     index:
       title: Përdoruesi
       heading: Përdorues
-      showing:
-        one: Faqe %{page} (%{first_item} nga %{items})
-        other: Page %{page} (%{first_item}-%{last_item} nga %{items})
       summary_html: '%{name} krijuar nga %{ip_address} më %{date}'
       summary_no_ip_html: '%{name} krijuar më %{date}'
       confirm: Konfirmo përdoruesit e zgjedhur
index 5ec3fd8796395e40a09d12463cfe0a74dd523c49..6468174b172d45677503d78dc532c7ee6669dca1 100644 (file)
@@ -151,10 +151,6 @@ sr-Latn:
         da biste potvrdili svoju novu e-adresu.
       success: Podaci o korisniku su uspešno ažurirani.
   browse:
-    changeset:
-      title: Skup izmena
-      changesetxml: XML skup izmena
-      osmchangexml: osmChange XML
     relation_member:
       entry_role_html: '%{type} %{name} kao %{role}'
       type:
@@ -218,6 +214,10 @@ sr-Latn:
       feed:
         title: Skup izmena %{id}
         title_comment: Skup izmena %{id} – %{comment}
+    show:
+      title: Skup izmena
+      changesetxml: XML skup izmena
+      osmchangexml: osmChange XML
     timeout:
       sorry: Žao nam je, ali spisak izmena koji ste zahtevali je predugačak.
   dashboards:
@@ -759,8 +759,6 @@ sr-Latn:
     edit_with: Uredi uređivačem %{editor}
     tag_line: Slobodna viki mapa sveta
     intro_2_create_account: Otvorite nalog
-    partners_ucl: VR centar UCL-a
-    partners_bytemark: Hosting „Bajtmark“
     partners_partners: partneri
     osm_offline: Baza podataka Openstritmapa je trenutno nedostupna dok se ne završe
       važni radovi na održavanju.
@@ -894,9 +892,6 @@ sr-Latn:
       new password button: Poništi lozinku
       help_text: Unesite e-adresu koju ste uneli pri upisu, a mi ćemo vam poslati
         vezu pomoću koje možete da poništite lozinku.
-    create:
-      notice email on way: Poruka za poništavanje lozinke je poslata.
-      notice email cannot find: E-adresa nije pronađena.
     edit:
       title: Poništi lozinku
       heading: Poništavanje lozinke za %{user}
@@ -1109,8 +1104,6 @@ sr-Latn:
       identifiable: MOŽE SE PREPOZNATI
       private: PRIVATNI
       trackable: MOŽE SE PRATITI
-      by: od
-      in: u
     index:
       public_traces: Javni GPS tragovi
       public_traces_from: Javni GPS tragovi korisnika %{user}
@@ -1263,9 +1256,6 @@ sr-Latn:
     index:
       title: Korisnici
       heading: Korisnici
-      showing:
-        one: Prikaz stranice %{page} (%{first_item} od %{items})
-        other: Prikaz stranica %{page} (%{first_item}-%{last_item} od %{items})
       summary_html: '%{name} napravljeno od %{ip_address} dana %{date}'
       summary_no_ip_html: '%{name} napravljeno %{date}'
       confirm: Potvrdi izabrane korisnike
@@ -1358,7 +1348,6 @@ sr-Latn:
       revoke: Opozovi
       confirm: Jeste li sigurni?
       reason: 'Razlog za blokiranje:'
-      back: Pogledaj sve blokade
       revoker: 'Opozivalac:'
       needs_view: Korisnik mora da se prijavi da bi blokada bila uklonjena.
     block:
@@ -1372,9 +1361,6 @@ sr-Latn:
       reason: Razlozi za blokiranje
       status: Stanje
       revoker_name: Opozvao
-      showing_page: Prikaz stranice %{page}
-      next: Sledeće »
-      previous: « Prethodno
   javascripts:
     map:
       base:
index 6d236f9d7ca9d56fa7684b7166ae0f34cb806a85..a58232b83ea213931caa04cee75c9abf0511acb2 100644 (file)
@@ -310,11 +310,6 @@ sr:
     destroy:
       success: Налог је обрисан.
   browse:
-    created: Направљено
-    closed: Затворено
-    created_ago_html: Направљено %{time_ago}
-    closed_ago_html: Затворено %{time_ago}
-    created_ago_by_html: Направљено %{time_ago} од %{user}
     edited_ago_by_html: Уређено %{time_ago} од %{user}
     version: Верзија
     in_changeset: Скуп промена
@@ -325,21 +320,6 @@ sr:
     view_history: Погледај историју
     view_details: Детаљније
     location: 'Локација:'
-    changeset:
-      title: 'Скуп промена: %{id}'
-      belongs_to: Аутор
-      node: Тачке (%{count})
-      node_paginated: Тачке (%{x}-%{y} од %{count})
-      way: Линије (%{count})
-      way_paginated: Линије (%{x}-%{y} од %{count})
-      relation: Односи (%{count})
-      relation_paginated: Односи (%{x}-%{y} од %{count})
-      hidden_comment_by_html: Сакривени коментар корисника %{user} %{time_ago}
-      comment_by_html: '%{user} коментарисао(ла) пре %{time_ago}'
-      changesetxml: XML скуп промена
-      osmchangexml: osmChange XML
-      join_discussion: Пријавите се да бисте се придружили дискусији
-      discussion: Дискусија
     node:
       title_html: 'Тачка: %{name}'
       history_title_html: 'Историја тачака: %{name}'
@@ -437,6 +417,30 @@ sr:
       feed:
         title: Скуп промена %{id}
         title_comment: Скуп промена %{id} – %{comment}
+        created: Направљено
+        closed: Затворено
+        belongs_to: Аутор
+    show:
+      title: 'Скуп промена: %{id}'
+      created: 'Направљено: %{when}'
+      closed: 'Затворено: %{when}'
+      created_ago_html: Направљено %{time_ago}
+      closed_ago_html: Затворено %{time_ago}
+      created_ago_by_html: Направљено %{time_ago} од %{user}
+      closed_ago_by_html: Затворио(ла) %{user} %{time_ago}
+      discussion: Дискусија
+      join_discussion: Пријавите се да бисте се придружили дискусији
+      comment_by_html: '%{user} коментарисао(ла) пре %{time_ago}'
+      hidden_comment_by_html: Сакривени коментар корисника %{user} %{time_ago}
+      changesetxml: XML скуп промена
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Тачке (%{count})
+      nodes_paginated: Тачке (%{x}-%{y} од %{count})
+      ways: Линије (%{count})
+      ways_paginated: Линије (%{x}-%{y} од %{count})
+      relations: Односи (%{count})
+      relations_paginated: Односи (%{x}-%{y} од %{count})
     timeout:
       sorry: Преузимање захтеваних скупова промена је трајало предуго.
   changeset_comments:
@@ -1329,10 +1333,8 @@ sr:
     intro_text: OpenStreetMap је мапа света коју су направили људи попут вас. Слободна
       је за коришћење под отвореном лиценцом.
     intro_2_create_account: Отворите кориснички налог
-    hosting_partners_html: Хостинг пружају %{ucl}, %{fastly}, %{bytemark}, и други
+    hosting_partners_2024_html: Хостинг пружају %{fastly}, %{corpmembers}, и други
       %{partners}.
-    partners_ucl: UCL
-    partners_bytemark: Bytemark Hosting
     partners_partners: партнери
     tou: Услови коришћења
     osm_offline: База OpenStreetMap-а је тренутно недоступна док се не заврше неопходни
@@ -1372,12 +1374,12 @@ sr:
       see_their_profile: Можете видети његов/њен профил на %{userurl}.
       befriend_them: Можете га/је додати и као пријатеља на %{befriendurl}.
     gpx_failure:
-      hi: Здарво %{to_user},
+      hi: Здраво %{to_user},
       failed_to_import: 'Увоз није успео. Грешка:'
       import_failures_url: https://wiki.openstreetmap.org/wiki/GPX_Import_Failures?uselang=sr-ec
       subject: '[OpenStreetMap] GPX увоз није успео'
     gpx_success:
-      hi: Здарво %{to_user},
+      hi: Здраво %{to_user},
       subject: '[OpenStreetMap] GPX увоз је успео'
     signup_confirm:
       subject: '[OpenStreetMap] Добро дошли на ОпенСтритМап'
@@ -1547,9 +1549,6 @@ sr:
       new password button: Поништи лозинку
       help_text: Унесите е-адресу коју сте унели при упису, а ми ћемо вам послати
         везу помоћу које можете да поништите лозинку.
-    create:
-      notice email on way: Порука за поништавање лозинке је послата.
-      notice email cannot find: Имејл адреса није пронађена, жао нам је.
     edit:
       title: Поништи лозинку
       heading: Поништавање лозинке за %{user}
@@ -1622,12 +1621,12 @@ sr:
           alt: Пријава преко Microsoft налога
         github:
           title: Пријава коришћењем GitHub-а
-          alt: Ð\9fÑ\80иÑ\98ава ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aем GitHub налога
+          alt: Ð\9fÑ\80иÑ\98ава Ð¿Ñ\80еко GitHub налога
         wikipedia:
           title: Пријава преко Википедије
-          alt: Ð\9fÑ\80иÑ\98ава ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aем Ð\92икипедиÑ\98а налога
+          alt: Ð\9fÑ\80иÑ\98ава Ð¿Ñ\80еко Ð\92икипедиÑ\98иног налога
         wordpress:
-          title: Ð\9fÑ\80иÑ\98ава ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aем Wordpress-а
+          title: Ð\9fÑ\80иÑ\98ава Ð¿Ñ\80еко Wordpress-а
           alt: Пријава преко Wordpress OpenID-а
         aol:
           title: Пријава преко AOL-а
@@ -2011,8 +2010,6 @@ sr:
       identifiable: МОЖЕ СЕ ПРЕПОЗНАТИ
       private: ПРИВАТНИ
       trackable: МОЖЕ СЕ ПРАТИТИ
-      by: од
-      in: у
     index:
       public_traces: Јавни ГПС трагови
       public_traces_from: Јавни GPS трагови корисника %{user}
@@ -2247,9 +2244,6 @@ sr:
     index:
       title: Корисници
       heading: Корисници
-      showing:
-        one: Страница %{page} (%{first_item} од %{items})
-        other: Странице %{page} (%{first_item}-%{last_item} од %{items})
       summary_html: '%{name} направљено од %{ip_address} дана %{date}'
       summary_no_ip_html: '%{name} направљено %{date}'
       confirm: Потврди изабране кориснике
@@ -2367,7 +2361,6 @@ sr:
       revoke: Опозови
       confirm: Јесте ли сигурни?
       reason: 'Разлог за блокирање:'
-      back: Погледај све блокаде
       revoker: 'Опозивалац:'
       needs_view: Корисник мора да се пријави да би блокада била уклоњена.
     block:
@@ -2381,9 +2374,6 @@ sr:
       reason: Разлози за блокирање
       status: Стање
       revoker_name: Опозвао
-      showing_page: Страница %{page}
-      next: Следеће »
-      previous: « Претходно
   user_mutes:
     index:
       title: Пригушени корисници
index 2f18d5892f6d74a696a9a6508a7cf536e50a6394..d723e336d6805b0d762b3bbb90af7feacf1dc719 100644 (file)
@@ -367,12 +367,6 @@ sv:
     destroy:
       success: Kontot har raderats.
   browse:
-    created: Skapad
-    closed: Stängd
-    created_ago_html: Skapades %{time_ago}
-    closed_ago_html: Stängdes %{time_ago}
-    created_ago_by_html: Skapades %{time_ago} av %{user}
-    closed_ago_by_html: Stängdes %{time_ago} av %{user}
     deleted_ago_by_html: Raderades %{time_ago} av %{user}
     edited_ago_by_html: Redigerades %{time_ago} av %{user}
     version: Version
@@ -390,23 +384,6 @@ sv:
     view_history: Visa historik
     view_details: Visa detaljer
     location: 'Plats:'
-    changeset:
-      title: 'Ändringsuppsättning: %{id}'
-      belongs_to: Författare
-      node: Noder (%{count})
-      node_paginated: Noder (%{x}-%{y} av %{count})
-      way: Sträckor (%{count})
-      way_paginated: Sträckor (%{x}-%{y} av %{count})
-      relation: Förbindelser (%{count})
-      relation_paginated: Förbindelser (%{x}-%{y} av %{count})
-      hidden_comment_by_html: Dold kommentar från %{user} %{time_ago}
-      comment_by_html: Kommenterades från %{user} %{time_ago}
-      changesetxml: XML för ändringsuppsättning
-      osmchangexml: osmChange XML
-      join_discussion: Logga in för att delta i diskussionen
-      discussion: Diskussion
-      still_open: Ändringsuppsättningen är fortfarande öppen - diskussionen kommer
-        att öppnas när ändringsuppsättning har stängts.
     node:
       title_html: 'Nod: %{name}'
       history_title_html: 'Nodhistorik: %{name}'
@@ -524,6 +501,30 @@ sv:
       feed:
         title: Ändringsuppsättning %{id}
         title_comment: Ändringsset %{id} - %{comment}
+        created: Skapad
+        closed: Stängd
+        belongs_to: Författare
+    show:
+      title: 'Ändringsuppsättning: %{id}'
+      created_ago_html: Skapades %{time_ago}
+      closed_ago_html: Stängdes %{time_ago}
+      created_ago_by_html: Skapades %{time_ago} av %{user}
+      closed_ago_by_html: Stängdes %{time_ago} av %{user}
+      discussion: Diskussion
+      join_discussion: Logga in för att delta i diskussionen
+      still_open: Ändringsuppsättningen är fortfarande öppen - diskussionen kommer
+        att öppnas när ändringsuppsättning har stängts.
+      comment_by_html: Kommenterades från %{user} %{time_ago}
+      hidden_comment_by_html: Dold kommentar från %{user} %{time_ago}
+      changesetxml: XML för ändringsuppsättning
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Noder (%{count})
+      nodes_paginated: Noder (%{x}-%{y} av %{count})
+      ways: Sträckor (%{count})
+      ways_paginated: Sträckor (%{x}-%{y} av %{count})
+      relations: Förbindelser (%{count})
+      relations_paginated: Förbindelser (%{x}-%{y} av %{count})
     timeout:
       sorry: Kunde tyvärr inte lista begärda ändringsuppsättningar. Begäran tog för
         lång tid att hämta.
@@ -1606,10 +1607,7 @@ sv:
     intro_text: OpenStreetMap är en karta över världen, skapad av människor som du
       och fri att använda under en öppen licens.
     intro_2_create_account: Skapa ett användarkonto
-    hosting_partners_html: Drivs via %{ucl}, %{fastly}, %{bytemark} och andra %{partners}.
-    partners_ucl: University College London
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: partners
     tou: Användarvillkor
     osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
@@ -1880,10 +1878,6 @@ sv:
       new password button: Återställ lösenord
       help_text: Ange e-postadressen du använde för att registrera dig så skickar
         vi en länk till den som du kan använda för att återställa ditt lösenord.
-    create:
-      notice email on way: Ledsen att du tappade bort det :-( men ett mejl är på väg
-        så du kan återställa det snart.
-      notice email cannot find: Kunde inte hitta den e-postadressen, tyvärr.
     edit:
       title: Återställ lösenord
       heading: Återställ lösenord för %{user}
@@ -2561,8 +2555,6 @@ sv:
       identifiable: IDENTIFIERBAR
       private: PRIVAT
       trackable: SPÅRBAR
-      by: av
-      in: i
     index:
       public_traces: Publika GPS-spår
       my_gps_traces: Mina GPS-spår
@@ -2880,9 +2872,6 @@ sv:
     index:
       title: Användare
       heading: Användare
-      showing:
-        one: Sida %{page} (%{first_item} av %{items})
-        other: Sida %{page} (%{first_item}-%{last_item} av %{items})
       summary_html: '%{name} skapades från %{ip_address} den %{date}'
       summary_no_ip_html: '%{name} skapad den %{date}'
       confirm: Bekräfta valda användare
@@ -3026,7 +3015,6 @@ sv:
       revoke: Återkalla!
       confirm: Är du säker?
       reason: 'Anledning för blockering:'
-      back: Se alla blockeringar
       revoker: 'Återkallare:'
       needs_view: Användaren måste logga in innan blockeringen upphör.
     block:
@@ -3040,9 +3028,6 @@ sv:
       reason: Orsak till blockering
       status: Status
       revoker_name: Återkallad av
-      showing_page: Sida %{page}
-      next: Nästa »
-      previous: « Föregående
   user_mutes:
     index:
       title: Tystade användare
index e34397786e3538e9cee306e3a5a3b24e12bb8a3f..2a8efd873d40101cb324a6140980dcc9d19e3bcd 100644 (file)
@@ -12,6 +12,7 @@
 # Author: Rakeshonwiki
 # Author: Sank
 # Author: Shanmugamp7
+# Author: Sriveenkat
 # Author: Surya Prakash.S.A.
 # Author: TRYPPN
 # Author: தமிழ்க்குரிசில்
@@ -168,6 +169,26 @@ ta:
     remote:
       name: தொலைவுக் கட்டுப்பாடு
       description: தொலைவு கட்டுப்பாடு (JOSM அல்லது Merkaartor)
+  auth:
+    providers:
+      google: கூகுள்
+      facebook: முகநூல்
+      github: கிட்ஹப்
+      wikipedia: விக்கிப்பீடியா
+  api:
+    notes:
+      comment:
+        opened_at_html: '%{when} உருவாக்கப்பட்டது'
+        opened_at_by_html: '%{when} %{user} பயனரால் உருவாக்கப்பட்டது'
+  account:
+    deletions:
+      show:
+        title: எமது கணக்கை நீக்கு
+        warning: எச்சரிக்கை! கணக்கு நீக்குதல் செயல்முறை இறுதியானது, அதை மாற்ற முடியாது.
+        delete_account: கணக்கை நீக்குக
+        delete_introduction: 'கீழே உள்ள பொத்தானைப் பயன்படுத்தி உங்கள் ஓபன்ஸ்ட்ரீட்மேப்
+          கணக்கை நீக்கலாம். பின்வரும் விவரங்களைக் கவனியுங்கள்:'
+        cancel: கைவிடுக
   accounts:
     edit:
       title: கணக்கை திருத்து
@@ -175,23 +196,28 @@ ta:
       current email address: 'தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:'
       openid:
         link text: இது என்ன?
+      public editing:
+        enabled link text: இது என்ன?
       contributor terms:
         link text: இது என்ன?
       save changes button: மாற்றங்களைச் சேமி
+    go_public:
+      email_not_revealed: உங்கள் மின்னஞ்சல் முகவரி பொதுவில் வெளியிடப்படாது.
+      not_reversible: இந்தச் செயலை மாற்றியமைக்க முடியாது, அனைத்து புதிய பயனர்களும்
+        இயல்பாகவே பொதுவில் உள்ளனர்.
+    update:
+      success: பயனர் தகவல் வெற்றிகரமாக புதுப்பிக்கப்பட்டது.
+    destroy:
+      success: பயனர் கணக்கு நீக்கப்பட்டது.
   browse:
-    created: உருவாக்கப்பட்டது
-    closed: மூடப்பட்டது
+    deleted_ago_by_html: '%{user} பயனரால் %{time_ago} நீக்கப்பட்டது'
+    edited_ago_by_html: '%{user} ஆல் %{time_ago} திருத்தப்பட்டது'
     version: பதிப்பு
     in_changeset: மாற்றங்கள்
     anonymous: அடையாளமற்றவர்
+    view_history: வரலாற்றைக் காண்க
     view_details: விவரங்களைக் காட்டு
     location: 'இடம்:'
-    changeset:
-      title: 'மாற்றங்கள்: %{id}'
-      belongs_to: ஆசிரியர்
-      changesetxml: மாற்றத்தொடுப்பு XML
-      osmchangexml: osmChange XML
-      discussion: உரையாடல்
     relation:
       members: உறுப்பினர்கள்
     relation_member:
@@ -204,6 +230,7 @@ ta:
       entry_html: தொடர்பு %{relation_name}
       entry_role_html: தொடர்பு %{relation_name} (%{relation_role} ஆக)
     not_found:
+      title: காணப்படவில்லை
       sorry: மன்னிக்கவும், %{id} என்ற அடையாளம் கொண்ட %{type} கிடைக்கவில்லை.
       type:
         node: முனையம்
@@ -251,6 +278,14 @@ ta:
       feed:
         title: 'மாற்றங்கள்: %{id}'
         title_comment: மாற்றங்கள் %{id}-%{comment}
+        created: உருவாக்கப்பட்டது
+        closed: மூடப்பட்டது
+        belongs_to: ஆசிரியர்
+    show:
+      title: 'மாற்றங்கள்: %{id}'
+      discussion: உரையாடல்
+      changesetxml: மாற்றத்தொடுப்பு XML
+      osmchangexml: osmChange XML
   dashboards:
     contact:
       km away: '%{count}கிமீ தாண்டி'
@@ -767,8 +802,6 @@ ta:
       public: பொது
       identifiable: அடையாளம் காணக்கூடிய
       private: தனியார்
-      by: மூலம்
-      in: உள்
     index:
       upload_trace: சுவடை பதிவேற்றவும்
   application:
index e440515d65e12250d3d5d1151bd01225e4b8c439..325e8ec3e9e08d21dc5721ea14c4d66ce02c86ae 100644 (file)
@@ -305,8 +305,6 @@ te:
     destroy:
       success: ఖాతాను తొలగించాం.
   browse:
-    created: 'సృష్టించబడినది:'
-    closed: ముగించబడింది
     version: సంచిక
     in_changeset: మార్పులసమితి
     anonymous: అజ్ఞాత
@@ -322,20 +320,6 @@ te:
     view_history: చరిత్రను చూడండి
     view_details: వివరాలను చూడండి
     location: 'ప్రాంతం:'
-    changeset:
-      title: 'మార్పులసమితి: %{id}'
-      belongs_to: రచయిత
-      node: బుడిపెలు (%{count})
-      node_paginated: బుడిపెలు (%{count} లో %{x}-%{y})
-      way: మార్గాలు (%{count})
-      way_paginated: దారులు (%{count} లో %{x}-%{y})
-      relation: సంబంధాలు (%{count})
-      relation_paginated: '%{count} లో %{x}-%{y} యొక్క సంబంధాలు'
-      changesetxml: మార్పులసమితి XML
-      osmchangexml: osmChange XML
-      join_discussion: చర్చలో పాల్గొనేందుకు లాగినవండి
-      discussion: చర్చ
-      still_open: మార్పులసమితి ఇంకా తెరిచే ఉంది - దాన్ని మూసివేయగానే చర్చ తెరుచుకుంటుంది.
     node:
       title_html: 'బిందువు: %{name}'
       history_title_html: 'బుడిపె చరిత్ర: %{name}'
@@ -438,6 +422,23 @@ te:
       feed:
         title: మార్పులసమితి %{id}
         title_comment: మార్పులసమితి %{id} - %{comment}
+        created: 'సృష్టించబడినది:'
+        closed: ముగించబడింది
+        belongs_to: రచయిత
+    show:
+      title: 'మార్పులసమితి: %{id}'
+      discussion: చర్చ
+      join_discussion: చర్చలో పాల్గొనేందుకు లాగినవండి
+      still_open: మార్పులసమితి ఇంకా తెరిచే ఉంది - దాన్ని మూసివేయగానే చర్చ తెరుచుకుంటుంది.
+      changesetxml: మార్పులసమితి XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: బుడిపెలు (%{count})
+      nodes_paginated: బుడిపెలు (%{count} లో %{x}-%{y})
+      ways: మార్గాలు (%{count})
+      ways_paginated: దారులు (%{count} లో %{x}-%{y})
+      relations: సంబంధాలు (%{count})
+      relations_paginated: '%{count} లో %{x}-%{y} యొక్క సంబంధాలు'
     timeout:
       sorry: సారీ, మీరడిగిన మార్పులసమితుల జాబితాను తేవడంలో చాలా సమయం పట్టింది.
   changeset_comments:
@@ -1462,11 +1463,7 @@ te:
     intro_text: OpenStreetMap, ఓ ప్రపంచ మ్యాపు. మీలాంటి వారే దీన్ని తయారు చేసారు.
       స్వేచ్ఛా లైసెన్సు ద్వారా స్వేచ్ఛగా దీన్ని వాడుకోవచ్చు.
     intro_2_create_account: వాడుకరి ఖాతాను సృష్టించుకోండి
-    hosting_partners_html: '%{ucl}, %{fastly}, %{bytemark}, ఇతర %{partners} హోస్టింగుకు
-      మద్దతు నిస్తున్నారు.'
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: భాగస్వాములు
     tou: వాడుక నియమాలు
     osm_offline: OpenStreetMap డేటాబేసులో అత్యావశ్యకమైన నిర్వహణ పనులు జరుగుతున్నందున
@@ -1709,10 +1706,6 @@ te:
       new password button: సంకేతపదాన్ని మార్చు
       help_text: నమోదైనపుడు మీరిచ్చిన ఈమెయిలు చిరునామాను ఇవ్వండి. సంకేతపదాన్ని మార్చుకునే
         లింకును ఆ చిరునామాకు పంపిస్తాం.
-    create:
-      notice email on way: అయ్యో.. పోయిందా :-( పోన్లెండి, దాన్ని మార్చుకునేందుకు ఒక
-        ఈమెయిలు వచ్చేస్తోంది.
-      notice email cannot find: క్షమించండి, ఆ ఈమెయిలు చిరునామా దొరకలేదు.
     edit:
       title: సంకేతపదం మార్పు
       heading: '%{user} సంకేతపదాన్ని మార్చు'
@@ -2254,9 +2247,6 @@ te:
     index:
       title: వాడుకరులు
       heading: వాడుకరులు
-      showing:
-        one: పేజీ %{page} (%{items} లో %{first_item})
-        other: పేజీ %{page} (%{items} లో %{first_item}-%{last_item})
       summary_html: '%{name}, %{date} న %{ip_address} నుండి సృష్టించారు'
       summary_no_ip_html: '%{name} %{date} న సృష్టించారు'
       confirm: ఎంచుకున్న వాడూకరులను ధ్రువీకరించు
@@ -2376,7 +2366,6 @@ te:
       revoke: ఎత్తివేయండి!
       confirm: నిశ్చయించుకున్నారా?
       reason: 'నిరోధానికి కారణం:'
-      back: అన్ని నిరోధాలను చూడండి
       revoker: 'ఎత్తివేసేవారు:'
       needs_view: ఈ నిరోధం తొలగిపోవాలంటే ఈ వాడుకరి లాగినవ్వాలి.
     block:
@@ -2390,9 +2379,6 @@ te:
       reason: నిరోధానికి కారణం
       status: స్థితి
       revoker_name: ఎత్తివేసినవారు
-      showing_page: పేజీ %{page}
-      next: తదుపరి »
-      previous: « మునుపటి
   notes:
     index:
       title: గమనికలు సమర్పించినది లేదా వ్యాఖ్యానించినది %{user}
index e2e19e3a6462c60d7a85ac6f93678bfae9fc664b..042fcccc9d9f18271067f25e43e881f1d7ce0f11 100644 (file)
@@ -274,12 +274,6 @@ th:
     destroy:
       success: ลบบัญชีแล้ว
   browse:
-    created: สร้างเมื่อ
-    closed: ปิดเมื่อ
-    created_ago_html: สร้างเมื่อ %{time_ago}
-    closed_ago_html: ปิดเมื่อ %{time_ago}
-    created_ago_by_html: สร้างเมื่อ %{time_ago} โดย %{user}
-    closed_ago_by_html: ปิดเมื่อ %{time_ago} โดย %{user}
     deleted_ago_by_html: ลบเมื่อ %{time_ago} โดย %{user}
     edited_ago_by_html: แก้ไขเมื่อ %{time_ago} โดย %{user}
     version: รุ่นที่
@@ -295,22 +289,6 @@ th:
     view_history: ดูประวัติ
     view_details: ดูรายละเอียด
     location: 'ที่ตั้ง:'
-    changeset:
-      title: 'ชุดการเปลี่ยนแปลง: %{id}'
-      belongs_to: ผู้สร้างสรรค์
-      node: หมุด (%{count})
-      node_paginated: หมุดที่ (%{x}-%{y} จากทั้งหมด %{count})
-      way: เส้นทาง (%{count})
-      way_paginated: เส้นทางที่ (%{x}-%{y} จาก %{count})
-      relation: ความสัมพันธ์ (%{count})
-      relation_paginated: ความสัมพันธ์ (%{x}-%{y} จาก %{count})
-      hidden_comment_by_html: ความคิดเห็นที่ซ่อนอยู่จาก %{user} %{time_ago}
-      comment_by_html: ความคิดเห็นจาก %{user} %{time_ago}
-      changesetxml: ชุดการเปลี่ยนแปลง XML
-      osmchangexml: เอ็กซ์เอ็มแอลของ osmChange
-      join_discussion: เข้าสู่ระบบเพื่อเข้าร่วมการอภิปราย
-      discussion: การอภิปราย
-      still_open: ชุดการเปลี่ยนแปลงกำลังเปิดอยู่ การอภิปรายจะเริ่มได้หลังจากปิดชุดการเปลี่ยนแปลงแล้ว
     node:
       title_html: 'หมุด: %{name}'
       history_title_html: 'ประวัติหมุด: %{name}'
@@ -412,6 +390,29 @@ th:
       feed:
         title: ชุดการเปลี่ยนแปลง %{id}
         title_comment: ชุดการเปลี่ยนแปลง %{id} - %{comment}
+        created: สร้างเมื่อ
+        closed: ปิดเมื่อ
+        belongs_to: ผู้สร้างสรรค์
+    show:
+      title: 'ชุดการเปลี่ยนแปลง: %{id}'
+      created_ago_html: สร้างเมื่อ %{time_ago}
+      closed_ago_html: ปิดเมื่อ %{time_ago}
+      created_ago_by_html: สร้างเมื่อ %{time_ago} โดย %{user}
+      closed_ago_by_html: ปิดเมื่อ %{time_ago} โดย %{user}
+      discussion: การอภิปราย
+      join_discussion: เข้าสู่ระบบเพื่อเข้าร่วมการอภิปราย
+      still_open: ชุดการเปลี่ยนแปลงกำลังเปิดอยู่ การอภิปรายจะเริ่มได้หลังจากปิดชุดการเปลี่ยนแปลงแล้ว
+      comment_by_html: ความคิดเห็นจาก %{user} %{time_ago}
+      hidden_comment_by_html: ความคิดเห็นที่ซ่อนอยู่จาก %{user} %{time_ago}
+      changesetxml: ชุดการเปลี่ยนแปลง XML
+      osmchangexml: เอ็กซ์เอ็มแอลของ osmChange
+    paging_nav:
+      nodes: หมุด (%{count})
+      nodes_paginated: หมุดที่ (%{x}-%{y} จากทั้งหมด %{count})
+      ways: เส้นทาง (%{count})
+      ways_paginated: เส้นทางที่ (%{x}-%{y} จาก %{count})
+      relations: ความสัมพันธ์ (%{count})
+      relations_paginated: ความสัมพันธ์ (%{x}-%{y} จาก %{count})
     timeout:
       sorry: ขออภัย รายการชุดการเปลี่ยนแปลงที่ท่านร้องขอใช้เวลานานเกินสมควรในการสืบค้น
   changeset_comments:
@@ -1226,10 +1227,6 @@ th:
     intro_header: ยินดีต้อนรับสู่ OpenStreetMap!
     intro_text: OpenStreetMap เป็นแผนที่โลกที่สร้างโดยผู้คนเช่นท่าน และใช้งานได้ไม่เสียค่าใช้จ่ายภายใต้สัญญาอนุญาตแบบเปิด
     intro_2_create_account: สร้างบัญชีผู้ใช้ใหม่
-    hosting_partners_html: การโฮสต์ได้รับการสนับสนุนโดย %{ucl}, %{bytemark}, และ%{partners}อื่น
-      ๆ
-    partners_ucl: ยูซีแอล (วิทยาลัยอุดมศึกษาลอนดอน)
-    partners_bytemark: ไบต์มาร์กโฮสติง
     partners_partners: องค์กรพันธมิตร
     tou: ข้อกำหนดการใช้งาน
     osm_offline: ฐานข้อมูลของ OpenStreetMap กำลังออฟไลน์เพื่อให้สามารถดำเนินการบำรุงรักษาตามปกติได้
@@ -1420,8 +1417,6 @@ th:
       heading: ลืมรหัสผ่านหรือ?
       email address: 'ที่อยู่อีเมล:'
       new password button: ตั้งรหัสผ่านใหม่
-    create:
-      notice email cannot find: ขออภัย, ไม่พบที่อยู่อีเมลที่ระบุ
     edit:
       title: ตั้งรหัสผ่านใหม่
       heading: 'ตั้วรหัสผ่านใหม่สำหรับ: %{user}'
@@ -1741,8 +1736,6 @@ th:
       identifiable: ระบุได้
       private: ส่วนตัว
       trackable: ติดตามได้
-      by: โดย
-      in: ใน
     index:
       public_traces: รอยทาง GPS สาธารณะ
       public_traces_from: รอยทางจีพีเอสสาธารณะโดยผู้ใช้ %{user}
@@ -1915,9 +1908,6 @@ th:
     index:
       title: ผู้ใช้
       heading: ผู้ใช้
-      showing:
-        one: หน้าที่ %{page} (%{first_item} จาก %{items})
-        other: หน้าที่ %{page} (%{first_item}-%{last_item} จาก %{items})
       summary_html: '%{name} สร้างจากไอพี %{ip_address} เมื่อ %{date}'
       confirm: ยืนยันผู้ใช้ที่เลือก
       hide: ซ่อนผู้ใช้ที่เลือก
@@ -2020,9 +2010,6 @@ th:
       reason: เหตุผลที่ต้องระงับใช้งาน
       status: สถานะ
       revoker_name: ยกเลิกโดย
-      showing_page: หน้า %{page}
-      next: ถัดไป »
-      previous: « ก่อนหน้า
   notes:
     index:
       heading: หมายเหตุของ %{user}
index c1d1f810db7b8b4c3557e72e2e599b8bdefcf36f..e74b8b89d06efda07fcf08030a55887a79ed204f 100644 (file)
@@ -268,8 +268,6 @@ tl:
         ng e-liham.
       success: Matagumpay na naisapanahon ang kabatiran sa tagagamit.
   browse:
-    created: Nilikha
-    closed: Isinara
     version: Bersyon
     in_changeset: Pangkat ng pagbabago
     anonymous: Hindi nagpapakilala (anonimo)
@@ -285,21 +283,6 @@ tl:
     view_history: Tingnan ang kasaysayan
     view_details: Tingnan ang mga detalye
     location: Pook (lokasyon)
-    changeset:
-      title: 'Pangkat ng pagbabago: %{id}'
-      belongs_to: May-akda
-      node: Mga buko (%{count})
-      node_paginated: Mga buko (%{x}-%{y} ng %{count})
-      way: Mga daan (%{count})
-      way_paginated: Mga daan (%{x}-%{y} ng %{count})
-      relation: Mga kaugnayan (%{count})
-      relation_paginated: Mga kaugnayan (%{x}-%{y} ng %{count})
-      changesetxml: XML ng pangkat ng pagbabago
-      osmchangexml: XML ng osmChange
-      join_discussion: Lumagda para sumali sa talakayan
-      discussion: Talakayan
-      still_open: Bukas pa rin ang pangkat ng pagbabago - magbubukas ang talakayan
-        pag naisara na ang pangkat ng pagbabago.
     node:
       title_html: 'Buko: %{name}'
       history_title_html: 'Kasaysayan ng Buko: %{name}'
@@ -403,6 +386,24 @@ tl:
       feed:
         title: '%{id} ng pangkat ng pagbabago'
         title_comment: '%{id} ng angkat ng pagbabago - %{comment}'
+        created: Nilikha
+        closed: Isinara
+        belongs_to: May-akda
+    show:
+      title: 'Pangkat ng pagbabago: %{id}'
+      discussion: Talakayan
+      join_discussion: Lumagda para sumali sa talakayan
+      still_open: Bukas pa rin ang pangkat ng pagbabago - magbubukas ang talakayan
+        pag naisara na ang pangkat ng pagbabago.
+      changesetxml: XML ng pangkat ng pagbabago
+      osmchangexml: XML ng osmChange
+    paging_nav:
+      nodes: Mga buko (%{count})
+      nodes_paginated: Mga buko (%{x}-%{y} ng %{count})
+      ways: Mga daan (%{count})
+      ways_paginated: Mga daan (%{x}-%{y} ng %{count})
+      relations: Mga kaugnayan (%{count})
+      relations_paginated: Mga kaugnayan (%{x}-%{y} ng %{count})
     timeout:
       sorry: Paumanhin, ang talaan ng mga pangkat ng pagbabagong hiniling mo ay naging
         napakatagal bago nakuhang muli.
@@ -1201,11 +1202,7 @@ tl:
     intro_text: Ang OpenStreetMap ay isang mapa ng mundo na nilikha ng mga taong katulad
       mo at malayang gamitin sa ilalim ng isang bukas na lisensya.
     intro_2_create_account: Lumikha ng isang akawnt ng tagagamit
-    hosting_partners_html: Ang pagpapasinaya ay sinusuportahan ng %{ucl}, %{fastly},
-      %{bytemark}, at iba pang %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
     partners_partners: mga kawaksi
     tou: Pagtatakda sa Paggamit
     osm_offline: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nakapatay
@@ -1432,10 +1429,6 @@ tl:
       help_text: Ipasok ang tirahan ng e-liham na ginamit mo upang magpatala, ipapadala
         namin ang isang kawing papunta rito na magagamit mo upang muling maitakda
         mo ang iyong password.
-    create:
-      notice email on way: Ikinalulungkot na naiwala mo iyan :-( ngunit darating na
-        ang isang e-liham upang maitakda mong muli iyan kaagad.
-      notice email cannot find: Hindi matagpuan ang ganyang tirahan ng e-liham, paumanhin.
     edit:
       title: Muling itakda ang password
       heading: Muling itakda ang Hudyat para kay %{user}
@@ -1786,8 +1779,6 @@ tl:
       identifiable: MAKIKILALA
       private: PRIBADO
       trackable: MATUTUGAYGAYAN
-      by: sa pamamagitan ng
-      in: sa
     index:
       public_traces: Mga pagbabakas ng pangmadlang GPS
       public_traces_from: Pangmadlang Pagbakas ng GPS mula kay %{user}
@@ -2004,9 +1995,6 @@ tl:
     index:
       title: Mga tagagamit
       heading: Mga tagagamit
-      showing:
-        one: Pahina %{page} (%{first_item} ng  %{items})
-        other: Pahina %{page}  (%{first_item}-%{last_item} ng  mga %{items})
       summary_html: Nilikha ang %{name} mula sa %{ip_address} noong %{date}
       summary_no_ip_html: Nilikha ang %{name} noong %{date}
       confirm: Tiyakin ang Napiling mga Tagagamit
@@ -2119,7 +2107,6 @@ tl:
       revoke: Bawiin!
       confirm: Nakatitiyak ka ba?
       reason: 'Dahilan ng paghadlang:'
-      back: Tingnan ang lahat ng mga pagharang
       revoker: 'Tagapagbawi:'
       needs_view: Ang tagagamit ay kailangang lumagda muna bago mahawi ang hadlang
         na ito.
@@ -2134,9 +2121,6 @@ tl:
       reason: Dahilan ng pagharang
       status: Kalagayan
       revoker_name: Binawi ni
-      showing_page: Ika-%{page} na pahina
-      next: Susunod »
-      previous: « Nakaraan
   notes:
     index:
       title: Mga tala na isinumite o pinuna ni %{user}
index a127c53224a897ed6969eba96280cfcf7e3820a0..1a457a244a5dc03dddee040df6db48ab0f96e9d5 100644 (file)
@@ -367,15 +367,10 @@ tr:
     destroy:
       success: Hesap Silindi.
   browse:
-    created: Oluşturulma
-    closed: Kapandı
-    created_ago_html: '%{time_ago} oluşturuldu'
-    closed_ago_html: '%{time_ago} kapatıldı'
-    created_ago_by_html: '%{user} tarafından %{time_ago} oluşturuldu'
-    closed_ago_by_html: '%{user} tarafından %{time_ago} kapatıldı'
     deleted_ago_by_html: '%{user} tarafından %{time_ago} silindi'
     edited_ago_by_html: '%{user} tarafından %{time_ago} düzenlendi'
     version: Sürüm
+    redacted_version: Düzenlenmiş Sürüm
     in_changeset: Değişiklik Kaydı
     anonymous: anonim
     no_comment: (yorum yok)
@@ -388,25 +383,11 @@ tr:
       other: '%{count} yol'
     download_xml: XML İndir
     view_history: Geçmişi Görüntüle
+    view_unredacted_history: Düzenlenmemiş Geçmişi Görüntüle
     view_details: Ayrıntıları Görüntüle
+    view_redacted_data: Düzenlenmiş Veriyi Görüntüle
+    view_redaction_message: Düzenlenmiş Mesajı Görüntüle
     location: 'Konum:'
-    changeset:
-      title: 'Değişiklik kaydı: %{id}'
-      belongs_to: Yazar
-      node: Noktalar (%{count})
-      node_paginated: Nokta (%{x}-%{y} - toplam %{count})
-      way: Yollar (%{count})
-      way_paginated: Yol (%{x}-%{y} - toplam %{count})
-      relation: İlişkiler (%{count})
-      relation_paginated: İlişkiler (%{x}-%{y} - toplam %{count})
-      hidden_comment_by_html: '%{user} tarafından %{time_ago} yapılan gizli yorum'
-      comment_by_html: '%{user} tarafından %{time_ago} yapılan yorum'
-      changesetxml: ' XML değişiklik kaydı'
-      osmchangexml: osmChange XML
-      join_discussion: Tartışmaya katılmak için lütfen giriş yapın
-      discussion: Tartışma
-      still_open: Değişiklik kaydı hâlâ açık - tartışma, değişiklik serisi kapatıldığında
-        açılacaktır.
     node:
       title_html: 'Nokta: %{name}'
       history_title_html: 'Nokta Geçmişi: %{name}'
@@ -524,6 +505,9 @@ tr:
       feed:
         title: Değişiklik kaydı %{id}
         title_comment: Değişiklik takımı %{id} - %{comment}
+        created: Oluşturulma
+        closed: Kapandı
+        belongs_to: Yazar
     subscribe:
       heading: Aşağıdaki değişiklik kaydı tartışmasına abone olmak ister misiniz?
       button: Tartışmaya abone ol
@@ -538,6 +522,29 @@ tr:
       heading: 'Şu kimliğe sahip girdi yok: %{id}'
       body: Üzgünüz, %{id} kimliğine sahip herhangi bir değişiklik kaydı yok. Lütfen
         yazımınızı kontrol edin ya da tıkladığınız bağlantı yanlış olabilir.
+    show:
+      title: 'Değişiklik kaydı: %{id}'
+      created: 'Oluşturma: %{when}'
+      closed: 'Kapanma: %{when}'
+      created_ago_html: '%{time_ago} oluşturuldu'
+      closed_ago_html: '%{time_ago} kapatıldı'
+      created_ago_by_html: '%{user} tarafından %{time_ago} oluşturuldu'
+      closed_ago_by_html: '%{user} tarafından %{time_ago} kapatıldı'
+      discussion: Tartışma
+      join_discussion: Tartışmaya katılmak için lütfen giriş yapın
+      still_open: Değişiklik kaydı hâlâ açık - tartışma, değişiklik serisi kapatıldığında
+        açılacaktır.
+      comment_by_html: '%{user} tarafından %{time_ago} yapılan yorum'
+      hidden_comment_by_html: '%{user} tarafından %{time_ago} yapılan gizli yorum'
+      changesetxml: ' XML değişiklik kaydı'
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Noktalar (%{count})
+      nodes_paginated: Nokta (%{x}-%{y} - toplam %{count})
+      ways: Yollar (%{count})
+      ways_paginated: Yol (%{x}-%{y} - toplam %{count})
+      relations: İlişkiler (%{count})
+      relations_paginated: İlişkiler (%{x}-%{y} - toplam %{count})
     timeout:
       sorry: Üzgünüz, değişiklik kayıtlarının listelenmesi fazla sürdü.
   changeset_comments:
@@ -1635,11 +1642,10 @@ tr:
     intro_text: OpenStreetMap, sizler tarafından oluşturulan ve açık lisans altında
       ücretsiz olarak kullanılabilen bir dünya haritasıdır.
     intro_2_create_account: Bir kullanıcı hesabı oluşturun
-    hosting_partners_html: Barındırma hizmeti; %{ucl}, %{fastly}, %{bytemark} ve diğer
+    hosting_partners_2024_html: Barındırma hizmeti; %{fastly}, %{corpmembers} ve diğer
       %{partners} tarafından sağlanmaktadır.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: OSMF kurumsal üyeleri
     partners_partners: iş birlikçiler
     tou: Kullanım Şartları
     osm_offline: OpenStreetMap veritabanı bakım çalışmaları yürütüldüğü için veritabanı
@@ -1923,9 +1929,8 @@ tr:
       help_text: Kaydolmak için kullandığınız e-posta adresini girin, şifrenizi sıfırlamak
         için kullanabileceğiniz bir bağlantı yollayacağız.
     create:
-      notice email on way: Maalesef şifrenizi kaybettiniz :-( Ancak yeni bir e-posta
-        yolda böylece şifreniziyakında sıfırlayabilirsiniz.
-      notice email cannot find: 'Üzgünüz: bu e-posta adresi bulunamadı.'
+      send_paranoid_instructions: E-posta adresiniz veritabanımızda mevcutsa birkaç
+        dakika içinde e-posta adresinize bir şifre kurtarma bağlantısı gönderilecektir.
     edit:
       title: Parolayı sıfırla
       heading: '%{user} İçin Parolayı Sıfırlayın'
@@ -1994,7 +1999,7 @@ tr:
           title: OpenID ile giriş
           alt: OpenID Bağlantısı ile giriş
         google:
-          title: Google ile oturum aç
+          title: Google ile giriş
           alt: Google OpenID ile giriş
         facebook:
           title: Facebook ile giriş
@@ -2623,8 +2628,8 @@ tr:
       identifiable: TANIMLANABİLİR
       private: ÖZEL
       trackable: İZLENEBİLİR
-      by: 'yükleyen:'
-      in: 'etiketler:'
+      details_with_tags_html: '%{user} tarafından %{time_ago} %{tags} etiketleriyle'
+      details_without_tags_html: '%{user} tarafından %{time_ago}'
     index:
       public_traces: Herkese Açık GPS İzleri
       my_gps_traces: GPS İzlerim
@@ -2944,9 +2949,11 @@ tr:
     index:
       title: Kullanıcılar
       heading: Kullanıcılar
-      showing:
-        one: Sayfa %{page} (%{first_item} - toplam %{items})
-        other: Sayfa %{page} (%{first_item}-%{last_item} - toplam %{items})
+      older: Daha Eski Kullanıcılar
+      newer: Daha Yeni Kullanıcılar
+      found_users:
+        one: '%{count} kullanıcı bulundu'
+        other: '%{count} kullanıcı bulundu'
       summary_html: '%{name}, %{date} tarihinde %{ip_address} tarafından oluşturuldu.'
       summary_no_ip_html: '%{name} %{date} tarihinde oluşturuldu.'
       confirm: Seçili Kullanıcıları Doğrulayın
@@ -3088,7 +3095,6 @@ tr:
       revoke: İptal!
       confirm: Emin misiniz?
       reason: 'Engellenme sebebi:'
-      back: Tüm engellemeleri göster
       revoker: 'Geri alan:'
       needs_view: Engel kaldırılmadan önce kullanıcının giriş yapması gerekiyor.
     block:
@@ -3102,9 +3108,8 @@ tr:
       reason: Engellenme sebebi
       status: Durum
       revoker_name: İptal eden
-      showing_page: '%{page}. sayfa'
-      next: Sonraki »
-      previous: « Önceki
+      older: Daha Eski Engellemeler
+      newer: Daha Yeni Engellemeler
   user_mutes:
     index:
       title: Sessize Alınan Kullanıcılar
index 074631aa5ae09d45d3a6897fa6c0d7a484f895f2..d32e95d5fe556bbfdd87311b60e70a03b6f44d47 100644 (file)
@@ -313,12 +313,6 @@ tt:
     destroy:
       success: Хисапъязма бетерелде.
   browse:
-    created: Төзелгән
-    closed: Ябык
-    created_ago_html: 'Күпме вакыт элек ясалды: %{time_ago}'
-    closed_ago_html: 'Күпме вакыт элек ябылды: %{time_ago}'
-    created_ago_by_html: 'Күпме вакыт элек ясалды: %{time_ago}, кем тарафыннан: %{user}'
-    closed_ago_by_html: 'Күпме вакыт элек ябылды: %{time_ago}, кем тарафыннан: %{user}'
     deleted_ago_by_html: 'Күпме вакыт элек бетерелде: %{time_ago}, кем тарафыннан:
       %{user}'
     edited_ago_by_html: 'Күпме вакыт элек үзгәртелде: %{time_ago}, кем тарафыннан:
@@ -338,23 +332,6 @@ tt:
     view_history: Тарихын карау
     view_details: Тулырак мәгълүмат
     location: 'Урын:'
-    changeset:
-      title: 'Үзгәртүләр өеме: %{id}'
-      belongs_to: Автор
-      node: Нокталар (%{count})
-      node_paginated: Нокталар (%{count} ноктадан %{x}-%{y})
-      way: Сызыклар (%{count})
-      way_paginated: Сызыклар (%{count} сызыктан %{x}-%{y})
-      relation: Мөнәсәбәтләр (%{count})
-      relation_paginated: Мөнәсәбәтләр (%{count} мөнәсәбәттән %{x}-%{y})
-      hidden_comment_by_html: '%{user} исемле кулланучыдан яшерен шәрех %{time_ago}'
-      comment_by_html: '%{user} исемле кулланучыдан шәрех %{time_ago}'
-      changesetxml: Үзгәртүләр өеменең XMLы
-      osmchangexml: osmChange XML
-      join_discussion: Бәхәстә катнашу өчен хисапъязмагызга керегез
-      discussion: Фикер алышу
-      still_open: Үзгәртүләр өеме әлегә ачык. Ул ябылгач бәхәскә шунда ук керергә
-        мөмкин булыр.
     node:
       title_html: 'Нокта: %{name}'
       history_title_html: 'Нокта тарихы: %{name}'
@@ -427,6 +404,31 @@ tt:
       feed:
         title: '%{id} үзгәртүләр өеме'
         title_comment: '%{id} үзгәртүләр өеме  -  %{comment}'
+        created: Төзелгән
+        closed: Ябык
+        belongs_to: Автор
+    show:
+      title: 'Үзгәртүләр өеме: %{id}'
+      created_ago_html: 'Күпме вакыт элек ясалды: %{time_ago}'
+      closed_ago_html: 'Күпме вакыт элек ябылды: %{time_ago}'
+      created_ago_by_html: 'Күпме вакыт элек ясалды: %{time_ago}, кем тарафыннан:
+        %{user}'
+      closed_ago_by_html: 'Күпме вакыт элек ябылды: %{time_ago}, кем тарафыннан: %{user}'
+      discussion: Фикер алышу
+      join_discussion: Бәхәстә катнашу өчен хисапъязмагызга керегез
+      still_open: Үзгәртүләр өеме әлегә ачык. Ул ябылгач бәхәскә шунда ук керергә
+        мөмкин булыр.
+      comment_by_html: '%{user} исемле кулланучыдан шәрех %{time_ago}'
+      hidden_comment_by_html: '%{user} исемле кулланучыдан яшерен шәрех %{time_ago}'
+      changesetxml: Үзгәртүләр өеменең XMLы
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Нокталар (%{count})
+      nodes_paginated: Нокталар (%{count} ноктадан %{x}-%{y})
+      ways: Сызыклар (%{count})
+      ways_paginated: Сызыклар (%{count} сызыктан %{x}-%{y})
+      relations: Мөнәсәбәтләр (%{count})
+      relations_paginated: Мөнәсәбәтләр (%{count} мөнәсәбәттән %{x}-%{y})
   dashboards:
     contact:
       latest_edit_html: 'Соңгы төзәтмә (%{ago}):'
@@ -959,8 +961,6 @@ tt:
     blocks:
       creator_name: Төзүче
       status: Халәт
-      next: Киләсе »
-      previous: « Алдагы
   notes:
     index:
       creator: Төзүче
index 4fe97ebead8af9db9147aa284bfbf89da228bd0c..599232039ed463879243961d7efec6652f2d8001 100644 (file)
@@ -87,6 +87,8 @@ uk:
       messages:
         invalid_email_address: не схоже на коректну адресу електронної пошти
         email_address_not_routable: недоступний
+        display_name_is_user_n: не може бути user_n, якщо n не є вашим ідентифікатором
+          користувача
       models:
         user_mute:
           is_already_muted: вже стишено
@@ -392,15 +394,10 @@ uk:
     destroy:
       success: Обліковий запис видалено.
   browse:
-    created: Створено
-    closed: Закрито
-    created_ago_html: Створено %{time_ago}
-    closed_ago_html: Закрито %{time_ago}
-    created_ago_by_html: Створив(ла) %{user} %{time_ago}
-    closed_ago_by_html: Закрив(ла) %{time_ago} %{user}
     deleted_ago_by_html: Вилучив(ла) %{time_ago} %{user}
     edited_ago_by_html: Змінено %{user} %{time_ago}
     version: Версія
+    redacted_version: Очищена Версія
     in_changeset: Набір змін
     anonymous: анонім
     no_comment: (без коментарів)
@@ -417,25 +414,11 @@ uk:
       other: ""
     download_xml: Завантажити XML
     view_history: Перегляд історії
+    view_unredacted_history: Перегляд невідредагованої історії
     view_details: Поточна інформація
+    view_redacted_data: Переглянути очищені дані
+    view_redaction_message: Переглянути повідомлення про очищення
     location: 'Координати:'
-    changeset:
-      title: 'Набір змін: %{id}'
-      belongs_to: Автор
-      node: Точки (%{count})
-      node_paginated: Точки (%{x}-%{y} із %{count})
-      way: Лінії (%{count})
-      way_paginated: Лінії (%{x}-%{y} із %{count})
-      relation: Зв’язки (%{count})
-      relation_paginated: Зв’язки (%{x}-%{y} із %{count})
-      hidden_comment_by_html: Прихований коментар від %{user} %{time_ago}
-      comment_by_html: Коментар від %{user} %{time_ago}
-      changesetxml: XML опис набору змін
-      osmchangexml: osmChange XML
-      join_discussion: Увійдіть в систему, щоб приєднатися до обговорення
-      discussion: Обговорення
-      still_open: Набір змін досі відкритий — обговорення буде відкрито, як тільки
-        він стане закритим.
     node:
       title_html: 'Точка: %{name}'
       history_title_html: 'Історія точки: %{name}'
@@ -519,6 +502,15 @@ uk:
       introduction: Клацніть на мапі, щоб отримати дані про об’єкти поруч.
       nearby: Об’єкти поруч
       enclosing: Оточуючі об’єкти
+  old_nodes:
+    not_found:
+      sorry: 'На жаль, точку #%{id} версії %{version} не знайдено.'
+  old_ways:
+    not_found:
+      sorry: 'На жаль, лінію #%{id} версії %{version} не знайдено.'
+  old_relations:
+    not_found:
+      sorry: 'На жаль, звʼязок #%{id} версії %{version} не знайдено.'
   changesets:
     changeset_paging_nav:
       showing_page: Сторінка %{page}
@@ -550,6 +542,46 @@ uk:
       feed:
         title: Набір змін %{id}
         title_comment: Набір змін %{id} — %{comment}
+        created: Створено
+        closed: Закрито
+        belongs_to: Автор
+    subscribe:
+      heading: Підписатися на обговорення набору змін?
+      button: Підписатись на обговорення
+    unsubscribe:
+      heading: Відписатись від обговорення набору змін?
+      button: Відписатися від обговорення
+    heading:
+      title: Набір змін %{id}
+      created_by_html: Створений %{link_user} %{created}.
+    no_such_entry:
+      title: Немає такого набору змін
+      heading: Немає запису з id %{id}
+      body: На жаль, немає набору змін %{id}. Будь ласка, перевірте посилання, або,
+        можливо, посилання, яке ви натиснули, неправильне.
+    show:
+      title: 'Набір змін: %{id}'
+      created: 'Створено: %{when}'
+      closed: 'Закрито: %{when}'
+      created_ago_html: Створено %{time_ago}
+      closed_ago_html: Закрито %{time_ago}
+      created_ago_by_html: Створив(ла) %{user} %{time_ago}
+      closed_ago_by_html: Закрив(ла) %{time_ago} %{user}
+      discussion: Обговорення
+      join_discussion: Увійдіть в систему, щоб приєднатися до обговорення
+      still_open: Набір змін досі відкритий — обговорення буде відкрито, як тільки
+        він стане закритим.
+      comment_by_html: Коментар від %{user} %{time_ago}
+      hidden_comment_by_html: Прихований коментар від %{user} %{time_ago}
+      changesetxml: XML опис набору змін
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Точки (%{count})
+      nodes_paginated: Точки (%{x}-%{y} із %{count})
+      ways: Лінії (%{count})
+      ways_paginated: Лінії (%{x}-%{y} із %{count})
+      relations: Зв’язки (%{count})
+      relations_paginated: Зв’язки (%{x}-%{y} із %{count})
     timeout:
       sorry: На жаль, перелік наборів змін, який ви запросили, потребує забагато часу
         для завантаження.
@@ -580,7 +612,7 @@ uk:
         щоб бачити маперів поруч.'
       edit_your_profile: Редагувати свій профіль
       my friends: Друзі
-      no friends: Ви не ще додали жодного друга.
+      no friends: Ви ще не додали жодного друга.
       nearby users: Інші мапери поруч
       no nearby users: Поблизу поки немає маперів, які позначили своє розташування.
       friends_changesets: набори змін друзів
@@ -612,6 +644,7 @@ uk:
     show:
       title: Щоденник %{user} | %{title}
       user_title: Щоденник %{user}
+      discussion: Обговорення
       leave_a_comment: Лишити коментар
       login_to_leave_a_comment_html: '%{login_link}, аби залишити коментар'
       login: Увійти
@@ -666,6 +699,12 @@ uk:
       comment: Коментар
       newer_comments: Нові коментарі
       older_comments: Старіші коментарі
+    subscribe:
+      heading: Підписатись на обговорення цього допису щоденника?
+      button: Підписатись на обговорення
+    unsubscribe:
+      heading: Відписатись від обговорення цього допису щоденника?
+      button: Відписатися від обговорення
   doorkeeper:
     errors:
       messages:
@@ -1643,11 +1682,10 @@ uk:
     intro_text: OpenStreetMap — мапа світу, створена такими ж людьми, як і ви, для
       вільного використання під відкритою ліцензією.
     intro_2_create_account: Створіть обліковий запис
-    hosting_partners_html: Хостинг підтримується %{ucl}, %{fastly}, %{bytemark} та
+    hosting_partners_2024_html: Хостинг підтримується %{fastly}, %{corpmembers} та
       іншими %{partners}.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: Корпоративні члени OSMF
     partners_partners: партнерами
     tou: Умови використання
     osm_offline: База даних OpenStreetMap в даний момент недоступна, бо саме проводиться
@@ -1669,6 +1707,7 @@ uk:
     more: Більше
   user_mailer:
     diary_comment_notification:
+      description: 'Запис у щоденнику OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} залишив коментар у вашому щоденнику'
       hi: Привіт, %{to_user},
       header: '%{from_user} прокоментував ваш допис у щоденнику у OpenStreetMap з
@@ -1678,6 +1717,9 @@ uk:
         або відповісти — %{replyurl}
       footer_html: Ви можете ознайомитись з коментарем за посиланням %{readurl}, відповісти
         на коментар - %{commenturl}, чи надіслати повідомлення автору - %{replyurl}
+      footer_unsubscribe: Ви можете скасувати підписку на обговорення за адресою %{unsubscribeurl}
+      footer_unsubscribe_html: Ви можете скасувати підписку на обговорення за адресою
+        %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Привіт, %{to_user},
@@ -1715,6 +1757,8 @@ uk:
         few: 'успішно завантажено %{trace_points} точки з %{count} можливих. '
         many: успішно завантажено %{trace_points} точок з %{count} можливих.
         other: ""
+      all_your_traces_html: Усі успішно завантажені треки GPX можна знайти за адресою
+        %{url}.
       subject: '[OpenStreetMap] Імпорт GPX пройшов успішно'
     signup_confirm:
       subject: '[OpenStreetMap] Ласкаво просимо до OpenStreetMap'
@@ -1740,6 +1784,7 @@ uk:
       click_the_link: Якщо це ви, будь ласка, клацніть на посилання нижче, щоб змінити
         свій пароль.
     note_comment_notification:
+      description: 'Нотатка OpenStreetMap #%{id}'
       anonymous: Анонімний учасник
       greeting: Привіт,
       commented:
@@ -1777,6 +1822,7 @@ uk:
       details: Докладніше про нотатку %{url}.
       details_html: Докладніше про нотатку %{url}.
     changeset_comment_notification:
+      description: 'Набір змін OpenStreetMap #%{id}'
       hi: Привіт %{to_user},
       greeting: Привіт,
       commented:
@@ -1797,10 +1843,10 @@ uk:
         partial_changeset_without_comment: без коментарів
       details: Більше деталей про зміни, які можуть бути знайдені в %{url}.
       details_html: Більше деталей про набір змін можна знайти за посиланням - %{url}.
-      unsubscribe: Щоб відмовитись від отримання повідомлень для цього набору змін,
-        Ð¿ÐµÑ\80ейдÑ\96Ñ\82Ñ\8c Ð·Ð° Ð¿Ð¾Ñ\81иланнÑ\8fм %{url} Ð¹ Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c ÐºÐ½Ð¾Ð¿ÐºÑ\83 â\80\9eÐ\92Ñ\96дпиÑ\81аÑ\82иÑ\81Ñ\8câ\80\9c.
+      unsubscribe: Щоб відмовитись від отримання повідомлень для цього набору змін
+        Ð·Ð° Ð¿Ð¾Ñ\81иланнÑ\8fм %{url}.
       unsubscribe_html: Щоб відмовитись від отримання повідомлень для цього набору
-        змін, перейдіть за посиланням %{url} й натисніть кнопку «Відписатись».
+        змін за посиланням %{url}.
   confirmations:
     confirm:
       heading: Перевірте вашу електронну пошту!
@@ -1891,16 +1937,16 @@ uk:
         many: Ви маєте %{count} стишених повідомлень
         other: ""
     reply:
-      wrong_user: Ð\92и Ñ\83вÑ\96йÑ\88ли Ñ\8fк â\80\9e%{user}â\80\9c, Ð°Ð»Ðµ Ð¿Ð¾Ð²Ñ\96домленнÑ\8f, Ð½Ð° Ñ\8fке Ð²Ð¸ Ñ\85оÑ\87еÑ\82е Ð²Ñ\96дповÑ\96Ñ\81Ñ\82и,
-        Ð±Ñ\83ло Ð½Ð°Ð´Ñ\96Ñ\81лане Ð½Ðµ Ð²Ð°Ð¼. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ñ\83вÑ\96йдÑ\96Ñ\82Ñ\8c Ð´Ð¾ Ð²Ñ\96дповÑ\96дного Ð¾Ð±Ð»Ñ\96кового Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83,
-        щоб відповісти.
+      wrong_user: Ð\92и Ñ\83вÑ\96йÑ\88ли Ñ\8fк â\80\9e%{user}â\80\9c, Ð°Ð»Ðµ Ð¿Ð¾Ð²Ñ\96домленнÑ\8f, Ð½Ð° Ñ\8fке Ð²Ð°Ñ\81 Ð¿Ð¾Ð¿Ñ\80оÑ\81или
+        Ð²Ñ\96дповÑ\96Ñ\81Ñ\82и, Ð±Ñ\83ло Ð½Ð°Ð´Ñ\96Ñ\81лане Ð½Ðµ Ð²Ð°Ð¼. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ñ\83вÑ\96йдÑ\96Ñ\82Ñ\8c Ð´Ð¾ Ð²Ñ\96дповÑ\96дного Ð¾Ð±Ð»Ñ\96кового
+        запису, щоб відповісти.
     show:
       title: Прочитати
       reply_button: Відповісти
       unread_button: Позначити як непрочитане
       destroy_button: Вилучити
       back: Назад
-      wrong_user: Ð\92и Ñ\83вÑ\96йÑ\88ли Ñ\8fк â\80\9e%{user}â\80\9c, Ð°Ð»Ðµ Ð¿Ð¾Ð²Ñ\96домленнÑ\8f, Ñ\8fке Ð²Ð¸ Ñ\85оÑ\87еÑ\82е прочитати,
+      wrong_user: Ð\92и Ñ\83вÑ\96йÑ\88ли Ñ\8fк â\80\9e%{user}â\80\9c, Ð°Ð»Ðµ Ð¿Ð¾Ð²Ñ\96домленнÑ\8f, Ñ\8fке Ð²Ð°Ñ\81 Ð¿Ð¾Ð¿Ñ\80оÑ\81или прочитати,
         не було надіслане вами, чи призначено для вас. Будь ласка, увійдіть до відповідного
         облікового запису, щоб прочитати його.
     sent_message_summary:
@@ -1921,14 +1967,13 @@ uk:
     new:
       title: Відновлення пароля
       heading: Забули пароль?
-      email address: 'Адреса ел. пошти:'
+      email address: Адреса ел. пошти
       new password button: Вишліть мені новий пароль
       help_text: Введіть адресу вашої електронної пошти, яку ви використовували для
         реєстрації, і ми надішлемо інструкції, як можна відновити ваш пароль.
     create:
-      notice email on way: Шкода, що ви втратили пароль :-( але нічого, скоро прийде
-        лист і ви зможете перевстановити свій пароль.
-      notice email cannot find: На жаль, така адреса не зареєстрована.
+      send_paranoid_instructions: Якщо адреса вашої електронної пошти є в нашій базі,
+        ви отримаєте посилання для відновлення пароля через кілька хвилин.
     edit:
       title: Скидання пароля
       heading: Скидання пароля для %{user}
@@ -1981,8 +2026,8 @@ uk:
     new:
       title: Ласкаво просимо
       heading: Ласкаво просимо
-      email or username: 'Ел. пошта або прізвисько:'
-      password: 'Пароль:'
+      email or username: Ел. пошта або прізвисько
+      password: Пароль
       remember: Запам’ятати мене
       lost password link: Забули пароль?
       login_button: Увійти
@@ -2332,8 +2377,8 @@ uk:
         title: Посібник новачка
         description: Посібник для новачків від спільноти.
       community:
-        title: Форум спільноти
-        description: Місце де можна поспілкуватись про OpenStreetMap.
+        title: Ð\94опомога Ñ\82а Ð¤Ð¾Ñ\80Ñ\83м Ñ\81пÑ\96лÑ\8cноÑ\82и
+        description: Ð\9cÑ\96Ñ\81Ñ\86е Ð´Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ñ\82Ñ\80имаÑ\82и Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ñ\83 Ñ\82а Ð¿Ð¾Ñ\81пÑ\96лкÑ\83ваÑ\82иÑ\81Ñ\8c Ð¿Ñ\80о OpenStreetMap.
       mailing_lists:
         title: Списки розсилки
         description: Поставте запитання або обговоріть цікаві речі у широкому виборі
@@ -2446,6 +2491,7 @@ uk:
           allotments: Сади-городи, дачні ділянки
           pitch: Спортмайданчик
           centre: Спортивний центр
+          beach: Пляж
           reserve: Заповідник
           military: Військова зона
           school: Школа
@@ -2463,7 +2509,9 @@ uk:
           bus_stop: Автобусна зупинка
           stop: Зупинка
           bicycle_shop: Веломагазин
+          bicycle_rental: Прокат велосипедів
           bicycle_parking: Велопарковка
+          bicycle_parking_small: Невелика велопарковка
           toilets: Туалети
     welcome:
       title: Ласкаво просимо!
@@ -2620,8 +2668,8 @@ uk:
       identifiable: ІДЕНТИФІКОВУВАНИЙ
       private: ПРИВАТНИЙ
       trackable: ВІДСТЕЖУВАННИЙ
-      by: 'Автор:'
-      in: у
+      details_with_tags_html: '%{time_ago} від %{user} у %{tags}'
+      details_without_tags_html: '%{user} %{time_ago}'
     index:
       public_traces: Загальнодоступні GPS-треки
       my_gps_traces: Мої GPS-треки
@@ -2722,6 +2770,7 @@ uk:
   oauth_clients:
     new:
       title: Зареєструвати новий застосунок
+      disabled: Реєстрацію програм OAuth 1 вимкнено
     edit:
       title: Змінити дані вашого застосунку
     show:
@@ -2805,6 +2854,7 @@ uk:
       title: Авторизовані застосунки
       application: Застосунок
       permissions: Дозволи
+      last_authorized: Останній авторизований
       no_applications_html: У вас ще немає застосунків авторизованих через %{oauth2}.
     application:
       revoke: Відкликати доступ
@@ -2926,6 +2976,7 @@ uk:
           importer: Відкликати доступ на імпорт
       block_history: Активні блокування
       moderator_history: Створені блокування
+      revoke_all_blocks: Скасувати всі блокування
       comments: Коментарі
       create_block: Заблокувати цього учасника
       activate_user: Активувати цього учасника
@@ -2943,9 +2994,13 @@ uk:
     index:
       title: Учасники
       heading: Учасники
-      showing:
-        one: Сторінка %{page} (%{first_item} з %{items})
-        other: Сторінка %{page} (%{first_item}-%{last_item} з %{items})
+      older: Раніше зареєстровані користувачі
+      newer: Нещодавно зареєстровані користувачі
+      found_users:
+        one: знайдено %{count} користувача
+        few: знайдено %{count} користувачів
+        many: знайдено %{count} користувачів
+        other: 'знайдено '
       summary_html: '%{name} зареєстровано з %{ip_address}, %{date}'
       summary_no_ip_html: '%{name} зареєстровано %{date}'
       confirm: Підтвердити вибір учасників
@@ -3036,6 +3091,18 @@ uk:
       confirm: Ви впевнені, що бажаєте зняти це блокування?
       revoke: Зняти блокування!
       flash: Це блокування було знято.
+    revoke_all:
+      title: Зняти блокування з %{block_on}
+      heading_html: Зняти блокування з %{block_on}
+      empty: '%{name} не має активних блоків.'
+      confirm: Ви впевнені, що бажаєте відкликати %{active_blocks}?
+      active_blocks:
+        one: '%{count} активне блокування'
+        few: '%{count} активні блокування'
+        many: '%{count} активних блокувань'
+        other: ""
+      revoke: Відкликати!
+      flash: Усі активні блокування скасовано.
     helper:
       time_future_html: До закінчення %{time}.
       until_login: Активне доти, доки учасник не здійснить вхід.
@@ -3087,7 +3154,6 @@ uk:
       revoke: Розблокувати!
       confirm: Ви впевнені?
       reason: 'Причина блокування:'
-      back: Показати всі блокування
       revoker: 'Розблокував:'
       needs_view: Учаснику потрібно увійти перед тим, як блокування буде знято.
     block:
@@ -3101,9 +3167,8 @@ uk:
       reason: Причина блокування
       status: Стан
       revoker_name: Розблокував
-      showing_page: Сторінка %{page}
-      next: Наступна →
-      previous: ← Попередня
+      older: Старіші блокування
+      newer: Новіші блокування
   user_mutes:
     index:
       title: Стишені учасники
index 82df5b4fec5f3876da164810f57e668a53daac67..86a8949407e242b427983f136ca813ad49f85699 100644 (file)
@@ -63,6 +63,9 @@ vi:
       messages:
         invalid_email_address: hình như không phải là địa chỉ thư điện tử hợp lệ
         email_address_not_routable: không thể gửi đến
+      models:
+        user_mute:
+          is_already_muted: đã bị tắt tiếng
     models:
       acl: Danh sách Điều khiển Truy cập
       changeset: Bộ thay đổi
@@ -236,6 +239,7 @@ vi:
         reopened_at_by_html: Được %{user} mở lại %{when}
       rss:
         title: Ghi chú OpenStreetMap
+        description_all: Danh sách các ghi chú được báo cáo, bình luận, hoặc đóng
         description_area: Danh sách các ghi chú được mở, bình luận, hoặc đóng trong
           khu vực của bạn [(%{min_lat}|%{min_lon}) – (%{max_lat}|%{max_lon})]
         description_item: Nguồn cấp RSS của ghi chú %{id}
@@ -271,6 +275,8 @@ vi:
         retain_changeset_discussions: Các cuộc thảo luận về bộ thay đổi của bạn (nếu
           có) sẽ được giữ lại.
         retain_email: Địa chỉ thư điện tử của bạn sẽ được giữ lại.
+        recent_editing_html: Không thể xóa tài khoản của bạn vì bạn mới thực hiện
+          sửa đổi gần đây. Có thể xóa tài khoản sau %{time}.
         confirm_delete: Bạn có chắc không?
         cancel: Hủy bỏ
   accounts:
@@ -303,7 +309,16 @@ vi:
       delete_account: Xóa Tài khoản…
     go_public:
       heading: Sửa đổi công khai
+      currently_not_public: Hiện tại các sửa đổi của bạn là vô danh và người ta không
+        thể gửi thư cho bạn hoặc xem vị trí của bạn. Để hiển thị những gì bạn đã sửa
+        đổi và cho phép người ta liên lạc với bạn qua trang mạng này, hãy bấm nút
+        bên dưới.
+      only_public_can_edit: Kể từ khi chuyển đổi sang phiên bản API 0.6, chỉ có những
+        người dùng công cộng mới có thể sửa đổi dữ liệu bản đồ.
       find_out_why: tìm hiểu tại sao
+      email_not_revealed: Địa chỉ thư điện tử của bạn sẽ không được tiết lộ công khai.
+      not_reversible: Không thể hoàn nguyên hành động này. Tất cả mọi người dùng mới
+        hiện ở chế độ công khai theo mặc định.
       make_edits_public_button: Phát hành công khai các sửa đổi của tôi
     update:
       success_confirm_needed: Đã cập nhật thông tin cá nhân thành công. Kiểm tra thư
@@ -312,15 +327,10 @@ vi:
     destroy:
       success: Đã Xóa Tài khoản
   browse:
-    created: Tạo
-    closed: Đóng
-    created_ago_html: Tạo %{time_ago}
-    closed_ago_html: Đóng %{time_ago}
-    created_ago_by_html: Tạo %{time_ago} bởi %{user}
-    closed_ago_by_html: Đóng %{time_ago} bởi %{user}
     deleted_ago_by_html: Xóa %{time_ago} bởi %{user}
     edited_ago_by_html: Sửa đổi %{time_ago} bởi %{user}
     version: Phiên bản
+    redacted_version: Phiên bản Ẩn
     in_changeset: Bộ thay đổi
     anonymous: vô danh
     no_comment: (không miêu tả)
@@ -331,25 +341,11 @@ vi:
       other: '%{count} lối'
     download_xml: Tải về XML
     view_history: Xem Lịch sử
+    view_unredacted_history: Xem Lịch sử Ẩn
     view_details: Xem Chi tiết
+    view_redacted_data: Xem Dữ liệu Ẩn
+    view_redaction_message: Xem Thông điệp Ẩn Dữ liệu
     location: 'Vị trí:'
-    changeset:
-      title: 'Bộ thay đổi: %{id}'
-      belongs_to: Tác giả
-      node: Các nốt (%{count})
-      node_paginated: Các nốt (%{x}–%{y} trên %{count})
-      way: Các lối (%{count})
-      way_paginated: Các lối (%{x}–%{y} trên %{count})
-      relation: Các quan hệ (%{count})
-      relation_paginated: Các quan hệ (%{x}–%{y} trên %{count})
-      hidden_comment_by_html: Nhận xét ẩn của %{user} từ %{time_ago}
-      comment_by_html: Nhận xét của %{user} từ %{time_ago}
-      changesetxml: Bộ thay đổi XML
-      osmchangexml: osmChange XML
-      join_discussion: Đăng nhập để tham gia thảo luận
-      discussion: Thảo luận
-      still_open: Bộ thay đổi đang mở – có thể thảo luận sau khi bộ thay đổi được
-        đóng.
     node:
       title_html: 'Nốt: %{name}'
       history_title_html: 'Lịch sử Nốt: %{name}'
@@ -425,6 +421,15 @@ vi:
       introduction: Nhấn chuột vào bản đồ để tìm những yếu tố lân cận.
       nearby: Yếu tố lân cận
       enclosing: Yếu tố bao gồm
+  old_nodes:
+    not_found:
+      sorry: 'Rất tiếc, không tìm thấy nốt #%{id} phiên bản %{version}.'
+  old_ways:
+    not_found:
+      sorry: 'Rất tiếc, không tìm thấy lối #%{id} phiên bản %{version}.'
+  old_relations:
+    not_found:
+      sorry: 'Rất tiếc, không tìm thấy #%{id} phiên bản %{version}.'
   changesets:
     changeset_paging_nav:
       showing_page: Trang %{page}
@@ -456,6 +461,46 @@ vi:
       feed:
         title: Bộ thay đổi %{id}
         title_comment: Bộ thay đổi %{id} – %{comment}
+        created: Tạo
+        closed: Đóng
+        belongs_to: Tác giả
+    subscribe:
+      heading: Theo dõi cuộc thảo luận về bộ thay đổi sau đây?
+      button: Theo dõi cuộc thảo luận
+    unsubscribe:
+      heading: Ngừng theo dõi cuộc thảo luận về bộ thay đổi sau đây?
+      button: Ngừng theo dõi cuộc thảo luận
+    heading:
+      title: Bộ thay đổi %{id}
+      created_by_html: Được %{link_user} tạo %{created}.
+    no_such_entry:
+      title: Không tìm thấy bộ thay đổi
+      heading: 'Không tìm thấy mục có số: %{id}'
+      body: Rất tiếc, không có bộ thay đổi với số %{id}. Xin hãy kiểm tra chính tả,
+        hoặc có lẽ bạn đã theo một liên kết sai.
+    show:
+      title: 'Bộ thay đổi: %{id}'
+      created: 'Lúc tạo: %{when}'
+      closed: 'Lúc đóng: %{when}'
+      created_ago_html: Tạo %{time_ago}
+      closed_ago_html: Đóng %{time_ago}
+      created_ago_by_html: Tạo %{time_ago} bởi %{user}
+      closed_ago_by_html: Đóng %{time_ago} bởi %{user}
+      discussion: Thảo luận
+      join_discussion: Đăng nhập để tham gia thảo luận
+      still_open: Bộ thay đổi đang mở – có thể thảo luận sau khi bộ thay đổi được
+        đóng.
+      comment_by_html: Nhận xét của %{user} từ %{time_ago}
+      hidden_comment_by_html: Nhận xét ẩn của %{user} từ %{time_ago}
+      changesetxml: Bộ thay đổi XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: Các nốt (%{count})
+      nodes_paginated: Các nốt (%{x}–%{y} trên %{count})
+      ways: Các lối (%{count})
+      ways_paginated: Các lối (%{x}–%{y} trên %{count})
+      relations: Các quan hệ (%{count})
+      relations_paginated: Các quan hệ (%{x}–%{y} trên %{count})
     timeout:
       sorry: Rất tiếc, việc lấy danh sách bộ thay đổi tốn quá nhiều thì giờ.
   changeset_comments:
@@ -517,6 +562,7 @@ vi:
     show:
       title: Nhật ký của %{user} | %{title}
       user_title: Nhật ký của %{user}
+      discussion: Thảo luận
       leave_a_comment: Để lại nhận xét
       login_to_leave_a_comment_html: '%{login_link} để nhận xét'
       login: Đăng nhập
@@ -532,6 +578,7 @@ vi:
       reply_link: Nhắn tin cho tác giả
       comment_count:
         other: '%{count} bình luận'
+      no_comments: Không có bình luận
       edit_link: Sửa đổi mục này
       hide_link: Ẩn mục này
       unhide_link: Bỏ ẩn mục này
@@ -567,20 +614,62 @@ vi:
       comment: Nhận xét
       newer_comments: Các Nhận xét Mới hơn
       older_comments: Các Nhận xét Cũ hơn
+    subscribe:
+      heading: Theo dõi cuộc thảo luận về mục nhật ký sau đây?
+      button: Theo dõi cuộc thảo luận
+    unsubscribe:
+      heading: Ngừng theo dõi cuộc thảo luận về mục nhật ký sau đây?
+      button: Ngừng theo dõi cuộc thảo luận
   doorkeeper:
+    errors:
+      messages:
+        account_selection_required: Máy chủ cấp quyền yêu cầu lựa chọn tài khoản người
+          dùng cuối
+        consent_required: Máy chủ cấp quyền yêu cầu người dùng cuối đồng thuận
+        interaction_required: Máy chủ cấp quyền yêu cầu người dùng cuối tương tác
+        login_required: Máy chủ cấp quyền yêu cầu người dùng cuối xác thực
     flash:
       applications:
         create:
           notice: Ứng dụng được đăng ký.
+    openid_connect:
+      errors:
+        messages:
+          auth_time_from_resource_owner_not_configured: Lỗi do Doorkeeper::OpenidConnect.configure.auth_time_from_resource_owner
+            thiếu cấu hình.
+          reauthenticate_resource_owner_not_configured: Lỗi do Doorkeeper::OpenidConnect.configure.reauthenticate_resource_owner
+            thiếu cấu hình.
+          resource_owner_from_access_token_not_configured: Lỗi do Doorkeeper::OpenidConnect.configure.resource_owner_from_access_token
+            thiếu cấu hình.
+          select_account_for_resource_owner_not_configured: Lỗi do Doorkeeper::OpenidConnect.configure.select_account_for_resource_owner
+            thiếu cấu hình.
+          subject_not_configured: Không thể tạo dấu hiệu ID do Doorkeeper::OpenidConnect.configure.subject
+            thiếu cấu hình.
+    scopes:
+      address: Xem địa chỉ thực của bạn
+      email: Xem địa chỉ thư điện tử của bạn
+      openid: Xác thực tài khoản của bạn
+      phone: Xem số điện thoại của bạn
+      profile: Xem thông tin hồ sơ của bạn
   errors:
     contact:
+      contact_url_title: Giải thích các phương cách liên lạc
       contact: liên lạc
+      contact_the_community_html: Xin vui lòng %{contact_link} cộng đồng OpenStreetMap
+        nếu bạn gặp liên kết hỏng hoặc lỗi phần mềm. Hãy ghi nhớ địa chỉ URL chính
+        xác của yêu cầu máy chủ.
     forbidden:
       title: Cấm
+      description: Tác vụ đuợc yêu cầu trên máy chủ OpenStreetMap chỉ khả dụng đối
+        với các quản trị viên (HTTP 403)
     internal_server_error:
       title: Lỗi ứng dụng
+      description: Máy chủ OpenStreetMap gặp phải tình trạng không mong đợi khiến
+        máy chủ không thể thực hiện yêu cầu (HTTP 500)
     not_found:
       title: Không tìm thấy tập tin
+      description: Không thể tìm thấy thao tác tập tin/thư mục/API có tên đó trên
+        máy chủ OpenStreetMap (HTTP 404)
   friendships:
     make_friend:
       heading: Kết bạn với %{user}?
@@ -1321,6 +1410,7 @@ vi:
       title: 'Vấn đề %{status} #%{issue_id}'
       reports:
         other: '%{count} báo cáo'
+      no_reports: Không có báo cáo
       report_created_at_html: Báo cáo lần đầu tiên vào %{datetime}
       last_resolved_at_html: Giải quyết lần cuối cùng vào %{datetime}
       last_updated_at_html: Cập nhật lần cuối cùng vào %{datetime} bởi %{displayname}
@@ -1412,11 +1502,10 @@ vi:
     intro_text: OpenStreetMap là bản đồ thế giới do những người như bạn xây dựng và
       cho phép sử dụng thoải mái theo một giấy phép nguồn mở.
     intro_2_create_account: Mở tài khoản mới
-    hosting_partners_html: Dịch vụ lưu trữ nhờ sự hỗ trợ của %{ucl}, %{fastly}, %{bytemark},
+    hosting_partners_2024_html: Dịch vụ lưu trữ nhờ sự hỗ trợ của %{fastly}, %{corpmembers},
       và %{partners} khác.
-    partners_ucl: UCL
     partners_fastly: Fastly
-    partners_bytemark: Bytemark Hosting
+    partners_corpmembers: các thành viên công ty Quỹ OSM
     partners_partners: các công ty bảo trợ
     tou: Điều khoản sử dụng
     osm_offline: Cơ sở dữ liệu OpenStreetMap đang ngoại tuyến trong lúc đang thực
@@ -1438,6 +1527,7 @@ vi:
     more: Thêm
   user_mailer:
     diary_comment_notification:
+      description: 'Mục Nhật ký OpenStreetMap #%{id}'
       subject: '[OpenStreetMap] %{user} đã bình luận về mục nhật ký'
       hi: Chào %{to_user},
       header: '%{from_user} đã bình luận về mục nhật ký gần đây tại OpenStreetMap
@@ -1448,16 +1538,18 @@ vi:
         hoặc nhắn tin cho tác giả tại %{replyurl}
       footer_html: Bạn cũng có thể đọc bình luận tại %{readurl}, bình luận tại %{commenturl},
         hoặc nhắn tin cho tác giả tại %{replyurl}
+      footer_unsubscribe: Bạn có thể ngừng theo dõi cuộc thảo luận tại %{unsubscribeurl}
+      footer_unsubscribe_html: Bạn có thể ngừng theo dõi cuộc thảo luận tại %{unsubscribeurl}
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: Chào %{to_user},
       header: '%{from_user} đã gửi thư cho bạn dùng OpenStreetMap có tiêu đề %{subject}:'
       header_html: '%{from_user} đã gửi thư cho bạn dùng OpenStreetMap có tiêu đề
         %{subject}:'
-      footer: Bạn cũng có thể đọc tin nhắn này tại %{readurl} và có thể nhắn tin cho
+      footer: Bạn cũng có thể đọc thư này tại %{readurl} và có thể nhắn tin cho tác
+        giả tại %{replyurl}
+      footer_html: Bạn cũng có thể đọc thư này tại %{readurl} và có thể nhắn tin cho
         tác giả tại %{replyurl}
-      footer_html: Bạn cũng có thể đọc tin nhắn này tại %{readurl} và có thể nhắn
-        tin cho tác giả tại %{replyurl}
     friendship_notification:
       hi: Chào %{to_user},
       subject: '[OpenStreetMap] %{user} đã kết bạn với bạn'
@@ -1482,6 +1574,8 @@ vi:
       hi: Chào %{to_user},
       loaded:
         other: tải thành công với %{trace_points} điểm trên tổng số %{count} điểm.
+      all_your_traces_html: Bạn có thể truy cập tất cả các tuyến GPX mà bạn đã tải
+        lên thành công tại %{url}.
       subject: '[OpenStreetMap] Nhập GPX thành công'
     signup_confirm:
       subject: '[OpenStreetMap] Chào mừng bạn đã tham gia OpenStreetMap'
@@ -1507,6 +1601,7 @@ vi:
       click_the_link: Nếu bạn là người đó, xin hãy nhấn chuột vào liên kết ở dưới
         để đặt lại mật khẩu.
     note_comment_notification:
+      description: 'Ghi chú OpenStreetMap #%{id}'
       anonymous: Người dùng vô danh
       greeting: Chào bạn,
       commented:
@@ -1546,6 +1641,7 @@ vi:
       details: Xem chi tiết về ghi chú tại %{url}.
       details_html: Xem chi tiết về ghi chú tại %{url}.
     changeset_comment_notification:
+      description: 'Bộ thay đổi OpenStreetMap #%{id}'
       hi: Chào %{to_user},
       greeting: Chào bạn,
       commented:
@@ -1566,10 +1662,9 @@ vi:
         partial_changeset_without_comment: không có lời bình luận
       details: Xem chi tiết về bộ thay đổi tại %{url}.
       details_html: Xem chi tiết về bộ thay đổi tại %{url}.
-      unsubscribe: Để ngừng nhận các thông báo về bộ thay đổi này, mở %{url} và bấm
-        “Không theo dõi”.
-      unsubscribe_html: Để ngừng nhận các thông báo về bộ thay đổi này, mở %{url}
-        và bấm “Không theo dõi”.
+      unsubscribe: Bạn có thể ngừng nhận các thông báo về bộ thay đổi này tại %{url}.
+      unsubscribe_html: Bạn có thể ngừng nhận các thông báo về bộ thay đổi này tại
+        %{url}.
   confirmations:
     confirm:
       heading: Hãy kiểm tra hộp thư điện tử!
@@ -1581,6 +1676,7 @@ vi:
       success: Đã xác nhận tài khoản của bạn. Cám ơn bạn đã mở tài khoản!
       already active: Tài khoản này đã được xác nhận rồi.
       unknown token: Dấu hiệu xác nhận này đã hết hạn hoặc không tồn tại.
+      resend_html: Nếu bạn cần chúng tôi gửi lại thư điện tử xác nhận, %{reconfirm_link}.
       click_here: nhấn chuột tại đây
     confirm_resend:
       failure: Không tìm thấy người dùng %{name}.
@@ -1617,6 +1713,7 @@ vi:
       read_button: Đánh dấu là đã đọc
       reply_button: Trả lời
       destroy_button: Xóa
+      unmute_button: Chuyển vào Hộp thư đến
     new:
       title: Gửi thư
       send_message_to_html: Gửi thư mới cho %{name}
@@ -1636,6 +1733,10 @@ vi:
       no_sent_messages_html: Bạn chưa gửi thư cho người nào. Hãy thử liên lạc với
         %{people_mapping_nearby_link}?
       people_mapping_nearby: những người ở gần
+    muted:
+      title: Thư bị Tắt tiếng
+      messages:
+        other: Bạn có %{count} thư bị tắt tiếng
     reply:
       wrong_user: Bạn đã đăng nhập dùng tài khoản “%{user}” nhưng vừa yêu cầu trả
         lời một thư không được gửi đến bạn. Xin hãy đăng nhập với nhận diện chính
@@ -1654,9 +1755,13 @@ vi:
     heading:
       my_inbox: Hộp thư đến
       my_outbox: Hộp thư gửi
+      muted_messages: Thư bị Tắt tiếng
     mark:
       as_read: Thư đã đọc
       as_unread: Thư chưa đọc
+    unmute:
+      notice: Thư đã được chuyển vào Hộp thư đến
+      error: Không thể chuyển thư vào Hộp thư đến.
     destroy:
       destroyed: Đã xóa thư
   passwords:
@@ -1668,9 +1773,9 @@ vi:
       help_text: Nhập địa chỉ thư điện tử mà bạn đã dùng để mở tài khoản, rồi chúng
         tôi sẽ gửi liên kết cho địa chỉ đó để cho bạn đặt lại mật khẩu.
     create:
-      notice email on way: Đáng tiếc là bạn quên nó. :-( May là thư điện tử sắp tới
-        để bạn đặt nó lại.
-      notice email cannot find: Rất tiếc, không tìm thấy địa chỉ thư điện tử.
+      send_paranoid_instructions: Nếu địa chỉ thư điện tử của bạn tồn tại trong cơ
+        sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại
+        địa chỉ thư điện tử sau vài phút nữa.
     edit:
       title: Đặt lại mật khẩu
       heading: Đặt lại Mật khẩu của %{user}
@@ -1678,6 +1783,7 @@ vi:
       flash token bad: Không tìm thấy dấu hiệu đó. Có lẽ kiểm tra URL?
     update:
       flash changed: Mật khẩu của bạn đã được thay đổi.
+      flash token bad: Không tìm thấy dấu hiệu đó. Có lẽ kiểm tra URL?
   preferences:
     show:
       title: Tùy chỉnh
@@ -1935,6 +2041,7 @@ vi:
         contributors_nz_linz_data_service: Dịch vụ Dữ liệu LINZ
         contributors_nz_cc_by: CC BY 4.0
         contributors_rs_serbia: Serbia
+        contributors_rs_open_data_portal: Cổng Dữ liệu Mở Quốc gia
         contributors_si_slovenia: Slovenia
         contributors_es_spain: Tây Ban Nha
         contributors_es_cc_by: CC BY 4.0
@@ -2198,7 +2305,10 @@ vi:
         tag: Thẻ
       rules:
         title: Quy định!
+        imports: Nhập Dữ liệu
+        automated_edits: Sửa đổi Tự động
       start_mapping: Bắt đầu Đóng góp
+      continue_authorization: Tiếp tục Cấp quyền
       add_a_note:
         title: Không có Thì giờ Sửa đổi? Thêm một Ghi chú!
         para_1: Nếu bạn chỉ muốn sửa một chi tiết nhỏ và không có thì giờ tập sửa
@@ -2298,14 +2408,18 @@ vi:
       identifiable: NHẬN RA ĐƯỢC
       private: RIÊNG
       trackable: THEO DÕI ĐƯỢC
-      by: bởi
-      in: trong
+      details_with_tags_html: '%{time_ago} bởi %{user} trong %{tags}'
+      details_without_tags_html: '%{time_ago} bởi %{user}'
     index:
       public_traces: Tuyến đường GPS công khai
       my_gps_traces: Tuyến GPS của Tôi
       public_traces_from: Tuyến đường GPS công khai của %{user}
       description: Xem những tuyến đường GPS được tải lên gần đây
       tagged_with: ' có thẻ %{tags}'
+      empty_title: Chưa có gì ở đây
+      empty_upload_html: '%{upload_link} hoặc tìm hiểu thêm về việc tạo tuyến đường
+        GPS tại %{wiki_link}.'
+      upload_new: Tải lên tuyến đường mới
       wiki_page: trang wiki
       upload_trace: Tải lên tuyến đường
       all_traces: Tất cả các Tuyến đường
@@ -2347,6 +2461,7 @@ vi:
       oauth1_settings: Thiết lập OAuth 1
       oauth2_applications: Ứng dụng OAuth 2
       oauth2_authorizations: Ủy quyền OAuth 2
+      muted_users: Người dùng bị Tắt tiếng
   oauth:
     authorize:
       title: Cho phép truy cập tài khoản của bạn
@@ -2384,11 +2499,13 @@ vi:
       read_gpx: Đọc tuyến đường GPS riêng tư
       write_gpx: Tải lên tuyến đường GPS
       write_notes: Thay đổi ghi chú
+      write_redactions: Ẩn dữ liệu bản đồ
       read_email: Đọc địa chỉ thư điện tử của người dùng
       skip_authorization: Tự động chấp nhận đơn xin
   oauth_clients:
     new:
       title: Đăng ký chương trình mới
+      disabled: Đã tắt chức năng đăng ký ứng dụng OAuth 1
     edit:
       title: Sửa đổi chương trình của bạn
     show:
@@ -2472,6 +2589,7 @@ vi:
       title: Ứng dụng tôi cho phép
       application: Ứng dụng
       permissions: Quyền
+      last_authorized: Cấp quyền Lần cuối
       no_applications_html: Bạn chưa cấp phép cho ứng dụng %{oauth2} nào.
     application:
       revoke: Rút quyền Truy cập
@@ -2559,6 +2677,8 @@ vi:
       my_dashboard: Bảng điều khiển
       blocks on me: Tác vụ Cấm Tôi
       blocks by me: Tác vụ Cấm bởi Tôi
+      create_mute: Tắt tiếng Người dùng Này
+      destroy_mute: Bật tiếng Người dùng Này
       edit_profile: Sửa đổi Hồ sơ
       send message: Gửi Thư
       diary: Nhật ký
@@ -2579,14 +2699,18 @@ vi:
       role:
         administrator: Người dùng này là quản lý viên
         moderator: Người dùng này là điều hành viên
+        importer: Người dùng này là người nhập dữ liệu
         grant:
           administrator: Cấp quyền quản lý viên
           moderator: Cấp quyền điều hành viên
+          importer: Cấp quyền truy cập cho người nhập dữ liệu
         revoke:
           administrator: Rút quyền quản lý viên
           moderator: Rút quyền điều hành viên
+          importer: Rút quyền truy cập của người nhập dữ liệu
       block_history: Tác vụ Cấm Người Này
       moderator_history: Tác vụ Cấm bởi Người Này
+      revoke_all_blocks: Bỏ cấm toàn bộ
       comments: Bình luận
       create_block: Cấm Người dùng Này
       activate_user: Kích hoạt Tài khoản Này
@@ -2604,9 +2728,10 @@ vi:
     index:
       title: Người dùng
       heading: Người dùng
-      showing:
-        one: Trang %{page} (%{first_item} trên tổng %{items})
-        other: Trang %{page} (%{first_item}–%{last_item} trên tổng %{items})
+      older: Người dùng Lâu hơn
+      newer: Người dùng Mới hơn
+      found_users:
+        other: Đã tìm thấy %{count} người dùng
       summary_html: '%{name} do %{ip_address} mở ngày %{date}'
       summary_no_ip_html: '%{name} mở ngày %{date}'
       confirm: Xác nhận những Người dùng Được chọn
@@ -2697,6 +2822,15 @@ vi:
       confirm: Bạn có chắc muốn bỏ cấm người này?
       revoke: Bỏ cấm!
       flash: Đã bỏ cấm.
+    revoke_all:
+      title: Bỏ cấm tất cả vào %{block_on}
+      heading_html: Bỏ cấm tất cả vào %{block_on}
+      empty: '%{name} hiện không được cấm.'
+      confirm: Bạn có chắc chắn muốn bỏ %{active_blocks}?
+      active_blocks:
+        other: '%{count} tác vụ cấm hiện hành'
+      revoke: Bỏ cấm!
+      flash: Đã bỏ tất cả các tác vụ cấm hiện hành.
     helper:
       time_future_html: Hết hạn %{time}.
       until_login: Có hiệu lực cho đến khi người dùng đăng nhập.
@@ -2733,7 +2867,6 @@ vi:
       revoke: Bỏ cấm!
       confirm: Bạn có chắc không?
       reason: 'Lý do cấm:'
-      back: Xem tất cả tác vụ cấm
       revoker: 'Người bỏ cấm:'
       needs_view: Người dùng cần phải đăng nhập trước khi bỏ cấm được.
     block:
@@ -2747,9 +2880,37 @@ vi:
       reason: Lý do cấm
       status: Trạng thái
       revoker_name: Người bỏ cấm
-      showing_page: Trang %{page}
-      next: Sau »
-      previous: « Trước
+      older: Tác vụ Cấm Cũ hơn
+      newer: Tác vụ Cấm Mới hơn
+    navigation:
+      all_blocks: Tất cả các Tác vụ Cấm
+      blocks_on_me: Tác vụ Cấm Tôi
+      blocks_on_user: Tác vụ Cấm %{user}
+      blocks_by_me: Tác vụ Cấm bởi Tôi
+      blocks_by_user: Tác vụ Cấm bởi %{user}
+  user_mutes:
+    index:
+      title: Người dùng bị Tắt tiếng
+      my_muted_users: Người dùng Tôi đã Tắt tiếng
+      you_have_muted_n_users:
+        other: Bạn đã tắt tiếng %{count} người dùng
+      user_mute_explainer: Các thư từ người dùng bị tắt tiếng được chuyển sang Hộp
+        thư điện riêng và bạn sẽ không nhận thông báo qua thư điện tử.
+      user_mute_admins_and_moderators: Bạn có thể tắt tiếng các Quản trị viên và Điều
+        phối viên nhưng các thông điệp của họ sẽ không bị tắt tiếng.
+      table:
+        thead:
+          muted_user: Người dùng bị Tắt tiếng
+          actions: Tác vụ
+        tbody:
+          unmute: Bật tiếng
+          send_message: Gửi thư
+    create:
+      notice: Bạn đã tắt tiếng %{name}.
+      error: Không thể tắt tiếng %{name}. %{full_message}.
+    destroy:
+      notice: Bạn đã bật tiếng %{name}.
+      error: Không thể bật tiếng người dùng. Vui lòng thử lại.
   notes:
     index:
       title: Các ghi chú do %{user} lưu hoặc bình luận
index 47efe981f34b9a7fe0e278eb1bb71dea255b328c..5dfe084d52ac7444421bdde516507a9822b5857f 100644 (file)
@@ -273,10 +273,6 @@ xmf:
     destroy:
       success: ანგარიშიქ დილასჷ.
   browse:
-    created: აკიქიმინუ
-    closed: კილერი
-    created_ago_html: გიჭყჷ %{time_ago}
-    closed_ago_html: გიჭყჷ %{time_ago}
     version: ვერსია
     in_changeset: თირაფეფიშ პაკეტი
     anonymous: ანონიმი
@@ -292,21 +288,6 @@ xmf:
     view_history: ისტორიაშ ძირაფა
     view_details: დეტალეფიშ ძირაფა
     location: ორენიː
-    changeset:
-      title: 'თირაფეფიშ პაკეტი: %{id}'
-      belongs_to: ავტორი
-      node: ჭურჭულეფი (%{count})
-      node_paginated: ჭურჭულეფი (%{x}-%{y} %{count}-შე)
-      way: ღოზეფი (%{count})
-      way_paginated: ღოზეფი (%{x}-%{y} %{count}-შე)
-      relation: ურთიართობეფი (%{count})
-      relation_paginated: ურთიართობეფი (%{x}-%{y} %{count}-შე)
-      changesetxml: თირუეფიშ პაკეტიშ XML
-      osmchangexml: osmChange XML
-      join_discussion: გემშართით სისტემაშა, თიშენ ნამჷ-და, სხუნუას ქაკათათინ
-      discussion: სხუნუა
-      still_open: თირუეფიშ პაკეტი დიო ღილე რე. სხუნუა ხემიოჭირინაფუ იჸი, მუჭო თირუეფიშ
-        პაკეტი დიკილუნ.
     node:
       title_html: 'ჭურჭული: %{name}'
       history_title_html: 'ჭურჭულიშ ისტორია: %{name}'
@@ -412,6 +393,26 @@ xmf:
       feed:
         title: თირუეფიშ პაკეტი %{id}
         title_comment: თირუეფიშ პაკეტი %{id} - %{comment}
+        created: აკიქიმინუ
+        closed: კილერი
+        belongs_to: ავტორი
+    show:
+      title: 'თირაფეფიშ პაკეტი: %{id}'
+      created_ago_html: გიჭყჷ %{time_ago}
+      closed_ago_html: გიჭყჷ %{time_ago}
+      discussion: სხუნუა
+      join_discussion: გემშართით სისტემაშა, თიშენ ნამჷ-და, სხუნუას ქაკათათინ
+      still_open: თირუეფიშ პაკეტი დიო ღილე რე. სხუნუა ხემიოჭირინაფუ იჸი, მუჭო თირუეფიშ
+        პაკეტი დიკილუნ.
+      changesetxml: თირუეფიშ პაკეტიშ XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: ჭურჭულეფი (%{count})
+      nodes_paginated: ჭურჭულეფი (%{x}-%{y} %{count}-შე)
+      ways: ღოზეფი (%{count})
+      ways_paginated: ღოზეფი (%{x}-%{y} %{count}-შე)
+      relations: ურთიართობეფი (%{count})
+      relations_paginated: ურთიართობეფი (%{x}-%{y} %{count}-შე)
     timeout:
       sorry: სანარღოთ, თირუეფიშ პაკეტეფიშ ერკებული, ნამუთ თქვა მითხითჷნ, ძალამ დიდი
         ბორჯი ოკო გიშაღალარო.
index d93073817e44a272f324e29ce279394e390ae650..d366c22a38842cc75b9e318ec0c0604ccca427ed 100644 (file)
@@ -65,8 +65,6 @@ yi:
       show:
         cancel: אַנולירן
   browse:
-    created: געשאַפֿן
-    closed: געשלאסן
     version: ווערסיע
     anonymous: אַנאנים
     no_comment: (קיין הערות)
@@ -78,6 +76,10 @@ yi:
   changesets:
     changeset_paging_nav:
       showing_page: בלאַט %{page}
+    index:
+      feed:
+        created: געשאַפֿן
+        closed: געשלאסן
   geocoder:
     search_osm_nominatim:
       prefix:
@@ -153,9 +155,6 @@ yi:
       confirm: באַשטעטיקן
     revoke:
       confirm: באַשטעטיקן
-  user_blocks:
-    blocks:
-      showing_page: בלאַט %{page}
   notes:
     show:
       hide: באַהאַלטן
index 2fe9875a2eee428c72f1fde8fc0bebd03ea14be7..25a4773a07dfb3900ed44f59a3a6f2a2e42f22d9 100644 (file)
@@ -378,12 +378,6 @@ zh-CN:
     destroy:
       success: 账户已删除。
   browse:
-    created: 创建于
-    closed: 关闭于
-    created_ago_html: 创建于 %{time_ago}
-    closed_ago_html: 关闭于 %{time_ago}
-    created_ago_by_html: 由 %{user} 创建于 %{time_ago}
-    closed_ago_by_html: 由 %{user} 关闭于 %{time_ago}
     deleted_ago_by_html: 由 %{user} 删除于 %{time_ago}
     edited_ago_by_html: 由%{user} 编辑于 %{time_ago}
     version: 版本
@@ -401,22 +395,6 @@ zh-CN:
     view_history: 查看历史
     view_details: 查看详情
     location: 位置:
-    changeset:
-      title: 变更集:%{id}
-      belongs_to: 作者
-      node: 节点 (%{count})
-      node_paginated: 节点 (%{x}-%{y},共 %{count})
-      way: 路径 (%{count})
-      way_paginated: 路径 (%{x}-%{y},共 %{count})
-      relation: 关系 (%{count})
-      relation_paginated: 关系 (%{x}-%{y},共 %{count})
-      hidden_comment_by_html: '%{user} 于 %{time_ago} 的隐藏评论'
-      comment_by_html: '%{user} 于 %{time_ago} 的评论'
-      changesetxml: 变更集 XML
-      osmchangexml: osmChange XML
-      join_discussion: 登录以加入讨论
-      discussion: 讨论
-      still_open: 变更集依然开放——一旦变更集关闭讨论将开放。
     node:
       title_html: 节点:%{name}
       history_title_html: 节点历史:%{name}
@@ -529,6 +507,42 @@ zh-CN:
       feed:
         title: 变更集 %{id}
         title_comment: 变更集 %{id} - %{comment}
+        created: 创建于
+        closed: 关闭于
+        belongs_to: 作者
+    subscribe:
+      heading: 订阅以下变更集讨论吗?
+      button: 订阅讨论
+    unsubscribe:
+      heading: 退订以下变更集讨论吗?
+      button: 退订讨论
+    heading:
+      title: 变更集 %{id}
+      created_by_html: 由 %{link_user} 在 %{created} 创建。
+    no_such_entry:
+      title: 无此变更集
+      heading: 找不到ID为%{id}的文章
+      body: 对不起,没有ID为 %{id} 的变更集。请检查您的拼写,或者可能是点击了错误的链接。
+    show:
+      title: 变更集:%{id}
+      created_ago_html: 创建于 %{time_ago}
+      closed_ago_html: 关闭于 %{time_ago}
+      created_ago_by_html: 由 %{user} 创建于 %{time_ago}
+      closed_ago_by_html: 由 %{user} 关闭于 %{time_ago}
+      discussion: 讨论
+      join_discussion: 登录以加入讨论
+      still_open: 变更集依然开放——一旦变更集关闭讨论将开放。
+      comment_by_html: '%{user} 于 %{time_ago} 的评论'
+      hidden_comment_by_html: '%{user} 于 %{time_ago} 的隐藏评论'
+      changesetxml: 变更集 XML
+      osmchangexml: osmChange XML
+    paging_nav:
+      nodes: 节点 (%{count})
+      nodes_paginated: 节点 (%{x}-%{y},共 %{count})
+      ways: 路径 (%{count})
+      ways_paginated: 路径 (%{x}-%{y},共 %{count})
+      relations: 关系 (%{count})
+      relations_paginated: 关系 (%{x}-%{y},共 %{count})
     timeout:
       sorry: 抱歉,您所请求的变更集列表检索时间过长。
   changeset_comments:
@@ -640,6 +654,12 @@ zh-CN:
       comment: 评论
       newer_comments: 较新评论
       older_comments: 较旧评论
+    subscribe:
+      heading: 订阅以下日记讨论吗?
+      button: 订阅讨论
+    unsubscribe:
+      heading: 退订以下日记讨论吗?
+      button: 退订讨论
   doorkeeper:
     errors:
       messages:
@@ -1600,10 +1620,7 @@ zh-CN:
     intro_header: 欢迎访问 OpenStreetMap!
     intro_text: OpenStreetMap 是一个世界地图,由像您一样的人们所构筑,可依据开放许可协议自由使用。
     intro_2_create_account: 创建用户账户
-    hosting_partners_html: 主机由%{ucl}、%{fastly}、%{bytemark},以及其他%{partners}所支持。
-    partners_ucl: 伦敦大学学院
     partners_fastly: Fastly
-    partners_bytemark: Bytemark主机
     partners_partners: 合作伙伴
     tou: 使用条款
     osm_offline: 由于正在进行基本的数据库维护工作,OpenStreetMap 数据库目前处于脱机状态。
@@ -1623,12 +1640,15 @@ zh-CN:
     more: 更多
   user_mailer:
     diary_comment_notification:
+      description: 'OpenStreetMap 日记 #%{id}'
       subject: '[OpenStreetMap] %{user} 在日记篇目留下了评论'
       hi: 您好,%{to_user}:
       header: '%{from_user} 评论了主题为 %{subject} 的 OpenStreetMap 日记文章:'
       header_html: '%{from_user} 评论了主题为 %{subject} 的 OpenStreetMap 日记文章:'
       footer: 您也可以通过%{readurl}来读取评论,并且在%{commenturl}来撰写评论或者通过%{replyurl}向作者发送消息
       footer_html: 您也可以通过%{readurl}查看评论,并在%{commenturl}撰写评论或通过%{replyurl}向作者发送消息
+      footer_unsubscribe: 您可访问%{unsubscribeurl}以从该讨论中退订。
+      footer_unsubscribe_html: 您可访问%{unsubscribeurl}以从该讨论中退订。
     message_notification:
       subject: '[OpenStreetMap] %{message_title}'
       hi: 您好,%{to_user}:
@@ -1675,6 +1695,7 @@ zh-CN:
       hopefully_you: 某人(可能是您)已要求重置该电子邮件地址上的 openstreetmap.org 帐户密码。
       click_the_link: 如果这是您,请点击下面的链接重置您的密码。
     note_comment_notification:
+      description: 'OpenStreetMap 注记 #%{id}'
       anonymous: 匿名用户
       greeting: 您好,
       commented:
@@ -1701,6 +1722,7 @@ zh-CN:
       details: 更多关于笔记的详细信息可以在%{url}找到。
       details_html: 更多关于笔记的详细信息可以在%{url}找到。
     changeset_comment_notification:
+      description: 'OpenStreetMap 变更集 #%{id}'
       hi: 您好,%{to_user}:
       greeting: 您好,
       commented:
@@ -1715,8 +1737,8 @@ zh-CN:
         partial_changeset_without_comment: 没有评论
       details: 更多关于变更集的详细信息可以在 %{url} 找到。
       details_html: 更多有关变更集的详细信息,请参见 %{url}。
-      unsubscribe: 要从该变更集中退订,请访问%{url},并点击“退订”
-      unsubscribe_html: 要从该变更集中退订,请访问%{url},并点击“退订”
+      unsubscribe: 您可访问%{url}以从该变更集中退订
+      unsubscribe_html: 您可访问%{url}以从该变更集中退订
   confirmations:
     confirm:
       heading: 检查您的电子邮件!
@@ -1815,9 +1837,6 @@ zh-CN:
       email address: 电子邮件地址
       new password button: 重置密码
       help_text: 输入您的电子邮件地址来注册,我们会寄出链接给它,这样您就可以用它来重置密码。
-    create:
-      notice email on way: 很遗憾您遗失了密码:-(不过一封电子邮件已经发往您的邮箱,您很快就可以重置密码了。
-      notice email cannot find: 对不起,无法找到邮箱。
     edit:
       title: 重置密码
       heading: 重置%{user}的密码
@@ -1887,7 +1906,7 @@ zh-CN:
           title: 使用Google登录
           alt: 使用Google OpenID登录
         facebook:
-          title: 使用脸书登录
+          title: 使用Facebook登录
           alt: 使用Facebook账户登录
         microsoft:
           title: 使用Microsoft登录
@@ -2397,8 +2416,6 @@ zh-CN:
       identifiable: 可识别
       private: 私有
       trackable: 可追踪
-      by: 由
-      in: 使用
     index:
       public_traces: 公开GPS轨迹
       my_gps_traces: 我的 GPS 轨迹
@@ -2681,9 +2698,6 @@ zh-CN:
     index:
       title: 用户
       heading: 用户
-      showing:
-        one: '%{page} 页(%{items} 的第 %{first_item} 页)'
-        other: '%{page} 页(%{items} 的第 %{first_item} 至 %{last_item} 页)'
       summary_html: '%{name}在%{date}从%{ip_address}创建'
       summary_no_ip_html: '%{name} 创建于 %{date}'
       confirm: 确认所选用户
@@ -2812,7 +2826,6 @@ zh-CN:
       revoke: 撤销!
       confirm: 您确定吗?
       reason: 封禁的原因:
-      back: 查看所有封禁
       revoker: 撤销者:
       needs_view: 用户需要在该封禁清除前登录。
     block:
@@ -2826,9 +2839,6 @@ zh-CN:
       reason: 封禁的原因
       status: 状态
       revoker_name: 撤销者
-      showing_page: 第 %{page} 页
-      next: 下一页 »
-      previous: « 上一页
   user_mutes:
     index:
       title: 已忽视用户
index e7bcfe94977a7527cb2ca6ae4891b724f11c90e2..0f5b241bf5872c8923b16d1711edfa26066ed05b 100644 (file)
@@ -285,11 +285,6 @@ zh-HK:
     view_history: 檢視歷史
     view_details: 檢視詳細資料
     location: 位置:
-    changeset:
-      title: 變更集:%{id}
-      belongs_to: 製作者
-      changesetxml: 變更集XML
-      osmchangexml: osmChange格式XML
     relation_member:
       type:
         node: 節點
@@ -341,6 +336,11 @@ zh-HK:
       load_more: 載入更多
       feed:
         title: 變更集 %{id}
+        belongs_to: 製作者
+    show:
+      title: 變更集:%{id}
+      changesetxml: 變更集XML
+      osmchangexml: osmChange格式XML
   dashboards:
     show:
       nearby users: 其他附近的用戶
index 32f48f4216bfd72c70d0c29c5e968bd254a8d658..7bde20bedb302f3c8c98b7f11b8028afdfa42e46 100644 (file)
@@ -342,15 +342,10 @@ zh-TW:
     destroy:
       success: 帳號已刪除。
   browse:
-    created: 建立於
-    closed: 關閉於
-    created_ago_html: '%{time_ago}建立'
-    closed_ago_html: '%{time_ago}關閉'
-    created_ago_by_html: 由%{user}%{time_ago}建立
-    closed_ago_by_html: 由%{user}%{time_ago}關閉
     deleted_ago_by_html: 由%{user}%{time_ago}刪除
     edited_ago_by_html: 由%{user}%{time_ago}編輯
     version: 版本
+    redacted_version: 編修版本
     in_changeset: 變更集
     anonymous: 匿名
     no_comment: (沒有評論)
@@ -363,24 +358,11 @@ zh-TW:
       other: '%{count} 條路徑'
     download_xml: 下載 XML
     view_history: 檢視歷史
+    view_unredacted_history: 查看未編修的歷史
     view_details: 檢視詳細資料
+    view_redacted_data: 查看編修資料
+    view_redaction_message: 查看編修訊息
     location: 位置:
-    changeset:
-      title: 變更集:%{id}
-      belongs_to: 作者
-      node: 節點 (共 %{count} 項)
-      node_paginated: 節點 (共 %{count} 項中的第 %{x}-%{y} 項)
-      way: 路徑 (共 %{count} 項)
-      way_paginated: 路線 (%{count} 的 %{x}-%{y})
-      relation: 關聯 (%{count})
-      relation_paginated: 關聯 (%{count} 的 %{x}-%{y})
-      hidden_comment_by_html: '%{user}%{time_ago}隱藏評論'
-      comment_by_html: 來自%{user}%{time_ago}的評論
-      changesetxml: 變更集 XML
-      osmchangexml: osmChange 格式 XML
-      join_discussion: 登入以參加討論
-      discussion: 討論
-      still_open: 變更集仍為開啟 - 討論要在變更集關閉後才會開啟。
     node:
       title_html: 節點:%{name}
       history_title_html: 節點歷史:%{name}
@@ -495,6 +477,9 @@ zh-TW:
       feed:
         title: 變更集 %{id}
         title_comment: 變更集 %{id} - %{comment}
+        created: 建立於
+        closed: 關閉於
+        belongs_to: 作者
     subscribe:
       heading: 訂閱以下變更集討論?
       button: 訂閱討論
@@ -508,6 +493,28 @@ zh-TW:
       title: 沒有這樣的變更集
       heading: 沒有 id 為 %{id} 的項目
       body: 抱歉,沒有 id 為 %{id} 的變更集。請檢查您的拼字,或者可能是您按到錯誤的連結。
+    show:
+      title: 變更集:%{id}
+      created: 建立於:%{when}
+      closed: 關閉於:%{when}
+      created_ago_html: '%{time_ago}建立'
+      closed_ago_html: '%{time_ago}關閉'
+      created_ago_by_html: 由%{user}%{time_ago}建立
+      closed_ago_by_html: 由%{user}%{time_ago}關閉
+      discussion: 討論
+      join_discussion: 登入以參加討論
+      still_open: 變更集仍為開啟 - 討論要在變更集關閉後才會開啟。
+      comment_by_html: 來自%{user}%{time_ago}的評論
+      hidden_comment_by_html: '%{user}%{time_ago}隱藏評論'
+      changesetxml: 變更集 XML
+      osmchangexml: osmChange 格式 XML
+    paging_nav:
+      nodes: 節點 (共 %{count} 項)
+      nodes_paginated: 節點 (共 %{count} 項中的第 %{x}-%{y} 項)
+      ways: 路徑 (共 %{count} 項)
+      ways_paginated: 路線 (%{count} 的 %{x}-%{y})
+      relations: 關聯 (%{count})
+      relations_paginated: 關聯 (%{count} 的 %{x}-%{y})
     timeout:
       sorry: 很抱歉,您請求的變更集清單過長無法讀取。
   changeset_comments:
@@ -1588,10 +1595,9 @@ zh-TW:
     intro_header: 歡迎來到 OpenStreetMap!
     intro_text: OpenStreetMap 是一幅世界地圖,由像您這樣的人們所建立,在開放授權下可以自由使用。
     intro_2_create_account: 建立使用者帳號
-    hosting_partners_html: 由%{ucl}、%{fastly}、%{bytemark},和其他%{partners}支援代管。
-    partners_ucl: 倫敦大學學院
+    hosting_partners_2024_html: 由%{fastly}、%{corpmembers},和其他%{partners}支援代管。
     partners_fastly: Fastly
-    partners_bytemark: Bytemark ä¸»æ©\9f代管
+    partners_corpmembers: OSMF å\9c\98é«\94æ\88\90å\93¡
     partners_partners: 合作夥伴
     tou: 使用條款
     osm_offline: OpenStreetMap 資料庫目前正在離線,直到必要的資料庫維護工作完成為止。
@@ -1599,7 +1605,7 @@ zh-TW:
     donate: 以 %{link} 給硬體升級基金來支援 OpenStreetMap。
     help: 說明
     about: 關於
-    copyright: 
+    copyright: 著作
     communities: 社群
     community: 社群
     community_blogs: 社群部落格
@@ -1784,14 +1790,14 @@ zh-TW:
         one: 1 條忽視訊息
         other: 您有 %{count} 條忽視訊息
     reply:
-      wrong_user: 您已經以 "%{user}" 的身份登入,但是您想要回覆的訊息並非寄給這個使用者。請以正確的使用者身份登入以回覆這個訊息。
+      wrong_user: 您已經以「%{user}」的身份登入,但是您想要回覆的訊息並非寄給這個使用者。請以正確的使用者身份登入以回覆這個訊息。
     show:
       title: 閱讀訊息
       reply_button: 回覆
       unread_button: 標記為未讀
       destroy_button: 刪除
       back: 返回
-      wrong_user: 您已經以 "%{user}" 的身份登入,但是您想要閱讀的訊息並非寄給那個使用者。請以正確的使用者身份登入以閱讀它。
+      wrong_user: 您已經以「%{user}」的身份登入,但是您想要閱讀的訊息並非寄給那個使用者。請以正確的使用者身份登入以閱讀它。
     sent_message_summary:
       destroy_button: 刪除
     heading:
@@ -1814,8 +1820,7 @@ zh-TW:
       new password button: 重設密碼
       help_text: 輸入您的電子郵件地址來註冊,我們會將連結送至該地址,而您可以用它來重設密碼。
     create:
-      notice email on way: 很遺憾您忘了它 :-( 不過讓您可以重設它的電子郵件已經寄出,您待會便可重設。
-      notice email cannot find: 很抱歉,找不到該電子郵件地址。
+      send_paranoid_instructions: 如果您的電子郵件地址存於我們的資料庫裡,您將在幾分鐘內收到密碼恢復連結的電郵。
     edit:
       title: 重設密碼
       heading: 重設 %{user} 的密碼
@@ -1873,7 +1878,7 @@ zh-TW:
       lost password link: 忘記您的密碼?
       login_button: 登入
       register now: 立即註冊
-      with external: 或者使用第三方服務登入
+      with external: 或者使用第三方服務登入
       no account: 還沒有帳號嗎?
       auth failure: 很抱歉,無法以這些資料登入。
       openid_logo_alt: 使用 OpenID 登入
@@ -1882,20 +1887,20 @@ zh-TW:
           title: 使用 OpenID 登入
           alt: 使用 OpenID 網址登入
         google:
-          title: 使用 Google 帳號登入
+          title: 使用 Google 登入
           alt: 使用 Google OpenID 登入
         facebook:
           title: 使用臉書登入
           alt: 使用臉書帳號登入
         microsoft:
-          title: 使用 Microsoft 帳號登入
+          title: 使用 Microsoft 登入
           alt: 使用 Microsoft 帳號登入
         github:
           title: 使用 GitHub 登入
           alt: 使用 GitHub 帳號登入
         wikipedia:
-          title: ä»¥維基百科登入
-          alt: ä»¥維基百科帳號登入
+          title: ä½¿ç\94¨維基百科登入
+          alt: ä½¿ç\94¨維基百科帳號登入
         wordpress:
           title: 使用 Wordpress 登入
           alt: 使用 Wordpress OpenID 登入
@@ -2400,8 +2405,8 @@ zh-TW:
       identifiable: 可辨識
       private: 私人
       trackable: 可追蹤
-      by: 由
-      in: 於
+      details_with_tags_html: 由%{user}在%{tags}於%{time_ago}
+      details_without_tags_html: 由%{user}於%{time_ago}
     index:
       public_traces: 公開 GPS 軌跡
       my_gps_traces: 我的 GPS 軌跡
@@ -2685,9 +2690,11 @@ zh-TW:
     index:
       title: 使用者
       heading: 使用者
-      showing:
-        one: 頁面 %{page} (%{first_item} / %{items})
-        other: 頁面 %{page} (%{first_item}-%{last_item} / %{items})
+      older: 舊使用者
+      newer: 新使用者
+      found_users:
+        one: 找到 %{count} 位使用者
+        other: 找到 %{count} 位使用者
       summary_html: '%{name} 由 %{ip_address} 於 %{date} 建立'
       summary_no_ip_html: '%{name} 建立於:%{date}'
       confirm: 確認選取的使用者
@@ -2816,7 +2823,6 @@ zh-TW:
       revoke: 撤銷!
       confirm: 您確定嗎?
       reason: 封鎖的理由:
-      back: 檢視所有封鎖
       revoker: 撤銷者:
       needs_view: 在還原這個封鎖之前,該使用者需要先登入。
     block:
@@ -2830,9 +2836,15 @@ zh-TW:
       reason: 封鎖的理由
       status: 狀態
       revoker_name: 撤銷者
-      showing_page: 第 %{page} 頁
-      next: 下一頁 »
-      previous: « 上一頁
+      older: 舊的封鎖
+      newer: 新的封鎖
+    navigation:
+      all_blocks: 所有封鎖
+      blocks_on_me: 對我的封鎖
+      blocks_on_user: 對%{user}的封鎖
+      blocks_by_me: 由我做出的封鎖
+      blocks_by_user: 由%{user}做出的封鎖
+      block: 封鎖#%{id}
   user_mutes:
     index:
       title: 已忽視使用者
index 98184e0e176661cf5dbd4baa90e848a39918cf19..d1e4c74ae5e06c0d00736051520e1031bdd96411 100644 (file)
@@ -13,80 +13,80 @@ OpenStreetMap::Application.routes.draw do
     get "versions" => "versions#show"
   end
 
-  scope "api/0.6" do
-    get "capabilities" => "api/capabilities#show"
-    get "permissions" => "api/permissions#show"
-
-    put "changeset/create" => "api/changesets#create"
-    post "changeset/:id/upload" => "api/changesets#upload", :as => :changeset_upload, :id => /\d+/
-    get "changeset/:id/download" => "api/changesets#download", :as => :changeset_download, :id => /\d+/
-    get "changeset/:id" => "api/changesets#show", :as => :changeset_show, :id => /\d+/
-    post "changeset/:id/subscribe" => "api/changesets#subscribe", :as => :api_changeset_subscribe, :id => /\d+/
-    post "changeset/:id/unsubscribe" => "api/changesets#unsubscribe", :as => :api_changeset_unsubscribe, :id => /\d+/
-    put "changeset/:id" => "api/changesets#update", :id => /\d+/
-    put "changeset/:id/close" => "api/changesets#close", :as => :changeset_close, :id => /\d+/
-    get "changesets" => "api/changesets#query"
-    post "changeset/:id/comment" => "api/changeset_comments#create", :as => :changeset_comment, :id => /\d+/
-    post "changeset/comment/:id/hide" => "api/changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/
-    post "changeset/comment/:id/unhide" => "api/changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/
-
-    put "node/create" => "api/nodes#create"
-    get "node/:id/ways" => "api/ways#ways_for_node", :as => :node_ways, :id => /\d+/
-    get "node/:id/relations" => "api/relations#relations_for_node", :as => :node_relations, :id => /\d+/
-    get "node/:id/history" => "api/old_nodes#history", :as => :api_node_history, :id => /\d+/
-    post "node/:id/:version/redact" => "api/old_nodes#redact", :as => :node_version_redact, :version => /\d+/, :id => /\d+/
-    get "node/:id/:version" => "api/old_nodes#version", :as => :node_version, :id => /\d+/, :version => /\d+/
-    get "node/:id" => "api/nodes#show", :as => :api_node, :id => /\d+/
-    put "node/:id" => "api/nodes#update", :id => /\d+/
-    delete "node/:id" => "api/nodes#delete", :id => /\d+/
-    get "nodes" => "api/nodes#index"
-
-    put "way/create" => "api/ways#create"
-    get "way/:id/history" => "api/old_ways#history", :as => :api_way_history, :id => /\d+/
-    get "way/:id/full" => "api/ways#full", :as => :way_full, :id => /\d+/
-    get "way/:id/relations" => "api/relations#relations_for_way", :as => :way_relations, :id => /\d+/
-    post "way/:id/:version/redact" => "api/old_ways#redact", :as => :way_version_redact, :version => /\d+/, :id => /\d+/
-    get "way/:id/:version" => "api/old_ways#version", :as => :way_version, :id => /\d+/, :version => /\d+/
-    get "way/:id" => "api/ways#show", :as => :api_way, :id => /\d+/
-    put "way/:id" => "api/ways#update", :id => /\d+/
-    delete "way/:id" => "api/ways#delete", :id => /\d+/
-    get "ways" => "api/ways#index"
-
-    put "relation/create" => "api/relations#create"
-    get "relation/:id/relations" => "api/relations#relations_for_relation", :as => :relation_relations, :id => /\d+/
-    get "relation/:id/history" => "api/old_relations#history", :as => :api_relation_history, :id => /\d+/
-    get "relation/:id/full" => "api/relations#full", :as => :relation_full, :id => /\d+/
-    post "relation/:id/:version/redact" => "api/old_relations#redact", :as => :relation_version_redact, :version => /\d+/, :id => /\d+/
-    get "relation/:id/:version" => "api/old_relations#version", :as => :relation_version, :id => /\d+/, :version => /\d+/
-    get "relation/:id" => "api/relations#show", :as => :api_relation, :id => /\d+/
-    put "relation/:id" => "api/relations#update", :id => /\d+/
-    delete "relation/:id" => "api/relations#delete", :id => /\d+/
-    get "relations" => "api/relations#index"
-
-    get "map" => "api/map#index"
-
-    get "trackpoints" => "api/tracepoints#index"
-
-    get "user/:id" => "api/users#show", :id => /\d+/, :as => :api_user
-    get "user/details" => "api/users#details"
-    get "user/gpx_files" => "api/users#gpx_files"
-    get "users" => "api/users#index", :as => :api_users
-
-    resources :user_preferences, :except => [:new, :create, :edit], :param => :preference_key, :path => "user/preferences", :controller => "api/user_preferences" do
+  scope "api/0.6", :module => :api do
+    get "capabilities" => "capabilities#show"
+    get "permissions" => "permissions#show"
+
+    put "changeset/create" => "changesets#create"
+    post "changeset/:id/upload" => "changesets#upload", :as => :changeset_upload, :id => /\d+/
+    get "changeset/:id/download" => "changesets#download", :as => :changeset_download, :id => /\d+/
+    get "changeset/:id" => "changesets#show", :as => :changeset_show, :id => /\d+/
+    post "changeset/:id/subscribe" => "changesets#subscribe", :as => :api_changeset_subscribe, :id => /\d+/
+    post "changeset/:id/unsubscribe" => "changesets#unsubscribe", :as => :api_changeset_unsubscribe, :id => /\d+/
+    put "changeset/:id" => "changesets#update", :id => /\d+/
+    put "changeset/:id/close" => "changesets#close", :as => :changeset_close, :id => /\d+/
+    get "changesets" => "changesets#index"
+    post "changeset/:id/comment" => "changeset_comments#create", :as => :changeset_comment, :id => /\d+/
+    post "changeset/comment/:id/hide" => "changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/
+    post "changeset/comment/:id/unhide" => "changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/
+
+    put "node/create" => "nodes#create"
+    get "node/:id/ways" => "ways#ways_for_node", :as => :node_ways, :id => /\d+/
+    get "node/:id/relations" => "relations#relations_for_node", :as => :node_relations, :id => /\d+/
+    get "node/:id/history" => "old_nodes#history", :as => :api_node_history, :id => /\d+/
+    post "node/:id/:version/redact" => "old_nodes#redact", :as => :node_version_redact, :version => /\d+/, :id => /\d+/
+    get "node/:id/:version" => "old_nodes#show", :as => :api_old_node, :id => /\d+/, :version => /\d+/
+    get "node/:id" => "nodes#show", :as => :api_node, :id => /\d+/
+    put "node/:id" => "nodes#update", :id => /\d+/
+    delete "node/:id" => "nodes#delete", :id => /\d+/
+    get "nodes" => "nodes#index"
+
+    put "way/create" => "ways#create"
+    get "way/:id/history" => "old_ways#history", :as => :api_way_history, :id => /\d+/
+    get "way/:id/full" => "ways#full", :as => :way_full, :id => /\d+/
+    get "way/:id/relations" => "relations#relations_for_way", :as => :way_relations, :id => /\d+/
+    post "way/:id/:version/redact" => "old_ways#redact", :as => :way_version_redact, :version => /\d+/, :id => /\d+/
+    get "way/:id/:version" => "old_ways#show", :as => :api_old_way, :id => /\d+/, :version => /\d+/
+    get "way/:id" => "ways#show", :as => :api_way, :id => /\d+/
+    put "way/:id" => "ways#update", :id => /\d+/
+    delete "way/:id" => "ways#delete", :id => /\d+/
+    get "ways" => "ways#index"
+
+    put "relation/create" => "relations#create"
+    get "relation/:id/relations" => "relations#relations_for_relation", :as => :relation_relations, :id => /\d+/
+    get "relation/:id/history" => "old_relations#history", :as => :api_relation_history, :id => /\d+/
+    get "relation/:id/full" => "relations#full", :as => :relation_full, :id => /\d+/
+    post "relation/:id/:version/redact" => "old_relations#redact", :as => :relation_version_redact, :version => /\d+/, :id => /\d+/
+    get "relation/:id/:version" => "old_relations#show", :as => :api_old_relation, :id => /\d+/, :version => /\d+/
+    get "relation/:id" => "relations#show", :as => :api_relation, :id => /\d+/
+    put "relation/:id" => "relations#update", :id => /\d+/
+    delete "relation/:id" => "relations#delete", :id => /\d+/
+    get "relations" => "relations#index"
+
+    get "map" => "map#index"
+
+    get "trackpoints" => "tracepoints#index"
+
+    get "user/:id" => "users#show", :id => /\d+/, :as => :api_user
+    get "user/details" => "users#details"
+    get "user/gpx_files" => "users#gpx_files"
+    get "users" => "users#index", :as => :api_users
+
+    resources :user_preferences, :except => [:new, :create, :edit], :param => :preference_key, :path => "user/preferences", :controller => "user_preferences" do
       collection do
-        put "" => "api/user_preferences#update_all", :as => ""
+        put "" => "user_preferences#update_all", :as => ""
       end
     end
 
-    post "gpx/create" => "api/traces#create"
-    get "gpx/:id" => "api/traces#show", :as => :api_trace, :id => /\d+/
-    put "gpx/:id" => "api/traces#update", :id => /\d+/
-    delete "gpx/:id" => "api/traces#destroy", :id => /\d+/
-    get "gpx/:id/details" => "api/traces#show", :id => /\d+/
-    get "gpx/:id/data" => "api/traces#data", :as => :api_trace_data
+    post "gpx/create" => "traces#create"
+    get "gpx/:id" => "traces#show", :as => :api_trace, :id => /\d+/
+    put "gpx/:id" => "traces#update", :id => /\d+/
+    delete "gpx/:id" => "traces#destroy", :id => /\d+/
+    get "gpx/:id/details" => "traces#show", :id => /\d+/
+    get "gpx/:id/data" => "traces#data", :as => :api_trace_data
 
     # Map notes API
-    resources :notes, :except => [:new, :edit, :update], :constraints => { :id => /\d+/ }, :controller => "api/notes", :as => :api_notes do
+    resources :notes, :except => [:new, :edit, :update], :constraints => { :id => /\d+/ }, :controller => "notes", :as => :api_notes do
       collection do
         get "search"
         get "feed", :defaults => { :format => "rss" }
@@ -99,26 +99,28 @@ OpenStreetMap::Application.routes.draw do
       end
     end
 
-    post "notes/addPOIexec" => "api/notes#create"
-    post "notes/closePOIexec" => "api/notes#close"
-    post "notes/editPOIexec" => "api/notes#comment"
-    get "notes/getGPX" => "api/notes#index", :format => "gpx"
-    get "notes/getRSSfeed" => "api/notes#feed", :format => "rss"
+    post "notes/addPOIexec" => "notes#create"
+    post "notes/closePOIexec" => "notes#close"
+    post "notes/editPOIexec" => "notes#comment"
+    get "notes/getGPX" => "notes#index", :format => "gpx"
+    get "notes/getRSSfeed" => "notes#feed", :format => "rss"
 
-    resources :user_blocks, :only => [:show], :constraints => { :id => /\d+/ }, :controller => "api/user_blocks", :as => :api_user_blocks
+    resources :user_blocks, :only => [:show], :constraints => { :id => /\d+/ }, :controller => "user_blocks", :as => :api_user_blocks
   end
 
   # Data browsing
-  get "/way/:id" => "browse#way", :id => /\d+/, :as => :way
-  get "/way/:id/history" => "browse#way_history", :id => /\d+/, :as => :way_history
+  get "/way/:id" => "ways#show", :id => /\d+/, :as => :way
+  get "/way/:id/history" => "old_ways#index", :id => /\d+/, :as => :way_history
   resources :old_ways, :path => "/way/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
-  get "/node/:id" => "browse#node", :id => /\d+/, :as => :node
-  get "/node/:id/history" => "browse#node_history", :id => /\d+/, :as => :node_history
+  get "/node/:id" => "nodes#show", :id => /\d+/, :as => :node
+  get "/node/:id/history" => "old_nodes#index", :id => /\d+/, :as => :node_history
   resources :old_nodes, :path => "/node/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
-  get "/relation/:id" => "browse#relation", :id => /\d+/, :as => :relation
-  get "/relation/:id/history" => "browse#relation_history", :id => /\d+/, :as => :relation_history
+  get "/relation/:id" => "relations#show", :id => /\d+/, :as => :relation
+  get "/relation/:id/history" => "old_relations#index", :id => /\d+/, :as => :relation_history
   resources :old_relations, :path => "/relation/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
-  resources :changesets, :path => "changeset", :id => /\d+/, :only => :show
+  resources :changesets, :path => "changeset", :id => /\d+/, :only => :show do
+    match :subscribe, :unsubscribe, :on => :member, :via => [:get, :post]
+  end
   get "/changeset/:id/comments/feed" => "changeset_comments#index", :as => :changeset_comments_feed, :id => /\d*/, :defaults => { :format => "rss" }
   resources :notes, :path => "note", :only => [:show, :new]
 
@@ -127,8 +129,6 @@ OpenStreetMap::Application.routes.draw do
   get "/user/:display_name/notes" => "notes#index", :as => :user_notes
   get "/history/friends" => "changesets#index", :friends => true, :as => "friend_changesets", :defaults => { :format => :html }
   get "/history/nearby" => "changesets#index", :nearby => true, :as => "nearby_changesets", :defaults => { :format => :html }
-  match "/changeset/:id/subscribe" => "changesets#subscribe", :via => [:get, :post], :as => "changeset_subscribe"
-  match "/changeset/:id/unsubscribe" => "changesets#unsubscribe", :via => [:get, :post], :as => "changeset_unsubscribe"
 
   get "/browse/way/:id",                :to => redirect(:path => "/way/%{id}")
   get "/browse/way/:id/history",        :to => redirect(:path => "/way/%{id}/history")
@@ -209,8 +209,10 @@ OpenStreetMap::Application.routes.draw do
   get "/user/:display_name/traces/tag/:tag/rss" => "traces#georss", :defaults => { :format => :rss }
   get "/user/:display_name/traces/rss" => "traces#georss", :defaults => { :format => :rss }
   get "/user/:display_name/traces/:id" => "traces#show", :as => "show_trace"
-  get "/user/:display_name/traces/:id/picture" => "traces#picture", :as => "trace_picture"
-  get "/user/:display_name/traces/:id/icon" => "traces#icon", :as => "trace_icon"
+  scope "/user/:display_name/traces/:trace_id", :module => :traces do
+    get "picture" => "pictures#show", :as => "trace_picture"
+    get "icon" => "icons#show", :as => "trace_icon"
+  end
   get "/traces/tag/:tag/page/:page", :page => /[1-9][0-9]*/, :to => redirect(:path => "/traces/tag/%{tag}")
   get "/traces/tag/:tag" => "traces#index"
   get "/traces/page/:page", :page => /[1-9][0-9]*/, :to => redirect(:path => "/traces")
@@ -234,8 +236,8 @@ OpenStreetMap::Application.routes.draw do
   get "/user/:display_name/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss }
   get "/diary/:language/rss" => "diary_entries#rss", :defaults => { :format => :rss }
   get "/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss }
-  get "/user/:display_name/diary/comments/:page" => "diary_entries#comments", :page => /[1-9][0-9]*/
-  get "/user/:display_name/diary/comments/" => "diary_entries#comments", :as => :diary_comments
+  get "/user/:display_name/diary/comments/:page", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary/comments")
+  get "/user/:display_name/diary/comments" => "diary_entries#comments", :as => :diary_comments
   get "/user/:display_name/diary" => "diary_entries#index"
   get "/diary/:language" => "diary_entries#index"
   scope "/user/:display_name" do
diff --git a/db/migrate/20240228205723_drop_user_tokens.rb b/db/migrate/20240228205723_drop_user_tokens.rb
new file mode 100644 (file)
index 0000000..a6c885a
--- /dev/null
@@ -0,0 +1,5 @@
+class DropUserTokens < ActiveRecord::Migration[7.1]
+  def up
+    drop_table :user_tokens
+  end
+end
diff --git a/db/migrate/20240307180830_add_check_constraint_to_redaction_title_and_description.rb b/db/migrate/20240307180830_add_check_constraint_to_redaction_title_and_description.rb
new file mode 100644 (file)
index 0000000..46de9e1
--- /dev/null
@@ -0,0 +1,24 @@
+class AddCheckConstraintToRedactionTitleAndDescription < ActiveRecord::Migration[7.1]
+  disable_ddl_transaction!
+
+  def up
+    Redaction.where(:title => nil).find_in_batches(:batch_size => 1000) do |redactions|
+      redactions.each do |r|
+        r.title = "Redaction #{r.id}"
+        r.save!(:validate => false)
+      end
+    end
+
+    Redaction.where(:description => nil).find_in_batches(:batch_size => 1000) do |redactions|
+      redactions.each { |r| r.update!(:description => "No description") }
+    end
+
+    add_check_constraint :redactions, "title IS NOT NULL", :name => "redaction_title_not_null", :validate => false
+    add_check_constraint :redactions, "description IS NOT NULL", :name => "redaction_description_not_null", :validate => false
+  end
+
+  def down
+    remove_check_constraint :redactions, :name => "redaction_title_not_null", :if_exists => true
+    remove_check_constraint :redactions, :name => "redaction_description_not_null", :if_exists => true
+  end
+end
diff --git a/db/migrate/20240307181018_validate_and_modify_redaction_title_and_description.rb b/db/migrate/20240307181018_validate_and_modify_redaction_title_and_description.rb
new file mode 100644 (file)
index 0000000..9df7016
--- /dev/null
@@ -0,0 +1,19 @@
+class ValidateAndModifyRedactionTitleAndDescription < ActiveRecord::Migration[7.1]
+  disable_ddl_transaction!
+
+  def up
+    validate_check_constraint :redactions, :name => "redaction_title_not_null"
+    validate_check_constraint :redactions, :name => "redaction_description_not_null"
+
+    change_column_null :redactions, :title, false
+    change_column_null :redactions, :description, false
+
+    remove_check_constraint :redactions, :name => "redaction_title_not_null"
+    remove_check_constraint :redactions, :name => "redaction_description_not_null"
+  end
+
+  def down
+    change_column_null :redactions, :title, true
+    change_column_null :redactions, :description, true
+  end
+end
diff --git a/db/migrate/20240405083825_add_creator_index_to_user_blocks.rb b/db/migrate/20240405083825_add_creator_index_to_user_blocks.rb
new file mode 100644 (file)
index 0000000..542a102
--- /dev/null
@@ -0,0 +1,7 @@
+class AddCreatorIndexToUserBlocks < ActiveRecord::Migration[7.1]
+  disable_ddl_transaction!
+
+  def change
+    add_index :user_blocks, [:creator_id, :id], :algorithm => :concurrently
+  end
+end
index 4998bc694a139be2e9b477e5f12137f499f6a713..829595e7c7431afc17946a7a57e8d14fb93bc71e 100644 (file)
@@ -1304,8 +1304,8 @@ ALTER SEQUENCE public.oauth_tokens_id_seq OWNED BY public.oauth_tokens.id;
 
 CREATE TABLE public.redactions (
     id integer NOT NULL,
-    title character varying,
-    description text,
+    title character varying NOT NULL,
+    description text NOT NULL,
     created_at timestamp without time zone,
     updated_at timestamp without time zone,
     user_id bigint NOT NULL,
@@ -1532,38 +1532,6 @@ CREATE SEQUENCE public.user_roles_id_seq
 ALTER SEQUENCE public.user_roles_id_seq OWNED BY public.user_roles.id;
 
 
---
--- Name: user_tokens; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.user_tokens (
-    id bigint NOT NULL,
-    user_id bigint NOT NULL,
-    token character varying NOT NULL,
-    expiry timestamp without time zone NOT NULL,
-    referer text
-);
-
-
---
--- Name: user_tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.user_tokens_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
---
--- Name: user_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.user_tokens_id_seq OWNED BY public.user_tokens.id;
-
-
 --
 -- Name: users; Type: TABLE; Schema: public; Owner: -
 --
@@ -1882,13 +1850,6 @@ ALTER TABLE ONLY public.user_mutes ALTER COLUMN id SET DEFAULT nextval('public.u
 ALTER TABLE ONLY public.user_roles ALTER COLUMN id SET DEFAULT nextval('public.user_roles_id_seq'::regclass);
 
 
---
--- Name: user_tokens id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.user_tokens ALTER COLUMN id SET DEFAULT nextval('public.user_tokens_id_seq'::regclass);
-
-
 --
 -- Name: users id; Type: DEFAULT; Schema: public; Owner: -
 --
@@ -2280,14 +2241,6 @@ ALTER TABLE ONLY public.user_roles
     ADD CONSTRAINT user_roles_pkey PRIMARY KEY (id);
 
 
---
--- Name: user_tokens user_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.user_tokens
-    ADD CONSTRAINT user_tokens_pkey PRIMARY KEY (id);
-
-
 --
 -- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
@@ -2775,6 +2728,13 @@ CREATE INDEX index_reports_on_issue_id ON public.reports USING btree (issue_id);
 CREATE INDEX index_reports_on_user_id ON public.reports USING btree (user_id);
 
 
+--
+-- Name: index_user_blocks_on_creator_id_and_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_user_blocks_on_creator_id_and_id ON public.user_blocks USING btree (creator_id, id);
+
+
 --
 -- Name: index_user_blocks_on_user_id; Type: INDEX; Schema: public; Owner: -
 --
@@ -2901,20 +2861,6 @@ CREATE INDEX user_id_idx ON public.friends USING btree (friend_user_id);
 CREATE UNIQUE INDEX user_roles_id_role_unique ON public.user_roles USING btree (user_id, role);
 
 
---
--- Name: user_tokens_token_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE UNIQUE INDEX user_tokens_token_idx ON public.user_tokens USING btree (token);
-
-
---
--- Name: user_tokens_user_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX user_tokens_user_id_idx ON public.user_tokens USING btree (user_id);
-
-
 --
 -- Name: users_auth_idx; Type: INDEX; Schema: public; Owner: -
 --
@@ -3490,14 +3436,6 @@ ALTER TABLE ONLY public.user_roles
     ADD CONSTRAINT user_roles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
 
 
---
--- Name: user_tokens user_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.user_tokens
-    ADD CONSTRAINT user_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
-
-
 --
 -- Name: way_nodes way_nodes_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
 --
@@ -3581,6 +3519,10 @@ INSERT INTO "schema_migrations" (version) VALUES
 ('23'),
 ('22'),
 ('21'),
+('20240405083825'),
+('20240307181018'),
+('20240307180830'),
+('20240228205723'),
 ('20240117185445'),
 ('20231213182102'),
 ('20231206141457'),
@@ -3665,3 +3607,4 @@ INSERT INTO "schema_migrations" (version) VALUES
 ('11'),
 ('10'),
 ('1');
+
index d1987a93622f0d1a44eb128555f6f6cc4258bd26..2784646afecbcf6fbcca3c02141bbd6671a3b75f 100644 (file)
@@ -4,8 +4,6 @@
 # Uses the streaming LibXML "Reader" interface to cut down on memory
 # usage, so hopefully we can process fairly large diffs.
 class DiffReader
-  include ConsistencyValidations
-
   # maps each element type to the model class which handles it
   MODELS = {
     "node" => Node,
index 7f96531d9d0835ece408c9ad3dedc0d99fadfb1f..790ef150d6e7b3220921348ee373857eb86356de 100644 (file)
@@ -5,7 +5,7 @@ def yarn_path
 end
 
 def config_file
-  Rails.root.join("config/eslint.json").to_s
+  Rails.root.join("config/eslint.js").to_s
 end
 
 def js_files
index 3f4432e9de030d9e890f4651a5319fbd74d22790..0a9ebf0b66e4b06678d5ea2709b21ec59581f99a 100644 (file)
@@ -6,11 +6,11 @@
     "jquery-simulate": "^1.0.2",
     "js-cookie": "^3.0.0",
     "leaflet": "^1.8.0",
-    "leaflet.locatecontrol": "^0.79.0",
+    "leaflet.locatecontrol": "^0.81.0",
     "osm-community-index": "^5.2.0",
     "qs": "^6.9.4"
   },
   "devDependencies": {
-    "eslint": "^8.0.0"
+    "eslint": "^9.0.0"
   }
 }
index 67cc0705efa1e21ba8d42ef72eff1170b98853c8..7601d35cf9386a276a1fabd7199a3e00a6cb9c23 100755 (executable)
@@ -2,7 +2,6 @@
 
 require File.join(File.dirname(__FILE__), "..", "config", "environment")
 
-UserToken.where("expiry < NOW()").delete_all
 OauthNonce.where("timestamp < EXTRACT(EPOCH FROM NOW() - INTERVAL '1 day')").delete_all
 OauthToken.where("invalidated_at < NOW() - INTERVAL '28 days'").delete_all
 RequestToken.where("authorized_at IS NULL AND created_at < NOW() - INTERVAL '28 days'").delete_all
index ef8f0e371feb924e35651e227fe47dbaf279f572..63c8090a83d735929ab1421fcafb0d935dc813aa 100644 (file)
@@ -29,7 +29,7 @@ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
     within "form", :text => "Email Address or Username" do
       fill_in "username", :with => user.email
       fill_in "password", :with => "test"
-      click_on "Login"
+      click_on "Log in"
     end
   end
 
index 50ced0ff1906aef38377086c46e193a674805d63..be1033ea6f0300805655575f5c69eb4e45f5af7a 100644 (file)
@@ -51,11 +51,11 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/changesets", :method => :get },
-        { :controller => "api/changesets", :action => "query" }
+        { :controller => "api/changesets", :action => "index" }
       )
       assert_routing(
         { :path => "/api/0.6/changesets.json", :method => :get },
-        { :controller => "api/changesets", :action => "query", :format => "json" }
+        { :controller => "api/changesets", :action => "index", :format => "json" }
       )
     end
 
@@ -1995,6 +1995,40 @@ module Api
       end
     end
 
+    test "sorts downloaded elements by timestamp" do
+      changeset = create(:changeset)
+      node1 = create(:old_node, :version => 2, :timestamp => "2020-02-01", :changeset => changeset)
+      node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
+
+      get changeset_download_path(changeset)
+      assert_response :success
+      assert_dom "modify", :count => 2 do |modify|
+        assert_dom modify[0], ">node", :count => 1 do |node|
+          assert_dom node, ">@id", node0.node_id.to_s
+        end
+        assert_dom modify[1], ">node", :count => 1 do |node|
+          assert_dom node, ">@id", node1.node_id.to_s
+        end
+      end
+    end
+
+    test "sorts downloaded elements by version" do
+      changeset = create(:changeset)
+      node1 = create(:old_node, :version => 3, :timestamp => "2020-01-01", :changeset => changeset)
+      node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
+
+      get changeset_download_path(changeset)
+      assert_response :success
+      assert_dom "modify", :count => 2 do |modify|
+        assert_dom modify[0], ">node", :count => 1 do |node|
+          assert_dom node, ">@id", node0.node_id.to_s
+        end
+        assert_dom modify[1], ">node", :count => 1 do |node|
+          assert_dom node, ">@id", node1.node_id.to_s
+        end
+      end
+    end
+
     ##
     # check that the bounding box of a changeset gets updated correctly
     # FIXME: This should really be moded to a integration test due to the with_controller
@@ -2402,7 +2436,7 @@ module Api
         assert_response :success, "can't create a new node"
         node_id = @response.body.to_i
 
-        get api_node_path(:id => node_id)
+        get api_node_path(node_id)
         assert_response :success, "can't read back new node"
         node_doc = XML::Parser.string(@response.body).parse
         node_xml = node_doc.find("//osm/node").first
@@ -2413,7 +2447,7 @@ module Api
           node_xml["lon"] = rand.to_s
           node_xml["version"] = (i + 1).to_s
 
-          put api_node_path(:id => node_id), :params => node_doc.to_s, :headers => auth_header
+          put api_node_path(node_id), :params => node_doc.to_s, :headers => auth_header
           assert_response :success, "attempt #{i} should have succeeded"
         end
 
@@ -2422,7 +2456,7 @@ module Api
         node_xml["lon"] = rand.to_s
         node_xml["version"] = offset.to_s
 
-        put api_node_path(:id => node_id), :params => node_doc.to_s, :headers => auth_header
+        put api_node_path(node_id), :params => node_doc.to_s, :headers => auth_header
         assert_response :conflict, "final attempt should have failed"
       end
 
index 7becffddcdd849f260200fc444dbb1f267d8dc12..5fde0277cf8d34bc12aac31fc60a6c77d0489c10 100644 (file)
@@ -151,7 +151,7 @@ module Api
       assert_response :gone
 
       # check chat a non-existent node is not returned
-      get api_node_path(:id => 0)
+      get api_node_path(0)
       assert_response :not_found
     end
 
@@ -201,7 +201,7 @@ module Api
       assert_require_public_data
 
       # this won't work since the node never existed
-      delete api_node_path(:id => 0), :headers => auth_header
+      delete api_node_path(0), :headers => auth_header
       assert_require_public_data
 
       ## these test whether nodes which are in-use can be deleted:
@@ -241,7 +241,7 @@ module Api
       # try to delete a node with a different ID
       other_node = create(:node)
       xml = xml_for_node(other_node)
-      delete api_node_path(node.id), :params => xml.to_s, :headers => auth_header
+      delete api_node_path(node), :params => xml.to_s, :headers => auth_header
       assert_response :bad_request,
                       "should not be able to delete a node with a different ID from the XML"
 
@@ -266,7 +266,7 @@ module Api
       assert_response :gone
 
       # this won't work since the node never existed
-      delete api_node_path(:id => 0), :headers => auth_header
+      delete api_node_path(0), :headers => auth_header
       assert_response :not_found
 
       ## these test whether nodes which are in-use can be deleted:
@@ -360,7 +360,7 @@ module Api
       # try and update a node without authorisation
       # first try to update node without auth
       xml = xml_for_node(node)
-      put api_node_path(node.id), :params => xml.to_s, :headers => auth_header
+      put api_node_path(node), :params => xml.to_s, :headers => auth_header
       assert_response :forbidden
 
       # setup auth
@@ -456,11 +456,11 @@ module Api
       assert_response :bad_request
 
       # check error when no parameter value provided
-      get nodes_path, :params => { :nodes => "" }
+      get nodes_path(:nodes => "")
       assert_response :bad_request
 
       # test a working call
-      get nodes_path, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}" }
+      get nodes_path(:nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}")
       assert_response :success
       assert_select "osm" do
         assert_select "node", :count => 5
@@ -472,7 +472,7 @@ module Api
       end
 
       # test a working call with json format
-      get nodes_path, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}", :format => "json" }
+      get nodes_path(:nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}", :format => "json")
 
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -485,7 +485,7 @@ module Api
       assert_equal 1, (js["elements"].count { |a| a["id"] == node5.id && a["visible"] == false })
 
       # check error when a non-existent node is included
-      get nodes_path, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id},0" }
+      get nodes_path(:nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id},0")
       assert_response :not_found
     end
 
@@ -548,7 +548,7 @@ module Api
       assert_not_nil checknode, "node not found in data base after upload"
 
       # and grab it using the api
-      get api_node_path(:id => nodeid)
+      get api_node_path(nodeid)
       assert_response :success
       apinode = Node.from_xml(@response.body)
       assert_not_nil apinode, "downloaded node is nil, but shouldn't be"
index 303bcea91fc5abbb32df2e03d8890a6eb58870a6..045e3bf434fe8b6dc36054379e5a4561c7f2fc63 100644 (file)
@@ -141,7 +141,7 @@ module Api
       assert_nil js["properties"]["comments"].last["user"]
       id = js["properties"]["id"]
 
-      get api_note_path(:id => id, :format => "json")
+      get api_note_path(id, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -228,7 +228,7 @@ module Api
       assert_difference "NoteComment.count", 1 do
         assert_no_difference "ActionMailer::Base.deliveries.size" do
           perform_enqueued_jobs do
-            post comment_api_note_path(:id => open_note_with_comment, :text => "This is an additional comment", :format => "json"), :headers => auth_header
+            post comment_api_note_path(open_note_with_comment, :text => "This is an additional comment", :format => "json"), :headers => auth_header
           end
         end
       end
@@ -243,7 +243,7 @@ module Api
       assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
       assert_equal user.display_name, js["properties"]["comments"].last["user"]
 
-      get api_note_path(:id => open_note_with_comment, :format => "json")
+      get api_note_path(open_note_with_comment, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -270,7 +270,7 @@ module Api
       assert_difference "NoteComment.count", 1 do
         assert_difference "ActionMailer::Base.deliveries.size", 2 do
           perform_enqueued_jobs do
-            post comment_api_note_path(:id => note_with_comments_by_users, :text => "This is an additional comment", :format => "json"), :headers => auth_header
+            post comment_api_note_path(note_with_comments_by_users, :text => "This is an additional comment", :format => "json"), :headers => auth_header
           end
         end
       end
@@ -296,7 +296,7 @@ module Api
       assert_equal 1, email.to.length
       assert_equal "[OpenStreetMap] #{third_user.display_name} has commented on a note you are interested in", email.subject
 
-      get api_note_path(:id => note_with_comments_by_users, :format => "json")
+      get api_note_path(note_with_comments_by_users, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -317,43 +317,43 @@ module Api
       user = create(:user)
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => open_note_with_comment)
+        post comment_api_note_path(open_note_with_comment)
         assert_response :unauthorized
       end
 
       auth_header = basic_authorization_header user.email, "test"
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => open_note_with_comment), :headers => auth_header
+        post comment_api_note_path(open_note_with_comment), :headers => auth_header
       end
       assert_response :bad_request
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => open_note_with_comment, :text => ""), :headers => auth_header
+        post comment_api_note_path(open_note_with_comment, :text => ""), :headers => auth_header
       end
       assert_response :bad_request
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => 12345, :text => "This is an additional comment"), :headers => auth_header
+        post comment_api_note_path(12345, :text => "This is an additional comment"), :headers => auth_header
       end
       assert_response :not_found
 
       hidden_note_with_comment = create(:note_with_comments, :status => "hidden")
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => hidden_note_with_comment, :text => "This is an additional comment"), :headers => auth_header
+        post comment_api_note_path(hidden_note_with_comment, :text => "This is an additional comment"), :headers => auth_header
       end
       assert_response :gone
 
       closed_note_with_comment = create(:note_with_comments, :closed)
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => closed_note_with_comment, :text => "This is an additional comment"), :headers => auth_header
+        post comment_api_note_path(closed_note_with_comment, :text => "This is an additional comment"), :headers => auth_header
       end
       assert_response :conflict
 
       assert_no_difference "NoteComment.count" do
-        post comment_api_note_path(:id => open_note_with_comment, :text => "x\u0000y"), :headers => auth_header
+        post comment_api_note_path(open_note_with_comment, :text => "x\u0000y"), :headers => auth_header
       end
       assert_response :bad_request
     end
@@ -362,12 +362,12 @@ module Api
       open_note_with_comment = create(:note_with_comments)
       user = create(:user)
 
-      post close_api_note_path(:id => open_note_with_comment, :text => "This is a close comment", :format => "json")
+      post close_api_note_path(open_note_with_comment, :text => "This is a close comment", :format => "json")
       assert_response :unauthorized
 
       auth_header = basic_authorization_header user.email, "test"
 
-      post close_api_note_path(:id => open_note_with_comment, :text => "This is a close comment", :format => "json"), :headers => auth_header
+      post close_api_note_path(open_note_with_comment, :text => "This is a close comment", :format => "json"), :headers => auth_header
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -379,7 +379,7 @@ module Api
       assert_equal "This is a close comment", js["properties"]["comments"].last["text"]
       assert_equal user.display_name, js["properties"]["comments"].last["user"]
 
-      get api_note_path(:id => open_note_with_comment.id, :format => "json")
+      get api_note_path(open_note_with_comment.id, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -393,22 +393,22 @@ module Api
     end
 
     def test_close_fail
-      post close_api_note_path(:id => 12345)
+      post close_api_note_path(12345)
       assert_response :unauthorized
 
       auth_header = basic_authorization_header create(:user).email, "test"
 
-      post close_api_note_path(:id => 12345), :headers => auth_header
+      post close_api_note_path(12345), :headers => auth_header
       assert_response :not_found
 
       hidden_note_with_comment = create(:note_with_comments, :status => "hidden")
 
-      post close_api_note_path(:id => hidden_note_with_comment), :headers => auth_header
+      post close_api_note_path(hidden_note_with_comment), :headers => auth_header
       assert_response :gone
 
       closed_note_with_comment = create(:note_with_comments, :closed)
 
-      post close_api_note_path(:id => closed_note_with_comment), :headers => auth_header
+      post close_api_note_path(closed_note_with_comment), :headers => auth_header
       assert_response :conflict
     end
 
@@ -416,12 +416,12 @@ module Api
       closed_note_with_comment = create(:note_with_comments, :closed)
       user = create(:user)
 
-      post reopen_api_note_path(:id => closed_note_with_comment, :text => "This is a reopen comment", :format => "json")
+      post reopen_api_note_path(closed_note_with_comment, :text => "This is a reopen comment", :format => "json")
       assert_response :unauthorized
 
       auth_header = basic_authorization_header user.email, "test"
 
-      post reopen_api_note_path(:id => closed_note_with_comment, :text => "This is a reopen comment", :format => "json"), :headers => auth_header
+      post reopen_api_note_path(closed_note_with_comment, :text => "This is a reopen comment", :format => "json"), :headers => auth_header
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -433,7 +433,7 @@ module Api
       assert_equal "This is a reopen comment", js["properties"]["comments"].last["text"]
       assert_equal user.display_name, js["properties"]["comments"].last["user"]
 
-      get api_note_path(:id => closed_note_with_comment, :format => "json")
+      get api_note_path(closed_note_with_comment, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -449,27 +449,27 @@ module Api
     def test_reopen_fail
       hidden_note_with_comment = create(:note_with_comments, :status => "hidden")
 
-      post reopen_api_note_path(:id => hidden_note_with_comment)
+      post reopen_api_note_path(hidden_note_with_comment)
       assert_response :unauthorized
 
       auth_header = basic_authorization_header create(:user).email, "test"
 
-      post reopen_api_note_path(:id => 12345), :headers => auth_header
+      post reopen_api_note_path(12345), :headers => auth_header
       assert_response :not_found
 
-      post reopen_api_note_path(:id => hidden_note_with_comment), :headers => auth_header
+      post reopen_api_note_path(hidden_note_with_comment), :headers => auth_header
       assert_response :gone
 
       open_note_with_comment = create(:note_with_comments)
 
-      post reopen_api_note_path(:id => open_note_with_comment), :headers => auth_header
+      post reopen_api_note_path(open_note_with_comment), :headers => auth_header
       assert_response :conflict
     end
 
     def test_show_success
       open_note = create(:note_with_comments)
 
-      get api_note_path(:id => open_note, :format => "xml")
+      get api_note_path(open_note, :format => "xml")
       assert_response :success
       assert_equal "application/xml", @response.media_type
       assert_select "osm", :count => 1 do
@@ -486,7 +486,7 @@ module Api
         end
       end
 
-      get api_note_path(:id => open_note, :format => "rss")
+      get api_note_path(open_note, :format => "rss")
       assert_response :success
       assert_equal "application/rss+xml", @response.media_type
       assert_select "rss", :count => 1 do
@@ -502,7 +502,7 @@ module Api
         end
       end
 
-      get api_note_path(:id => open_note, :format => "json")
+      get api_note_path(open_note, :format => "json")
       assert_response :success
       assert_equal "application/json", @response.media_type
       js = ActiveSupport::JSON.decode(@response.body)
@@ -518,7 +518,7 @@ module Api
       assert_equal open_note.created_at.to_s, js["properties"]["date_created"]
       assert_equal open_note.status, js["properties"]["status"]
 
-      get api_note_path(:id => open_note, :format => "gpx")
+      get api_note_path(open_note, :format => "gpx")
       assert_response :success
       assert_equal "application/gpx+xml", @response.media_type
       assert_select "gpx", :count => 1 do
@@ -544,7 +544,7 @@ module Api
         create(:note_comment, :note => note, :body => "Another valid comment for hidden note")
       end
 
-      get api_note_path(:id => note_with_hidden_comment, :format => "json")
+      get api_note_path(note_with_hidden_comment, :format => "json")
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -556,10 +556,10 @@ module Api
     end
 
     def test_show_fail
-      get api_note_path(:id => 12345)
+      get api_note_path(12345)
       assert_response :not_found
 
-      get api_note_path(:id => create(:note, :status => "hidden"))
+      get api_note_path(create(:note, :status => "hidden"))
       assert_response :gone
     end
 
@@ -568,17 +568,17 @@ module Api
       user = create(:user)
       moderator_user = create(:moderator_user)
 
-      delete api_note_path(:id => open_note_with_comment, :text => "This is a hide comment", :format => "json")
+      delete api_note_path(open_note_with_comment, :text => "This is a hide comment", :format => "json")
       assert_response :unauthorized
 
       auth_header = basic_authorization_header user.email, "test"
 
-      delete api_note_path(:id => open_note_with_comment, :text => "This is a hide comment", :format => "json"), :headers => auth_header
+      delete api_note_path(open_note_with_comment, :text => "This is a hide comment", :format => "json"), :headers => auth_header
       assert_response :forbidden
 
       auth_header = basic_authorization_header moderator_user.email, "test"
 
-      delete api_note_path(:id => open_note_with_comment, :text => "This is a hide comment", :format => "json"), :headers => auth_header
+      delete api_note_path(open_note_with_comment, :text => "This is a hide comment", :format => "json"), :headers => auth_header
       assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -590,12 +590,12 @@ module Api
       assert_equal "This is a hide comment", js["properties"]["comments"].last["text"]
       assert_equal moderator_user.display_name, js["properties"]["comments"].last["user"]
 
-      get api_note_path(:id => open_note_with_comment, :format => "json"), :headers => auth_header
+      get api_note_path(open_note_with_comment, :format => "json"), :headers => auth_header
       assert_response :success
 
       auth_header = basic_authorization_header user.email, "test"
 
-      get api_note_path(:id => open_note_with_comment, :format => "json"), :headers => auth_header
+      get api_note_path(open_note_with_comment, :format => "json"), :headers => auth_header
       assert_response :gone
     end
 
@@ -603,22 +603,22 @@ module Api
       user = create(:user)
       moderator_user = create(:moderator_user)
 
-      delete api_note_path(:id => 12345, :format => "json")
+      delete api_note_path(12345, :format => "json")
       assert_response :unauthorized
 
       auth_header = basic_authorization_header user.email, "test"
 
-      delete api_note_path(:id => 12345, :format => "json"), :headers => auth_header
+      delete api_note_path(12345, :format => "json"), :headers => auth_header
       assert_response :forbidden
 
       auth_header = basic_authorization_header moderator_user.email, "test"
 
-      delete api_note_path(:id => 12345, :format => "json"), :headers => auth_header
+      delete api_note_path(12345, :format => "json"), :headers => auth_header
       assert_response :not_found
 
       hidden_note_with_comment = create(:note_with_comments, :status => "hidden")
 
-      delete api_note_path(:id => hidden_note_with_comment, :format => "json"), :headers => auth_header
+      delete api_note_path(hidden_note_with_comment, :format => "json"), :headers => auth_header
       assert_response :gone
     end
 
index 737f11c7317b697406e954500e32339a89bd5067..badc7301b66c52bef12e3c55b389fbf46f3de3a9 100644 (file)
@@ -15,7 +15,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/node/1/2", :method => :get },
-        { :controller => "api/old_nodes", :action => "version", :id => "1", :version => "2" }
+        { :controller => "api/old_nodes", :action => "show", :id => "1", :version => "2" }
       )
       assert_routing(
         { :path => "/api/0.6/node/1/history.json", :method => :get },
@@ -23,7 +23,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/node/1/2.json", :method => :get },
-        { :controller => "api/old_nodes", :action => "version", :id => "1", :version => "2", :format => "json" }
+        { :controller => "api/old_nodes", :action => "show", :id => "1", :version => "2", :format => "json" }
       )
       assert_routing(
         { :path => "/api/0.6/node/1/2/redact", :method => :post },
@@ -68,7 +68,7 @@ module Api
         xml_node["lat"] = precision((rand * 180) - 90).to_s
         xml_node["lon"] = precision((rand * 360) - 180).to_s
         with_controller(NodesController.new) do
-          put api_node_path(:id => nodeid), :params => xml_doc.to_s, :headers => auth_header
+          put api_node_path(nodeid), :params => xml_doc.to_s, :headers => auth_header
           assert_response :forbidden, "Should have rejected node update"
           xml_node["version"] = @response.body.to_s
         end
@@ -83,7 +83,7 @@ module Api
         xml_tag["v"] = random_string
         xml_node << xml_tag
         with_controller(NodesController.new) do
-          put api_node_path(:id => nodeid), :params => xml_doc.to_s, :headers => auth_header
+          put api_node_path(nodeid), :params => xml_doc.to_s, :headers => auth_header
           assert_response :forbidden,
                           "should have rejected node #{nodeid} (#{@response.body}) with forbidden"
           xml_node["version"] = @response.body.to_s
@@ -116,7 +116,7 @@ module Api
         xml_node["lat"] = precision((rand * 180) - 90).to_s
         xml_node["lon"] = precision((rand * 360) - 180).to_s
         with_controller(NodesController.new) do
-          put api_node_path(:id => nodeid), :params => xml_doc.to_s, :headers => auth_header
+          put api_node_path(nodeid), :params => xml_doc.to_s, :headers => auth_header
           assert_response :success
           xml_node["version"] = @response.body.to_s
         end
@@ -131,7 +131,7 @@ module Api
         xml_tag["v"] = random_string
         xml_node << xml_tag
         with_controller(NodesController.new) do
-          put api_node_path(:id => nodeid), :params => xml_doc.to_s, :headers => auth_header
+          put api_node_path(nodeid), :params => xml_doc.to_s, :headers => auth_header
           assert_response :success,
                           "couldn't update node #{nodeid} (#{@response.body})"
           xml_node["version"] = @response.body.to_s
@@ -142,7 +142,7 @@ module Api
 
       # check all the versions
       versions.each_key do |key|
-        get node_version_path(:id => nodeid, :version => key.to_i)
+        get api_old_node_path(nodeid, key.to_i)
 
         assert_response :success,
                         "couldn't get version #{key.to_i} of node #{nodeid}"
@@ -191,7 +191,7 @@ module Api
     def test_lat_lon_xml_format
       old_node = create(:old_node, :latitude => (0.00004 * OldNode::SCALE).to_i, :longitude => (0.00008 * OldNode::SCALE).to_i)
 
-      get api_node_history_path(:id => old_node.node_id, :version => old_node.version)
+      get api_node_history_path(old_node.node_id)
       assert_match(/lat="0.0000400"/, response.body)
       assert_match(/lon="0.0000800"/, response.body)
     end
@@ -283,12 +283,12 @@ module Api
       node_v1 = node.old_nodes.find_by(:version => 1)
       node_v1.redact!(create(:redaction))
 
-      get node_version_path(:id => node_v1.node_id, :version => node_v1.version)
+      get api_old_node_path(node_v1.node_id, node_v1.version)
       assert_response :forbidden, "Redacted node shouldn't be visible via the version API."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get node_version_path(:id => node_v1.node_id, :version => node_v1.version), :headers => auth_header
+      get api_old_node_path(node_v1.node_id, node_v1.version), :headers => auth_header
       assert_response :forbidden, "Redacted node shouldn't be visible via the version API, even when logged in."
     end
 
@@ -299,14 +299,14 @@ module Api
       node_v1 = node.old_nodes.find_by(:version => 1)
       node_v1.redact!(create(:redaction))
 
-      get api_node_history_path(:id => node_v1.node_id)
+      get api_node_history_path(node)
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 0,
                     "redacted node #{node_v1.node_id} version #{node_v1.version} shouldn't be present in the history."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get api_node_history_path(:id => node_v1.node_id), :headers => auth_header
+      get api_node_history_path(node), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 0,
                     "redacted node #{node_v1.node_id} version #{node_v1.version} shouldn't be present in the history, even when logged in."
@@ -325,17 +325,17 @@ module Api
 
       # check moderator can still see the redacted data, when passing
       # the appropriate flag
-      get node_version_path(:id => node_v3.node_id, :version => node_v3.version), :headers => auth_header
+      get api_old_node_path(node_v3.node_id, node_v3.version), :headers => auth_header
       assert_response :forbidden, "After redaction, node should be gone for moderator, when flag not passed."
-      get node_version_path(:id => node_v3.node_id, :version => node_v3.version), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_old_node_path(node_v3.node_id, node_v3.version, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "After redaction, node should not be gone for moderator, when flag passed."
 
       # and when accessed via history
-      get api_node_history_path(:id => node_v3.node_id)
+      get api_node_history_path(node)
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v3.node_id}'][version='#{node_v3.version}']", 0,
                     "node #{node_v3.node_id} version #{node_v3.version} should not be present in the history for moderators when not passing flag."
-      get api_node_history_path(:id => node_v3.node_id), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_node_history_path(node, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v3.node_id}'][version='#{node_v3.version}']", 1,
                     "node #{node_v3.node_id} version #{node_v3.version} should still be present in the history for moderators when passing flag."
@@ -355,11 +355,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check can't see the redacted data
-      get node_version_path(:id => node_v3.node_id, :version => node_v3.version), :headers => auth_header
+      get api_old_node_path(node_v3.node_id, node_v3.version), :headers => auth_header
       assert_response :forbidden, "Redacted node shouldn't be visible via the version API."
 
       # and when accessed via history
-      get api_node_history_path(:id => node_v3.node_id), :headers => auth_header
+      get api_node_history_path(node), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v3.node_id}'][version='#{node_v3.version}']", 0,
                     "redacted node #{node_v3.node_id} version #{node_v3.version} shouldn't be present in the history."
@@ -373,7 +373,7 @@ module Api
       node_v1 = node.old_nodes.find_by(:version => 1)
       node_v1.redact!(create(:redaction))
 
-      post node_version_redact_path(:id => node_v1.node_id, :version => node_v1.version)
+      post node_version_redact_path(node_v1.node_id, node_v1.version)
       assert_response :unauthorized, "should need to be authenticated to unredact."
     end
 
@@ -388,7 +388,7 @@ module Api
 
       auth_header = basic_authorization_header user.email, "test"
 
-      post node_version_redact_path(:id => node_v1.node_id, :version => node_v1.version), :headers => auth_header
+      post node_version_redact_path(node_v1.node_id, node_v1.version), :headers => auth_header
       assert_response :forbidden, "should need to be moderator to unredact."
     end
 
@@ -403,16 +403,16 @@ module Api
 
       auth_header = basic_authorization_header moderator_user.email, "test"
 
-      post node_version_redact_path(:id => node_v1.node_id, :version => node_v1.version), :headers => auth_header
+      post node_version_redact_path(node_v1.node_id, node_v1.version), :headers => auth_header
       assert_response :success, "should be OK to unredact old version as moderator."
 
       # check moderator can now see the redacted data, when not
       # passing the aspecial flag
-      get node_version_path(:id => node_v1.node_id, :version => node_v1.version), :headers => auth_header
+      get api_old_node_path(node_v1.node_id, node_v1.version), :headers => auth_header
       assert_response :success, "After unredaction, node should not be gone for moderator."
 
       # and when accessed via history
-      get api_node_history_path(:id => node_v1.node_id)
+      get api_node_history_path(node)
       assert_response :success, "Unredaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 1,
                     "node #{node_v1.node_id} version #{node_v1.version} should now be present in the history for moderators without passing flag."
@@ -420,11 +420,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check normal user can now see the redacted data
-      get node_version_path(:id => node_v1.node_id, :version => node_v1.version), :headers => auth_header
+      get api_old_node_path(node_v1.node_id, node_v1.version), :headers => auth_header
       assert_response :success, "After unredaction, node should be visible to normal users."
 
       # and when accessed via history
-      get api_node_history_path(:id => node_v1.node_id)
+      get api_node_history_path(node)
       assert_response :success, "Unredaction shouldn't have stopped history working."
       assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 1,
                     "node #{node_v1.node_id} version #{node_v1.version} should now be present in the history for normal users without passing flag."
@@ -446,24 +446,24 @@ module Api
     end
 
     def do_redact_node(node, redaction, headers = {})
-      get node_version_path(:id => node.node_id, :version => node.version), :headers => headers
+      get api_old_node_path(node.node_id, node.version), :headers => headers
       assert_response :success, "should be able to get version #{node.version} of node #{node.node_id}."
 
       # now redact it
-      post node_version_redact_path(:id => node.node_id, :version => node.version), :params => { :redaction => redaction.id }, :headers => headers
+      post node_version_redact_path(node.node_id, node.version), :params => { :redaction => redaction.id }, :headers => headers
     end
 
     def check_current_version(node_id)
       # get the current version of the node
       current_node = with_controller(NodesController.new) do
-        get api_node_path(:id => node_id)
+        get api_node_path(node_id)
         assert_response :success, "cant get current node #{node_id}"
         Node.from_xml(@response.body)
       end
       assert_not_nil current_node, "getting node #{node_id} returned nil"
 
       # get the "old" version of the node from the old_node interface
-      get node_version_path(:id => node_id, :version => current_node.version)
+      get api_old_node_path(node_id, current_node.version)
       assert_response :success, "cant get old node #{node_id}, v#{current_node.version}"
       old_node = Node.from_xml(@response.body)
 
@@ -472,7 +472,7 @@ module Api
     end
 
     def check_not_found_id_version(id, version)
-      get node_version_path(:id => id, :version => version)
+      get api_old_node_path(id, version)
       assert_response :not_found
     rescue ActionController::UrlGenerationError => e
       assert_match(/No route matches/, e.to_s)
index ea26e5cb795c60bfa523f411fb458b4c2dfc0037..892e52991a1feef0a5df0386c32d3c710444780d 100644 (file)
@@ -11,7 +11,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/relation/1/2", :method => :get },
-        { :controller => "api/old_relations", :action => "version", :id => "1", :version => "2" }
+        { :controller => "api/old_relations", :action => "show", :id => "1", :version => "2" }
       )
       assert_routing(
         { :path => "/api/0.6/relation/1/history.json", :method => :get },
@@ -19,7 +19,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/relation/1/2.json", :method => :get },
-        { :controller => "api/old_relations", :action => "version", :id => "1", :version => "2", :format => "json" }
+        { :controller => "api/old_relations", :action => "show", :id => "1", :version => "2", :format => "json" }
       )
       assert_routing(
         { :path => "/api/0.6/relation/1/2/redact", :method => :post },
@@ -36,7 +36,7 @@ module Api
       assert_response :success
 
       # check chat a non-existent relations is not returned
-      get api_relation_history_path(:id => 0)
+      get api_relation_history_path(0)
       assert_response :not_found
     end
 
@@ -122,12 +122,12 @@ module Api
       relation_v1 = relation.old_relations.find_by(:version => 1)
       relation_v1.redact!(create(:redaction))
 
-      get relation_version_path(:id => relation_v1.relation_id, :version => relation_v1.version)
+      get api_old_relation_path(relation_v1.relation_id, relation_v1.version)
       assert_response :forbidden, "Redacted relation shouldn't be visible via the version API."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get relation_version_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
+      get api_old_relation_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
       assert_response :forbidden, "Redacted relation shouldn't be visible via the version API, even when logged in."
     end
 
@@ -138,15 +138,15 @@ module Api
       relation_v1 = relation.old_relations.find_by(:version => 1)
       relation_v1.redact!(create(:redaction))
 
-      get api_relation_history_path(:id => relation_v1.relation_id)
+      get api_relation_history_path(relation)
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v1.relation_id}'][version='#{relation_v1.version}']", 0,
                     "redacted relation #{relation_v1.relation_id} version #{relation_v1.version} shouldn't be present in the history."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get relation_version_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
-      get api_relation_history_path(:id => relation_v1.relation_id), :headers => auth_header
+      get api_old_relation_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
+      get api_relation_history_path(relation), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v1.relation_id}'][version='#{relation_v1.version}']", 0,
                     "redacted relation #{relation_v1.relation_id} version #{relation_v1.version} shouldn't be present in the history, even when logged in."
@@ -166,17 +166,17 @@ module Api
 
       # check moderator can still see the redacted data, when passing
       # the appropriate flag
-      get relation_version_path(:id => relation_v3.relation_id, :version => relation_v3.version), :headers => auth_header
+      get api_old_relation_path(relation_v3.relation_id, relation_v3.version), :headers => auth_header
       assert_response :forbidden, "After redaction, relation should be gone for moderator, when flag not passed."
-      get relation_version_path(:id => relation_v3.relation_id, :version => relation_v3.version), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_old_relation_path(relation_v3.relation_id, relation_v3.version, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "After redaction, relation should not be gone for moderator, when flag passed."
 
       # and when accessed via history
-      get api_relation_history_path(:id => relation_v3.relation_id), :headers => auth_header
+      get api_relation_history_path(relation), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v3.relation_id}'][version='#{relation_v3.version}']", 0,
                     "relation #{relation_v3.relation_id} version #{relation_v3.version} should not be present in the history for moderators when not passing flag."
-      get api_relation_history_path(:id => relation_v3.relation_id), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_relation_history_path(relation, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v3.relation_id}'][version='#{relation_v3.version}']", 1,
                     "relation #{relation_v3.relation_id} version #{relation_v3.version} should still be present in the history for moderators when passing flag."
@@ -197,11 +197,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check can't see the redacted data
-      get relation_version_path(:id => relation_v3.relation_id, :version => relation_v3.version), :headers => auth_header
+      get api_old_relation_path(relation_v3.relation_id, relation_v3.version), :headers => auth_header
       assert_response :forbidden, "Redacted relation shouldn't be visible via the version API."
 
       # and when accessed via history
-      get api_relation_history_path(:id => relation_v3.relation_id), :headers => auth_header
+      get api_relation_history_path(relation), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v3.relation_id}'][version='#{relation_v3.version}']", 0,
                     "redacted relation #{relation_v3.relation_id} version #{relation_v3.version} shouldn't be present in the history."
@@ -215,7 +215,7 @@ module Api
       relation_v1 = relation.old_relations.find_by(:version => 1)
       relation_v1.redact!(create(:redaction))
 
-      post relation_version_redact_path(:id => relation_v1.relation_id, :version => relation_v1.version)
+      post relation_version_redact_path(relation_v1.relation_id, relation_v1.version)
       assert_response :unauthorized, "should need to be authenticated to unredact."
     end
 
@@ -229,7 +229,7 @@ module Api
 
       auth_header = basic_authorization_header create(:user).email, "test"
 
-      post relation_version_redact_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
+      post relation_version_redact_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
       assert_response :forbidden, "should need to be moderator to unredact."
     end
 
@@ -243,16 +243,16 @@ module Api
 
       auth_header = basic_authorization_header create(:moderator_user).email, "test"
 
-      post relation_version_redact_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
+      post relation_version_redact_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
       assert_response :success, "should be OK to unredact old version as moderator."
 
       # check moderator can still see the redacted data, without passing
       # the appropriate flag
-      get relation_version_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
+      get api_old_relation_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
       assert_response :success, "After unredaction, relation should not be gone for moderator."
 
       # and when accessed via history
-      get api_relation_history_path(:id => relation_v1.relation_id), :headers => auth_header
+      get api_relation_history_path(relation), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v1.relation_id}'][version='#{relation_v1.version}']", 1,
                     "relation #{relation_v1.relation_id} version #{relation_v1.version} should still be present in the history for moderators."
@@ -260,11 +260,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check normal user can now see the redacted data
-      get relation_version_path(:id => relation_v1.relation_id, :version => relation_v1.version), :headers => auth_header
+      get api_old_relation_path(relation_v1.relation_id, relation_v1.version), :headers => auth_header
       assert_response :success, "After redaction, node should not be gone for normal user."
 
       # and when accessed via history
-      get api_relation_history_path(:id => relation_v1.relation_id), :headers => auth_header
+      get api_relation_history_path(relation), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm relation[id='#{relation_v1.relation_id}'][version='#{relation_v1.version}']", 1,
                     "relation #{relation_v1.relation_id} version #{relation_v1.version} should still be present in the history for normal users."
@@ -329,11 +329,11 @@ module Api
     end
 
     def do_redact_relation(relation, redaction, headers = {})
-      get relation_version_path(:id => relation.relation_id, :version => relation.version)
+      get api_old_relation_path(relation.relation_id, relation.version)
       assert_response :success, "should be able to get version #{relation.version} of relation #{relation.relation_id}."
 
       # now redact it
-      post relation_version_redact_path(:id => relation.relation_id, :version => relation.version), :params => { :redaction => redaction.id }, :headers => headers
+      post relation_version_redact_path(relation.relation_id, relation.version), :params => { :redaction => redaction.id }, :headers => headers
     end
   end
 end
index 4c225fb3347febcaecb710b8913a0686d3065f86..8081082cf54bd405f9f3a6965e39b7502dfda835 100644 (file)
@@ -11,7 +11,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/way/1/2", :method => :get },
-        { :controller => "api/old_ways", :action => "version", :id => "1", :version => "2" }
+        { :controller => "api/old_ways", :action => "show", :id => "1", :version => "2" }
       )
       assert_routing(
         { :path => "/api/0.6/way/1/history.json", :method => :get },
@@ -19,7 +19,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/way/1/2.json", :method => :get },
-        { :controller => "api/old_ways", :action => "version", :id => "1", :version => "2", :format => "json" }
+        { :controller => "api/old_ways", :action => "show", :id => "1", :version => "2", :format => "json" }
       )
       assert_routing(
         { :path => "/api/0.6/way/1/2/redact", :method => :post },
@@ -45,7 +45,7 @@ module Api
 
     def test_history_invalid
       # check chat a non-existent way is not returned
-      get api_way_history_path(:id => 0)
+      get api_way_history_path(0)
       assert_response :not_found
     end
 
@@ -163,12 +163,12 @@ module Api
       way_v1 = way.old_ways.find_by(:version => 1)
       way_v1.redact!(create(:redaction))
 
-      get way_version_path(:id => way_v1.way_id, :version => way_v1.version)
+      get api_old_way_path(way_v1.way_id, way_v1.version)
       assert_response :forbidden, "Redacted way shouldn't be visible via the version API."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get way_version_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
+      get api_old_way_path(way_v1.way_id, way_v1.version), :headers => auth_header
       assert_response :forbidden, "Redacted way shouldn't be visible via the version API, even when logged in."
     end
 
@@ -179,15 +179,14 @@ module Api
       way_v1 = way.old_ways.find_by(:version => 1)
       way_v1.redact!(create(:redaction))
 
-      get api_way_history_path(:id => way_v1.way_id)
+      get api_way_history_path(way)
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v1.way_id}'][version='#{way_v1.version}']", 0,
                     "redacted way #{way_v1.way_id} version #{way_v1.version} shouldn't be present in the history."
 
       # not even to a logged-in user
       auth_header = basic_authorization_header create(:user).email, "test"
-      get way_version_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
-      get api_way_history_path(:id => way_v1.way_id), :headers => auth_header
+      get api_way_history_path(way), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v1.way_id}'][version='#{way_v1.version}']", 0,
                     "redacted node #{way_v1.way_id} version #{way_v1.version} shouldn't be present in the history, even when logged in."
@@ -206,17 +205,17 @@ module Api
 
       # check moderator can still see the redacted data, when passing
       # the appropriate flag
-      get way_version_path(:id => way_v3.way_id, :version => way_v3.version), :headers => auth_header
+      get api_old_way_path(way_v3.way_id, way_v3.version), :headers => auth_header
       assert_response :forbidden, "After redaction, node should be gone for moderator, when flag not passed."
-      get way_version_path(:id => way_v3.way_id, :version => way_v3.version), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_old_way_path(way_v3.way_id, way_v3.version, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "After redaction, node should not be gone for moderator, when flag passed."
 
       # and when accessed via history
-      get api_way_history_path(:id => way_v3.way_id), :headers => auth_header
+      get api_way_history_path(way), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v3.way_id}'][version='#{way_v3.version}']", 0,
                     "way #{way_v3.way_id} version #{way_v3.version} should not be present in the history for moderators when not passing flag."
-      get api_way_history_path(:id => way_v3.way_id), :params => { :show_redactions => "true" }, :headers => auth_header
+      get api_way_history_path(way, :show_redactions => "true"), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v3.way_id}'][version='#{way_v3.version}']", 1,
                     "way #{way_v3.way_id} version #{way_v3.version} should still be present in the history for moderators when passing flag."
@@ -236,11 +235,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check can't see the redacted data
-      get way_version_path(:id => way_v3.way_id, :version => way_v3.version), :headers => auth_header
+      get api_old_way_path(way_v3.way_id, way_v3.version), :headers => auth_header
       assert_response :forbidden, "Redacted node shouldn't be visible via the version API."
 
       # and when accessed via history
-      get api_way_history_path(:id => way_v3.way_id), :headers => auth_header
+      get api_way_history_path(way), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v3.way_id}'][version='#{way_v3.version}']", 0,
                     "redacted way #{way_v3.way_id} version #{way_v3.version} shouldn't be present in the history."
@@ -254,7 +253,7 @@ module Api
       way_v1 = way.old_ways.find_by(:version => 1)
       way_v1.redact!(create(:redaction))
 
-      post way_version_redact_path(:id => way_v1.way_id, :version => way_v1.version)
+      post way_version_redact_path(way_v1.way_id, way_v1.version)
       assert_response :unauthorized, "should need to be authenticated to unredact."
     end
 
@@ -268,7 +267,7 @@ module Api
 
       auth_header = basic_authorization_header create(:user).email, "test"
 
-      post way_version_redact_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
+      post way_version_redact_path(way_v1.way_id, way_v1.version), :headers => auth_header
       assert_response :forbidden, "should need to be moderator to unredact."
     end
 
@@ -283,16 +282,16 @@ module Api
 
       auth_header = basic_authorization_header moderator_user.email, "test"
 
-      post way_version_redact_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
+      post way_version_redact_path(way_v1.way_id, way_v1.version), :headers => auth_header
       assert_response :success, "should be OK to unredact old version as moderator."
 
       # check moderator can still see the unredacted data, without passing
       # the appropriate flag
-      get way_version_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
+      get api_old_way_path(way_v1.way_id, way_v1.version), :headers => auth_header
       assert_response :success, "After unredaction, node should not be gone for moderator."
 
       # and when accessed via history
-      get api_way_history_path(:id => way_v1.way_id), :headers => auth_header
+      get api_way_history_path(way), :headers => auth_header
       assert_response :success, "Unredaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v1.way_id}'][version='#{way_v1.version}']", 1,
                     "way #{way_v1.way_id} version #{way_v1.version} should still be present in the history for moderators."
@@ -300,11 +299,11 @@ module Api
       auth_header = basic_authorization_header create(:user).email, "test"
 
       # check normal user can now see the unredacted data
-      get way_version_path(:id => way_v1.way_id, :version => way_v1.version), :headers => auth_header
+      get api_old_way_path(way_v1.way_id, way_v1.version), :headers => auth_header
       assert_response :success, "After redaction, node should not be gone for moderator, when flag passed."
 
       # and when accessed via history
-      get api_way_history_path(:id => way_v1.way_id), :headers => auth_header
+      get api_way_history_path(way), :headers => auth_header
       assert_response :success, "Redaction shouldn't have stopped history working."
       assert_select "osm way[id='#{way_v1.way_id}'][version='#{way_v1.version}']", 1,
                     "way #{way_v1.way_id} version #{way_v1.version} should still be present in the history for normal users."
@@ -325,7 +324,7 @@ module Api
       assert_not_nil current_way, "getting way #{way_id} returned nil"
 
       # get the "old" version of the way from the version method
-      get way_version_path(:id => way_id, :version => current_way.version)
+      get api_old_way_path(way_id, current_way.version)
       assert_response :success, "can't get old way #{way_id}, v#{current_way.version}"
       old_way = Way.from_xml(@response.body)
 
@@ -337,7 +336,7 @@ module Api
     # look at all the versions of the way in the history and get each version from
     # the versions call. check that they're the same.
     def check_history_equals_versions(way_id)
-      get api_way_history_path(:id => way_id)
+      get api_way_history_path(way_id)
       assert_response :success, "can't get way #{way_id} from API"
       history_doc = XML::Parser.string(@response.body).parse
       assert_not_nil history_doc, "parsing way #{way_id} history failed"
@@ -346,7 +345,7 @@ module Api
         history_way = Way.from_xml_node(way_doc)
         assert_not_nil history_way, "parsing way #{way_id} version failed"
 
-        get way_version_path(:id => way_id, :version => history_way.version)
+        get api_old_way_path(way_id, history_way.version)
         assert_response :success, "couldn't get way #{way_id}, v#{history_way.version}"
         version_way = Way.from_xml(@response.body)
         assert_not_nil version_way, "failed to parse #{way_id}, v#{history_way.version}"
@@ -369,11 +368,11 @@ module Api
     end
 
     def do_redact_way(way, redaction, headers = {})
-      get way_version_path(:id => way.way_id, :version => way.version)
+      get api_old_way_path(way.way_id, way.version)
       assert_response :success, "should be able to get version #{way.version} of way #{way.way_id}."
 
       # now redact it
-      post way_version_redact_path(:id => way.way_id, :version => way.version), :params => { :redaction => redaction.id }, :headers => headers
+      post way_version_redact_path(way.way_id, way.version), :params => { :redaction => redaction.id }, :headers => headers
     end
 
     def propagate_tags(way, old_way)
index e6f507d3a84169446370854db4164e96bee033e0..e69dcdfe2ea130f872f07d31ef26a1989368c7ea 100644 (file)
@@ -82,7 +82,7 @@ module Api
       assert_response :gone
 
       # check chat a non-existent relation is not returned
-      get api_relation_path(:id => 0)
+      get api_relation_path(0)
       assert_response :not_found
     end
 
@@ -178,11 +178,11 @@ module Api
       assert_response :bad_request
 
       # check error when no parameter value provided
-      get relations_path, :params => { :relations => "" }
+      get relations_path(:relations => "")
       assert_response :bad_request
 
       # test a working call
-      get relations_path, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}" }
+      get relations_path(:relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}")
       assert_response :success
       assert_select "osm" do
         assert_select "relation", :count => 4
@@ -193,7 +193,7 @@ module Api
       end
 
       # test a working call with json format
-      get relations_path, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}", :format => "json" }
+      get relations_path(:relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}", :format => "json")
 
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -205,7 +205,7 @@ module Api
       assert_equal 1, (js["elements"].count { |a| a["id"] == relation4.id && a["visible"].nil? })
 
       # check error when a non-existent relation is included
-      get relations_path, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id},0" }
+      get relations_path(:relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id},0")
       assert_response :not_found
     end
 
@@ -286,7 +286,7 @@ module Api
       assert checkrelation.visible,
              "saved relation is not visible"
       # ok the relation is there but can we also retrieve it?
-      get api_relation_path(:id => relationid)
+      get api_relation_path(relationid)
       assert_response :success
 
       ###
@@ -315,7 +315,7 @@ module Api
              "saved relation is not visible"
       # ok the relation is there but can we also retrieve it?
 
-      get api_relation_path(:id => relationid)
+      get api_relation_path(relationid)
       assert_response :success
 
       ###
@@ -343,7 +343,7 @@ module Api
              "saved relation is not visible"
       # ok the relation is there but can we also retrieve it?
 
-      get api_relation_path(:id => relationid)
+      get api_relation_path(relationid)
       assert_response :success
 
       ###
@@ -371,7 +371,7 @@ module Api
       assert checkrelation.visible,
              "saved relation is not visible"
       # ok the relation is there but can we also retrieve it?
-      get api_relation_path(:id => relationid)
+      get api_relation_path(relationid)
       assert_response :success
     end
 
@@ -453,7 +453,7 @@ module Api
       auth_header = basic_authorization_header user.email, "test"
       with_relation(relation.id) do |rel|
         update_changeset(rel, changeset.id)
-        put api_relation_path(:id => other_relation.id), :params => rel.to_s, :headers => auth_header
+        put api_relation_path(other_relation), :params => rel.to_s, :headers => auth_header
         assert_response :bad_request
       end
     end
@@ -560,7 +560,7 @@ module Api
       assert_response :forbidden
 
       # this won't work since the relation never existed
-      delete api_relation_path(:id => 0), :headers => auth_header
+      delete api_relation_path(0), :headers => auth_header
       assert_response :forbidden
 
       ## now set auth for the public user
@@ -632,7 +632,7 @@ module Api
                       "should be able to delete a relation used in an old relation (#{@response.body})"
 
       # this won't work since the relation never existed
-      delete api_relation_path(:id => 0), :headers => auth_header
+      delete api_relation_path(0), :headers => auth_header
       assert_response :not_found
     end
 
@@ -695,7 +695,7 @@ module Api
           update_changeset(relation_xml, changeset_id)
 
           # upload the change
-          put api_relation_path(:id => relation.id), :params => relation_xml.to_s, :headers => auth_header
+          put api_relation_path(relation), :params => relation_xml.to_s, :headers => auth_header
           assert_response :success, "can't update relation for add #{element.class}/bbox test: #{@response.body}"
 
           # get it back and check the ordering
@@ -762,7 +762,7 @@ module Api
       relation_id = @response.body.to_i
 
       # get it back and check the ordering
-      get api_relation_path(:id => relation_id)
+      get api_relation_path(relation_id)
       assert_response :success, "can't read back the relation: #{@response.body}"
       check_ordering(doc, @response.body)
 
@@ -777,18 +777,18 @@ module Api
       doc.find("//osm/relation").first["version"] = 1.to_s
 
       # upload the next version of the relation
-      put api_relation_path(:id => relation_id), :params => doc.to_s, :headers => auth_header
+      put api_relation_path(relation_id), :params => doc.to_s, :headers => auth_header
       assert_response :success, "can't update relation: #{@response.body}"
       assert_equal 2, @response.body.to_i
 
       # get it back again and check the ordering again
-      get api_relation_path(:id => relation_id)
+      get api_relation_path(relation_id)
       assert_response :success, "can't read back the relation: #{@response.body}"
       check_ordering(doc, @response.body)
 
       # check the ordering in the history tables:
       with_controller(OldRelationsController.new) do
-        get relation_version_path(:id => relation_id, :version => 2)
+        get api_old_relation_path(relation_id, 2)
         assert_response :success, "can't read back version 2 of the relation #{relation_id}"
         check_ordering(doc, @response.body)
       end
@@ -829,7 +829,7 @@ module Api
       relation_id = @response.body.to_i
 
       # get it back and check the ordering
-      get api_relation_path(:id => relation_id)
+      get api_relation_path(relation_id)
       assert_response :success, "can't read back the relation: #{relation_id}"
       check_ordering(doc, @response.body)
     end
@@ -862,13 +862,13 @@ module Api
       relation_id = @response.body.to_i
 
       # check the ordering in the current tables:
-      get api_relation_path(:id => relation_id)
+      get api_relation_path(relation_id)
       assert_response :success, "can't read back the relation: #{@response.body}"
       check_ordering(doc, @response.body)
 
       # check the ordering in the history tables:
       with_controller(OldRelationsController.new) do
-        get relation_version_path(:id => relation_id, :version => 1)
+        get api_old_relation_path(relation_id, 1)
         assert_response :success, "can't read back version 1 of the relation: #{@response.body}"
         check_ordering(doc, @response.body)
       end
@@ -1106,10 +1106,10 @@ module Api
     # doc is returned.
     def with_relation(id, ver = nil)
       if ver.nil?
-        get api_relation_path(:id => id)
+        get api_relation_path(id)
       else
         with_controller(OldRelationsController.new) do
-          get relation_version_path(:id => id, :version => ver)
+          get api_old_relation_path(id, ver)
         end
       end
       assert_response :success
@@ -1122,12 +1122,12 @@ module Api
     # the parsed XML doc is returned.
     def with_update(rel, headers)
       rel_id = rel.find("//osm/relation").first["id"].to_i
-      put api_relation_path(:id => rel_id), :params => rel.to_s, :headers => headers
+      put api_relation_path(rel_id), :params => rel.to_s, :headers => headers
       assert_response :success, "can't update relation: #{@response.body}"
       version = @response.body.to_i
 
       # now get the new version
-      get api_relation_path(:id => rel_id)
+      get api_relation_path(rel_id)
       assert_response :success
       new_rel = xml_parse(@response.body)
 
@@ -1159,7 +1159,7 @@ module Api
       end
 
       # now get the new version
-      get api_relation_path(:id => rel_id)
+      get api_relation_path(rel_id)
       assert_response :success
       new_rel = xml_parse(@response.body)
 
index 791da8029f8725e4a6209267641155f9610120ba..e11cceeb2de7d194ec0c1ef523be129b5fa90e75 100644 (file)
@@ -57,7 +57,7 @@ module Api
       assert_response :gone
 
       # check chat a non-existent way is not returned
-      get api_way_path(:id => 0)
+      get api_way_path(0)
       assert_response :not_found
     end
 
@@ -102,11 +102,11 @@ module Api
       assert_response :bad_request
 
       # check error when no parameter value provided
-      get ways_path, :params => { :ways => "" }
+      get ways_path(:ways => "")
       assert_response :bad_request
 
       # test a working call
-      get ways_path, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}" }
+      get ways_path(:ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}")
       assert_response :success
       assert_select "osm" do
         assert_select "way", :count => 4
@@ -117,7 +117,7 @@ module Api
       end
 
       # test a working call with json format
-      get ways_path, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}", :format => "json" }
+      get ways_path(:ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}", :format => "json")
 
       js = ActiveSupport::JSON.decode(@response.body)
       assert_not_nil js
@@ -129,7 +129,7 @@ module Api
       assert_equal 1, (js["elements"].count { |a| a["id"] == way4.id && a["visible"].nil? })
 
       # check error when a non-existent way is included
-      get ways_path, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id},0" }
+      get ways_path(:ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id},0")
       assert_response :not_found
     end
 
@@ -345,7 +345,7 @@ module Api
                       "shouldn't be able to delete a way used in a relation (#{@response.body}), when done by a private user"
 
       # this won't work since the way never existed
-      delete api_way_path(:id => 0), :headers => auth_header
+      delete api_way_path(0), :headers => auth_header
       assert_response :forbidden
 
       ### Now check with a public user
@@ -394,7 +394,7 @@ module Api
       assert_equal "Precondition failed: Way #{used_way.id} is still used by relations #{relation.id}.", @response.body
 
       # this won't work since the way never existed
-      delete api_way_path(:id => 0), :params => xml.to_s, :headers => auth_header
+      delete api_way_path(0), :params => xml.to_s, :headers => auth_header
       assert_response :not_found
     end
 
index fcdd7c752163136e1a6f8eaa650aecb94feb80d0..1844dcc6cc253e90d49d38bc57ca600236daa3ef 100644 (file)
@@ -4,337 +4,15 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest
   ##
   # test all routes which lead to this controller
   def test_routes
-    assert_routing(
-      { :path => "/node/1", :method => :get },
-      { :controller => "browse", :action => "node", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/node/1/history", :method => :get },
-      { :controller => "browse", :action => "node_history", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/way/1", :method => :get },
-      { :controller => "browse", :action => "way", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/way/1/history", :method => :get },
-      { :controller => "browse", :action => "way_history", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/relation/1", :method => :get },
-      { :controller => "browse", :action => "relation", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/relation/1/history", :method => :get },
-      { :controller => "browse", :action => "relation_history", :id => "1" }
-    )
     assert_routing(
       { :path => "/query", :method => :get },
       { :controller => "browse", :action => "query" }
     )
   end
 
-  def test_read_relation
-    relation = create(:relation)
-    sidebar_browse_check :relation_path, relation.id, "browse/feature"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
-    end
-    assert_select ".secondary-actions a[href='#{api_relation_path relation}']", :count => 1
-    assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
-  end
-
-  def test_multiple_version_relation_links
-    relation = create(:relation, :with_history, :version => 2)
-    sidebar_browse_check :relation_path, relation.id, "browse/feature"
-    assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1
-  end
-
-  def test_read_relation_history
-    relation = create(:relation, :with_history)
-    sidebar_browse_check :relation_history_path, relation.id, "browse/history"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
-    end
-  end
-
-  def test_read_way
-    way = create(:way)
-    sidebar_browse_check :way_path, way.id, "browse/feature"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
-    end
-    assert_select ".secondary-actions a[href='#{api_way_path way}']", :count => 1
-    assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
-  end
-
-  def test_multiple_version_way_links
-    way = create(:way, :with_history, :version => 2)
-    sidebar_browse_check :way_path, way.id, "browse/feature"
-    assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1
-  end
-
-  def test_read_way_history
-    way = create(:way, :with_history)
-    sidebar_browse_check :way_history_path, way.id, "browse/history"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
-    end
-  end
-
-  def test_read_node
-    node = create(:node)
-    sidebar_browse_check :node_path, node.id, "browse/feature"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
-    end
-    assert_select ".secondary-actions a[href='#{api_node_path node}']", :count => 1
-    assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
-  end
-
-  def test_multiple_version_node_links
-    node = create(:node, :with_history, :version => 2)
-    sidebar_browse_check :node_path, node.id, "browse/feature"
-    assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1
-    assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1
-  end
-
-  def test_read_deleted_node
-    node = create(:node, :visible => false)
-    sidebar_browse_check :node_path, node.id, "browse/feature"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
-    end
-    assert_select "a[href='#{api_node_path node}']", :count => 0
-  end
-
-  def test_read_node_history
-    node = create(:node, :with_history)
-    sidebar_browse_check :node_history_path, node.id, "browse/history"
-    assert_select "h4", /^Version/ do
-      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
-    end
-  end
-
-  ##
-  #  Methods to check redaction.
-  #
-  # note that these are presently highly reliant on the structure of the
-  # page for the selection tests, which doesn't work out particularly
-  # well if that structure changes. so... if you change the page layout
-  # then please make it more easily (and robustly) testable!
-  ##
-  def test_redacted_node
-    node = create(:node, :with_history, :deleted, :version => 2)
-    node_v1 = node.old_nodes.find_by(:version => 1)
-    node_v1.redact!(create(:redaction))
-
-    get node_path(:id => node)
-    assert_response :success
-    assert_template "feature"
-
-    # check that we don't show lat/lon for a redacted node.
-    assert_select ".browse-section", 1
-    assert_select ".browse-section.browse-node", 1
-    assert_select ".browse-section.browse-node .latitude", 0
-    assert_select ".browse-section.browse-node .longitude", 0
-  end
-
-  def test_redacted_node_history
-    node = create(:node, :with_history, :deleted, :version => 2)
-    node_v1 = node.old_nodes.find_by(:version => 1)
-    node_v1.redact!(create(:redaction))
-
-    get node_history_path(:id => node)
-    assert_response :success
-    assert_template "browse/history"
-
-    # there are 2 revisions of the redacted node, but only one
-    # should be showing details here.
-    assert_select ".browse-section", 2
-    assert_select ".browse-section.browse-redacted", 1
-    assert_select ".browse-section.browse-node", 1
-    assert_select ".browse-section.browse-node .latitude", 0
-    assert_select ".browse-section.browse-node .longitude", 0
-  end
-
-  def test_redacted_node_unredacted_history
-    session_for(create(:moderator_user))
-    node = create(:node, :with_history, :deleted, :version => 2)
-    node_v1 = node.old_nodes.find_by(:version => 1)
-    node_v1.redact!(create(:redaction))
-
-    get node_history_path(:id => node, :params => { :show_redactions => true })
-    assert_response :success
-    assert_template "browse/history"
-
-    assert_select ".browse-section", 2
-    assert_select ".browse-section.browse-redacted", 0
-    assert_select ".browse-section.browse-node", 2
-  end
-
-  def test_redacted_way_history
-    way = create(:way, :with_history, :version => 4)
-    way_v1 = way.old_ways.find_by(:version => 1)
-    way_v1.redact!(create(:redaction))
-    way_v3 = way.old_ways.find_by(:version => 3)
-    way_v3.redact!(create(:redaction))
-
-    get way_history_path(:id => way)
-    assert_response :success
-    assert_template "browse/history"
-
-    # there are 4 revisions of the redacted way, but only 2
-    # should be showing details here.
-    assert_select ".browse-section", 4
-    assert_select ".browse-section.browse-redacted", 2
-    assert_select ".browse-section.browse-way", 2
-  end
-
-  def test_redacted_way_unredacted_history
-    session_for(create(:moderator_user))
-    way = create(:way, :with_history, :version => 4)
-    way_v1 = way.old_ways.find_by(:version => 1)
-    way_v1.redact!(create(:redaction))
-    way_v3 = way.old_ways.find_by(:version => 3)
-    way_v3.redact!(create(:redaction))
-
-    get way_history_path(:id => way, :params => { :show_redactions => true })
-    assert_response :success
-    assert_template "browse/history"
-
-    assert_select ".browse-section", 4
-    assert_select ".browse-section.browse-redacted", 0
-    assert_select ".browse-section.browse-way", 4
-  end
-
-  def test_redacted_relation_history
-    relation = create(:relation, :with_history, :version => 4)
-    relation_v1 = relation.old_relations.find_by(:version => 1)
-    relation_v1.redact!(create(:redaction))
-    relation_v3 = relation.old_relations.find_by(:version => 3)
-    relation_v3.redact!(create(:redaction))
-
-    get relation_history_path(:id => relation)
-    assert_response :success
-    assert_template "browse/history"
-
-    # there are 4 revisions of the redacted relation, but only 2
-    # should be showing details here.
-    assert_select ".browse-section", 4
-    assert_select ".browse-section.browse-redacted", 2
-    assert_select ".browse-section.browse-relation", 2
-  end
-
-  def test_redacted_relation_unredacted_history
-    session_for(create(:moderator_user))
-    relation = create(:relation, :with_history, :version => 4)
-    relation_v1 = relation.old_relations.find_by(:version => 1)
-    relation_v1.redact!(create(:redaction))
-    relation_v3 = relation.old_relations.find_by(:version => 3)
-    relation_v3.redact!(create(:redaction))
-
-    get relation_history_path(:id => relation, :params => { :show_redactions => true })
-    assert_response :success
-    assert_template "browse/history"
-
-    assert_select ".browse-section", 4
-    assert_select ".browse-section.browse-redacted", 0
-    assert_select ".browse-section.browse-relation", 4
-  end
-
   def test_query
     get query_path
     assert_response :success
     assert_template "browse/query"
   end
-
-  def test_anonymous_user_feature_page_secondary_actions
-    node = create(:node, :with_history)
-    get node_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 0
-    assert_select ".secondary-actions a", :text => "View History", :count => 1
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
-  end
-
-  def test_regular_user_feature_page_secondary_actions
-    session_for(create(:user))
-    node = create(:node, :with_history)
-    get node_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 0
-    assert_select ".secondary-actions a", :text => "View History", :count => 1
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
-  end
-
-  def test_moderator_user_feature_page_secondary_actions
-    session_for(create(:moderator_user))
-    node = create(:node, :with_history)
-    get node_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 0
-    assert_select ".secondary-actions a", :text => "View History", :count => 1
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
-  end
-
-  def test_anonymous_user_history_page_secondary_actions
-    node = create(:node, :with_history)
-    get node_history_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 1
-    assert_select ".secondary-actions a", :text => "View History", :count => 0
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
-  end
-
-  def test_regular_user_history_page_secondary_actions
-    session_for(create(:user))
-    node = create(:node, :with_history)
-    get node_history_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 1
-    assert_select ".secondary-actions a", :text => "View History", :count => 0
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
-  end
-
-  def test_moderator_user_history_page_secondary_actions
-    session_for(create(:moderator_user))
-    node = create(:node, :with_history)
-    get node_history_path(:id => node)
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 1
-    assert_select ".secondary-actions a", :text => "View History", :count => 0
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
-  end
-
-  def test_anonymous_user_unredacted_history_page_secondary_actions
-    node = create(:node, :with_history)
-    get node_history_path(:id => node, :params => { :show_redactions => true })
-    assert_response :redirect
-  end
-
-  def test_regular_user_unredacted_history_page_secondary_actions
-    session_for(create(:user))
-    node = create(:node, :with_history)
-    get node_history_path(:id => node, :params => { :show_redactions => true })
-    assert_response :redirect
-  end
-
-  def test_moderator_user_unredacted_history_page_secondary_actions
-    session_for(create(:moderator_user))
-    node = create(:node, :with_history)
-    get node_history_path(:id => node, :params => { :show_redactions => true })
-    assert_response :success
-    assert_select ".secondary-actions a", :text => "View Details", :count => 1
-    assert_select ".secondary-actions a", :text => "View History", :count => 1
-    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
-  end
 end
index 0b26165250fa00ccfa74333ec97a9ec27dd9db5e..1fd9de2e810fb8a9735731055213fecd5148f967 100644 (file)
@@ -133,7 +133,9 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "history"
     assert_template :layout => "map"
-    assert_select "h2", :text => "Changesets by #{user.display_name}", :count => 1
+    assert_select "h2", :text => "Changesets by #{user.display_name}", :count => 1 do
+      assert_select "a[href=?]", user_path(user)
+    end
     assert_select "link[rel='alternate'][type='application/atom+xml']", :count => 1 do
       assert_select "[href=?]", "http://www.example.com/user/#{ERB::Util.url_encode(user.display_name)}/history/feed"
     end
@@ -266,6 +268,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     assert_dom "p", :text => "tested-changeset-comment"
     assert_dom "li#c#{changeset_comment.id}" do
       assert_dom "> small", :text => /^Comment from #{commenting_user.display_name}/
+      assert_dom "a[href='#{user_path(commenting_user)}']"
     end
   end
 
@@ -316,6 +319,15 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     end
   end
 
+  def test_show_adjacent_changesets
+    user = create(:user)
+    changesets = create_list(:changeset, 3, :user => user)
+
+    sidebar_browse_check :changeset_path, changesets[1].id, "changesets/show"
+    assert_dom "a[href='#{changeset_path changesets[0]}']", :count => 1
+    assert_dom "a[href='#{changeset_path changesets[2]}']", :count => 1
+  end
+
   ##
   # This should display the last 20 non-empty changesets
   def test_feed
@@ -402,7 +414,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
     other_user = create(:user)
     changeset = create(:changeset, :user => user)
-    path = changeset_subscribe_path(changeset)
+    path = subscribe_changeset_path(changeset)
 
     get path
     assert_redirected_to login_path(:referer => path)
@@ -423,7 +435,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
 
     session_for(other_user)
     assert_difference "changeset.subscribers.count", 1 do
-      post changeset_subscribe_path(changeset)
+      post subscribe_changeset_path(changeset)
     end
     assert_redirected_to changeset_path(changeset)
     assert changeset.reload.subscribed?(other_user)
@@ -437,20 +449,20 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
 
     # not signed in
     assert_no_difference "changeset.subscribers.count" do
-      post changeset_subscribe_path(changeset)
+      post subscribe_changeset_path(changeset)
     end
     assert_response :forbidden
 
     session_for(other_user)
 
     # bad diary id
-    post changeset_subscribe_path(999111)
+    post subscribe_changeset_path(999111)
     assert_response :not_found
 
     # trying to subscribe when already subscribed
-    post changeset_subscribe_path(changeset)
+    post subscribe_changeset_path(changeset)
     assert_no_difference "changeset.subscribers.count" do
-      post changeset_subscribe_path(changeset)
+      post subscribe_changeset_path(changeset)
     end
   end
 
@@ -458,7 +470,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
     other_user = create(:user)
     changeset = create(:changeset, :user => user)
-    path = changeset_unsubscribe_path(changeset)
+    path = unsubscribe_changeset_path(changeset)
 
     get path
     assert_redirected_to login_path(:referer => path)
@@ -481,7 +493,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
 
     session_for(other_user)
     assert_difference "changeset.subscribers.count", -1 do
-      post changeset_unsubscribe_path(changeset)
+      post unsubscribe_changeset_path(changeset)
     end
     assert_redirected_to changeset_path(changeset)
     assert_not changeset.reload.subscribed?(other_user)
@@ -495,19 +507,19 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
 
     # not signed in
     assert_no_difference "changeset.subscribers.count" do
-      post changeset_unsubscribe_path(changeset)
+      post unsubscribe_changeset_path(changeset)
     end
     assert_response :forbidden
 
     session_for(other_user)
 
     # bad diary id
-    post changeset_unsubscribe_path(999111)
+    post unsubscribe_changeset_path(999111)
     assert_response :not_found
 
     # trying to unsubscribe when not subscribed
     assert_no_difference "changeset.subscribers.count" do
-      post changeset_unsubscribe_path(changeset)
+      post unsubscribe_changeset_path(changeset)
     end
   end
 
index e2300e27be6f3ba05851ec6a413aaa8e9b17eda0..2b10402fa04cd14d159e3d3c76749cb42f758aab 100644 (file)
@@ -53,10 +53,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/user/username/diary/comments", :method => :get },
       { :controller => "diary_entries", :action => "comments", :display_name => "username" }
     )
-    assert_routing(
-      { :path => "/user/username/diary/comments/1", :method => :get },
-      { :controller => "diary_entries", :action => "comments", :display_name => "username", :page => "1" }
-    )
 
     assert_routing(
       { :path => "/diary/new", :method => :get },
@@ -114,6 +110,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/user/username/diary/1/unsubscribe", :method => :post },
       { :controller => "diary_entries", :action => "unsubscribe", :display_name => "username", :id => "1" }
     )
+
+    get "/user/username/diary/comments/1"
+    assert_redirected_to "/user/username/diary/comments"
   end
 
   def test_new_no_login
@@ -258,20 +257,20 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Make sure that you are redirected to the login page when you are
     # not logged in, without and with the id of the entry you want to edit
-    get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get edit_diary_entry_path(entry.user, entry)
     assert_redirected_to login_path(:referer => "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}/edit")
 
     session_for(other_user)
 
     # Verify that you get redirected to show if you are not the user
     # that created the entry
-    get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get edit_diary_entry_path(entry.user, entry)
     assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id
 
     session_for(entry.user)
 
     # Verify that you get a not found error, when you pass a bogus id
-    get edit_diary_entry_path(:display_name => entry.user.display_name, :id => 9999)
+    get edit_diary_entry_path(entry.user, :id => 9999)
     assert_response :not_found
     assert_select "div.content-heading", :count => 1 do
       assert_select "h1", :text => "No entry with the id: 9999", :count => 1
@@ -279,7 +278,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Now pass the id, and check that you can edit it, when using the same
     # user as the person who created the entry
-    get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get edit_diary_entry_path(entry.user, entry)
     assert_response :success
     assert_select "title", :text => /Edit Diary Entry/, :count => 1
     assert_select "div.content-heading", :count => 1 do
@@ -305,13 +304,13 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     new_latitude = "1.1"
     new_longitude = "2.2"
     new_language_code = "en"
-    put diary_entry_path(:display_name => entry.user.display_name, :id => entry, :commit => "save",
-                         :diary_entry => { :title => new_title, :body => new_body, :latitude => new_latitude,
-                                           :longitude => new_longitude, :language_code => new_language_code })
+    put diary_entry_path(entry.user, entry, :commit => "save",
+                                            :diary_entry => { :title => new_title, :body => new_body, :latitude => new_latitude,
+                                                              :longitude => new_longitude, :language_code => new_language_code })
     assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id
 
     # Now check that the new data is rendered, when logged in
-    get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get diary_entry_path(entry.user, entry)
     assert_response :success
     assert_template "show"
     assert_select "title", :text => /Users' Diaries | /, :count => 1
@@ -330,7 +329,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # and when not logged in as the user who wrote the entry
     session_for(create(:user))
-    get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get diary_entry_path(entry.user, entry)
     assert_response :success
     assert_template "show"
     assert_select "title", :text => /Users' Diaries | /, :count => 1
@@ -352,7 +351,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
     diary_entry = create(:diary_entry, :language_code => "en", :user => user)
     session_for(user)
-    get edit_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    get edit_diary_entry_path(user, diary_entry)
     assert_response :success
     assert_select "span[class=translation_missing]", false, "Missing translation in edit diary entry"
   end
@@ -364,13 +363,13 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     create(:diary_entry_subscription, :diary_entry => entry, :user => user)
 
     # Make sure that you are denied when you are not logged in
-    post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    post comment_diary_entry_path(entry.user, entry)
     assert_response :forbidden
 
     session_for(other_user)
 
     # Verify that you get a not found error, when you pass a bogus id
-    post comment_diary_entry_path(:display_name => entry.user.display_name, :id => 9999)
+    post comment_diary_entry_path(entry.user, :id => 9999)
     assert_response :not_found
     assert_select "div.content-heading", :count => 1 do
       assert_select "h1", :text => "No entry with the id: 9999", :count => 1
@@ -381,7 +380,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       assert_no_difference "DiaryComment.count" do
         assert_no_difference "entry.subscribers.count" do
           perform_enqueued_jobs do
-            post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => "" })
+            post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "" })
           end
         end
       end
@@ -394,7 +393,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       assert_difference "DiaryComment.count", 1 do
         assert_difference "entry.subscribers.count", 1 do
           perform_enqueued_jobs do
-            post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => "New comment" })
+            post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "New comment" })
           end
         end
       end
@@ -412,7 +411,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     assert_equal "New comment", comment.body
 
     # Now show the diary entry, and check the new comment is present
-    get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get diary_entry_path(entry.user, entry)
     assert_response :success
     assert_select ".diary-comment", :count => 1 do
       assert_select "#comment#{comment.id}", :count => 1 do
@@ -437,7 +436,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
       assert_difference "DiaryComment.count", 1 do
         perform_enqueued_jobs do
-          post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => spammy_text })
+          post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => spammy_text })
         end
       end
     end
@@ -459,7 +458,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     assert_redirected_to :controller => :users, :action => :suspended
 
     # Now show the diary entry, and check the new comment is not present
-    get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+    get diary_entry_path(entry.user, entry)
     assert_response :success
     assert_select ".diary-comment", :count => 0
   end
@@ -685,7 +684,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Try a normal entry that should work
     diary_entry = create(:diary_entry, :user => user)
-    get diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    get diary_entry_path(user, diary_entry)
     assert_response :success
     assert_template :show
 
@@ -696,28 +695,28 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Try a deleted entry
     diary_entry_deleted = create(:diary_entry, :user => user, :visible => false)
-    get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+    get diary_entry_path(user, diary_entry_deleted)
     assert_response :not_found
 
     # Try an entry by a suspended user
     diary_entry_suspended_user = create(:diary_entry, :user => suspended_user)
-    get diary_entry_path(:display_name => suspended_user.display_name, :id => diary_entry_suspended_user)
+    get diary_entry_path(suspended_user, diary_entry_suspended_user)
     assert_response :not_found
 
     # Try an entry by a deleted user
     diary_entry_deleted_user = create(:diary_entry, :user => deleted_user)
-    get diary_entry_path(:display_name => deleted_user.display_name, :id => diary_entry_deleted_user)
+    get diary_entry_path(deleted_user, diary_entry_deleted_user)
     assert_response :not_found
 
     # Now try as a moderator
     session_for(create(:moderator_user))
-    get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+    get diary_entry_path(user, diary_entry_deleted)
     assert_response :success
     assert_template :show
 
     # Finally try as an administrator
     session_for(create(:administrator_user))
-    get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+    get diary_entry_path(user, diary_entry_deleted)
     assert_response :success
     assert_template :show
   end
@@ -731,7 +730,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     deleted_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => create(:user, :deleted))
     hidden_comment = create(:diary_comment, :diary_entry => diary_entry, :visible => false)
 
-    get diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    get diary_entry_path(user, diary_entry)
     assert_response :success
     assert_template :show
     assert_select "div.comments" do
@@ -747,19 +746,19 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     diary_entry = create(:diary_entry, :user => user)
 
     # Try without logging in
-    post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post hide_diary_entry_path(user, diary_entry)
     assert_response :forbidden
     assert DiaryEntry.find(diary_entry.id).visible
 
     # Now try as a normal user
     session_for(user)
-    post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post hide_diary_entry_path(user, diary_entry)
     assert_redirected_to :controller => :errors, :action => :forbidden
     assert DiaryEntry.find(diary_entry.id).visible
 
     # Now try as a moderator
     session_for(create(:moderator_user))
-    post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post hide_diary_entry_path(user, diary_entry)
     assert_redirected_to :action => :index, :display_name => user.display_name
     assert_not DiaryEntry.find(diary_entry.id).visible
 
@@ -768,7 +767,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Finally try as an administrator
     session_for(create(:administrator_user))
-    post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post hide_diary_entry_path(user, diary_entry)
     assert_redirected_to :action => :index, :display_name => user.display_name
     assert_not DiaryEntry.find(diary_entry.id).visible
   end
@@ -778,19 +777,19 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Try without logging in
     diary_entry = create(:diary_entry, :user => user, :visible => false)
-    post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post unhide_diary_entry_path(user, diary_entry)
     assert_response :forbidden
     assert_not DiaryEntry.find(diary_entry.id).visible
 
     # Now try as a normal user
     session_for(user)
-    post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post unhide_diary_entry_path(user, diary_entry)
     assert_redirected_to :controller => :errors, :action => :forbidden
     assert_not DiaryEntry.find(diary_entry.id).visible
 
     # Now try as a moderator
     session_for(create(:moderator_user))
-    post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post unhide_diary_entry_path(user, diary_entry)
     assert_redirected_to :action => :index, :display_name => user.display_name
     assert DiaryEntry.find(diary_entry.id).visible
 
@@ -799,7 +798,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Finally try as an administrator
     session_for(create(:administrator_user))
-    post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+    post unhide_diary_entry_path(user, diary_entry)
     assert_redirected_to :action => :index, :display_name => user.display_name
     assert DiaryEntry.find(diary_entry.id).visible
   end
@@ -810,19 +809,19 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     diary_comment = create(:diary_comment, :diary_entry => diary_entry)
 
     # Try without logging in
-    post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post hide_diary_comment_path(user, diary_entry, diary_comment)
     assert_response :forbidden
     assert DiaryComment.find(diary_comment.id).visible
 
     # Now try as a normal user
     session_for(user)
-    post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post hide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :controller => :errors, :action => :forbidden
     assert DiaryComment.find(diary_comment.id).visible
 
     # Try as a moderator
     session_for(create(:moderator_user))
-    post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post hide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
     assert_not DiaryComment.find(diary_comment.id).visible
 
@@ -831,7 +830,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Finally try as an administrator
     session_for(create(:administrator_user))
-    post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post hide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
     assert_not DiaryComment.find(diary_comment.id).visible
   end
@@ -842,19 +841,19 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     diary_comment = create(:diary_comment, :diary_entry => diary_entry, :visible => false)
 
     # Try without logging in
-    post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post unhide_diary_comment_path(user, diary_entry, diary_comment)
     assert_response :forbidden
     assert_not DiaryComment.find(diary_comment.id).visible
 
     # Now try as a normal user
     session_for(user)
-    post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post unhide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :controller => :errors, :action => :forbidden
     assert_not DiaryComment.find(diary_comment.id).visible
 
     # Now try as a moderator
     session_for(create(:moderator_user))
-    post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post unhide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
     assert DiaryComment.find(diary_comment.id).visible
 
@@ -863,7 +862,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # Finally try as an administrator
     session_for(create(:administrator_user))
-    post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+    post unhide_diary_comment_path(user, diary_entry, diary_comment)
     assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
     assert DiaryComment.find(diary_comment.id).visible
   end
@@ -886,8 +885,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     get diary_comments_path(:display_name => other_user.display_name)
     assert_response :success
     assert_template :comments
-    assert_select "table.table-striped" do
-      assert_select "tr", :count => 2 # header and one comment
+    assert_dom "a[href='#{user_path(other_user)}']", :text => other_user.display_name
+    assert_select "table.table-striped tbody" do
+      assert_select "tr", :count => 1
     end
 
     # Test a suspended user
@@ -903,7 +903,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
     other_user = create(:user)
     diary_entry = create(:diary_entry, :user => user)
-    path = diary_entry_subscribe_path(:id => diary_entry, :display_name => user.display_name)
+    path = diary_entry_subscribe_path(user, diary_entry)
 
     get path
     assert_redirected_to login_path(:referer => path)
@@ -912,7 +912,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     get path
     assert_response :success
     assert_dom ".content-body" do
-      assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
+      assert_dom "a[href='#{diary_entry_path(user, diary_entry)}']", :text => diary_entry.title
       assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
     end
   end
@@ -924,7 +924,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     session_for(other_user)
     assert_difference "diary_entry.subscribers.count", 1 do
-      post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_subscribe_path(user, diary_entry)
     end
     assert_response :redirect
   end
@@ -937,20 +937,20 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # not signed in
     assert_no_difference "diary_entry.subscribers.count" do
-      post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_subscribe_path(user, diary_entry)
     end
     assert_response :forbidden
 
     session_for(other_user)
 
     # bad diary id
-    post diary_entry_subscribe_path(:id => 999111, :display_name => "username")
+    post diary_entry_subscribe_path("username", 999111)
     assert_response :not_found
 
     # trying to subscribe when already subscribed
-    post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+    post diary_entry_subscribe_path(user, diary_entry)
     assert_no_difference "diary_entry.subscribers.count" do
-      post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_subscribe_path(user, diary_entry)
     end
   end
 
@@ -958,7 +958,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
     other_user = create(:user)
     diary_entry = create(:diary_entry, :user => user)
-    path = diary_entry_unsubscribe_path(:id => diary_entry, :display_name => user.display_name)
+    path = diary_entry_unsubscribe_path(user, diary_entry)
 
     get path
     assert_redirected_to login_path(:referer => path)
@@ -967,7 +967,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     get path
     assert_response :success
     assert_dom ".content-body" do
-      assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
+      assert_dom "a[href='#{diary_entry_path(user, diary_entry)}']", :text => diary_entry.title
       assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
     end
   end
@@ -981,7 +981,7 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     session_for(other_user)
     assert_difference "diary_entry.subscribers.count", -1 do
-      post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_unsubscribe_path(user, diary_entry)
     end
     assert_response :redirect
   end
@@ -994,19 +994,19 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
 
     # not signed in
     assert_no_difference "diary_entry.subscribers.count" do
-      post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_unsubscribe_path(user, diary_entry)
     end
     assert_response :forbidden
 
     session_for(other_user)
 
     # bad diary id
-    post diary_entry_unsubscribe_path(:id => 999111, :display_name => "username")
+    post diary_entry_unsubscribe_path("username", 999111)
     assert_response :not_found
 
     # trying to unsubscribe when not subscribed
     assert_no_difference "diary_entry.subscribers.count" do
-      post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+      post diary_entry_unsubscribe_path(user, diary_entry)
     end
   end
 
index 19de4ae8e6784ad8c4dba37ac5ac242ecb4a8869..f63a8e44982318701c6c486ecda0d283798543da 100644 (file)
@@ -32,7 +32,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
 
     # When not logged in a GET should ask us to login
     get make_friend_path(friend)
-    assert_redirected_to login_path(:referer => make_friend_path(:display_name => friend.display_name))
+    assert_redirected_to login_path(:referer => make_friend_path(friend))
 
     # When not logged in a POST should error
     post make_friend_path(friend)
@@ -113,7 +113,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
   def test_make_friend_unknown_user
     # Should error when a bogus user is specified
     session_for(create(:user))
-    get make_friend_path(:display_name => "No Such User")
+    get make_friend_path("No Such User")
     assert_response :not_found
     assert_template :no_such_user
   end
@@ -129,7 +129,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
 
     # When not logged in a GET should ask us to login
     get remove_friend_path(friend)
-    assert_redirected_to login_path(:referer => remove_friend_path(:display_name => friend.display_name))
+    assert_redirected_to login_path(:referer => remove_friend_path(friend))
 
     # When not logged in a POST should error
     post remove_friend_path, :params => { :display_name => friend.display_name }
@@ -191,7 +191,7 @@ class FriendshipsControllerTest < ActionDispatch::IntegrationTest
   def test_remove_friend_unknown_user
     # Should error when a bogus user is specified
     session_for(create(:user))
-    get remove_friend_path(:display_name => "No Such User")
+    get remove_friend_path("No Such User")
     assert_response :not_found
     assert_template :no_such_user
   end
index 4897e52bb67570bf4456a8965f2c44028344a3bd..40581993fc6a7b6d648e9cc2928a863fbfe36959 100644 (file)
@@ -47,8 +47,8 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
   def test_new_no_login
     # Check that the new message page requires us to login
     user = create(:user)
-    get new_message_path(:display_name => user.display_name)
-    assert_redirected_to login_path(:referer => new_message_path(:display_name => user.display_name))
+    get new_message_path(user)
+    assert_redirected_to login_path(:referer => new_message_path(user))
   end
 
   ##
@@ -60,10 +60,11 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     session_for(user)
 
     # Check that the new message page loads
-    get new_message_path(:display_name => recipient_user.display_name)
+    get new_message_path(recipient_user)
     assert_response :success
     assert_template "new"
     assert_select "title", "Send message | OpenStreetMap"
+    assert_select "a[href='#{user_path recipient_user}']", :text => recipient_user.display_name
     assert_select "form[action='/messages']", :count => 1 do
       assert_select "input[type='hidden'][name='display_name'][value='#{recipient_user.display_name}']"
       assert_select "input#message_title", :count => 1
@@ -84,8 +85,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_difference "ActionMailer::Base.deliveries.size", 0 do
       assert_difference "Message.count", 0 do
         perform_enqueued_jobs do
-          get new_message_path(:display_name => recipient_user.display_name,
-                               :message => { :title => "Test Message", :body => "Test message body" })
+          get new_message_path(recipient_user, :message => { :title => "Test Message", :body => "Test message body" })
         end
       end
     end
@@ -197,7 +197,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_equal "markdown", m.body_format
 
     # Asking to send a message with a bogus user name should fail
-    get new_message_path(:display_name => "non_existent_user")
+    get new_message_path("non_existent_user")
     assert_response :not_found
     assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
@@ -245,7 +245,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     # Check that we can't reply to somebody else's message
     get message_reply_path(:message_id => unread_message)
     assert_redirected_to login_path(:referer => message_reply_path(:message_id => unread_message.id))
-    assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply.", flash[:notice]
+    assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to reply to was not sent to that user. Please log in as the correct user in order to reply.", flash[:notice]
 
     # Login as the right user
     session_for(recipient_user)
@@ -291,7 +291,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     # Check that we can't read the message
     get message_path(:id => unread_message)
     assert_redirected_to login_path(:referer => message_path(:id => unread_message.id))
-    assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it.", flash[:notice]
+    assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to read was not sent by or to that user. Please log in as the correct user in order to read it.", flash[:notice]
 
     # Login as the message sender
     session_for(user)
@@ -300,6 +300,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     get message_path(:id => unread_message)
     assert_response :success
     assert_template "show"
+    assert_select "a[href='#{user_path recipient_user}']", :text => recipient_user.display_name
     assert_not Message.find(unread_message.id).message_read
 
     # Login as the message recipient
@@ -309,6 +310,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     get message_path(:id => unread_message)
     assert_response :success
     assert_template "show"
+    assert_select "a[href='#{user_path user}']", :text => user.display_name
     assert Message.find(unread_message.id).message_read
 
     # Asking to read a message with no ID should fail
@@ -339,7 +341,10 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_template "inbox"
     assert_select ".content-inner > table", :count => 1 do
       assert_select "tr", :count => 2
-      assert_select "tr#inbox-#{read_message.id}.inbox-row", :count => 1
+      assert_select "tr#inbox-#{read_message.id}.inbox-row", :count => 1 do
+        assert_select "a[href='#{user_path read_message.sender}']", :text => read_message.sender.display_name
+        assert_select "a[href='#{message_path read_message}']", :text => read_message.title
+      end
     end
   end
 
@@ -347,7 +352,7 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
   # test the outbox action
   def test_outbox
     user = create(:user)
-    create(:message, :sender => user)
+    message = create(:message, :sender => user)
 
     # Check that the outbox page requires us to login
     get outbox_messages_path
@@ -362,7 +367,10 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_template "outbox"
     assert_select ".content-inner > table", :count => 1 do
       assert_select "tr", :count => 2
-      assert_select "tr.inbox-row", :count => 1
+      assert_select "tr.inbox-row", :count => 1 do
+        assert_select "a[href='#{user_path message.recipient}']", :text => message.recipient.display_name
+        assert_select "a[href='#{message_path message}']", :text => message.title
+      end
     end
   end
 
@@ -400,15 +408,13 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_not Message.find(unread_message.id).message_read
 
     # Check that the marking a message read via XHR works
-    post message_mark_path(:message_id => unread_message, :mark => "read"), :xhr => true
-    assert_response :success
-    assert_template "mark"
+    post message_mark_path(:message_id => unread_message, :mark => "read")
+    assert_response :see_other
     assert Message.find(unread_message.id).message_read
 
     # Check that the marking a message unread via XHR works
-    post message_mark_path(:message_id => unread_message, :mark => "unread"), :xhr => true
-    assert_response :success
-    assert_template "mark"
+    post message_mark_path(:message_id => unread_message, :mark => "unread")
+    assert_response :see_other
     assert_not Message.find(unread_message.id).message_read
 
     # Asking to mark a message with no ID should fail
diff --git a/test/controllers/nodes_controller_test.rb b/test/controllers/nodes_controller_test.rb
new file mode 100644 (file)
index 0000000..5bb08ea
--- /dev/null
@@ -0,0 +1,93 @@
+require "test_helper"
+
+class NodesControllerTest < ActionDispatch::IntegrationTest
+  ##
+  # test all routes which lead to this controller
+  def test_routes
+    assert_routing(
+      { :path => "/node/1", :method => :get },
+      { :controller => "nodes", :action => "show", :id => "1" }
+    )
+  end
+
+  def test_show
+    node = create(:node)
+    sidebar_browse_check :node_path, node.id, "browse/feature"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+    end
+    assert_select ".secondary-actions a[href='#{api_node_path node}']", :count => 1
+    assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
+  end
+
+  def test_show_multiple_versions
+    node = create(:node, :with_history, :version => 2)
+    sidebar_browse_check :node_path, node.id, "browse/feature"
+    assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1
+  end
+
+  def test_show_relation_member
+    member = create(:node)
+    relation = create(:relation)
+    create(:relation_member, :relation => relation, :member => member)
+    sidebar_browse_check :node_path, member.id, "browse/feature"
+    assert_select "a[href='#{relation_path relation}']", :count => 1
+  end
+
+  def test_show_deleted
+    node = create(:node, :visible => false)
+    sidebar_browse_check :node_path, node.id, "browse/feature"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+    end
+    assert_select "a[href='#{api_node_path node}']", :count => 0
+  end
+
+  def test_show_redacted
+    node = create(:node, :with_history, :deleted, :version => 2)
+    node_v1 = node.old_nodes.find_by(:version => 1)
+    node_v1.redact!(create(:redaction))
+
+    get node_path(node)
+    assert_response :success
+    assert_template "feature"
+
+    # check that we don't show lat/lon for a redacted node.
+    assert_select ".browse-section", 1
+    assert_select ".browse-section.browse-node", 1
+    assert_select ".browse-section.browse-node .latitude", 0
+    assert_select ".browse-section.browse-node .longitude", 0
+  end
+
+  def test_show_secondary_actions_to_anonymous_user
+    node = create(:node, :with_history)
+    get node_path(node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 0
+    assert_select ".secondary-actions a", :text => "View History", :count => 1
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+  end
+
+  def test_show_secondary_actions_to_regular_user
+    session_for(create(:user))
+    node = create(:node, :with_history)
+    get node_path(node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 0
+    assert_select ".secondary-actions a", :text => "View History", :count => 1
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+  end
+
+  def test_show_secondary_actions_to_moderator
+    session_for(create(:moderator_user))
+    node = create(:node, :with_history)
+    get node_path(node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 0
+    assert_select ".secondary-actions a", :text => "View History", :count => 1
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
+  end
+end
index b2f14a127ea163d29f0d7bb2a5c7534027872db9..e68a5f33beec2f4eb3c44a2d76da25c9f88788ec 100644 (file)
@@ -40,29 +40,30 @@ class NotesControllerTest < ActionDispatch::IntegrationTest
       create(:note_comment, :note => note, :author => second_user)
     end
 
-    # Note that the table rows include a header row
-    get user_notes_path(:display_name => first_user.display_name)
+    get user_notes_path(first_user)
     assert_response :success
-    assert_select "table.note_list tr", :count => 2
+    assert_select ".content-heading a[href='#{user_path first_user}']", :text => first_user.display_name
+    assert_select "table.note_list tbody tr", :count => 1
 
-    get user_notes_path(:display_name => second_user.display_name)
+    get user_notes_path(second_user)
     assert_response :success
-    assert_select "table.note_list tr", :count => 2
+    assert_select ".content-heading a[href='#{user_path second_user}']", :text => second_user.display_name
+    assert_select "table.note_list tbody tr", :count => 1
 
-    get user_notes_path(:display_name => "non-existent")
+    get user_notes_path("non-existent")
     assert_response :not_found
 
     session_for(moderator_user)
 
-    get user_notes_path(:display_name => first_user.display_name)
+    get user_notes_path(first_user)
     assert_response :success
-    assert_select "table.note_list tr", :count => 2
+    assert_select "table.note_list tbody tr", :count => 1
 
-    get user_notes_path(:display_name => second_user.display_name)
+    get user_notes_path(second_user)
     assert_response :success
-    assert_select "table.note_list tr", :count => 3
+    assert_select "table.note_list tbody tr", :count => 2
 
-    get user_notes_path(:display_name => "non-existent")
+    get user_notes_path("non-existent")
     assert_response :not_found
   end
 
@@ -73,18 +74,18 @@ class NotesControllerTest < ActionDispatch::IntegrationTest
       create(:note_comment, :note => note, :author => user)
     end
 
-    get user_notes_path(:display_name => user.display_name)
+    get user_notes_path(user)
     assert_response :success
-    assert_select "table.note_list tr", :count => 11
+    assert_select "table.note_list tbody tr", :count => 10
 
-    get user_notes_path(:display_name => user.display_name, :page => 2)
+    get user_notes_path(user, :page => 2)
     assert_response :success
-    assert_select "table.note_list tr", :count => 11
+    assert_select "table.note_list tbody tr", :count => 10
   end
 
   def test_empty_page
     user = create(:user)
-    get user_notes_path(:display_name => user.display_name)
+    get user_notes_path(user)
     assert_response :success
     assert_select "h4", :html => "No notes"
   end
@@ -98,12 +99,12 @@ class NotesControllerTest < ActionDispatch::IntegrationTest
   def test_read_hidden_note
     hidden_note_with_comment = create(:note_with_comments, :status => "hidden")
 
-    get note_path(:id => hidden_note_with_comment)
+    get note_path(hidden_note_with_comment)
     assert_response :not_found
     assert_template "browse/not_found"
     assert_template :layout => "map"
 
-    get note_path(:id => hidden_note_with_comment), :xhr => true
+    get note_path(hidden_note_with_comment), :xhr => true
     assert_response :not_found
     assert_template "browse/not_found"
     assert_template :layout => "xhr"
index e448e09541117b2624e23ca45739c8bd5495c453..c4dd4a181a29d7199d5d43c1b5fe157d8d38e6eb 100644 (file)
@@ -39,12 +39,12 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     create_list(:client_application, 2, :user => user)
     create_list(:access_token, 2, :user => user)
 
-    get oauth_clients_path(:display_name => user.display_name)
-    assert_redirected_to login_path(:referer => oauth_clients_path(:display_name => user.display_name))
+    get oauth_clients_path(user)
+    assert_redirected_to login_path(:referer => oauth_clients_path(user))
 
     session_for(user)
 
-    get oauth_clients_path(:display_name => user.display_name)
+    get oauth_clients_path(user)
     assert_response :success
     assert_template "index"
     assert_select "li.client_application", 2
@@ -53,12 +53,12 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
   def test_new
     user = create(:user)
 
-    get new_oauth_client_path(:display_name => user.display_name)
-    assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
+    get new_oauth_client_path(user)
+    assert_redirected_to login_path(:referer => new_oauth_client_path(user))
 
     session_for(user)
 
-    get new_oauth_client_path(:display_name => user.display_name)
+    get new_oauth_client_path(user)
     assert_response :success
     assert_template "new"
     assert_select "form", 1 do
@@ -76,13 +76,13 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
 
     with_settings(:oauth_10_registration => false) do
-      get new_oauth_client_path(:display_name => user.display_name)
-      assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
+      get new_oauth_client_path(user)
+      assert_redirected_to login_path(:referer => new_oauth_client_path(user))
 
       session_for(user)
 
-      get new_oauth_client_path(:display_name => user.display_name)
-      assert_redirected_to oauth_clients_path(:display_name => user.display_name)
+      get new_oauth_client_path(user)
+      assert_redirected_to oauth_clients_path(user)
     end
   end
 
@@ -90,23 +90,21 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     user = create(:user)
 
     assert_difference "ClientApplication.count", 0 do
-      post oauth_clients_path(:display_name => user.display_name)
+      post oauth_clients_path(user)
     end
     assert_response :forbidden
 
     session_for(user)
 
     assert_difference "ClientApplication.count", 0 do
-      post oauth_clients_path(:display_name => user.display_name,
-                              :client_application => { :name => "Test Application" })
+      post oauth_clients_path(user, :client_application => { :name => "Test Application" })
     end
     assert_response :success
     assert_template "new"
 
     assert_difference "ClientApplication.count", 1 do
-      post oauth_clients_path(:display_name => user.display_name,
-                              :client_application => { :name => "Test Application",
-                                                       :url => "http://test.example.com/" })
+      post oauth_clients_path(user, :client_application => { :name => "Test Application",
+                                                             :url => "http://test.example.com/" })
     end
     assert_redirected_to oauth_client_path(:id => ClientApplication.find_by(:name => "Test Application").id)
   end
@@ -116,16 +114,16 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     client = create(:client_application, :user => user)
     other_client = create(:client_application)
 
-    get oauth_client_path(:display_name => user.display_name, :id => client)
-    assert_redirected_to login_path(:referer => oauth_client_path(:display_name => user.display_name, :id => client.id))
+    get oauth_client_path(user, client)
+    assert_redirected_to login_path(:referer => oauth_client_path(user, client.id))
 
     session_for(user)
 
-    get oauth_client_path(:display_name => user.display_name, :id => other_client)
+    get oauth_client_path(user, other_client)
     assert_response :not_found
     assert_template "not_found"
 
-    get oauth_client_path(:display_name => user.display_name, :id => client)
+    get oauth_client_path(user, client)
     assert_response :success
     assert_template "show"
   end
@@ -135,16 +133,16 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     client = create(:client_application, :user => user)
     other_client = create(:client_application)
 
-    get edit_oauth_client_path(:display_name => user.display_name, :id => client)
-    assert_redirected_to login_path(:referer => edit_oauth_client_path(:display_name => user.display_name, :id => client.id))
+    get edit_oauth_client_path(user, client)
+    assert_redirected_to login_path(:referer => edit_oauth_client_path(user, client.id))
 
     session_for(user)
 
-    get edit_oauth_client_path(:display_name => user.display_name, :id => other_client)
+    get edit_oauth_client_path(user, other_client)
     assert_response :not_found
     assert_template "not_found"
 
-    get edit_oauth_client_path(:display_name => user.display_name, :id => client)
+    get edit_oauth_client_path(user, client)
     assert_response :success
     assert_template "edit"
     assert_select "form", 1 do
@@ -163,22 +161,20 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     client = create(:client_application, :user => user)
     other_client = create(:client_application)
 
-    put oauth_client_path(:display_name => user.display_name, :id => client)
+    put oauth_client_path(user, client)
     assert_response :forbidden
 
     session_for(user)
 
-    put oauth_client_path(:display_name => user.display_name, :id => other_client)
+    put oauth_client_path(user, other_client)
     assert_response :not_found
     assert_template "not_found"
 
-    put oauth_client_path(:display_name => user.display_name, :id => client,
-                          :client_application => { :name => "New Name", :url => nil })
+    put oauth_client_path(user, client, :client_application => { :name => "New Name", :url => nil })
     assert_response :success
     assert_template "edit"
 
-    put oauth_client_path(:display_name => user.display_name, :id => client,
-                          :client_application => { :name => "New Name", :url => "http://new.example.com/url" })
+    put oauth_client_path(user, client, :client_application => { :name => "New Name", :url => "http://new.example.com/url" })
     assert_redirected_to oauth_client_path(:id => client.id)
   end
 
@@ -188,21 +184,21 @@ class OauthClientsControllerTest < ActionDispatch::IntegrationTest
     other_client = create(:client_application)
 
     assert_difference "ClientApplication.count", 0 do
-      delete oauth_client_path(:display_name => user.display_name, :id => client)
+      delete oauth_client_path(user, client)
     end
     assert_response :forbidden
 
     session_for(user)
 
     assert_difference "ClientApplication.count", 0 do
-      delete oauth_client_path(:display_name => user.display_name, :id => other_client)
+      delete oauth_client_path(user, other_client)
     end
     assert_response :not_found
     assert_template "not_found"
 
     assert_difference "ClientApplication.count", -1 do
-      delete oauth_client_path(:display_name => user.display_name, :id => client)
+      delete oauth_client_path(user, client)
     end
-    assert_redirected_to oauth_clients_path(:display_name => user.display_name)
+    assert_redirected_to oauth_clients_path(user)
   end
 end
index a1232be762e9c75b0624deb5fba3b95f2bbfc0ee..bb4dffdc6e74636fd8c118e9bcc8207ceb7c775a 100644 (file)
@@ -2,12 +2,109 @@ require "test_helper"
 
 class OldNodesControllerTest < ActionDispatch::IntegrationTest
   def test_routes
+    assert_routing(
+      { :path => "/node/1/history", :method => :get },
+      { :controller => "old_nodes", :action => "index", :id => "1" }
+    )
     assert_routing(
       { :path => "/node/1/history/2", :method => :get },
       { :controller => "old_nodes", :action => "show", :id => "1", :version => "2" }
     )
   end
 
+  def test_history
+    node = create(:node, :with_history)
+    sidebar_browse_check :node_history_path, node.id, "browse/history"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+    end
+  end
+
+  def test_history_of_redacted
+    node = create(:node, :with_history, :deleted, :version => 2)
+    node_v1 = node.old_nodes.find_by(:version => 1)
+    node_v1.redact!(create(:redaction))
+
+    get node_history_path(:id => node)
+    assert_response :success
+    assert_template "browse/history"
+
+    # there are 2 revisions of the redacted node, but only one
+    # should be showing details here.
+    assert_select ".browse-section", 2
+    assert_select ".browse-section.browse-redacted", 1
+    assert_select ".browse-section.browse-node", 1
+    assert_select ".browse-section.browse-node .latitude", 0
+    assert_select ".browse-section.browse-node .longitude", 0
+  end
+
+  def test_unredacted_history_of_redacted
+    session_for(create(:moderator_user))
+    node = create(:node, :with_history, :deleted, :version => 2)
+    node_v1 = node.old_nodes.find_by(:version => 1)
+    node_v1.redact!(create(:redaction))
+
+    get node_history_path(:id => node, :params => { :show_redactions => true })
+    assert_response :success
+    assert_template "browse/history"
+
+    assert_select ".browse-section", 2
+    assert_select ".browse-section.browse-redacted", 0
+    assert_select ".browse-section.browse-node", 2
+  end
+
+  def test_anonymous_user_history_page_secondary_actions
+    node = create(:node, :with_history)
+    get node_history_path(:id => node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 1
+    assert_select ".secondary-actions a", :text => "View History", :count => 0
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+  end
+
+  def test_regular_user_history_page_secondary_actions
+    session_for(create(:user))
+    node = create(:node, :with_history)
+    get node_history_path(:id => node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 1
+    assert_select ".secondary-actions a", :text => "View History", :count => 0
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+  end
+
+  def test_moderator_user_history_page_secondary_actions
+    session_for(create(:moderator_user))
+    node = create(:node, :with_history)
+    get node_history_path(:id => node)
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 1
+    assert_select ".secondary-actions a", :text => "View History", :count => 0
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
+  end
+
+  def test_anonymous_user_unredacted_history_page_secondary_actions
+    node = create(:node, :with_history)
+    get node_history_path(:id => node, :params => { :show_redactions => true })
+    assert_response :redirect
+  end
+
+  def test_regular_user_unredacted_history_page_secondary_actions
+    session_for(create(:user))
+    node = create(:node, :with_history)
+    get node_history_path(:id => node, :params => { :show_redactions => true })
+    assert_response :redirect
+  end
+
+  def test_moderator_user_unredacted_history_page_secondary_actions
+    session_for(create(:moderator_user))
+    node = create(:node, :with_history)
+    get node_history_path(:id => node, :params => { :show_redactions => true })
+    assert_response :success
+    assert_select ".secondary-actions a", :text => "View Details", :count => 1
+    assert_select ".secondary-actions a", :text => "View History", :count => 1
+    assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+  end
+
   def test_visible_with_one_version
     node = create(:node, :with_history)
     get old_node_path(node, 1)
@@ -17,7 +114,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_node_path node, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
@@ -32,7 +129,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_node_path node, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1
@@ -44,7 +141,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_node_path node, 2}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{node_version_path node, 2}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 2}']", :count => 1
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1
@@ -60,7 +157,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to regular users" do
@@ -74,7 +171,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to moderators" do
@@ -88,7 +185,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_node_path node, 1}']", :count => 0
   end
 
   test "don't reveal redacted versions to anonymous users" do
index 6eb6db9ddc111a6fb014c5e8cf8c46481f870650..a766f8b8db113178edf13a4504c8f8a622d6f646 100644 (file)
@@ -2,12 +2,59 @@ require "test_helper"
 
 class OldRelationsControllerTest < ActionDispatch::IntegrationTest
   def test_routes
+    assert_routing(
+      { :path => "/relation/1/history", :method => :get },
+      { :controller => "old_relations", :action => "index", :id => "1" }
+    )
     assert_routing(
       { :path => "/relation/1/history/2", :method => :get },
       { :controller => "old_relations", :action => "show", :id => "1", :version => "2" }
     )
   end
 
+  def test_history
+    relation = create(:relation, :with_history)
+    sidebar_browse_check :relation_history_path, relation.id, "browse/history"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
+    end
+  end
+
+  def test_history_of_redacted
+    relation = create(:relation, :with_history, :version => 4)
+    relation_v1 = relation.old_relations.find_by(:version => 1)
+    relation_v1.redact!(create(:redaction))
+    relation_v3 = relation.old_relations.find_by(:version => 3)
+    relation_v3.redact!(create(:redaction))
+
+    get relation_history_path(:id => relation)
+    assert_response :success
+    assert_template "browse/history"
+
+    # there are 4 revisions of the redacted relation, but only 2
+    # should be showing details here.
+    assert_select ".browse-section", 4
+    assert_select ".browse-section.browse-redacted", 2
+    assert_select ".browse-section.browse-relation", 2
+  end
+
+  def test_unredacted_history_of_redacted
+    session_for(create(:moderator_user))
+    relation = create(:relation, :with_history, :version => 4)
+    relation_v1 = relation.old_relations.find_by(:version => 1)
+    relation_v1.redact!(create(:redaction))
+    relation_v3 = relation.old_relations.find_by(:version => 3)
+    relation_v3.redact!(create(:redaction))
+
+    get relation_history_path(:id => relation, :params => { :show_redactions => true })
+    assert_response :success
+    assert_template "browse/history"
+
+    assert_select ".browse-section", 4
+    assert_select ".browse-section.browse-redacted", 0
+    assert_select ".browse-section.browse-relation", 4
+  end
+
   def test_visible_with_one_version
     relation = create(:relation, :with_history)
     get old_relation_path(relation, 1)
@@ -17,7 +64,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_relation_path relation, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
@@ -32,7 +79,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_relation_path relation, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1
@@ -44,7 +91,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_relation_path relation, 2}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 2}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 2}']", :count => 1
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1
@@ -69,7 +116,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to regular users" do
@@ -83,7 +130,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to moderators" do
@@ -97,7 +144,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_relation_path relation, 1}']", :count => 0
   end
 
   test "don't reveal redacted versions to anonymous users" do
index d28a23ef5a602793d134cae90fb12c5b902f8493..6455343cfa63af9b1e4c43cb28bab6b9bbb021a6 100644 (file)
@@ -2,12 +2,59 @@ require "test_helper"
 
 class OldWaysControllerTest < ActionDispatch::IntegrationTest
   def test_routes
+    assert_routing(
+      { :path => "/way/1/history", :method => :get },
+      { :controller => "old_ways", :action => "index", :id => "1" }
+    )
     assert_routing(
       { :path => "/way/1/history/2", :method => :get },
       { :controller => "old_ways", :action => "show", :id => "1", :version => "2" }
     )
   end
 
+  def test_history
+    way = create(:way, :with_history)
+    sidebar_browse_check :way_history_path, way.id, "browse/history"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
+    end
+  end
+
+  def test_history_of_redacted
+    way = create(:way, :with_history, :version => 4)
+    way_v1 = way.old_ways.find_by(:version => 1)
+    way_v1.redact!(create(:redaction))
+    way_v3 = way.old_ways.find_by(:version => 3)
+    way_v3.redact!(create(:redaction))
+
+    get way_history_path(:id => way)
+    assert_response :success
+    assert_template "browse/history"
+
+    # there are 4 revisions of the redacted way, but only 2
+    # should be showing details here.
+    assert_select ".browse-section", 4
+    assert_select ".browse-section.browse-redacted", 2
+    assert_select ".browse-section.browse-way", 2
+  end
+
+  def test_unredacted_history_of_redacted
+    session_for(create(:moderator_user))
+    way = create(:way, :with_history, :version => 4)
+    way_v1 = way.old_ways.find_by(:version => 1)
+    way_v1.redact!(create(:redaction))
+    way_v3 = way.old_ways.find_by(:version => 3)
+    way_v3.redact!(create(:redaction))
+
+    get way_history_path(:id => way, :params => { :show_redactions => true })
+    assert_response :success
+    assert_template "browse/history"
+
+    assert_select ".browse-section", 4
+    assert_select ".browse-section.browse-redacted", 0
+    assert_select ".browse-section.browse-way", 4
+  end
+
   def test_visible_with_one_version
     way = create(:way, :with_history)
     get old_way_path(way, 1)
@@ -17,7 +64,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_way_path way, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
@@ -32,7 +79,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_way_path way, 1}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 1}']", :count => 1
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1
@@ -44,7 +91,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select "h4", /^Version/ do
       assert_select "a[href='#{old_way_path way, 2}']", :count => 0
     end
-    assert_select ".secondary-actions a[href='#{way_version_path way, 2}']", :count => 1
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 2}']", :count => 1
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1
@@ -74,7 +121,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to regular users" do
@@ -88,7 +135,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0
     assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 1}']", :count => 0
   end
 
   test "show unrevealed redacted versions to moderators" do
@@ -102,7 +149,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest
     assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 1
     assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
-    assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0
+    assert_select ".secondary-actions a[href='#{api_old_way_path way, 1}']", :count => 0
   end
 
   test "don't reveal redacted versions to anonymous users" do
index 002e483fea3262e6e45c9f2f1be129f6079ee8fa..5ca72fe478263bde3b0234638990f1fc13ad8d92 100644 (file)
@@ -45,6 +45,15 @@ class RedactionsControllerTest < ActionDispatch::IntegrationTest
     end
   end
 
+  def test_show
+    redaction = create(:redaction, :title => "tested-redaction")
+
+    get redaction_path(redaction)
+    assert_response :success
+    assert_dom "h1", :text => /tested-redaction/
+    assert_dom "a[href='#{user_path redaction.user}']", :text => redaction.user.display_name
+  end
+
   def test_new
     get new_redaction_path
     assert_redirected_to login_path(:referer => new_redaction_path)
diff --git a/test/controllers/relations_controller_test.rb b/test/controllers/relations_controller_test.rb
new file mode 100644 (file)
index 0000000..926d950
--- /dev/null
@@ -0,0 +1,39 @@
+require "test_helper"
+
+class RelationsControllerTest < ActionDispatch::IntegrationTest
+  ##
+  # test all routes which lead to this controller
+  def test_routes
+    assert_routing(
+      { :path => "/relation/1", :method => :get },
+      { :controller => "relations", :action => "show", :id => "1" }
+    )
+  end
+
+  def test_show
+    relation = create(:relation)
+    sidebar_browse_check :relation_path, relation.id, "browse/feature"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
+    end
+    assert_select ".secondary-actions a[href='#{api_relation_path relation}']", :count => 1
+    assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
+  end
+
+  def test_show_multiple_versions
+    relation = create(:relation, :with_history, :version => 2)
+    sidebar_browse_check :relation_path, relation.id, "browse/feature"
+    assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1
+  end
+
+  def test_show_relation_member
+    member = create(:relation)
+    relation = create(:relation)
+    create(:relation_member, :relation => relation, :member => member)
+    sidebar_browse_check :relation_path, member.id, "browse/feature"
+    assert_select "a[href='#{relation_path relation}']", :count => 1
+  end
+end
index f5ff740643b5767e8ab67e1abce4eabfa762c99b..5bd8df18d2000dd801bdb87eef7adc16bf8d215a 100644 (file)
@@ -89,13 +89,13 @@ class SiteControllerTest < ActionDispatch::IntegrationTest
   # Test the index page redirects
   def test_index_redirect
     get root_path(:node => 123)
-    assert_redirected_to :controller => :browse, :action => :node, :id => 123
+    assert_redirected_to node_path(123)
 
     get root_path(:way => 123)
-    assert_redirected_to :controller => :browse, :action => :way, :id => 123
+    assert_redirected_to way_path(123)
 
     get root_path(:relation => 123)
-    assert_redirected_to :controller => :browse, :action => :relation, :id => 123
+    assert_redirected_to relation_path(123)
 
     get root_path(:note => 123)
     assert_redirected_to :controller => :notes, :action => :show, :id => 123
@@ -131,16 +131,16 @@ class SiteControllerTest < ActionDispatch::IntegrationTest
     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125&layers=T"
 
     get permalink_path(:code => "wBz3--", :node => 1)
-    assert_redirected_to :controller => :browse, :action => :node, :id => 1, :anchor => "map=3/4.8779296875/3.955078125"
+    assert_redirected_to node_path(1, :anchor => "map=3/4.8779296875/3.955078125")
 
     get permalink_path(:code => "wBz3--", :way => 2)
-    assert_redirected_to :controller => :browse, :action => :way, :id => 2, :anchor => "map=3/4.8779296875/3.955078125"
+    assert_redirected_to way_path(2, :anchor => "map=3/4.8779296875/3.955078125")
 
     get permalink_path(:code => "wBz3--", :relation => 3)
-    assert_redirected_to :controller => :browse, :action => :relation, :id => 3, :anchor => "map=3/4.8779296875/3.955078125"
+    assert_redirected_to relation_path(3, :anchor => "map=3/4.8779296875/3.955078125")
 
     get permalink_path(:code => "wBz3--", :changeset => 4)
-    assert_redirected_to changeset_path(:id => 4, :anchor => "map=3/4.8779296875/3.955078125")
+    assert_redirected_to changeset_path(4, :anchor => "map=3/4.8779296875/3.955078125")
   end
 
   # Test the key page
diff --git a/test/controllers/traces/icons_controller_test.rb b/test/controllers/traces/icons_controller_test.rb
new file mode 100644 (file)
index 0000000..24786b3
--- /dev/null
@@ -0,0 +1,76 @@
+require "test_helper"
+
+module Traces
+  class IconsControllerTest < ActionDispatch::IntegrationTest
+    ##
+    # test all routes which lead to this controller
+    def test_routes
+      assert_routing(
+        { :path => "/user/username/traces/1/icon", :method => :get },
+        { :controller => "traces/icons", :action => "show", :display_name => "username", :trace_id => "1" }
+      )
+    end
+
+    # Test downloading the icon for a trace
+    def test_show
+      public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
+
+      # First with no auth, which should work since the trace is public
+      get trace_icon_path(public_trace_file.user, public_trace_file)
+      check_trace_icon public_trace_file
+
+      # Now with some other user, which should work since the trace is public
+      session_for(create(:user))
+      get trace_icon_path(public_trace_file.user, public_trace_file)
+      check_trace_icon public_trace_file
+
+      # And finally we should be able to do it with the owner of the trace
+      session_for(public_trace_file.user)
+      get trace_icon_path(public_trace_file.user, public_trace_file)
+      check_trace_icon public_trace_file
+    end
+
+    # Check the icon for an anonymous trace can't be downloaded by another user
+    def test_show_anon
+      anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
+
+      # First with no auth
+      get trace_icon_path(anon_trace_file.user, anon_trace_file)
+      assert_response :forbidden
+
+      # Now with some other user, which shouldn't work since the trace is anon
+      session_for(create(:user))
+      get trace_icon_path(anon_trace_file.user, anon_trace_file)
+      assert_response :forbidden
+
+      # And finally we should be able to do it with the owner of the trace
+      session_for(anon_trace_file.user)
+      get trace_icon_path(anon_trace_file.user, anon_trace_file)
+      check_trace_icon anon_trace_file
+    end
+
+    # Test downloading the icon for a trace that doesn't exist
+    def test_show_not_found
+      deleted_trace_file = create(:trace, :deleted)
+
+      # First with a trace that has never existed
+      get trace_icon_path(create(:user), 0)
+      assert_response :not_found
+
+      # Now with a trace that has been deleted
+      session_for(deleted_trace_file.user)
+      get trace_icon_path(deleted_trace_file.user, deleted_trace_file)
+      assert_response :not_found
+    end
+
+    private
+
+    def check_trace_icon(trace)
+      follow_redirect!
+      follow_redirect!
+      assert_response :success
+      assert_equal "image/gif", response.media_type
+      assert_equal trace.icon_picture, response.body
+    end
+  end
+end
diff --git a/test/controllers/traces/pictures_controller_test.rb b/test/controllers/traces/pictures_controller_test.rb
new file mode 100644 (file)
index 0000000..af20339
--- /dev/null
@@ -0,0 +1,76 @@
+require "test_helper"
+
+module Traces
+  class PicturesControllerTest < ActionDispatch::IntegrationTest
+    ##
+    # test all routes which lead to this controller
+    def test_routes
+      assert_routing(
+        { :path => "/user/username/traces/1/picture", :method => :get },
+        { :controller => "traces/pictures", :action => "show", :display_name => "username", :trace_id => "1" }
+      )
+    end
+
+    # Test downloading the picture for a trace
+    def test_show
+      public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
+
+      # First with no auth, which should work since the trace is public
+      get trace_picture_path(public_trace_file.user, public_trace_file)
+      check_trace_picture public_trace_file
+
+      # Now with some other user, which should work since the trace is public
+      session_for(create(:user))
+      get trace_picture_path(public_trace_file.user, public_trace_file)
+      check_trace_picture public_trace_file
+
+      # And finally we should be able to do it with the owner of the trace
+      session_for(public_trace_file.user)
+      get trace_picture_path(public_trace_file.user, public_trace_file)
+      check_trace_picture public_trace_file
+    end
+
+    # Check the picture for an anonymous trace can't be downloaded by another user
+    def test_show_anon
+      anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
+
+      # First with no auth
+      get trace_picture_path(anon_trace_file.user, anon_trace_file)
+      assert_response :forbidden
+
+      # Now with some other user, which shouldn't work since the trace is anon
+      session_for(create(:user))
+      get trace_picture_path(anon_trace_file.user, anon_trace_file)
+      assert_response :forbidden
+
+      # And finally we should be able to do it with the owner of the trace
+      session_for(anon_trace_file.user)
+      get trace_picture_path(anon_trace_file.user, anon_trace_file)
+      check_trace_picture anon_trace_file
+    end
+
+    # Test downloading the picture for a trace that doesn't exist
+    def test_show_not_found
+      deleted_trace_file = create(:trace, :deleted)
+
+      # First with a trace that has never existed
+      get trace_picture_path(create(:user), 0)
+      assert_response :not_found
+
+      # Now with a trace that has been deleted
+      session_for(deleted_trace_file.user)
+      get trace_picture_path(deleted_trace_file.user, deleted_trace_file)
+      assert_response :not_found
+    end
+
+    private
+
+    def check_trace_picture(trace)
+      follow_redirect!
+      follow_redirect!
+      assert_response :success
+      assert_equal "image/gif", response.media_type
+      assert_equal trace.large_picture, response.body
+    end
+  end
+end
index e6f3af4f1dc0548c99ad0d41d57b7b87a0d73e00..73966641eb8641f346c25429bba0cd233f5421c0 100644 (file)
@@ -51,14 +51,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/user/username/traces/1", :method => :get },
       { :controller => "traces", :action => "show", :display_name => "username", :id => "1" }
     )
-    assert_routing(
-      { :path => "/user/username/traces/1/picture", :method => :get },
-      { :controller => "traces", :action => "picture", :display_name => "username", :id => "1" }
-    )
-    assert_routing(
-      { :path => "/user/username/traces/1/icon", :method => :get },
-      { :controller => "traces", :action => "icon", :display_name => "username", :id => "1" }
-    )
 
     assert_routing(
       { :path => "/traces/new", :method => :get },
@@ -172,6 +164,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
   # Check the index of traces for a specific user
   def test_index_user
     user = create(:user)
+    checked_user_traces_path = url_for :only_path => true, :controller => "traces", :action => "index", :display_name => user.display_name
     second_user = create(:user)
     third_user = create(:user)
     create(:trace)
@@ -187,18 +180,33 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     # Test the user with the traces - should see only public ones
     get traces_path(:display_name => user.display_name)
     check_trace_index [trace_b]
+    assert_dom ".nav-tabs" do
+      assert_dom "a[href='#{traces_path}']", :text => "All Traces", :count => 1
+      assert_dom "a[href='#{traces_mine_path}']", :text => "My Traces", :count => 0
+      assert_dom "a[href='#{checked_user_traces_path}']", :text => Regexp.new(Regexp.escape(user.display_name)), :count => 1
+    end
 
     session_for(third_user)
 
     # Should still see only public ones when authenticated as another user
     get traces_path(:display_name => user.display_name)
     check_trace_index [trace_b]
+    assert_dom ".nav-tabs" do
+      assert_dom "a[href='#{traces_path}']", :text => "All Traces", :count => 1
+      assert_dom "a[href='#{traces_mine_path}']", :text => "My Traces", :count => 1
+      assert_dom "a[href='#{checked_user_traces_path}']", :text => Regexp.new(Regexp.escape(user.display_name)), :count => 1
+    end
 
     session_for(user)
 
     # Should see all traces when authenticated as the target user
     get traces_path(:display_name => user.display_name)
     check_trace_index [trace_c, trace_b]
+    assert_dom ".nav-tabs" do
+      assert_dom "a[href='#{traces_path}']", :text => "All Traces", :count => 1
+      assert_dom "a[href='#{traces_mine_path}']", :text => "My Traces", :count => 1
+      assert_dom "a[href='#{checked_user_traces_path}']", :text => Regexp.new(Regexp.escape(user.display_name)), :count => 0
+    end
 
     # Should only see traces with the correct tag when a tag is specified
     get traces_path(:display_name => user.display_name, :tag => "London")
@@ -374,17 +382,17 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     public_trace_file = create(:trace, :visibility => "public")
 
     # First with no auth, which should work since the trace is public
-    get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+    get show_trace_path(public_trace_file.user, public_trace_file)
     check_trace_show public_trace_file
 
     # Now with some other user, which should work since the trace is public
     session_for(create(:user))
-    get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+    get show_trace_path(public_trace_file.user, public_trace_file)
     check_trace_show public_trace_file
 
     # And finally we should be able to do it with the owner of the trace
     session_for(public_trace_file.user)
-    get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+    get show_trace_path(public_trace_file.user, public_trace_file)
     check_trace_show public_trace_file
   end
 
@@ -393,17 +401,17 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     anon_trace_file = create(:trace, :visibility => "private")
 
     # First with no auth
-    get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+    get show_trace_path(anon_trace_file.user, anon_trace_file)
     assert_redirected_to :action => :index
 
     # Now with some other user, which should not work since the trace is anon
     session_for(create(:user))
-    get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+    get show_trace_path(anon_trace_file.user, anon_trace_file)
     assert_redirected_to :action => :index
 
     # And finally we should be able to do it with the owner of the trace
     session_for(anon_trace_file.user)
-    get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+    get show_trace_path(anon_trace_file.user, anon_trace_file)
     check_trace_show anon_trace_file
   end
 
@@ -412,12 +420,12 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     deleted_trace_file = create(:trace, :deleted)
 
     # First with a trace that has never existed
-    get show_trace_path(:display_name => create(:user).display_name, :id => 0)
+    get show_trace_path(create(:user), 0)
     assert_redirected_to :action => :index
 
     # Now with a trace that has been deleted
     session_for(deleted_trace_file.user)
-    get show_trace_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
+    get show_trace_path(deleted_trace_file.user, deleted_trace_file)
     assert_redirected_to :action => :index
   end
 
@@ -500,110 +508,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     assert_response :not_found
   end
 
-  # Test downloading the picture for a trace
-  def test_picture
-    public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
-
-    # First with no auth, which should work since the trace is public
-    get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_picture public_trace_file
-
-    # Now with some other user, which should work since the trace is public
-    session_for(create(:user))
-    get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_picture public_trace_file
-
-    # And finally we should be able to do it with the owner of the trace
-    session_for(public_trace_file.user)
-    get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_picture public_trace_file
-  end
-
-  # Check the picture for an anonymous trace can't be downloaded by another user
-  def test_picture_anon
-    anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
-
-    # First with no auth
-    get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :forbidden
-
-    # Now with some other user, which shouldn't work since the trace is anon
-    session_for(create(:user))
-    get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :forbidden
-
-    # And finally we should be able to do it with the owner of the trace
-    session_for(anon_trace_file.user)
-    get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    check_trace_picture anon_trace_file
-  end
-
-  # Test downloading the picture for a trace that doesn't exist
-  def test_picture_not_found
-    deleted_trace_file = create(:trace, :deleted)
-
-    # First with a trace that has never existed
-    get trace_picture_path(:display_name => create(:user).display_name, :id => 0)
-    assert_response :not_found
-
-    # Now with a trace that has been deleted
-    session_for(deleted_trace_file.user)
-    get trace_picture_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
-    assert_response :not_found
-  end
-
-  # Test downloading the icon for a trace
-  def test_icon
-    public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
-
-    # First with no auth, which should work since the trace is public
-    get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_icon public_trace_file
-
-    # Now with some other user, which should work since the trace is public
-    session_for(create(:user))
-    get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_icon public_trace_file
-
-    # And finally we should be able to do it with the owner of the trace
-    session_for(public_trace_file.user)
-    get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    check_trace_icon public_trace_file
-  end
-
-  # Check the icon for an anonymous trace can't be downloaded by another user
-  def test_icon_anon
-    anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
-
-    # First with no auth
-    get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :forbidden
-
-    # Now with some other user, which shouldn't work since the trace is anon
-    session_for(create(:user))
-    get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :forbidden
-
-    # And finally we should be able to do it with the owner of the trace
-    session_for(anon_trace_file.user)
-    get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    check_trace_icon anon_trace_file
-  end
-
-  # Test downloading the icon for a trace that doesn't exist
-  def test_icon_not_found
-    deleted_trace_file = create(:trace, :deleted)
-
-    # First with a trace that has never existed
-    get trace_icon_path(:display_name => create(:user).display_name, :id => 0)
-    assert_response :not_found
-
-    # Now with a trace that has been deleted
-    session_for(deleted_trace_file.user)
-    get trace_icon_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
-    assert_response :not_found
-  end
-
   # Test fetching the new trace page
   def test_new_get
     # First with no auth
@@ -810,7 +714,11 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
             assert_select item, "title", trace.name
             assert_select item, "link", "http://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
             assert_select item, "guid", "http://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
-            assert_select item, "description"
+            assert_select item, "description" do
+              assert_dom_encoded do
+                assert_select "img[src='#{trace_icon_url trace.user, trace}']"
+              end
+            end
             # assert_select item, "dc:creator", trace.user.display_name
             assert_select item, "pubDate", trace.timestamp.rfc822
           end
@@ -833,6 +741,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
             assert_select row, "li", Regexp.new(Regexp.escape("#{trace.size} points")) if trace.inserted?
             assert_select row, "td", Regexp.new(Regexp.escape(trace.description))
             assert_select row, "td", Regexp.new(Regexp.escape("by #{trace.user.display_name}"))
+            assert_select row, "a[href='#{user_path trace.user}']", :text => trace.user.display_name
           end
         end
       end
@@ -845,7 +754,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     assert_select "table", :count => 1 do
       assert_select "td", /^#{Regexp.quote(trace.name)} /
-      assert_select "td", trace.user.display_name
+      assert_select "td a[href='#{user_path trace.user}']", :text => trace.user.display_name
       assert_select "td", trace.description
     end
   end
@@ -855,20 +764,4 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     assert_equal content_type, response.media_type
     assert_equal "attachment; filename=\"#{trace.id}.#{extension}\"; filename*=UTF-8''#{trace.id}.#{extension}", @response.header["Content-Disposition"]
   end
-
-  def check_trace_picture(trace)
-    follow_redirect!
-    follow_redirect!
-    assert_response :success
-    assert_equal "image/gif", response.media_type
-    assert_equal trace.large_picture, response.body
-  end
-
-  def check_trace_icon(trace)
-    follow_redirect!
-    follow_redirect!
-    assert_response :success
-    assert_equal "image/gif", response.media_type
-    assert_equal trace.icon_picture, response.body
-  end
 end
index 9aafa3001931d79653c042576f7bba218ffbb9b2..a7ab02c75fb9afa5011f8a1b275e743df1d3d677 100644 (file)
@@ -67,14 +67,23 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   ##
   # test the index action
   def test_index
+    revoked_block = create(:user_block, :revoked)
+
+    get user_blocks_path
+    assert_response :success
+    assert_select "table#block_list tbody tr", :count => 1 do
+      assert_select "a[href='#{user_path revoked_block.user}']", :text => revoked_block.user.display_name
+      assert_select "a[href='#{user_path revoked_block.creator}']", :text => revoked_block.creator.display_name
+      assert_select "a[href='#{user_path revoked_block.revoker}']", :text => revoked_block.revoker.display_name
+    end
+
     active_block = create(:user_block)
     expired_block = create(:user_block, :expired)
-    revoked_block = create(:user_block, :revoked)
 
     get user_blocks_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", 4
+    assert_select "table#block_list tbody", :count => 1 do
+      assert_select "tr", 3
       assert_select "a[href='#{user_block_path(active_block)}']", 1
       assert_select "a[href='#{user_block_path(expired_block)}']", 1
       assert_select "a[href='#{user_block_path(revoked_block)}']", 1
@@ -84,19 +93,26 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   ##
   # test the index action with multiple pages
   def test_index_paged
-    create_list(:user_block, 50)
+    user_blocks = create_list(:user_block, 50).reverse
+    next_path = user_blocks_path
 
-    get user_blocks_path
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_path(:page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
-    end
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
   end
 
   ##
@@ -115,14 +131,21 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     # Viewing an expired block should work
     get user_block_path(:id => expired_block)
     assert_response :success
+    assert_select "h1 a[href='#{user_path expired_block.user}']", :text => expired_block.user.display_name
+    assert_select "h1 a[href='#{user_path expired_block.creator}']", :text => expired_block.creator.display_name
 
     # Viewing a revoked block should work
     get user_block_path(:id => revoked_block)
     assert_response :success
+    assert_select "h1 a[href='#{user_path revoked_block.user}']", :text => revoked_block.user.display_name
+    assert_select "h1 a[href='#{user_path revoked_block.creator}']", :text => revoked_block.creator.display_name
+    assert_select "a[href='#{user_path revoked_block.revoker}']", :text => revoked_block.revoker.display_name
 
     # Viewing an active block should work, but shouldn't mark it as seen
     get user_block_path(:id => active_block)
     assert_response :success
+    assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
+    assert_select "h1 a[href='#{user_path active_block.creator}']", :text => active_block.creator.display_name
     assert UserBlock.find(active_block.id).needs_view
 
     # Login as the blocked user
@@ -140,22 +163,23 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     target_user = create(:user)
 
     # Check that the block creation page requires us to login
-    get new_user_block_path(:display_name => target_user.display_name)
-    assert_redirected_to login_path(:referer => new_user_block_path(:display_name => target_user.display_name))
+    get new_user_block_path(target_user)
+    assert_redirected_to login_path(:referer => new_user_block_path(target_user))
 
     # Login as a normal user
     session_for(create(:user))
 
     # Check that normal users can't load the block creation page
-    get new_user_block_path(:display_name => target_user.display_name)
+    get new_user_block_path(target_user)
     assert_redirected_to :controller => "errors", :action => "forbidden"
 
     # Login as a moderator
     session_for(create(:moderator_user))
 
     # Check that the block creation page loads for moderators
-    get new_user_block_path(:display_name => target_user.display_name)
+    get new_user_block_path(target_user)
     assert_response :success
+    assert_select "h1 a[href='#{user_path target_user}']", :text => target_user.display_name
     assert_select "form#new_user_block", :count => 1 do
       assert_select "textarea#user_block_reason", :count => 1
       assert_select "select#user_block_period", :count => 1
@@ -193,6 +217,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     # Check that the block edit page loads for moderators
     get edit_user_block_path(:id => active_block)
     assert_response :success
+    assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
     assert_select "form#edit_user_block_#{active_block.id}", :count => 1 do
       assert_select "textarea#user_block_reason", :count => 1
       assert_select "select#user_block_period", :count => 1
@@ -232,7 +257,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
       post user_blocks_path(:display_name => target_user.display_name,
                             :user_block_period => "99")
     end
-    assert_redirected_to new_user_block_path(:display_name => target_user.display_name)
+    assert_redirected_to new_user_block_path(target_user)
     assert_equal "The blocking period must be one of the values selectable in the drop-down list.", flash[:error]
 
     # Check that creating a block works
@@ -364,6 +389,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     get revoke_user_block_path(:id => active_block)
     assert_response :success
     assert_template "revoke"
+    assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
     assert_select "form", :count => 1 do
       assert_select "input#confirm[type='checkbox']", :count => 1
       assert_select "input[type='submit'][value='Revoke!']", :count => 1
@@ -396,7 +422,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     create(:user_block, :user => blocked_user)
 
     # Asking for the revoke all blocks page with a bogus user name should fail
-    get user_blocks_on_path(:display_name => "non_existent_user")
+    get user_blocks_on_path("non_existent_user")
     assert_response :not_found
 
     # Check that the revoke all blocks page requires us to login
@@ -416,6 +442,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     # Check that the revoke all blocks page loads for moderators
     get revoke_all_user_blocks_path(blocked_user)
     assert_response :success
+    assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
   end
 
   ##
@@ -476,31 +503,33 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     expired_block = create(:user_block, :expired, :user => unblocked_user)
 
     # Asking for a list of blocks with a bogus user name should fail
-    get user_blocks_on_path(:display_name => "non_existent_user")
+    get user_blocks_on_path("non_existent_user")
     assert_response :not_found
     assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
 
     # Check the list of blocks for a user that has never been blocked
-    get user_blocks_on_path(:display_name => normal_user.display_name)
+    get user_blocks_on_path(normal_user)
     assert_response :success
     assert_select "table#block_list", false
     assert_select "p", "#{normal_user.display_name} has not been blocked yet."
 
     # Check the list of blocks for a user that is currently blocked
-    get user_blocks_on_path(:display_name => blocked_user.display_name)
+    get user_blocks_on_path(blocked_user)
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", 3
+    assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
+    assert_select "table#block_list tbody", :count => 1 do
+      assert_select "tr", 2
       assert_select "a[href='#{user_block_path(active_block)}']", 1
       assert_select "a[href='#{user_block_path(revoked_block)}']", 1
     end
 
     # Check the list of blocks for a user that has previously been blocked
-    get user_blocks_on_path(:display_name => unblocked_user.display_name)
+    get user_blocks_on_path(unblocked_user)
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", 2
+    assert_select "h1 a[href='#{user_path unblocked_user}']", :text => unblocked_user.display_name
+    assert_select "table#block_list tbody", :count => 1 do
+      assert_select "tr", 1
       assert_select "a[href='#{user_block_path(expired_block)}']", 1
     end
   end
@@ -509,19 +538,26 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   # test the blocks_on action with multiple pages
   def test_blocks_on_paged
     user = create(:user)
-    create_list(:user_block, 50, :user => user)
+    user_blocks = create_list(:user_block, 50, :user => user).reverse
+    next_path = user_blocks_on_path(user)
 
-    get user_blocks_on_path(:display_name => user.display_name)
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_on_path(:display_name => user.display_name, :page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
-    end
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
   end
 
   ##
@@ -535,30 +571,32 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
     revoked_block = create(:user_block, :revoked, :creator => second_moderator_user)
 
     # Asking for a list of blocks with a bogus user name should fail
-    get user_blocks_by_path(:display_name => "non_existent_user")
+    get user_blocks_by_path("non_existent_user")
     assert_response :not_found
     assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
 
     # Check the list of blocks given by one moderator
-    get user_blocks_by_path(:display_name => moderator_user.display_name)
+    get user_blocks_by_path(moderator_user)
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", 2
+    assert_select "h1 a[href='#{user_path moderator_user}']", :text => moderator_user.display_name
+    assert_select "table#block_list tbody", :count => 1 do
+      assert_select "tr", 1
       assert_select "a[href='#{user_block_path(active_block)}']", 1
     end
 
     # Check the list of blocks given by a different moderator
-    get user_blocks_by_path(:display_name => second_moderator_user.display_name)
+    get user_blocks_by_path(second_moderator_user)
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", 3
+    assert_select "h1 a[href='#{user_path second_moderator_user}']", :text => second_moderator_user.display_name
+    assert_select "table#block_list tbody", :count => 1 do
+      assert_select "tr", 2
       assert_select "a[href='#{user_block_path(expired_block)}']", 1
       assert_select "a[href='#{user_block_path(revoked_block)}']", 1
     end
 
     # Check the list of blocks (not) given by a normal user
-    get user_blocks_by_path(:display_name => normal_user.display_name)
+    get user_blocks_by_path(normal_user)
     assert_response :success
     assert_select "table#block_list", false
     assert_select "p", "#{normal_user.display_name} has not made any blocks yet."
@@ -568,18 +606,46 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   # test the blocks_by action with multiple pages
   def test_blocks_by_paged
     user = create(:moderator_user)
-    create_list(:user_block, 50, :creator => user)
+    user_blocks = create_list(:user_block, 50, :creator => user).reverse
+    next_path = user_blocks_by_path(user)
 
-    get user_blocks_by_path(:display_name => user.display_name)
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_by_path(:display_name => user.display_name, :page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list", :count => 1 do
-      assert_select "tr", :count => 21
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
+  end
+
+  private
+
+  def check_user_blocks_table(user_blocks)
+    assert_dom "table#block_list tbody tr" do |rows|
+      assert_equal user_blocks.count, rows.count, "unexpected number of rows in user blocks table"
+      rows.zip(user_blocks).map do |row, user_block|
+        assert_dom row, "a[href='#{user_block_path user_block}']", 1
+      end
+    end
+  end
+
+  def check_no_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/, :count => 0 }, "unexpected #{name} page link"
+  end
+
+  def check_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/ }, "missing #{name} page link" do |buttons|
+      return buttons.first.attributes["href"].value
     end
   end
 end
index cc22faaaa1dfc3ca8c175fd3c5eede9cdf58d673..2e98dc819866a05512d0f12a78a4905fb9e9af97 100644 (file)
@@ -18,11 +18,13 @@ class UserMutesControllerTest < ActionDispatch::IntegrationTest
 
   def test_index
     user = create(:user)
-    user.mutes.create(:subject => create(:user))
+    muted_user = create(:user)
+    user.mutes.create(:subject => muted_user)
     session_for(user)
 
     get user_mutes_path
     assert_match "You have muted 1 User", @response.body
+    assert_dom "tr a[href='#{user_path muted_user}']", :text => muted_user.display_name
   end
 
   def test_create
index c2ebd3c4795772ce2b3d28255393a8f272e56c53..73b4f04245d4b4a9d757ab9a0945c0234473ab05 100644 (file)
@@ -23,14 +23,14 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
     super_user = create(:super_user)
 
     # Granting should fail when not logged in
-    post grant_role_path(:display_name => target_user.display_name, :role => "moderator")
+    post grant_role_path(target_user, "moderator")
     assert_response :forbidden
 
     # Login as an unprivileged user
     session_for(normal_user)
 
     # Granting should still fail
-    post grant_role_path(:display_name => target_user.display_name, :role => "moderator")
+    post grant_role_path(target_user, "moderator")
     assert_redirected_to :controller => :errors, :action => :forbidden
 
     # Login as an administrator
@@ -39,7 +39,7 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
     UserRole::ALL_ROLES.each do |role|
       # Granting a role to a non-existent user should fail
       assert_difference "UserRole.count", 0 do
-        post grant_role_path(:display_name => "non_existent_user", :role => role)
+        post grant_role_path("non_existent_user", role)
       end
       assert_response :not_found
       assert_template "users/no_such_user"
@@ -47,20 +47,20 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
 
       # Granting a role to a user that already has it should fail
       assert_no_difference "UserRole.count" do
-        post grant_role_path(:display_name => super_user.display_name, :role => role)
+        post grant_role_path(super_user, role)
       end
       assert_redirected_to user_path(super_user)
       assert_equal "The user already has role #{role}.", flash[:error]
 
       # Granting a role to a user that doesn't have it should work...
       assert_difference "UserRole.count", 1 do
-        post grant_role_path(:display_name => target_user.display_name, :role => role)
+        post grant_role_path(target_user, role)
       end
       assert_redirected_to user_path(target_user)
 
       # ...but trying a second time should fail
       assert_no_difference "UserRole.count" do
-        post grant_role_path(:display_name => target_user.display_name, :role => role)
+        post grant_role_path(target_user, role)
       end
       assert_redirected_to user_path(target_user)
       assert_equal "The user already has role #{role}.", flash[:error]
@@ -68,7 +68,7 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
 
     # Granting a non-existent role should fail
     assert_difference "UserRole.count", 0 do
-      post grant_role_path(:display_name => target_user.display_name, :role => "no_such_role")
+      post grant_role_path(target_user, "no_such_role")
     end
     assert_redirected_to user_path(target_user)
     assert_equal "The string `no_such_role' is not a valid role.", flash[:error]
@@ -83,14 +83,14 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
     super_user = create(:super_user)
 
     # Revoking should fail when not logged in
-    post revoke_role_path(:display_name => target_user.display_name, :role => "moderator")
+    post revoke_role_path(target_user, "moderator")
     assert_response :forbidden
 
     # Login as an unprivileged user
     session_for(normal_user)
 
     # Revoking should still fail
-    post revoke_role_path(:display_name => target_user.display_name, :role => "moderator")
+    post revoke_role_path(target_user, "moderator")
     assert_redirected_to :controller => :errors, :action => :forbidden
 
     # Login as an administrator
@@ -99,7 +99,7 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
     UserRole::ALL_ROLES.each do |role|
       # Removing a role from a non-existent user should fail
       assert_difference "UserRole.count", 0 do
-        post revoke_role_path(:display_name => "non_existent_user", :role => role)
+        post revoke_role_path("non_existent_user", role)
       end
       assert_response :not_found
       assert_template "users/no_such_user"
@@ -107,20 +107,20 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
 
       # Removing a role from a user that doesn't have it should fail
       assert_no_difference "UserRole.count" do
-        post revoke_role_path(:display_name => target_user.display_name, :role => role)
+        post revoke_role_path(target_user, role)
       end
       assert_redirected_to user_path(target_user)
       assert_equal "The user does not have role #{role}.", flash[:error]
 
       # Removing a role from a user that has it should work...
       assert_difference "UserRole.count", -1 do
-        post revoke_role_path(:display_name => super_user.display_name, :role => role)
+        post revoke_role_path(super_user, role)
       end
       assert_redirected_to user_path(super_user)
 
       # ...but trying a second time should fail
       assert_no_difference "UserRole.count" do
-        post revoke_role_path(:display_name => super_user.display_name, :role => role)
+        post revoke_role_path(super_user, role)
       end
       assert_redirected_to user_path(super_user)
       assert_equal "The user does not have role #{role}.", flash[:error]
@@ -128,13 +128,13 @@ class UserRolesControllerTest < ActionDispatch::IntegrationTest
 
     # Revoking a non-existent role should fail
     assert_difference "UserRole.count", 0 do
-      post revoke_role_path(:display_name => target_user.display_name, :role => "no_such_role")
+      post revoke_role_path(target_user, "no_such_role")
     end
     assert_redirected_to user_path(target_user)
     assert_equal "The string `no_such_role' is not a valid role.", flash[:error]
 
     # Revoking administrator role from current user should fail
-    post revoke_role_path(:display_name => administrator_user.display_name, :role => "administrator")
+    post revoke_role_path(administrator_user, "administrator")
     assert_redirected_to user_path(administrator_user)
     assert_equal "Cannot revoke administrator role from current user.", flash[:error]
   end
index 2db0f43b334531a4028e8035d3425cafb9bcb67c..62bb34279eafa50c69a465ff65d5a2442768e693 100644 (file)
@@ -416,7 +416,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
   # information for the user
   def test_show
     # Test a non-existent user
-    get user_path(:display_name => "unknown")
+    get user_path("unknown")
     assert_response :not_found
 
     # Test a normal user
@@ -618,19 +618,19 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
     get users_path
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 7 + 1
+    assert_select "table#user_list tbody tr", :count => 7
 
     # Should be able to limit by status
     get users_path, :params => { :status => "suspended" }
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 1 + 1
+    assert_select "table#user_list tbody tr", :count => 1
 
     # Should be able to limit by IP address
     get users_path, :params => { :ip => "1.2.3.4" }
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 1 + 1
+    assert_select "table#user_list tbody tr", :count => 1
   end
 
   def test_index_get_paginated
@@ -644,23 +644,44 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
 
     # 100 examples, an administrator, and a granter for the admin.
     assert_equal 102, User.count
+    next_path = users_path
 
-    get users_path
+    get next_path
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 51
+    assert_select "table#user_list tbody tr", :count => 50
+    check_no_page_link "Newer Users"
+    next_path = check_page_link "Older Users"
 
-    get users_path, :params => { :page => 2 }
+    get next_path
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 51
+    assert_select "table#user_list tbody tr", :count => 50
+    check_page_link "Newer Users"
+    next_path = check_page_link "Older Users"
 
-    get users_path, :params => { :page => 3 }
+    get next_path
     assert_response :success
     assert_template :index
-    assert_select "table#user_list tr", :count => 3
+    assert_select "table#user_list tbody tr", :count => 2
+    check_page_link "Newer Users"
+    check_no_page_link "Older Users"
+  end
+
+  private
+
+  def check_no_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/, :count => 0 }, "unexpected #{name} page link"
   end
 
+  def check_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/ }, "missing #{name} page link" do |buttons|
+      return buttons.first.attributes["href"].value
+    end
+  end
+
+  public
+
   def test_index_post_confirm
     inactive_user = create(:user, :pending)
     suspended_user = create(:user, :suspended)
diff --git a/test/controllers/ways_controller_test.rb b/test/controllers/ways_controller_test.rb
new file mode 100644 (file)
index 0000000..e198f7c
--- /dev/null
@@ -0,0 +1,39 @@
+require "test_helper"
+
+class WaysControllerTest < ActionDispatch::IntegrationTest
+  ##
+  # test all routes which lead to this controller
+  def test_routes
+    assert_routing(
+      { :path => "/way/1", :method => :get },
+      { :controller => "ways", :action => "show", :id => "1" }
+    )
+  end
+
+  def test_show
+    way = create(:way)
+    sidebar_browse_check :way_path, way.id, "browse/feature"
+    assert_select "h4", /^Version/ do
+      assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
+    end
+    assert_select ".secondary-actions a[href='#{api_way_path way}']", :count => 1
+    assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
+  end
+
+  def test_show_multiple_versions
+    way = create(:way, :with_history, :version => 2)
+    sidebar_browse_check :way_path, way.id, "browse/feature"
+    assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1
+    assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1
+  end
+
+  def test_show_relation_member
+    member = create(:way)
+    relation = create(:relation)
+    create(:relation_member, :relation => relation, :member => member)
+    sidebar_browse_check :way_path, member.id, "browse/feature"
+    assert_select "a[href='#{relation_path relation}']", :count => 1
+  end
+end
index 2f68dc8dc6c1162512cee03a7859e22ba91ffba0..6d5c02a03614d64a00d54016f33598a56709ac52 100644 (file)
@@ -11,10 +11,12 @@ FactoryBot.define do
     end
 
     trait :expired do
+      created_at { Time.now.utc - 2.days }
       ends_at { Time.now.utc - 1.day }
     end
 
     trait :revoked do
+      expired
       revoker :factory => :moderator_user
     end
   end
index 34120e2078781ad732e69e5664a2e5324093157a..a905090dba6133a8c20908f8ee308a6fbb817015 100644 (file)
@@ -91,5 +91,5 @@ class ApplicationHelperTest < ActionView::TestCase
 
   def test_body_class; end
 
-  def test_current_page_class; end
+  def test_header_nav_link_class; end
 end
index 044f71681f2ec9ef2432bcc98c25dd00ecb3acfc..f7d2726dbf96667654b6eb89bbad377a8476b088 100644 (file)
@@ -8,12 +8,12 @@ class UserHelperTest < ActionView::TestCase
     gravatar_user = create(:user, :image_use_gravatar => true)
 
     image = user_image(user)
-    assert_match %r{^<img class="user_image border border-grey" .* src="/images/avatar_large.png" />$}, image
+    assert_match %r{^<img class="user_image border border-secondary-subtle bg-body" .* src="/images/avatar.svg" />$}, image
 
     image = user_image(user, :class => "foo")
-    assert_match %r{^<img class="foo" .* src="/images/avatar_large.png" />$}, image
+    assert_match %r{^<img class="foo" .* src="/images/avatar.svg" />$}, image
     image = user_image(gravatar_user)
-    assert_match %r{^<img class="user_image border border-grey" .* src="http://www.gravatar.com/avatar/.*" />$}, image
+    assert_match %r{^<img class="user_image border border-secondary-subtle bg-body" .* src="http://www.gravatar.com/avatar/.*" />$}, image
 
     image = user_image(gravatar_user, :class => "foo")
     assert_match %r{^<img class="foo" .* src="http://www.gravatar.com/avatar/.*" />$}, image
@@ -24,13 +24,13 @@ class UserHelperTest < ActionView::TestCase
     gravatar_user = create(:user, :image_use_gravatar => true)
 
     image = user_thumbnail(user)
-    assert_match %r{^<img class="user_thumbnail border border-grey" .* src="/images/avatar_small.png" />$}, image
+    assert_match %r{^<img class="user_thumbnail border border-secondary-subtle bg-body" .* src="/images/avatar.svg" />$}, image
 
     image = user_thumbnail(user, :class => "foo")
-    assert_match %r{^<img class="foo" .* src="/images/avatar_small.png" />$}, image
+    assert_match %r{^<img class="foo" .* src="/images/avatar.svg" />$}, image
 
     image = user_thumbnail(gravatar_user)
-    assert_match %r{^<img class="user_thumbnail border border-grey" .* src="http://www.gravatar.com/avatar/.*" />$}, image
+    assert_match %r{^<img class="user_thumbnail border border-secondary-subtle bg-body" .* src="http://www.gravatar.com/avatar/.*" />$}, image
 
     image = user_thumbnail(gravatar_user, :class => "foo")
     assert_match %r{^<img class="foo" .* src="http://www.gravatar.com/avatar/.*" />$}, image
@@ -41,13 +41,13 @@ class UserHelperTest < ActionView::TestCase
     gravatar_user = create(:user, :image_use_gravatar => true)
 
     image = user_thumbnail_tiny(user)
-    assert_match %r{^<img class="user_thumbnail_tiny border border-grey" .* src="/images/avatar_small.png" />$}, image
+    assert_match %r{^<img class="user_thumbnail_tiny border border-secondary-subtle bg-body" .* src="/images/avatar.svg" />$}, image
 
     image = user_thumbnail_tiny(user, :class => "foo")
-    assert_match %r{^<img class="foo" .* src="/images/avatar_small.png" />$}, image
+    assert_match %r{^<img class="foo" .* src="/images/avatar.svg" />$}, image
 
     image = user_thumbnail_tiny(gravatar_user)
-    assert_match %r{^<img class="user_thumbnail_tiny border border-grey" .* src="http://www.gravatar.com/avatar/.*" />$}, image
+    assert_match %r{^<img class="user_thumbnail_tiny border border-secondary-subtle bg-body" .* src="http://www.gravatar.com/avatar/.*" />$}, image
 
     image = user_thumbnail_tiny(gravatar_user, :class => "foo")
     assert_match %r{^<img class="foo" .* src="http://www.gravatar.com/avatar/.*" />$}, image
@@ -116,7 +116,8 @@ class UserHelperTest < ActionView::TestCase
 
   def test_auth_button
     button = auth_button("google", "google")
-    assert_equal("<a class=\"auth_button\" title=\"Login with Google\" rel=\"nofollow\" data-method=\"post\" href=\"/auth/google\"><img alt=\"Login with a Google OpenID\" class=\"rounded-3\" src=\"/images/google.svg\" /></a>", button)
+    img_tag = "<img alt=\"Log in with a Google OpenID\" class=\"rounded-3\" src=\"/images/google.svg\" width=\"36\" height=\"36\" />"
+    assert_equal("<a class=\"auth_button\" title=\"Log in with Google\" rel=\"nofollow\" data-method=\"post\" href=\"/auth/google\">#{img_tag}</a>", button)
   end
 
   private
index 998e97330059c4ab4cd41a019851131cda35893d..25123b392f3dee63f15fd129b846674c8e584321 100644 (file)
@@ -68,4 +68,19 @@ class UserMailerTest < ActionMailer::TestCase
     assert_select body, "a[href^='#{url}']"
     assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
   end
+
+  def test_changeset_comment_notification
+    create(:language, :code => "en")
+    user = create(:user)
+    other_user = create(:user)
+    changeset = create(:changeset, :user => user)
+    changeset_comment = create(:changeset_comment, :changeset => changeset)
+    email = UserMailer.changeset_comment_notification(changeset_comment, other_user)
+    body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
+
+    url = Rails.application.routes.url_helpers.changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
+    unsubscribe_url = Rails.application.routes.url_helpers.unsubscribe_changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
+    assert_select body, "a[href^='#{url}']"
+    assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
+  end
 end
index ee0a77649ea995f94f947364133df8c2d2ce11c5..94cb5ec8143612803a643912ac7445455651890a 100644 (file)
@@ -362,4 +362,86 @@ class NodeTest < ActiveSupport::TestCase
     assert_equal relation_member2.relation.id, cr.second.id
     assert_equal relation_member3.relation.id, cr.third.id
   end
+
+  test "raises missing changeset exception when creating" do
+    user = create(:user)
+    node = Node.new
+    assert_raises OSM::APIChangesetMissingError do
+      node.create_with_history(user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    node = Node.new(:changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      node.create_with_history(user)
+    end
+  end
+
+  test "raises already closed changeset exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    node = Node.new(:changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      node.create_with_history(user)
+    end
+  end
+
+  test "raises id precondition exception when updating" do
+    user = create(:user)
+    node = Node.new(:id => 23)
+    new_node = Node.new(:id => 42)
+    assert_raises OSM::APIPreconditionFailedError do
+      node.update_from(new_node, user)
+    end
+  end
+
+  test "raises version mismatch exception when updating" do
+    user = create(:user)
+    node = Node.new(:id => 42, :version => 7)
+    new_node = Node.new(:id => 42, :version => 12)
+    assert_raises OSM::APIVersionMismatchError do
+      node.update_from(new_node, user)
+    end
+  end
+
+  test "raises missing changeset exception when updating" do
+    user = create(:user)
+    node = Node.new(:id => 42, :version => 12)
+    new_node = Node.new(:id => 42, :version => 12)
+    assert_raises OSM::APIChangesetMissingError do
+      node.update_from(new_node, user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    node = Node.new(:id => 42, :version => 12)
+    new_node = Node.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      node.update_from(new_node, user)
+    end
+  end
+
+  test "raises already closed changeset exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    node = Node.new(:id => 42, :version => 12)
+    new_node = Node.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      node.update_from(new_node, user)
+    end
+  end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    node = Node.new(:id => 23, :visible => true)
+    new_node = Node.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      node.delete_with_history!(new_node, user)
+    end
+  end
 end
index 00133f1f48a70c14bde549f89699359f81805f47..4aa37f49228cfa9a2abda9a605cafd45b8d38775 100644 (file)
@@ -33,4 +33,16 @@ class RedactionTest < ActiveSupport::TestCase
     assert_predicate(node_v1, :redacted?, "Expected node version 1 to be redacted after redact! call.")
     assert_not_predicate(node_v2, :redacted?, "Expected node version 2 to not be redacted after redact! call.")
   end
+
+  def test_invalid_with_empty_title
+    redaction = build(:redaction, :title => "")
+    assert_not redaction.valid?
+    assert_includes redaction.errors.messages[:title], "can't be blank"
+  end
+
+  def test_invalid_with_empty_description
+    redaction = build(:redaction, :description => "")
+    assert_not redaction.valid?
+    assert_includes redaction.errors.messages[:description], "can't be blank"
+  end
 end
index 575813ad532131ea90e45fe032c2087d4b862258..405dd353d3a94367280c1cea77a4b579aabce376 100644 (file)
@@ -250,4 +250,86 @@ class RelationTest < ActiveSupport::TestCase
       end
     end
   end
+
+  test "raises missing changeset exception when creating" do
+    user = create(:user)
+    relation = Relation.new
+    assert_raises OSM::APIChangesetMissingError do
+      relation.create_with_history(user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    relation = Relation.new(:changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      relation.create_with_history(user)
+    end
+  end
+
+  test "raises already closed changeset exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    relation = Relation.new(:changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      relation.create_with_history(user)
+    end
+  end
+
+  test "raises id precondition exception when updating" do
+    user = create(:user)
+    relation = Relation.new(:id => 23)
+    new_relation = Relation.new(:id => 42)
+    assert_raises OSM::APIPreconditionFailedError do
+      relation.update_from(new_relation, user)
+    end
+  end
+
+  test "raises version mismatch exception when updating" do
+    user = create(:user)
+    relation = Relation.new(:id => 42, :version => 7)
+    new_relation = Relation.new(:id => 42, :version => 12)
+    assert_raises OSM::APIVersionMismatchError do
+      relation.update_from(new_relation, user)
+    end
+  end
+
+  test "raises missing changeset exception when updating" do
+    user = create(:user)
+    relation = Relation.new(:id => 42, :version => 12)
+    new_relation = Relation.new(:id => 42, :version => 12)
+    assert_raises OSM::APIChangesetMissingError do
+      relation.update_from(new_relation, user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    relation = Relation.new(:id => 42, :version => 12)
+    new_relation = Relation.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      relation.update_from(new_relation, user)
+    end
+  end
+
+  test "raises already closed changeset exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    relation = Relation.new(:id => 42, :version => 12)
+    new_relation = Relation.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      relation.update_from(new_relation, user)
+    end
+  end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    relation = Relation.new(:id => 23, :visible => true)
+    new_relation = Relation.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      relation.delete_with_history!(new_relation, user)
+    end
+  end
 end
diff --git a/test/models/user_token_test.rb b/test/models/user_token_test.rb
deleted file mode 100644 (file)
index cf9f09e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-require "test_helper"
-
-class UserTokenTest < ActiveSupport::TestCase
-end
index 8674b37904d0110f49ef2b9210761672aaeaa8b3..36debfac082e6eba757431bbbce95dfb8764b4da 100644 (file)
@@ -217,4 +217,86 @@ class WayTest < ActiveSupport::TestCase
     assert_equal 1, cr.size
     assert_equal relation.id, cr.first.id
   end
+
+  test "raises missing changeset exception when creating" do
+    user = create(:user)
+    way = Way.new
+    assert_raises OSM::APIChangesetMissingError do
+      way.create_with_history(user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    way = Way.new(:changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      way.create_with_history(user)
+    end
+  end
+
+  test "raises already closed changeset exception when creating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    way = Way.new(:changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      way.create_with_history(user)
+    end
+  end
+
+  test "raises id precondition exception when updating" do
+    user = create(:user)
+    way = Way.new(:id => 23)
+    new_way = Way.new(:id => 42)
+    assert_raises OSM::APIPreconditionFailedError do
+      way.update_from(new_way, user)
+    end
+  end
+
+  test "raises version mismatch exception when updating" do
+    user = create(:user)
+    way = Way.new(:id => 42, :version => 7)
+    new_way = Way.new(:id => 42, :version => 12)
+    assert_raises OSM::APIVersionMismatchError do
+      way.update_from(new_way, user)
+    end
+  end
+
+  test "raises missing changeset exception when updating" do
+    user = create(:user)
+    way = Way.new(:id => 42, :version => 12)
+    new_way = Way.new(:id => 42, :version => 12)
+    assert_raises OSM::APIChangesetMissingError do
+      way.update_from(new_way, user)
+    end
+  end
+
+  test "raises user-changeset mismatch exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset)
+    way = Way.new(:id => 42, :version => 12)
+    new_way = Way.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIUserChangesetMismatchError do
+      way.update_from(new_way, user)
+    end
+  end
+
+  test "raises already closed changeset exception when updating" do
+    user = create(:user)
+    changeset = create(:changeset, :closed, :user => user)
+    way = Way.new(:id => 42, :version => 12)
+    new_way = Way.new(:id => 42, :version => 12, :changeset => changeset)
+    assert_raises OSM::APIChangesetAlreadyClosedError do
+      way.update_from(new_way, user)
+    end
+  end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    way = Way.new(:id => 23, :visible => true)
+    new_way = Way.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      way.delete_with_history!(new_way, user)
+    end
+  end
 end
index dea0d2208f32e04f9779cda321c892ba22f800c6..b78568314166ab4e357f16841008a970848290ad 100644 (file)
@@ -36,6 +36,7 @@ class MessagesTest < ApplicationSystemTestCase
     assert_text "1 muted message"
 
     click_on "Delete"
-    assert_text "0 muted messages"
+    refute_text "1 muted message"
+    assert_text "You have 0 new messages and 0 old messages"
   end
 end
index eceb7341665e5e365a15cbf92172f5ddfeda020b..ec2c8f093e4dd02d52ae7b0af1cd7abc4aeb78d4 100644 (file)
@@ -21,9 +21,9 @@ class UserEmailChangeTest < ApplicationSystemTestCase
     email = ActionMailer::Base.deliveries.first
     assert_equal 1, email.to.count
     assert_equal "new_tester@example.com", email.to.first
-    assert_match %r{/user/confirm-email\?confirm_string=[A-Za-z0-9-_%]+\s}, email.parts[0].parts[0].decoded
+    assert_match %r{/user/confirm-email\?confirm_string=[A-Za-z0-9\-_%]+\s}, email.parts[0].parts[0].decoded
 
-    if email.parts[0].parts[0].decoded =~ %r{(/user/confirm-email\?confirm_string=[A-Za-z0-9-_%]+)\s}
+    if email.parts[0].parts[0].decoded =~ %r{(/user/confirm-email\?confirm_string=[A-Za-z0-9\-_%]+)\s}
       visit Regexp.last_match(1)
       assert page.has_css?("body.accounts-edit")
     end
index 8c21ee46a2e85f43ae62159c32afb0a8a3904d62..1493b7305e384f96ea71d895c6bbb2f0ba736c10 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
   resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
   integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
 
-"@eslint/eslintrc@^2.1.4":
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
-  integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+"@eslint/eslintrc@^3.0.2":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e"
+  integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==
   dependencies:
     ajv "^6.12.4"
     debug "^4.3.2"
-    espree "^9.6.0"
-    globals "^13.19.0"
+    espree "^10.0.1"
+    globals "^14.0.0"
     ignore "^5.2.0"
     import-fresh "^3.2.1"
     js-yaml "^4.1.0"
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@8.57.0":
-  version "8.57.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
-  integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+"@eslint/js@9.0.0":
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.0.0.tgz#1a9e4b4c96d8c7886e0110ed310a0135144a1691"
+  integrity sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==
 
-"@humanwhocodes/config-array@^0.11.14":
-  version "0.11.14"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
-  integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+"@humanwhocodes/config-array@^0.12.3":
+  version "0.12.3"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.12.3.tgz#a6216d90f81a30bedd1d4b5d799b47241f318072"
+  integrity sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==
   dependencies:
-    "@humanwhocodes/object-schema" "^2.0.2"
+    "@humanwhocodes/object-schema" "^2.0.3"
     debug "^4.3.1"
     minimatch "^3.0.5"
 
   resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
   integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
 
-"@humanwhocodes/object-schema@^2.0.2":
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
-  integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
+"@humanwhocodes/object-schema@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+  integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@ungap/structured-clone@^1.2.0":
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
-  integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
-
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
-acorn@^8.9.0:
-  version "8.9.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
-  integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
+acorn@^8.11.3:
+  version "8.11.3"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
 
 ajv@^6.12.4:
   version "6.12.6"
@@ -139,13 +134,16 @@ bs-custom-file-input@^1.3.4:
   resolved "https://registry.yarnpkg.com/bs-custom-file-input/-/bs-custom-file-input-1.3.4.tgz#c275cb8d4f1c02ba026324292509fa9a747dbda8"
   integrity sha512-NBsQzTnef3OW1MvdKBbMHAYHssCd613MSeJV7z2McXznWtVMnJCy7Ckyc+PwxV6Pk16cu6YBcYWh/ZE0XWNKCA==
 
-call-bind@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
-  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+call-bind@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+  integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
   dependencies:
-    function-bind "^1.1.1"
-    get-intrinsic "^1.0.2"
+    es-define-property "^1.0.0"
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.4"
+    set-function-length "^1.2.1"
 
 callsites@^3.0.0:
   version "3.1.0"
@@ -198,71 +196,86 @@ deep-is@^0.1.3:
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
+define-data-property@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+  integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+  dependencies:
+    es-define-property "^1.0.0"
+    es-errors "^1.3.0"
+    gopd "^1.0.1"
+
 diacritics@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1"
   integrity sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==
 
-doctrine@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
-  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+es-define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+  integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
   dependencies:
-    esutils "^2.0.2"
+    get-intrinsic "^1.2.4"
+
+es-errors@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+  integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
 
 escape-string-regexp@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-eslint-scope@^7.2.2:
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
-  integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+eslint-scope@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
+  integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==
   dependencies:
     esrecurse "^4.3.0"
     estraverse "^5.2.0"
 
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+eslint-visitor-keys@^3.3.0:
   version "3.4.3"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
-eslint@^8.0.0:
-  version "8.57.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
-  integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+eslint-visitor-keys@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
+  integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
+
+eslint@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.0.0.tgz#6270548758e390343f78c8afd030566d86927d40"
+  integrity sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.6.1"
-    "@eslint/eslintrc" "^2.1.4"
-    "@eslint/js" "8.57.0"
-    "@humanwhocodes/config-array" "^0.11.14"
+    "@eslint/eslintrc" "^3.0.2"
+    "@eslint/js" "9.0.0"
+    "@humanwhocodes/config-array" "^0.12.3"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"
-    "@ungap/structured-clone" "^1.2.0"
     ajv "^6.12.4"
     chalk "^4.0.0"
     cross-spawn "^7.0.2"
     debug "^4.3.2"
-    doctrine "^3.0.0"
     escape-string-regexp "^4.0.0"
-    eslint-scope "^7.2.2"
-    eslint-visitor-keys "^3.4.3"
-    espree "^9.6.1"
+    eslint-scope "^8.0.1"
+    eslint-visitor-keys "^4.0.0"
+    espree "^10.0.1"
     esquery "^1.4.2"
     esutils "^2.0.2"
     fast-deep-equal "^3.1.3"
-    file-entry-cache "^6.0.1"
+    file-entry-cache "^8.0.0"
     find-up "^5.0.0"
     glob-parent "^6.0.2"
-    globals "^13.19.0"
     graphemer "^1.4.0"
     ignore "^5.2.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
     is-path-inside "^3.0.3"
-    js-yaml "^4.1.0"
     json-stable-stringify-without-jsonify "^1.0.1"
     levn "^0.4.1"
     lodash.merge "^4.6.2"
@@ -272,14 +285,14 @@ eslint@^8.0.0:
     strip-ansi "^6.0.1"
     text-table "^0.2.0"
 
-espree@^9.6.0, espree@^9.6.1:
-  version "9.6.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
-  integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+espree@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f"
+  integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==
   dependencies:
-    acorn "^8.9.0"
+    acorn "^8.11.3"
     acorn-jsx "^5.3.2"
-    eslint-visitor-keys "^3.4.1"
+    eslint-visitor-keys "^4.0.0"
 
 esquery@^1.4.2:
   version "1.4.2"
@@ -327,12 +340,12 @@ fastq@^1.6.0:
   dependencies:
     reusify "^1.0.4"
 
-file-entry-cache@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
-  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+file-entry-cache@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+  integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
   dependencies:
-    flat-cache "^3.0.4"
+    flat-cache "^4.0.0"
 
 find-up@^5.0.0:
   version "5.0.0"
@@ -342,37 +355,34 @@ find-up@^5.0.0:
     locate-path "^6.0.0"
     path-exists "^4.0.0"
 
-flat-cache@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
-  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+flat-cache@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+  integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
   dependencies:
-    flatted "^3.1.0"
-    rimraf "^3.0.2"
-
-flatted@^3.1.0:
-  version "3.2.7"
-  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
-  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+    flatted "^3.2.9"
+    keyv "^4.5.4"
 
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+flatted@^3.2.9:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+  integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
 
-function-bind@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+function-bind@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+  integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
 
-get-intrinsic@^1.0.2:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
-  integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+  integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
   dependencies:
-    function-bind "^1.1.1"
-    has "^1.0.3"
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+    has-proto "^1.0.1"
     has-symbols "^1.0.3"
+    hasown "^2.0.0"
 
 glob-parent@^6.0.2:
   version "6.0.2"
@@ -381,24 +391,17 @@ glob-parent@^6.0.2:
   dependencies:
     is-glob "^4.0.3"
 
-glob@^7.1.3:
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
-  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.1.1"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
+globals@^14.0.0:
+  version "14.0.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
+  integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
 
-globals@^13.19.0:
-  version "13.19.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
-  integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==
+gopd@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
   dependencies:
-    type-fest "^0.20.2"
+    get-intrinsic "^1.1.3"
 
 graphemer@^1.4.0:
   version "1.4.0"
@@ -410,17 +413,29 @@ has-flag@^4.0.0:
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
+has-property-descriptors@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+  integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+  dependencies:
+    es-define-property "^1.0.0"
+
+has-proto@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+  integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+
 has-symbols@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
   integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
 
-has@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+hasown@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa"
+  integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==
   dependencies:
-    function-bind "^1.1.1"
+    function-bind "^1.1.2"
 
 ignore@^5.2.0:
   version "5.2.0"
@@ -440,19 +455,6 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
 
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
-  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
 is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -492,6 +494,11 @@ js-yaml@^4.1.0:
   dependencies:
     argparse "^2.0.1"
 
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
 json-schema-traverse@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -502,10 +509,17 @@ json-stable-stringify-without-jsonify@^1.0.1:
   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
   integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
 
-leaflet.locatecontrol@^0.79.0:
-  version "0.79.0"
-  resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.79.0.tgz#0236b87c699a49f9ddb2f289941fbc0d3c3f8b62"
-  integrity sha512-h64QIHFkypYdr90lkSfjKvPvvk8/b8UnP3m9WuoWdp5p2AaCWC0T1NVwyuj4rd5U4fBW3tQt4ppmZ2LceHMIDg==
+keyv@^4.5.4:
+  version "4.5.4"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+  integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+  dependencies:
+    json-buffer "3.0.1"
+
+leaflet.locatecontrol@^0.81.0:
+  version "0.81.0"
+  resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.81.0.tgz#75e92d07c19edade910a2b5a177ac24cef7d10e7"
+  integrity sha512-5Dqj6VXVFl1vPquYZW95hQYegvzqSI4eLIpZrBMuHuyoAo5i9y6js3z02TF//XXZByIyTI/XBtlxlZLUM08Pcg==
 
 leaflet@^1.8.0:
   version "1.9.4"
@@ -532,7 +546,7 @@ lodash.merge@^4.6.2:
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.0.5, minimatch@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
   integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -549,17 +563,10 @@ natural-compare@^1.4.0:
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
 
-object-inspect@^1.9.0:
-  version "1.12.2"
-  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
-  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
-
-once@^1.3.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
-  dependencies:
-    wrappy "1"
+object-inspect@^1.13.1:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+  integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
 
 optionator@^0.9.3:
   version "0.9.3"
@@ -606,11 +613,6 @@ path-exists@^4.0.0:
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
   integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
 
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
 path-key@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -627,11 +629,11 @@ punycode@^2.1.0:
   integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
 
 qs@^6.9.4:
-  version "6.11.2"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
-  integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+  version "6.12.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77"
+  integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==
   dependencies:
-    side-channel "^1.0.4"
+    side-channel "^1.0.6"
 
 queue-microtask@^1.2.2:
   version "1.2.3"
@@ -648,13 +650,6 @@ reusify@^1.0.4:
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 
-rimraf@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
-  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
-  dependencies:
-    glob "^7.1.3"
-
 run-parallel@^1.1.9:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -662,6 +657,18 @@ run-parallel@^1.1.9:
   dependencies:
     queue-microtask "^1.2.2"
 
+set-function-length@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425"
+  integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==
+  dependencies:
+    define-data-property "^1.1.2"
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.3"
+    gopd "^1.0.1"
+    has-property-descriptors "^1.0.1"
+
 shebang-command@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -674,14 +681,15 @@ shebang-regex@^3.0.0:
   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
-side-channel@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
-  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+side-channel@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+  integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
   dependencies:
-    call-bind "^1.0.0"
-    get-intrinsic "^1.0.2"
-    object-inspect "^1.9.0"
+    call-bind "^1.0.7"
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.4"
+    object-inspect "^1.13.1"
 
 strip-ansi@^6.0.1:
   version "6.0.1"
@@ -714,11 +722,6 @@ type-check@^0.4.0, type-check@~0.4.0:
   dependencies:
     prelude-ls "^1.2.1"
 
-type-fest@^0.20.2:
-  version "0.20.2"
-  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
-  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
-
 uri-js@^4.2.2:
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -733,11 +736,6 @@ which@^2.0.1:
   dependencies:
     isexe "^2.0.0"
 
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
 yocto-queue@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"