From: Tom Hughes Date: Sun, 21 Apr 2024 17:54:16 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/4708' X-Git-Tag: live~783 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/43db18ae911fef3ad7b36e9ed27e5eff469ef863?hp=130a2ed7c1d87845ebf0ed065200cec8a67fece4 Merge remote-tracking branch 'upstream/pull/4708' --- diff --git a/Gemfile b/Gemfile index 0b7e25ec9..13daf8267 100644 --- 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" diff --git a/Gemfile.lock b/Gemfile.lock index b8d62ae73..2d790b5c6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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.896.0) - aws-sdk-core (3.191.3) + aws-partitions (1.913.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.79.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,14 +115,14 @@ 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) + bigdecimal (3.1.7) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) bootsnap (1.18.3) @@ -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) @@ -300,14 +300,14 @@ 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) + libv8-node (18.19.0.0) libxml-ruby (5.0.3) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) @@ -328,10 +328,10 @@ GEM maxminddb (0.1.22) 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_portile2 (2.8.6) + 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.4) 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.62.1) + rubocop (1.63.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -505,10 +505,10 @@ GEM rubocop-minitest (0.35.0) rubocop (>= 1.61, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-performance (1.20.2) + 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) @@ -539,6 +539,8 @@ GEM simplecov-html (0.12.3) simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) + simpleidn (0.2.1) + unf (~> 0.1.4) smart_properties (1.17.0) snaky_hash (2.0.1) hashie @@ -558,19 +560,27 @@ GEM 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) + unf (0.1.4) + unf_ext + unf_ext (0.0.9.1) unicode-display_width (2.5.0) uri (0.13.0) - validates_email_format_of (1.7.2) - i18n + validates_email_format_of (1.8.2) + i18n (>= 0.8.0) + simpleidn 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 +690,7 @@ DEPENDENCIES sprockets-exporters_pack strong_migrations terser + turbo-rails unicode-display_width validates_email_format_of (>= 1.5.1) vendorer diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index b43cc6b29..3aba63c33 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -23,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 diff --git a/app/abilities/api_ability.rb b/app/abilities/api_ability.rb index e20b849d1..96ed9b080 100644 --- a/app/abilities/api_ability.rb +++ b/app/abilities/api_ability.rb @@ -10,7 +10,7 @@ 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 diff --git a/app/assets/images/avatar.svg b/app/assets/images/avatar.svg new file mode 100644 index 000000000..46d761b6d --- /dev/null +++ b/app/assets/images/avatar.svg @@ -0,0 +1,6 @@ + + + + diff --git a/app/assets/images/avatars.svg b/app/assets/images/avatars.svg deleted file mode 100644 index 85288b242..000000000 --- a/app/assets/images/avatars.svg +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/browse/byway.20.png b/app/assets/images/browse/byway.20.png deleted file mode 100644 index ee682e3b6..000000000 Binary files a/app/assets/images/browse/byway.20.png and /dev/null differ diff --git a/app/assets/images/browse/motorway.20.png b/app/assets/images/browse/motorway.20.png index 4528ad560..cfd3e0418 100644 Binary files a/app/assets/images/browse/motorway.20.png and b/app/assets/images/browse/motorway.20.png differ diff --git a/app/assets/images/browse/primary.20.png b/app/assets/images/browse/primary.20.png index 91204ac6a..6ee4b0a5e 100644 Binary files a/app/assets/images/browse/primary.20.png and b/app/assets/images/browse/primary.20.png differ diff --git a/app/assets/images/browse/secondary.20.png b/app/assets/images/browse/secondary.20.png index 13e0aa6a4..b8f2556e3 100644 Binary files a/app/assets/images/browse/secondary.20.png and b/app/assets/images/browse/secondary.20.png differ diff --git a/app/assets/images/browse/tertiary.20.png b/app/assets/images/browse/tertiary.20.png index bccaa7e0e..b29cdaa77 100644 Binary files a/app/assets/images/browse/tertiary.20.png and b/app/assets/images/browse/tertiary.20.png differ diff --git a/app/assets/images/browse/trunk.20.png b/app/assets/images/browse/trunk.20.png index c753a3189..5e3f1e388 100644 Binary files a/app/assets/images/browse/trunk.20.png and b/app/assets/images/browse/trunk.20.png differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 0bfff869e..c71c0652d 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -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) { diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index ef37e73ca..42854f2e2 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -268,7 +268,7 @@ OSM.Directions = function (map) { I18n.t("javascripts.directions.descend") + ": " + formatHeight(route.descend) + "."); } - var turnByTurnTable = $("") + var turnByTurnTable = $("
") .append($("")); var directionsCloseButton = $(" - - + + diff --git a/app/views/browse/_tag_details.html.erb b/app/views/browse/_tag_details.html.erb index cc08fe16a..2b4ec1bb0 100644 --- a/app/views/browse/_tag_details.html.erb +++ b/app/views/browse/_tag_details.html.erb @@ -1,6 +1,6 @@ <% unless tag_details.empty? %>

<%= t ".tags" %>

-
+
<%= format_key(tag[0]) %><%= format_value(tag[0], tag[1]) %><%= format_key(tag[0]) %><%= format_value(tag[0], tag[1]) %>
<%= render :partial => "browse/tag", :collection => tag_details.sort %>
diff --git a/app/views/changeset_comments/_comment.rss.builder b/app/views/changeset_comments/_comment.rss.builder new file mode 100644 index 000000000..83dfadda8 --- /dev/null +++ b/app/views/changeset_comments/_comment.rss.builder @@ -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 index b1344b488..000000000 --- a/app/views/changeset_comments/_comments.rss.builder +++ /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 diff --git a/app/views/changeset_comments/index.rss.builder b/app/views/changeset_comments/index.rss.builder index acaa54727..f055c2014 100644 --- a/app/views/changeset_comments/index.rss.builder +++ b/app/views/changeset_comments/index.rss.builder @@ -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 diff --git a/app/views/changesets/_changeset.html.erb b/app/views/changesets/_changeset.html.erb index a4357a3f5..b219f4c32 100644 --- a/app/views/changesets/_changeset.html.erb +++ b/app/views/changesets/_changeset.html.erb @@ -12,7 +12,7 @@ <%= tag.li :id => "changeset_#{changeset.id}", :data => { :changeset => changeset_data }, :class => "list-group-item" do %>

- + <%= changeset.tags["comment"].to_s.presence || t("browse.no_comment") %>

@@ -20,7 +20,7 @@
<%= changeset_details(changeset) %> · - + #<%= changeset.id %>
diff --git a/app/views/changesets/history.html.erb b/app/views/changesets/history.html.erb index a9970e652..a536677b0 100644 --- a/app/views/changesets/history.html.erb +++ b/app/views/changesets/history.html.erb @@ -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 %> diff --git a/app/views/dashboards/show.html.erb b/app/views/dashboards/show.html.erb index 744661dfd..d3e6dbcb3 100644 --- a/app/views/dashboards/show.html.erb +++ b/app/views/dashboards/show.html.erb @@ -6,7 +6,7 @@ <% if current_user and @user.id == current_user.id %>
<% if !@user.home_location? %> -
+

<%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %>

<% 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 %> diff --git a/app/views/diary_entries/_diary_comment.html.erb b/app/views/diary_entries/_diary_comment.html.erb index 04e011574..5ade361aa 100644 --- a/app/views/diary_entries/_diary_comment.html.erb +++ b/app/views/diary_entries/_diary_comment.html.erb @@ -3,7 +3,7 @@ <%= user_thumbnail diary_comment.user %>
-

<%= 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}")) %> +

<%= 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 %> <% 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 %> <% end %> diff --git a/app/views/diary_entries/_diary_entry.html.erb b/app/views/diary_entries/_diary_entry.html.erb index 8bd4dc57f..9c7d7b2dc 100644 --- a/app/views/diary_entries/_diary_entry.html.erb +++ b/app/views/diary_entries/_diary_entry.html.erb @@ -1,4 +1,4 @@ -

+
<%= render :partial => "diary_entry_heading", :object => diary_entry, :as => "diary_entry" %>
@@ -24,7 +24,7 @@ <% end %> <% if current_user && current_user == diary_entry.user %> -
  • <%= link_to t(".edit_link"), :action => "edit", :display_name => diary_entry.user.display_name, :id => diary_entry.id %>
  • +
  • <%= link_to t(".edit_link"), edit_diary_entry_path(diary_entry.user, diary_entry) %>
  • <% end %> <% if current_user and diary_entry.user != current_user %> @@ -36,9 +36,9 @@ <% if can? :hide, DiaryEntry %>
  • <% 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 %>
  • <% end %> diff --git a/app/views/diary_entries/_diary_entry_heading.html.erb b/app/views/diary_entries/_diary_entry_heading.html.erb index ef924ffdd..30f7bc03b 100644 --- a/app/views/diary_entries/_diary_entry_heading.html.erb +++ b/app/views/diary_entries/_diary_entry_heading.html.erb @@ -13,7 +13,7 @@ <% end %> - <%= 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 %> diff --git a/app/views/diary_entries/_form.html.erb b/app/views/diary_entries/_form.html.erb index 0b38e3ea6..291e8e33b 100644 --- a/app/views/diary_entries/_form.html.erb +++ b/app/views/diary_entries/_form.html.erb @@ -5,7 +5,7 @@
    <%= t ".location" -%> - <%= 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 } %>
    <%= f.text_field :latitude, :wrapper_class => "col-sm-4 d-flex flex-column", :class => "mt-auto", :id => "latitude" %> diff --git a/app/views/diary_entries/_location.html.erb b/app/views/diary_entries/_location.html.erb index d5860f11d..ae48e86b9 100644 --- a/app/views/diary_entries/_location.html.erb +++ b/app/views/diary_entries/_location.html.erb @@ -1,7 +1,9 @@ <%= t ".location" %> - "index", :anchor => "map=14/#{location.latitude}/#{location.longitude}" %>"> - 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 %> - - +<%= 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 %> diff --git a/app/views/diary_entries/comments.html.erb b/app/views/diary_entries/comments.html.erb index 61ceccdc0..aa0fceb95 100644 --- a/app/views/diary_entries/comments.html.erb +++ b/app/views/diary_entries/comments.html.erb @@ -1,6 +1,6 @@ <% content_for :heading do %>

    <%= t ".heading", :user => @user.display_name %>

    -

    <%= t ".subheading_html", :user => link_to(@user.display_name, user_path(@user)) %>

    +

    <%= t ".subheading_html", :user => link_to(@user.display_name, @user) %>

    <% end %> <% if @comments.empty? %> diff --git a/app/views/diary_entries/show.html.erb b/app/views/diary_entries/show.html.erb index 63ab89b8f..6c0895380 100644 --- a/app/views/diary_entries/show.html.erb +++ b/app/views/diary_entries/show.html.erb @@ -13,15 +13,15 @@ <%= render @entry %>
    -
    +

    <%= t(".discussion") %>

    <% if current_user %>
    <% 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 %>
    <% end %> diff --git a/app/views/diary_entries/subscribe.html.erb b/app/views/diary_entries/subscribe.html.erb index e18be2b6d..62d734ff2 100644 --- a/app/views/diary_entries/subscribe.html.erb +++ b/app/views/diary_entries/subscribe.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t ".heading", :user => @diary_entry.user.display_name %>

    +

    <%= t ".heading" %>

    <% end %> <%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %> diff --git a/app/views/diary_entries/unsubscribe.html.erb b/app/views/diary_entries/unsubscribe.html.erb index e18be2b6d..62d734ff2 100644 --- a/app/views/diary_entries/unsubscribe.html.erb +++ b/app/views/diary_entries/unsubscribe.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t ".heading", :user => @diary_entry.user.display_name %>

    +

    <%= t ".heading" %>

    <% end %> <%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %> diff --git a/app/views/issues/_comments.html.erb b/app/views/issues/_comments.html.erb index 7776d9ee3..9200b4cec 100644 --- a/app/views/issues/_comments.html.erb +++ b/app/views/issues/_comments.html.erb @@ -2,11 +2,11 @@ <% comments.each do |comment| %>
    - <%= link_to user_thumbnail(comment.user), user_path(comment.user) %> + <%= link_to user_thumbnail(comment.user), comment.user %>

    - <%= 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) %>

    diff --git a/app/views/issues/_reports.html.erb b/app/views/issues/_reports.html.erb index 9ef28f1c2..2d1b78800 100644 --- a/app/views/issues/_reports.html.erb +++ b/app/views/issues/_reports.html.erb @@ -1,12 +1,12 @@ <% reports.each do |report| %>
    - <%= link_to user_thumbnail(report.user), user_path(report.user) %> + <%= link_to user_thumbnail(report.user), report.user %>

    <%= 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) %>

    diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index 12ddf2b32..523f90846 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -59,10 +59,10 @@ <%= t ".states.#{issue.status}" %> <%= link_to t(".reports_count", :count => issue.reports_count), issue %> <%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %> - <%= link_to issue.reported_user.display_name, user_path(issue.reported_user) if issue.reported_user %> + <%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %> <% 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) %> diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index e2099f8e6..ad463c259 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -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 %>

    @@ -45,7 +45,7 @@

    <%= t ".reports_of_this_issue" %>

    <% if @read_reports.present? %> -
    +

    <%= t ".read_reports" %>

    <%= render "reports", :reports => @read_reports %>
    diff --git a/app/views/layouts/_content.html.erb b/app/views/layouts/_content.html.erb index cfb8d712c..9e28c0771 100644 --- a/app/views/layouts/_content.html.erb +++ b/app/views/layouts/_content.html.erb @@ -4,7 +4,7 @@ <% else %> <%= render :partial => "layouts/flash", :locals => { :flash => flash } %> <% if content_for? :heading %> -
    +
    <%= yield :heading %>
    diff --git a/app/views/layouts/_head.html.erb b/app/views/layouts/_head.html.erb index 0ee5bf9c0..724ca5526 100644 --- a/app/views/layouts/_head.html.erb +++ b/app/views/layouts/_head.html.erb @@ -2,6 +2,7 @@ <%= 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 %> + <%= "#{@title} | " if @title %><%= t "layouts.project_name.title" %> <% end %> diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index e9ded0f75..9f3d01b02 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -1,6 +1,6 @@ -
    +

    - + <%= 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" %> @@ -34,55 +34,55 @@

    <%= 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 %> diff --git a/app/views/redactions/show.html.erb b/app/views/redactions/show.html.erb index 22d17cd5d..5b9749a51 100644 --- a/app/views/redactions/show.html.erb +++ b/app/views/redactions/show.html.erb @@ -5,7 +5,7 @@

    <%= t ".user" %> - <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %> + <%= link_to @redaction.user.display_name, @redaction.user %>

    <%= t ".description" %> diff --git a/app/views/shared/_richtext_field.html.erb b/app/views/shared/_richtext_field.html.erb index 22b3db542..f471cbbbf 100644 --- a/app/views/shared/_richtext_field.html.erb +++ b/app/views/shared/_richtext_field.html.erb @@ -4,7 +4,7 @@
    -
    +
    <%= render :partial => "shared/#{type}_help" %> <%= submit_tag t(".edit"), :id => "#{id}_doedit", :class => "richtext_doedit btn btn-primary", :disabled => true %> diff --git a/app/views/site/_about_section.html.erb b/app/views/site/_about_section.html.erb index 60fd3f069..4baec7238 100644 --- a/app/views/site/_about_section.html.erb +++ b/app/views/site/_about_section.html.erb @@ -1,4 +1,4 @@ -<%= tag.div :class => "section", :id => local_assigns[:id] do %> +<%= tag.section :id => local_assigns[:id] do %>

    <%= t "site.about.#{title}_title" %>

    diff --git a/app/views/site/about.html.erb b/app/views/site/about.html.erb index 619094e56..7dbed1514 100644 --- a/app/views/site/about.html.erb +++ b/app/views/site/about.html.erb @@ -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 %>
    @@ -11,13 +12,13 @@
    -
    +

    <%= t ".used_by_html", :name => tag.span("OpenStreetMap", :class => "user-name") %>

    -
    +

    <%= t ".lede_text" %>

    <%= render :layout => "about_section", :locals => { :icon => "local", :title => "local_knowledge" } do %> diff --git a/app/views/site/copyright.html.erb b/app/views/site/copyright.html.erb index c17f090af..f014eb037 100644 --- a/app/views/site/copyright.html.erb +++ b/app/views/site/copyright.html.erb @@ -140,6 +140,14 @@ <%= t ".legal_babble.contributors_fr_credit_html", :france => tag.strong(t(".legal_babble.contributors_fr_france")) %> +
  • + <%= t ".legal_babble.contributors_hr_credit_html", + :croatia => tag.strong(t(".legal_babble.contributors_hr_croatia")), + :dgu_link => link_to(t(".legal_babble.contributors_hr_dgu"), + t(".legal_babble.contributors_hr_dgu_url")), + :open_data_portal => link_to(t(".legal_babble.contributors_hr_open_data_portal"), + t(".legal_babble.contributors_hr_open_data_portal_url")) %> +
  • <%= t ".legal_babble.contributors_nl_credit_html", :netherlands => tag.strong(t(".legal_babble.contributors_nl_netherlands")), diff --git a/app/views/site/export.html.erb b/app/views/site/export.html.erb index bb66c665a..d277f344e 100644 --- a/app/views/site/export.html.erb +++ b/app/views/site/export.html.erb @@ -5,14 +5,14 @@ <%= form_tag({ :controller => "export", :action => "finish" }, { :class => "export_form" }) do %> <%= hidden_field_tag "format", "osm", :autocomplete => "off" %> -
    -
    - <%= text_field_tag("maxlat", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control mx-auto") %> +
    +
    + <%= text_field_tag("maxlat", nil, :size => 10, :autocomplete => "off", :class => "form-control text-center mx-auto") %>
    - <%= text_field_tag("minlon", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control my-2") %> - <%= text_field_tag("maxlon", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control my-2") %> + <%= text_field_tag("minlon", nil, :size => 10, :autocomplete => "off", :class => "form-control text-center my-2") %> + <%= text_field_tag("maxlon", nil, :size => 10, :autocomplete => "off", :class => "form-control text-center my-2") %>
    - <%= text_field_tag("minlat", nil, :size => 10, :autocomplete => "off", :class => "export_bound form-control mx-auto") %> + <%= text_field_tag("minlat", nil, :size => 10, :autocomplete => "off", :class => "form-control text-center mx-auto") %>
    <%= t ".manually_select" %>
    diff --git a/app/views/traces/_description.html.erb b/app/views/traces/_description.html.erb index f4edc0e21..538e7f1ec 100644 --- a/app/views/traces/_description.html.erb +++ b/app/views/traces/_description.html.erb @@ -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 -%> diff --git a/app/views/traces/_trace.html.erb b/app/views/traces/_trace.html.erb index 9ee58cf22..72794355b 100644 --- a/app/views/traces/_trace.html.erb +++ b/app/views/traces/_trace.html.erb @@ -2,7 +2,7 @@ <% if Settings.status != "gpx_offline" %> <% if trace.inserted %> - "show", :id => trace.id, :display_name => trace.user.display_name %>"> "icon", :id => trace.id, :display_name => trace.user.display_name %>" border="0" alt="" /> + <%= link_to image_tag(trace_icon_path(trace.user, trace), :alt => "", :class => "trace_image"), show_trace_path(trace.user, trace) %> <% else %> <%= t ".pending" %> <% end %> @@ -11,7 +11,7 @@
    • - <%= 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) %>
    • <% if trace.inserted? %> @@ -29,11 +29,13 @@

    - <%= 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 %>

    @@ -45,10 +47,10 @@

    diff --git a/app/views/traces/edit.html.erb b/app/views/traces/edit.html.erb index 09fe9c510..2059178cf 100644 --- a/app/views/traces/edit.html.erb +++ b/app/views/traces/edit.html.erb @@ -2,7 +2,7 @@

    <%= t ".heading", :name => @trace.name %>

    <% end %> - "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 %> diff --git a/app/views/traces/georss.rss.builder b/app/views/traces/georss.rss.builder index 36641fec0..ad5bd45b2 100644 --- a/app/views/traces/georss.rss.builder +++ b/app/views/traces/georss.rss.builder @@ -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 diff --git a/app/views/traces/index.html.erb b/app/views/traces/index.html.erb index 63ade87d7..6e27ac7e4 100644 --- a/app/views/traces/index.html.erb +++ b/app/views/traces/index.html.erb @@ -13,51 +13,55 @@ <% end %> - +
    +
    + <%= link_to({ :action => :georss, :display_name => @target_user&.display_name, :tag => params[:tag] }, + { :class => "btn btn-secondary btn-sm" }) do %> + + + + <% end -%> + <%= link_to t(".upload_trace"), new_trace_path, :class => "btn btn-secondary btn-sm" %> +
    + +
    + +
    +
    <% 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 %> @@ -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 %>

    <%= t ".empty_title" %>

    <%= t ".empty_upload_html", :upload_link => link_to(t(".upload_new"), new_trace_path), diff --git a/app/views/traces/show.html.erb b/app/views/traces/show.html.erb index 69f58b5b8..51b21f982 100644 --- a/app/views/traces/show.html.erb +++ b/app/views/traces/show.html.erb @@ -4,7 +4,7 @@ <% if Settings.status != "gpx_offline" %> <% if @trace.inserted %> - "picture", :id => @trace.id, :display_name => @trace.user.display_name %>"> + <%= image_tag trace_picture_path(@trace.user, @trace), :class => "trace_image" %> <% else %> <%= t ".pending" %> <% end %> @@ -31,12 +31,12 @@ :latitude => tag.span(number_with_delimiter(@trace.latitude), :class => "latitude"), :longitude => tag.span(number_with_delimiter(@trace.longitude), :class => "longitude") %> - (<%= 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}" %>) + (<%= 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}") %>) <% end %>

    - + @@ -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") } } %> <% end %> diff --git a/app/views/user_blocks/_block.html.erb b/app/views/user_blocks/_block.html.erb index f39efb571..50fe74e4c 100644 --- a/app/views/user_blocks/_block.html.erb +++ b/app/views/user_blocks/_block.html.erb @@ -1,9 +1,9 @@ <% if show_user_name %> - + <% end %> <% if show_creator_name %> - + <% end %> @@ -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 %> diff --git a/app/views/user_blocks/_blocks.html.erb b/app/views/user_blocks/_blocks.html.erb index b0b73c5a0..c508dcd47 100644 --- a/app/views/user_blocks/_blocks.html.erb +++ b/app/views/user_blocks/_blocks.html.erb @@ -20,20 +20,8 @@ <%= 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 %>
    <%= t ".owner" %><%= link_to @trace.user.display_name, user_path(@trace.user) %><%= link_to @trace.user.display_name, @trace.user %>
    <%= t ".description" %>
    <%= link_to block.user.display_name, user_path(block.user) %><%= link_to block.user.display_name, block.user %><%= link_to block.creator.display_name, user_path(block.creator) %><%= link_to block.creator.display_name, block.creator %><%= h truncate(block.reason) %> <%= h block_status(block) %> <%= link_to t(".show"), block %>
    - +<%= 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 index 000000000..f53f5cf28 --- /dev/null +++ b/app/views/user_blocks/_navigation.html.erb @@ -0,0 +1,44 @@ + diff --git a/app/views/user_blocks/blocks_by.html.erb b/app/views/user_blocks/blocks_by.html.erb index d5283925b..7fa0a4fbb 100644 --- a/app/views/user_blocks/blocks_by.html.erb +++ b/app/views/user_blocks/blocks_by.html.erb @@ -1,6 +1,9 @@ <% @title = t(".title", :name => @user.display_name) %> + +<% content_for :heading_class, "pb-0" %> <% content_for :heading do %> -

    <%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %>

    +

    <%= t(".heading_html", :name => link_to(@user.display_name, @user)) %>

    + <%= render :partial => "navigation" %> <% end %> <% unless @user_blocks.empty? %> diff --git a/app/views/user_blocks/blocks_on.html.erb b/app/views/user_blocks/blocks_on.html.erb index 7d1f83ce3..0c15b8866 100644 --- a/app/views/user_blocks/blocks_on.html.erb +++ b/app/views/user_blocks/blocks_on.html.erb @@ -1,6 +1,9 @@ <% @title = t(".title", :name => @user.display_name) %> + +<% content_for :heading_class, "pb-0" %> <% content_for :heading do %> -

    <%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %>

    +

    <%= t(".heading_html", :name => link_to(@user.display_name, @user)) %>

    + <%= render :partial => "navigation" %> <% end %> <% unless @user_blocks.empty? %> diff --git a/app/views/user_blocks/edit.html.erb b/app/views/user_blocks/edit.html.erb index db7c5e057..a5b165e9a 100644 --- a/app/views/user_blocks/edit.html.erb +++ b/app/views/user_blocks/edit.html.erb @@ -1,8 +1,6 @@ <% @title = t ".title", :name => @user_block.user.display_name %> <% content_for :heading do %> -

    <%= t(".heading_html", - :name => link_to(@user_block.user.display_name, - user_path(@user_block.user))) %>

    +

    <%= t(".heading_html", :name => link_to(@user_block.user.display_name, @user_block.user)) %>

    - <%= f.primary t(".revoke") %> + <%= f.submit t(".revoke"), :class => "btn btn-danger" %> <% end %> <% else %> diff --git a/app/views/user_blocks/revoke_all.html.erb b/app/views/user_blocks/revoke_all.html.erb index 7fef69b57..f9a17d3e6 100644 --- a/app/views/user_blocks/revoke_all.html.erb +++ b/app/views/user_blocks/revoke_all.html.erb @@ -1,10 +1,7 @@ -<% @title = t ".title", - :block_on => @user.display_name %> +<% @title = t ".title", :block_on => @user.display_name %> <% content_for :heading do %> -

    <%= t ".heading_html", - :block_on => link_to(@user.display_name, - user_path(@user)) %>

    +

    <%= t ".heading_html", :block_on => link_to(@user.display_name, @user) %>

    <% end %> <% unless @user.blocks.active.empty? %> @@ -19,7 +16,7 @@
  • - <%= f.primary t(".revoke") %> + <%= f.submit t(".revoke"), :class => "btn btn-danger" %> <% end %> <% else %> diff --git a/app/views/user_blocks/show.html.erb b/app/views/user_blocks/show.html.erb index 03bcd3036..7b30d1920 100644 --- a/app/views/user_blocks/show.html.erb +++ b/app/views/user_blocks/show.html.erb @@ -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 %>

    <%= 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))) %>

    - + :block_on => link_to(@user_block.user.display_name, @user_block.user), + :block_by => link_to(@user_block.creator.display_name, @user_block.creator)) %> + <%= render :partial => "navigation" %> <% end %>
    <% if @user_block.revoker %>
    <%= t ".revoker" %>
    -
    <%= link_to @user_block.revoker.display_name, user_path(@user_block.revoker) %>
    +
    <%= link_to @user_block.revoker.display_name, @user_block.revoker %>
    <% end %>
    <%= t ".created" %>
    @@ -38,3 +25,15 @@
    <%= t ".reason" %>
    <%= @user_block.reason.to_html %>
    + +<% if @user_block.ends_at > Time.now.getutc && (current_user&.id == @user_block.creator_id || + can?(:revoke, UserBlock)) %> +
    + <% 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 %> +
    +<% end %> diff --git a/app/views/user_mutes/index.html.erb b/app/views/user_mutes/index.html.erb index cf9e7ed6b..8779a4bba 100644 --- a/app/views/user_mutes/index.html.erb +++ b/app/views/user_mutes/index.html.erb @@ -25,7 +25,7 @@ <%= user_thumbnail_tiny user %> - <%= link_to user.display_name, user_path(user) %> + <%= link_to user.display_name, user %> <%= link_to t(".table.tbody.unmute"), user_mute_path(user), :method => :delete, :class => "btn btn-sm btn-primary" %> diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb index e419aed1d..ef50ccaf2 100644 --- a/app/views/users/_user.html.erb +++ b/app/views/users/_user.html.erb @@ -6,12 +6,12 @@

    <% 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 %>

    diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 12d5ae7af..e8031900f 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -10,6 +10,19 @@ <% unless @users.empty? %> <%= form_tag do %> +
    +
    + <%= render "shared/pagination", + :newer_key => "users.index.newer", + :older_key => "users.index.older", + :newer_id => @newer_users_id, + :older_id => @older_users_id %> +
    +
    + <%= t ".found_users", :count => @users_count %> +
    +
    + <%= 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] %> @@ -17,15 +30,6 @@ - <%= 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 %> <%= check_box_tag "user_all", "1", false %> @@ -35,6 +39,19 @@ <%= render @users %> +
    +
    + <%= render "shared/pagination", + :newer_key => "users.index.newer", + :older_key => "users.index.older", + :newer_id => @newer_users_id, + :older_id => @older_users_id %> +
    +
    + <%= t ".found_users", :count => @users_count %> +
    +
    +
    <%= submit_tag t(".confirm"), :name => "confirm", :class => "btn btn-primary" %> <%= submit_tag t(".hide"), :name => "hide", :class => "btn btn-primary" %> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 253945b9b..9da3f8f04 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -213,10 +213,10 @@
    <%= @user.email %>
    <% unless @user.creation_ip.nil? -%>
    <%= t ".created from" %>
    -
    <%= @user.creation_ip %>
    +
    <%= link_to @user.creation_ip, users_path(:ip => @user.creation_ip) %>
    <% end -%>
    <%= t ".status" %>
    -
    <%= @user.status.capitalize %>
    +
    <%= link_to @user.status.capitalize, users_path(:status => @user.status) %>
    <%= t ".spam score" %>
    <%= @user.spam_score %>
    diff --git a/app/views/users/terms.html.erb b/app/views/users/terms.html.erb index e2ece8f1a..340aaf04e 100644 --- a/app/views/users/terms.html.erb +++ b/app/views/users/terms.html.erb @@ -30,7 +30,7 @@ <% end %>
    -
    +
    <%= render :partial => "terms" %>
    diff --git a/config/eslint.js b/config/eslint.js new file mode 100644 index 000000000..a52b1e63f --- /dev/null +++ b/config/eslint.js @@ -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 index 3b878d48a..000000000 --- a/config/eslint.json +++ /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" - } -} diff --git a/config/locales/af.yml b/config/locales/af.yml index f262620c6..13d5f8b09 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -1795,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} @@ -1969,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 @@ -2048,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. @@ -2063,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} diff --git a/config/locales/aln.yml b/config/locales/aln.yml index a54887498..6c4cd9088 100644 --- a/config/locales/aln.yml +++ b/config/locales/aln.yml @@ -984,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} @@ -1127,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 @@ -1224,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: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index fee1b0ac4..d2cb9ff56 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -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: @@ -407,6 +415,7 @@ ar: deleted_ago_by_html: تم حذف %{time_ago} بواسطة %{user} edited_ago_by_html: تم تحرير %{time_ago} بواسطة %{user} version: الإصدار + redacted_version: النسخة المنقحة in_changeset: مجموعة التغييرات anonymous: مجهول no_comment: (لا تعليق) @@ -420,6 +429,7 @@ ar: other: '%{count} طريقٍ' download_xml: تنزيل XML view_history: عرض السجل + view_unredacted_history: عرض التاريخ غير المُحرف view_details: شاهد التفاصيل location: 'الموقع:' node: @@ -526,8 +536,24 @@ ar: 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} @@ -608,6 +634,7 @@ ar: show: title: يوميات %{user} | %{title} user_title: يومية %{user} + discussion: مناقشة leave_a_comment: اترك تعليقًا login_to_leave_a_comment_html: '%{login_link} لترك تعليق' login: تسجيل الدخول @@ -625,6 +652,7 @@ ar: zero: لا تعليق one: '%{count} تعليق' other: '%{count} تعليقات' + no_comments: لا يوجد تعليقات edit_link: عدل هذه المدخلة hide_link: اخفِ هذه المدخلة unhide_link: إظهار هذا الإدخال @@ -660,7 +688,16 @@ ar: comment: التعليق newer_comments: التعليقات الأحدث older_comments: التعليقات الأقدم + subscribe: + heading: اشترك في مناقشة مدونة الدخول التالية؟ + button: الاشتراك في المناقشة + unsubscribe: + heading: إلغاء الاشتراك في مناقشة إدخال اليوميات التالية؟ + button: إلغاء الاشتراك من المناقشة doorkeeper: + errors: + messages: + account_selection_required: يتطلب خادم المصادقة اختيار حساب المستخدم النهائي flash: applications: create: @@ -2308,8 +2345,6 @@ ar: identifiable: محدد الهوية private: خاص trackable: تعقبي - by: مِن قِبَل - in: في index: public_traces: آثار جي بي إس عمومية public_traces_from: آثار جي بي إس عمومية من %{user} @@ -2530,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: تأكيد المستخدمين المحددين @@ -2656,7 +2688,6 @@ ar: revoke: ابطل! confirm: هل أنت متأكد؟ reason: 'سبب العرقلة:' - back: اعرض كل العرقلات revoker: 'المبطل:' needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقلة. block: @@ -2670,9 +2701,6 @@ ar: reason: السبب العرقلة status: الحالة revoker_name: مُبطل بواسطة - showing_page: الصفحة %{page} - next: التالي » - previous: « السابق user_mutes: index: title: المستخدمون الممنوعون diff --git a/config/locales/arz.yml b/config/locales/arz.yml index 8b767471c..2f182162b 100644 --- a/config/locales/arz.yml +++ b/config/locales/arz.yml @@ -840,8 +840,6 @@ arz: edit_map: عدّل الخريطة public: عام private: خاص - by: بواسطة - in: في index: public_traces: آثار جى بى إس عمومية public_traces_from: آثار جى بى إس عموميه من %{user} @@ -1040,7 +1038,6 @@ arz: revoke: ابطل! confirm: هل أنت متأكد؟ reason: 'سبب العرقلة:' - back: اعرض كل العرقلات revoker: 'المبطل:' needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقله. block: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 5dbc9e106..3d6b92272 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -27,7 +27,7 @@ ast: create: Espublizar update: Actualizar issue_comment: - create: Añedir comentariu + create: Añader comentariu message: create: Unviar client_application: @@ -1806,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} @@ -2016,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 @@ -2142,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: @@ -2156,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} diff --git a/config/locales/az.yml b/config/locales/az.yml index 70ffe0374..415294bae 100644 --- a/config/locales/az.yml +++ b/config/locales/az.yml @@ -5,6 +5,7 @@ # Author: Cekli829 # Author: Huseyn # Author: Mushviq Abdulla +# Author: NMW03 # Author: Ruila # Author: SalihB # Author: Toghrul Rahimli @@ -283,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}' @@ -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 diff --git a/config/locales/be-Tarask.yml b/config/locales/be-Tarask.yml index a631ad625..3b8f06c35 100644 --- a/config/locales/be-Tarask.yml +++ b/config/locales/be-Tarask.yml @@ -155,6 +155,11 @@ be-Tarask: pass_crypt: Пароль pass_crypt_confirmation: Пацьверджаньне паролю help: + doorkeeper/application: + confidential: Праграма будзе выкарыстоўвацца там, дзе кліенцкі сакрэтны ключ + можа захоўвацца канфідэнцыйна (родныя мабільныя і аднастаронкавыя праграмы + не канфідэнцыйныя) + redirect_uri: Кожны URI з асобнага радка trace: tagstring: падзеленае коскамі user_block: @@ -1255,8 +1260,6 @@ be-Tarask: identifiable: ІДЭНТЫФІКАВАНЫ private: ПРЫВАТНЫ trackable: МАГЧЫМА САЧЫЦЬ - by: аўтар - in: у index: public_traces: Публічныя GPS-трэкі public_traces_from: Публічныя GPS-трэкі ўдзельніка %{user} @@ -1406,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: Пацьвердзіць выбраных карыстальнікаў @@ -1506,7 +1506,6 @@ be-Tarask: revoke: Адклікаць! confirm: Вы ўпэўненыя? reason: 'Прычына блякаваньня:' - back: Паказаць усе блякаваньні revoker: 'Адклікаўшы:' needs_view: Удзельніку трэба ўвайсьці ў сыстэму, перад тым як гэтае блякаваньне будзе зьнятае. diff --git a/config/locales/be.yml b/config/locales/be.yml index 10d3e0fc2..8791227c2 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1293,7 +1293,9 @@ be: intro_text: OpenStreetMap - гэта карта свету, створаная людзьмі, як вы, і бясплатная для выкарыстання на ўмовах адкрытай ліцэнзіі. intro_2_create_account: Стварыць уліковы запіс удзельніка - partners_partners: партнёрамi + hosting_partners_2024_html: Хостынг падтрымліваюць %{fastly}, %{corpmembers} і + іншыя %{partners}. + partners_partners: партнёры tou: Умовы карыстання osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць неабходная тэхнічная праца. @@ -1525,7 +1527,7 @@ be: flash changed: Ваш пароль быў зменены. profiles: edit: - image: 'Выява:' + image: Выява gravatar: gravatar: Выкарыстоўваць Gravatar disabled: Граватар быў адключаны. @@ -1542,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: 'Для альтэрнатыўнага ўваходу, залагіньцеся цераз:' + with external: 'У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс:' no account: Не маеце асабістага рахунка? auth failure: Прабачце, немагчыма увайсці з такім адрасам і паролем. openid_logo_alt: Увайсці з дапамогай OpenID @@ -1563,8 +1565,8 @@ be: title: Увайсці праз Facebook alt: Увайсці праз уліковы запіс Facebook microsoft: - title: Увайсці праз Windows live - alt: Увайсці праз уліковы запіс Windows Live + title: Увайсці праз Microsoft + alt: Увайсці праз уліковы запіс Microsoft github: title: Уваход праз GitHub alt: Увайсці праз уліковы запіс GitHub @@ -1592,8 +1594,8 @@ be: site: about: next: Далей - used_by_html: '%{name} забяспечвае картаграфічнымі дадзенымі тысячы сайтаў, - мабільных праграм і прыстасаванняў' + used_by_html: '%{name} забяспечвае картаграфічнымі данымі тысячы сайтаў, мабільных + праграм і прылад' lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць дадзеныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім свеце. @@ -1622,9 +1624,8 @@ be: legal_babble: title_html: Аўтарскія правы і ліцэнзія credit_title_html: Як спасылацца на OpenStreetMap - credit_1_html: |- - Мы патрабуем, каб выкарыстоўвалася спасылка “© OpenStreetMap - contributors”. + credit_1_html: 'Там, дзе вы выкарыстоўваеце даныя OpenStreetMap, вы павінны + выканаць наступныя дзве рэчы:' attribution_example: alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы title: Прыклад спасылкі @@ -1793,7 +1794,7 @@ be: reserve: Запаведнік military: Ваенная зона school: Школа - university: універсітэт + university: Універсітэт building: Значны будынак station: Чыгуначны вакзал summit: Вяршыня @@ -1832,6 +1833,20 @@ be: Многія ўдзельнічаюць паасобку, іншыя стварылі свае супольнасці. Супольнасці бываюць розных памераў і могуць прадстаўляць як невялікія гарады, так і цэлыя рэгіёны з некалькімі краінамі. Яны таксама могуць быць афіцыйнымі і неафіцыйнымі. + local_chapters: + title: Мясцовыя аддзяленні + about_text: Мясцовыя аддзяленні - гэта групы на ўзроўні краіны або рэгіёна, + якія зрабілі фармальны крок і афіцыйна зарэгістравалі некамерцыйную юрыдычную + асобу. Яны прадстаўляюць карту рэгіёна і картографаў перад мясцовымі органамі + ўлады, бізнесам і СМІ. Яны таксама прыядналіся да OpenStreetMap Foundation + (OSMF), што дало сувязь з юрыдычным і аўтарскім органам кіравання. + list_text: 'Наступныя суполкі афіцыйна зарэгістраваны ў якасці мясцовых аддзяленняў:' + other_groups: + title: Іншыя супольнасці + other_groups_html: Няма неабходнасці афіцыйна рэгістраваць групу як мясцовае + аддзяленне. Насамрэч многія групы вельмі паспяхова існуюць у выглядзе нефармальных + сустрэч або суполак. Кожны можа заснаваць такую суполку або далучыцца да + яе. Больш падрабязна на старонцы %{communities_wiki_link}. traces: visibility: private: Прыватны (ананімны з неспарадкаванымі пунктамі) @@ -1901,8 +1916,6 @@ be: identifiable: ІДЭНТЫФІКУЕМЫ private: ПРЫВАТНЫ trackable: TRACKABLE - by: карыстальнікам - in: у index: public_traces: Агульныя GPS-сляды my_gps_traces: Мае GPS-трэкі @@ -2023,7 +2036,7 @@ be: display name description: Ваша імя, якое будзе бачнае ўсім. Вы можаце змяніць яго потым ў вашых параметрах. external auth: 'Аўтэнтыфікацыя праз:' - use external auth: 'Для альтэрнатыўнага ўваходу, залагіньцеся цераз:' + use external auth: У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс auth no password: Пры выкарыстанні знешняй аўтэнтыфікацыі пароль не патрэбны, але для некаторых дадатковых інструментаў або сервераў ён усё яшчэ спатрэбіцца. continue: Зарэгістравацца @@ -2111,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: Пацвердзіць выбраных карыстальнікаў @@ -2235,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: Удзельніку трэба ўвайсці ў сістэму, перад тым як гэтая блакіроўка будзе знята. @@ -2256,9 +2265,6 @@ be: reason: Прычына блакіроўкі status: Статус revoker_name: Адкліканы - showing_page: Старонка %{page} - next: Далей » - previous: « Назад notes: index: title: Заўвагі, створаныя ці пракаментаваныя %{user} diff --git a/config/locales/bg.yml b/config/locales/bg.yml index fc4f86125..6cfa8239c 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1853,8 +1853,6 @@ bg: public: ПУБЛИЧНО private: ЧАСТНО trackable: ПРОСЛЕДИМО - by: от - in: в index: public_traces: Публични следи от GPS public_traces_from: Публични следи от GPS от потребител %{user} @@ -1992,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: Не са открити съвпадащи профили @@ -2051,9 +2046,6 @@ bg: creator_name: Създател reason: Причина за блокиране status: Състояние - showing_page: Страница %{page} - next: Следваща » - previous: « Предишна user_mutes: index: table: diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 1b7abeeb9..52e1212d0 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -549,7 +549,7 @@ bn: discussion: আলোচনা leave_a_comment: একটি মন্তব্য করুন login_to_leave_a_comment_html: মন্তব্য করতে %{login_link} করুন - login: প্রবেশ + login: প্রবেশ করুন no_such_entry: title: এমন কোনো দিনলিপির ভুক্তি নেই heading: '%{id} এই আইডি থেকে কোনও ভুক্তি নেই' @@ -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: ওয়ার্ডপ্রেস দিয়ে প্রবেশ @@ -1639,6 +1639,7 @@ bn: লাইসেন্স (সিসি বাই ৪.০) contributors_cz_cc_licence_url: https://creativecommons.org/licenses/by/4.0/deed.bn contributors_fr_france: ফ্রান্স + contributors_hr_croatia: ক্রোয়েশিয়া contributors_rs_serbia: সার্বিয়া contributors_si_slovenia: স্লোভেনিয়া infringement_title_html: কপিরাইট লঙ্ঘন @@ -1828,7 +1829,6 @@ bn: identifiable: শনাক্তকরণযোগ্য private: ব্যাক্তিগত trackable: অনুসরণযোগ্য - by: দ্বারা index: upload_trace: অনুসরণ আপলোড offline_warning: @@ -2039,8 +2039,6 @@ bn: edit: সম্পাদনা blocks: display_name: বাধাপ্রাপ্ত ব্যবহারকারী - next: পরবর্তী » - previous: « পূর্ববর্তী user_mutes: index: table: diff --git a/config/locales/br.yml b/config/locales/br.yml index 747e1f3f8..8027297d1 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -1935,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 @@ -2087,6 +2087,7 @@ br: contributors_fr_credit_html: '%{france}: Ennañ roadennoù eus Renerezh Hollek an Tailhoù.' contributors_fr_france: Bro-C'hall + contributors_hr_croatia: Kroatia contributors_nl_netherlands: Izelvroioù contributors_nz_new_zealand: Zeland Nevez contributors_nz_linz_data_service: Servij roadennoù LINZ @@ -2444,8 +2445,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 @@ -2617,6 +2617,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 @@ -2740,9 +2741,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 @@ -2765,8 +2771,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: @@ -2834,6 +2840,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}. @@ -2891,7 +2899,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: @@ -2905,9 +2912,15 @@ br: reason: Abeg evit stankañ status: Statud revoker_name: Torret gant - showing_page: Page %{page} - next: ↓War-lerc'h » - previous: ↓« Kent + older: Stankadurioù koshoc'h + newer: Stankadurioù nevesañ + navigation: + all_blocks: An holl stankadurioù + blocks_on_me: Stankadurioù evidon + blocks_on_user: Stankadurioù evit %{user} + blocks_by_me: Stankadurioù graet ganin + blocks_by_user: Stankadurioù gant %{user} + block: 'Stankadur #%{id}' user_mutes: index: title: Implijerien kuzhet diff --git a/config/locales/bs.yml b/config/locales/bs.yml index 1e6b9bd01..c11f73d5e 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -1276,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} @@ -1432,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 @@ -1528,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: @@ -1542,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 diff --git a/config/locales/ca.yml b/config/locales/ca.yml index ad1ef5c14..57e0f48e6 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -45,6 +45,7 @@ # Author: Toniher # Author: Vfc # Author: XVEC +# Author: Yupik # Author: 아라 --- ca: @@ -2069,6 +2070,7 @@ ca: contributors_fr_credit_html: '%{france}: Conté dades d''origen de la «Direction Générale des Impôts».' contributors_fr_france: França + contributors_hr_croatia: Croàcia contributors_nl_netherlands: Països Baixos contributors_nz_new_zealand: Nova Zelanda contributors_nz_cc_by: CC BY 4.0 @@ -2476,8 +2478,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 @@ -2784,9 +2784,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 @@ -2916,7 +2913,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: @@ -2930,9 +2926,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} diff --git a/config/locales/ce.yml b/config/locales/ce.yml index 337f88cd4..92b224820 100644 --- a/config/locales/ce.yml +++ b/config/locales/ce.yml @@ -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} декъашхочун билгалонаш' diff --git a/config/locales/cs.yml b/config/locales/cs.yml index cd529fae5..3fedad402 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -91,6 +91,9 @@ cs: messages: invalid_email_address: není platná e-mailová adresa email_address_not_routable: není routovatelná + models: + user_mute: + is_already_muted: již je ztlumen models: acl: Seznam přístupových práv changeset: Sada změn @@ -442,7 +445,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 @@ -487,6 +490,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} @@ -521,8 +533,24 @@ cs: 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} @@ -604,6 +632,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 @@ -658,6 +687,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: @@ -699,7 +734,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 @@ -1631,7 +1666,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_2024_html: Hosting podporují %{fastly}, %{corpmembers} a další + %{partners}. partners_fastly: Fastly + 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é @@ -1653,6 +1691,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 @@ -1663,6 +1702,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}, @@ -1701,6 +1742,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' @@ -1726,6 +1768,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: @@ -1766,6 +1809,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: @@ -1786,10 +1830,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! @@ -1839,11 +1881,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} @@ -1858,6 +1902,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 @@ -1865,6 +1910,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 @@ -1883,19 +1935,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: + 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} @@ -1903,6 +1962,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 @@ -1947,11 +2007,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? @@ -1960,16 +2020,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 @@ -1978,10 +2038,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 @@ -2006,6 +2066,7 @@ cs: image: Obrázek alt: Alternativní text url: URL + codeblock: Blok kódu richtext_field: edit: Upravit preview: Náhled @@ -2160,6 +2221,11 @@ cs: contributors_fr_credit_html: '%{france}: Obsahuje data pocházející z Direction Générale des Impôts.' contributors_fr_france: Francie + contributors_hr_credit_html: '%{croatia}: Obsahuje data od %{dgu_link} a z + %{open_data_portal} (chorvatská veřejná data).' + contributors_hr_croatia: Chorvatsko + contributors_hr_dgu: Státní geodetické správy Chorvatska + contributors_hr_open_data_portal: Národního portálu otevřených dat contributors_nl_credit_html: '%{netherlands}: Obsahuje data © AND, 2007 (%{and_link})' contributors_nl_netherlands: Nizozemsko @@ -2294,8 +2360,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é @@ -2354,43 +2420,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 @@ -2400,8 +2490,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! @@ -2553,8 +2646,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 @@ -2593,7 +2684,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. @@ -2607,6 +2698,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 @@ -2817,6 +2909,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 @@ -2845,6 +2939,7 @@ cs: moderator: Odebrat práva moderátora block_history: Účinná zablokování moderator_history: Udělená zablokování + revoke_all_blocks: ZruÅ¡it vÅ¡echny bloky comments: Komentáře create_block: Blokovat tohoto uživatele activate_user: Aktivovat tohoto uživatele @@ -2861,9 +2956,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 @@ -2875,8 +2974,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 @@ -2895,8 +2994,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 @@ -2949,6 +3048,18 @@ cs: confirm: Opravdu chcete zruÅ¡it tento blok? revoke: ZruÅ¡it ! flash: Tento blok byl zruÅ¡en. + revoke_all: + title: ZruÅ¡ení vÅ¡ech bloků uživatele %{block_on} + heading_html: ZruÅ¡ení vÅ¡ech bloků uživatele %{block_on} + empty: Uživatel %{name} nemá žádné aktivní bloky. + confirm: Opravdu chcete zruÅ¡it %{active_blocks}? + active_blocks: + one: '%{count} aktivní bloky' + few: '%{count} aktivní bloky' + many: '%{count} aktivního bloku' + other: '%{count} aktivních bloků' + revoke: ZruÅ¡it! + flash: VÅ¡echny aktivní bloky byly zruÅ¡eny. helper: time_future_html: Končí za %{time}. until_login: Aktivní dokud se uživatel nepřihlásí. @@ -2999,7 +3110,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: @@ -3013,9 +3123,41 @@ cs: reason: Důvod pro blok status: Stav revoker_name: ZruÅ¡il - showing_page: Stránka %{page} - next: Následující » - previous: « Předchozí + older: Starší bloky + newer: Novější bloky + navigation: + all_blocks: VÅ¡echny bloky + blocks_on_me: Moje zablokování + blocks_on_user: Bloky uživatele %{user} + blocks_by_me: Zablokování mnou + blocks_by_user: Bloky od uživatele %{user} + block: 'Blok #%{id}' + 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} @@ -3052,6 +3194,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 @@ -3142,6 +3285,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 diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 343f5b8ef..90d31d0b9 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -2251,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 @@ -2474,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 @@ -2583,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) @@ -2596,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 diff --git a/config/locales/da.yml b/config/locales/da.yml index 4afd66d77..857dba978 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -575,7 +575,7 @@ da: user_title: Blog for %{user} leave_a_comment: Tilføj en kommentar login_to_leave_a_comment_html: '%{login_link} for at kommentere' - login: Log pÃ¥ + login: Log ind no_such_entry: title: Intet blogindlæg fundet heading: 'Intet indlæg med id: %{id}' @@ -625,6 +625,10 @@ da: comment: Kommentar newer_comments: Nyere kommentarer older_comments: Ældre kommentarer + subscribe: + button: Abonner pÃ¥ diskussion + unsubscribe: + heading: Vil du afmelde følgende dagbogsindlægsdiskussion? doorkeeper: errors: messages: @@ -1594,6 +1598,8 @@ 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_2024_html: Hosting støttes af %{fastly}, %{corpmembers}, og andre + %{partners}. partners_fastly: Fastly partners_corpmembers: OSMF virksomhedsmedlemmer partners_partners: partnere @@ -1729,6 +1735,7 @@ da: details: Flere oplysninger om bemærkningen kan findes pÃ¥ %{url}. details_html: Flere oplysninger om kortbemærkningen kan findes pÃ¥ %{url}. changeset_comment_notification: + description: 'OpenStreetMap-ændringssæt #%{id}' hi: Hej %{to_user}, greeting: Hej, commented: @@ -1748,10 +1755,8 @@ da: partial_changeset_without_comment: uden kommentar details: Flere oplysninger om ændringssættet kan findes pÃ¥ %{url}. details_html: Flere oplysninger om ændringssættet kan findes pÃ¥ %{url}. - unsubscribe: For at afmelde opdateringer til dette ændringssæt, kan du besøge - %{url} og klikke "Afmeld". - unsubscribe_html: For at afmelde opdateringer vedrørende dette ændringssæt, - kan du besøge %{url} og klikke "Afmeld". + unsubscribe: Du kan afmelde opdateringer om dette ændringssæt pÃ¥ %{url}. + unsubscribe_html: Du kan afmelde opdateringer om dette ændringssæt pÃ¥ %{url}. confirmations: confirm: heading: Tjek din e-mail! @@ -1845,7 +1850,7 @@ da: back: Tilbage wrong_user: Du er logget pÃ¥ som '%{user}', men den besked du har bedt om at læse er ikke sendt af eller til den pÃ¥gældende bruger. Log venligst pÃ¥ som - den korrekte bruger for at svare. + den korrekte bruger for at læse den. sent_message_summary: destroy_button: Slet heading: @@ -1868,6 +1873,10 @@ 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: + send_paranoid_instructions: Hvis din e-mailadresse findes i vores database, + vil du modtage et link til gendannelse af adgangskode pÃ¥ din e-mailadresse + om nogle fÃ¥ minutter. edit: title: Nulstil adgangskode heading: Nulstil adgangskode for %{user} @@ -1918,15 +1927,15 @@ da: failure: Kunne ikke opdatere profil. sessions: new: - title: Log pÃ¥ - heading: Log pÃ¥ + title: Log ind + heading: Log ind email or username: E-mailadresse eller brugernavn password: Adgangskode remember: Husk mig lost password link: Glemt din adgangskode? - login_button: Log pÃ¥ + login_button: Log ind register now: Registrér nu - with external: 'Alternativt kan du bruge en tredjepart for at logge pÃ¥:' + with external: 'Alternativt kan du bruge en tredjepart for at logge ind:' no account: Har du ingen konto? auth failure: Kunne ikke logge pÃ¥ med disse oplysninger. openid_logo_alt: Log pÃ¥ med et OpenID @@ -2551,8 +2560,6 @@ da: identifiable: IDENTIFICERBAR private: PRIVAT trackable: SPORBAR - by: af - in: i index: public_traces: Offentlige GPS-spor my_gps_traces: Mine GPS-spor @@ -2867,9 +2874,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 @@ -3013,7 +3017,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: @@ -3027,9 +3030,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 diff --git a/config/locales/de.yml b/config/locales/de.yml index 44a57aea1..19032691e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -100,6 +100,7 @@ # 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 @@ -433,6 +434,7 @@ de: 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) @@ -445,7 +447,10 @@ 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:' node: title_html: 'Knoten: %{name}' @@ -496,7 +501,7 @@ de: note: Hinweis redacted: redaction: Schwärzung %{id} - message_html: 'Die Version %{version} dieses %{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 @@ -523,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} @@ -541,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. @@ -552,13 +569,30 @@ 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} @@ -641,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 @@ -652,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: @@ -694,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: @@ -711,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 @@ -721,19 +762,19 @@ de: subject_not_configured: Die Generierung des ID-Tokens ist aufgrund der fehlenden Konfiguration von Doorkeeper::OpenidConnect.configure.subject fehlgeschlagen. scopes: - address: Physische Adresse anzeigen - email: E-Mail-Adresse anzeigen - openid: Account authentifizieren + address: Deine physische Adresse ansehen + email: Deine E-Mail-Adresse ansehen + openid: Sich mit deinem Account authentifizieren phone: Sieh dir deine Telefonnummer an profile: Sieh dir deine Profilinformationen an errors: 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 @@ -774,7 +815,7 @@ de: gondola: Gondelbahn magic_carpet: Teppichlift platter: Skilift - pylon: Mast + pylon: Stützpfeiler station: Gondelstation t-bar: Schlepplift "yes": Seilbahn @@ -783,7 +824,7 @@ de: airstrip: Startbahn apron: Flughafenvorfeld gate: Flugsteig - hangar: Flugzeughalle + hangar: Hangar helipad: Hubschrauberlandeplatz holding_position: Haltestelle navigationaid: Luftfahrt-Navigationshilfe @@ -929,7 +970,7 @@ de: commercial: Gewerbegebäude construction: Gebäude im Bau detached: Freistehendes Einfamilienhaus - dormitory: Studentenwohnheim + dormitory: Wohnheim duplex: Doppelhaus farm: Bauernhaus farm_auxiliary: Wirtschaftsgebäude @@ -1060,7 +1101,7 @@ de: historic: aircraft: Historisches Flugzeug archaeological_site: Ausgrabungsstätte - bomb_crater: Bombentrichter + bomb_crater: Historischer Bombentrichter battlefield: Schlachtfeld boundary_stone: Grenzstein building: Historisches Gebäude @@ -1178,7 +1219,7 @@ de: bunker_silo: Bunker cairn: Steinmännchen chimney: Schornstein - clearcut: Abholzung + clearcut: Kahlschlag communications_tower: Funkturm crane: Kran cross: Kreuz @@ -1193,14 +1234,14 @@ de: manhole: Einstiegsöffnung mast: Mast mine: Bergwerk - mineshaft: Grubenschacht + mineshaft: Schacht monitoring_station: Beobachtungsstation petroleum_well: Erdölquelle pier: Pfeiler pipeline: Rohrleitung pumping_station: Pumpwerk reservoir_covered: Wasserhochbehälter - silo: Speicher + silo: Silo snow_cannon: Schneekanone snow_fence: Schneezaun storage_tank: Lagertank @@ -1246,7 +1287,7 @@ de: grassland: Grasland heath: Heide hill: Hügel - hot_spring: Heiße Quelle + hot_spring: Thermalquelle island: Insel isthmus: Isthmus land: Land @@ -1348,7 +1389,7 @@ de: platform: Bahnsteig preserved: Museumsbahn proposed: Geplante Bahnstrecke - rail: Bahn + rail: Schiene spur: Anschlussgleis station: Bahnhof stop: Haltepunkt @@ -1666,7 +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_2024_html: Das Hosting wird von %{fastly}, %{corpmembers} und + anderen %{partners} unterstützt. partners_fastly: Fastly + partners_corpmembers: OSMF-Unternehmensmitglieder partners_partners: Partnern tou: Nutzungsbedingungen osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten @@ -1689,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} @@ -1699,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}, @@ -1762,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: @@ -1806,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: @@ -1827,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! @@ -1915,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 @@ -1924,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: @@ -1944,11 +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: + 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 @@ -2003,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 @@ -2377,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 @@ -2668,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 @@ -2768,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: @@ -2851,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 @@ -2873,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 @@ -2993,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 @@ -3145,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. @@ -3160,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 diff --git a/config/locales/diq.yml b/config/locales/diq.yml index 95d498f7b..ba1079129 100644 --- a/config/locales/diq.yml +++ b/config/locales/diq.yml @@ -943,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' @@ -1014,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 @@ -1077,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ış diff --git a/config/locales/dsb.yml b/config/locales/dsb.yml index 0c60715d4..aa74193ce 100644 --- a/config/locales/dsb.yml +++ b/config/locales/dsb.yml @@ -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ś @@ -147,6 +157,10 @@ dsb: entry: comment: Komentar full: Dopołna pokazka + account: + deletions: + show: + cancel: Pśetergnuś accounts: edit: title: Konto wobźěłaś @@ -1082,10 +1096,15 @@ dsb: 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ś @@ -1343,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? @@ -1381,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} @@ -1562,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ś @@ -1659,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: @@ -1673,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 diff --git a/config/locales/el.yml b/config/locales/el.yml index 36433b27d..fa81eb926 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -2571,8 +2571,6 @@ el: identifiable: ΑΝΑΓΝΩΡΙΣΙΜΟ private: ΙΔΙΩΤΙΚΟ trackable: ΑΝΙΧΝΕΥΣΙΜΟ - by: από - in: σε index: public_traces: Δημόσια ίχνη GPS my_gps_traces: Τα ίχνη GPS μου @@ -2897,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}' @@ -3044,7 +3039,6 @@ el: revoke: Ανακαλέστε! confirm: Είστε σίγουρος? reason: 'Αιτία φραγής:' - back: Προβολή όλων των φραγών revoker: 'Έκανε την ανάκληση:' needs_view: Ο χρήστης πρέπει να συνδεθεί προτού εκκαθαριστεί αυτή η φραγή. block: @@ -3058,9 +3052,6 @@ el: reason: Αιτία φραγής status: Κατάσταση revoker_name: Ανακλήθηκε από - showing_page: Σελίδα %{page} - next: Επόμενη » - previous: « Προηγούμενη user_mutes: index: title: Χρήστες σε Σίγαση diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 5c9b4eebe..a1fe56176 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1688,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} @@ -1882,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 @@ -1996,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: @@ -2010,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} diff --git a/config/locales/en.yml b/config/locales/en.yml index 9af2dd566..77002268b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2098,6 +2098,14 @@ en: %{france}: Contains data sourced from Direction Générale des Impôts. contributors_fr_france: France + contributors_hr_credit_html: | + %{croatia}: Contains data from the %{dgu_link} and %{open_data_portal} + (public information of Croatia). + contributors_hr_croatia: Croatia + contributors_hr_dgu: State Geodetic Administration of Croatia + contributors_hr_dgu_url: https://dgu.gov.hr/ + contributors_hr_open_data_portal: National Open Data Portal + contributors_hr_open_data_portal_url: https://data.gov.hr/ contributors_nl_credit_html: | %{netherlands}: Contains © AND data, 2007 (%{and_link}) contributors_nl_netherlands: Netherlands @@ -2541,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" @@ -2832,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 @@ -2968,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: @@ -2982,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" diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 803883150..8a6f0dd14 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1836,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 @@ -1938,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 @@ -2062,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:' @@ -2551,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 @@ -2866,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 @@ -2893,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: @@ -3003,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: @@ -3017,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 diff --git a/config/locales/es.yml b/config/locales/es.yml index 6fac40d2b..44d8a1b59 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -422,6 +422,7 @@ es: deleted_ago_by_html: Eliminado %{time_ago} por %{user} edited_ago_by_html: Editado %{time_ago} por %{user} version: Versión + redacted_version: Versión censurada in_changeset: Conjunto de cambios anonymous: anónimo no_comment: (sin comentarios) @@ -434,7 +435,10 @@ es: other: '%{count} vías' download_xml: Descargar XML view_history: Ver historial + view_unredacted_history: Ver historial sin censura view_details: Ver detalles + view_redacted_data: Ver datos censurados + view_redaction_message: Ver mensaje de censura location: 'Ubicación:' node: title_html: 'Nodo: %{name}' @@ -573,14 +577,16 @@ es: los dígitos, o tal vez el enlace en el que hiciste clic sea incorrecto. show: title: 'Conjunto de cambios: %{id}' + created: 'Creado: %{when}' + closed: 'Cerrado: %{when}' 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. + still_open: El conjunto de cambios sigue abierto - la discusión se abrirá una + vez 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 @@ -1974,6 +1980,10 @@ 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: + send_paranoid_instructions: Si tu dirección de correo electrónico existe en + nuestra base de datos, recibirás un enlace de recuperación de contraseña en + tu dirección de correo electrónico en unos minutos. edit: title: Restablecer contraseña heading: Restablecer contraseña para %{user} @@ -2246,6 +2256,12 @@ es: %{france}: Contiene datos de la Dirección General de Impuestos. contributors_fr_france: Francia + contributors_hr_credit_html: |- + %{croatia}: Contiene datos de %{dgu_link} y %{open_data_portal} + (información pública de Croacia). + contributors_hr_croatia: Croacia + contributors_hr_dgu: Administración Geodésica Estatal de Croacia + contributors_hr_open_data_portal: Portal Nacional de Datos Abiertos contributors_nl_credit_html: '%{netherlands}: Contiene © y datos, 2007 (%{and_link})' contributors_nl_netherlands: Países Bajos @@ -2684,8 +2700,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 @@ -3006,9 +3022,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 @@ -3035,7 +3053,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: @@ -3154,7 +3172,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 @@ -3169,9 +3186,15 @@ es: reason: Razón del bloqueo status: Estado revoker_name: Revocado por - showing_page: Página %{page} - next: Siguiente » - previous: « Anterior + older: Bloqueos más antiguos + newer: Bloqueos más recientes + navigation: + all_blocks: Todos los bloqueos + blocks_on_me: Bloqueos sobre mí + 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 diff --git a/config/locales/et.yml b/config/locales/et.yml index ff506f956..5bb1352dc 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -12,6 +12,7 @@ # Author: RM87 # Author: StarrySky # Author: WikedKentaur +# Author: Yupik --- et: time: @@ -1595,6 +1596,7 @@ et: contributors_fr_credit_html: '%{france}: Sisaldab kaardiandmeid, mis on pärit maksuametist (Direction Générale des Impôts).' contributors_fr_france: Prantsusmaa + contributors_hr_croatia: Horvaatia contributors_nl_credit_html: '%{netherlands}: Sisaldab ettevõtte © AND andmeid (2007, %{and_link})' contributors_nl_netherlands: Holland @@ -1955,8 +1957,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 @@ -2219,9 +2219,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 @@ -2345,7 +2342,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: @@ -2359,9 +2355,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 diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 871113f57..6930900a0 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -474,6 +474,10 @@ eu: created: Sortua closed: Itxita belongs_to: Egilea + subscribe: + heading: Aldaketa multzoko eztabaida honetara harpidetu nahi duzu? + unsubscribe: + button: Eztabaidatik harpidetza kendu show: title: 'Aldaketa: %{id}' created_ago_html: Sortua orain dela %{time_ago} @@ -2433,8 +2437,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 @@ -2736,9 +2738,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 @@ -2869,7 +2868,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: @@ -2883,9 +2881,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' diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 554a722be..52c8b2964 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -47,6 +47,7 @@ # Author: ZxxZxxZ # Author: جواد # Author: فلورانس +# Author: کهربا --- fa: html: @@ -984,7 +985,7 @@ fa: commercial: منطقهٔ تجاری conservation: منطقه حفاظت‌شده construction: منطقه در دست ساخت - farmland: زمین های کشاورزی + farmland: زمین‌های کشاورزی farmyard: محوطه مزرعه forest: جنگل garages: گاراژ @@ -1674,7 +1675,7 @@ fa: را تأیید نمایید. سپس می‌توانید نقشه‌کشی را آغاز کنید. press confirm button: برای فعال‌سازی حسابتان روی دکمهٔ تأیید زیر کلیک کنید. button: تأیید - success: ' تشکر بابت ثبت نام! حساب کاربری شما تایید شد.' + success: ' تشکر بابت ثبت نام! حساب کاربری شما تأیید شد.' already active: این حساب کاربری قبلاً تأیید شده است. unknown token: کد تأیید منقضی شده یا وجود ندارد. resend_html: اگر لازم است ذوباره رایانامهٔ تأیید را بفرستیم، %{reconfirm_link}. @@ -2113,7 +2114,7 @@ fa: construction: جاده در دست ساخت bicycle_shop: فروشگاه دوچرخه bicycle_parking: پارکینگ دوچرخه - toilets: سرویس های بهداشتی + toilets: سرویس‌های بهداشتی welcome: title: خوش آمدید! introduction: به OpenStreetMap، نقشهٔ آزاد و قابل ویرایش جهان، خوش آمدید. اکنون @@ -2206,8 +2207,6 @@ fa: identifiable: قابل شناسایی private: خصوصی trackable: قابل ردیابی - by: از - in: در index: public_traces: ردهای GPS عمومی public_traces_from: ردهای GPS عمومی از %{user} @@ -2246,7 +2245,7 @@ fa: بتوانید ویرایش‌های خود را ذخیره کنید باید ابتدا آن را بخوانید. blocked: دسترسی شما به API مسدود شده. برای یافتن اطلاعات بیشتر لطفاً به رابط کاربری وب وارد شوید. - need_to_see_terms: دسترسی شما به API به‌طور موقت معلق شده‌است. لطفاً در رابط + need_to_see_terms: دسترسی شما به API به‌طور موقت معلق شده است. لطفاً در رابط کاربری وب وارد شوید تا شرایط مشارکت‌کننده را ببینید. لازم نیست آن را بپذیرید، ولی حتماً باید آن را ببینید. settings_menu: @@ -2487,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: تأیید کاربران انتخاب‌شده @@ -2530,7 +2526,7 @@ fa: revoke: title: تأیید ابطال نقش heading: تأیید ابطال نقش - are_you_sure: آیا اطمینان دارید که می خواهید نقش `%{role}' را برای کاربر '%{name}' + are_you_sure: آیا اطمینان دارید که می‌خواهید نقش `%{role}' را برای کاربر '%{name}' باطل نمایید؟ confirm: تأیید fail: نمی‌توان نقش %{role} را برای کاربر %{name} باطل کرد. لطفاً مطمئن شوید @@ -2569,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: باطل شود! @@ -2607,7 +2603,6 @@ fa: revoke: باطل شود! confirm: آیا مطمئن هستید؟ reason: 'دلیل مسدودی:' - back: دیدن تمام مسدودی‌ها revoker: 'باطل‌کننده:' needs_view: برای پاک‌شدن این مسدودی کاربر باید وارد حسابش شود. block: @@ -2621,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} ارسال کرده یا روی آن‌ها نظر داده diff --git a/config/locales/fi.yml b/config/locales/fi.yml index d116bf387..65bc08d2d 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -51,6 +51,7 @@ # Author: Tumm1 # Author: Usp # Author: Veikk0.ma +# Author: Yupik # Author: ZeiP --- fi: @@ -1001,7 +1002,7 @@ fi: meadow: Niitty military: Sotilasalue mine: Kaivos - orchard: Puutarha + orchard: Hedelmätarha plant_nursery: Taimitarha quarry: Avolouhos railway: Rautatie @@ -1724,6 +1725,7 @@ fi: to: Vastaanottaja subject: Otsikko date: Päiväys + actions: Toiminnot message_summary: unread_button: Merkitse lukemattomaksi read_button: Merkitse luetuksi @@ -1743,6 +1745,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ä. @@ -1856,7 +1859,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 @@ -2012,6 +2015,7 @@ fi: contributors_fr_credit_html: '%{france}: Sisältää karttatietoja Direction Générale des Impôtsista.' contributors_fr_france: Ranska + contributors_hr_croatia: Kroatia contributors_nl_credit_html: '%{netherlands}: Sisältää © AND-karttatietoja vuodelta 2007 (%{and_link})' contributors_nl_netherlands: Alankomaat @@ -2188,7 +2192,7 @@ fi: subway: Metro ferry: Lautta light_rail: Pikaraitiotie - tram: Raitiovaunu + tram: Raitiotie trolleybus: Johdinauto bus: Bussi cable_car: Köysirata @@ -2199,6 +2203,7 @@ fi: admin: Hallinnollinen raja capital: Pääkaupunki city: Kaupunki + orchard: Hedelmätarha vineyard: Viinitarha forest: Talousmetsä wood: Metsä @@ -2210,11 +2215,13 @@ fi: golf: Golfkenttä park: Puisto common: Niitty + built_up: Rakennettu alue resident: Asuinalue retail: Kaupallinen alue industrial: Teollisuusalue commercial: Toimistoalue heathland: Kanervikko + scrubland: Pensaikko lake: Järvi reservoir: Tekojärvi intermittent_water: Ajoittainen vesi @@ -2244,6 +2251,7 @@ fi: construction: Rakenteilla olevia teitä bus_stop: Bussipysäkki bicycle_shop: Pyöräkauppa + bicycle_rental: Polkupyörän vuokraus bicycle_parking: Pyöräparkki bicycle_parking_small: Pieni pyöräparkki toilets: Vessat @@ -2254,14 +2262,21 @@ fi: kartan muokkaamisen. Tutustu ensin kuitenkin näihin perusasioihin.' whats_on_the_map: title: Kartan sisältö + off_the_map_html: Kartta %{doesnt} sisällä mielipiteitä, kuten arvosteluja, + historiallisia tai hypoteettisia ominaisuuksia, eikä tietoja tekijänoikeuksin + suojatuista lähteistä. Ellei sinulla ole erityistä lupaa, älä kopioi verkko- + tai paperikarttoja. + doesnt: ei basic_terms: title: Käsitteitä ja termistöä paragraph_1: OpenStreetMapissa käytetään paljon vain sille omaista termistöä. Kun nämä sanat ovat hallinnassa, olet jo voiton puolella! an_editor_html: '%{editor} on ohjelma tai verkkosivu jota voit käyttää kartan muokkaamiseen.' + a_node_html: '%{node} (engl. node) on pistemäinen kohde kartalla, kuten ravintola + tai puu.' editor: Muokkain - node: piste + node: Piste way: viiva rules: title: Pelisäännöt @@ -2360,8 +2375,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 @@ -2649,9 +2662,8 @@ 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}) + older: Vanhemmat käyttäjät + newer: Uudemmat käyttäjät summary_html: '%{name} luotu %{date} osoitteesta %{ip_address}' summary_no_ip_html: '%{name} luotu %{date}' confirm: Vahvista valitut käyttäjät @@ -2777,7 +2789,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: @@ -2791,9 +2802,6 @@ fi: reason: Eston syy status: Tila revoker_name: Eston tehnyt - showing_page: Sivu %{page} - next: Seuraava » - previous: « Edellinen user_mutes: index: table: @@ -2877,7 +2885,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: @@ -2910,6 +2918,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: diff --git a/config/locales/fit.yml b/config/locales/fit.yml index 50fa71f75..ae57596c8 100644 --- a/config/locales/fit.yml +++ b/config/locales/fit.yml @@ -839,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 @@ -889,9 +887,6 @@ fit: edit: Mookkaa block: edit: Mookkaa - blocks: - next: Seuraava » - previous: « Eelinen notes: index: description: Kuvvaus diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f186077cd..5a07b1b6c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -41,6 +41,7 @@ # Author: Gravitystorm # Author: Guilhelma # Author: Hashar +# Author: Hecatonchire # Author: IAlex # Author: Iketsi # Author: JB @@ -109,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: @@ -131,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 @@ -144,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 @@ -245,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 @@ -262,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: @@ -344,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}) @@ -358,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, @@ -385,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: @@ -557,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 @@ -760,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 @@ -1955,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: @@ -2725,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 @@ -3057,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 @@ -3203,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é. @@ -3218,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 diff --git a/config/locales/fur.yml b/config/locales/fur.yml index 4d6b42902..018f181cd 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -1417,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 @@ -1616,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 @@ -1677,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) @@ -1690,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: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 952a3ff9d..7fce45fa2 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -2137,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 @@ -2421,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 @@ -2553,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: @@ -2567,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 diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 53ba4347e..bdfa6b1d4 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1630,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} @@ -1834,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 diff --git a/config/locales/gcf.yml b/config/locales/gcf.yml index 7881b7087..c662fb049 100644 --- a/config/locales/gcf.yml +++ b/config/locales/gcf.yml @@ -15,7 +15,13 @@ gcf: create: Jouté komantasyon message: create: Voyé + oauth2_application: + update: Mizajou activerecord: + errors: + models: + user_mute: + is_already_muted: ja ni on baboukèt models: country: Péyi friend: Zanmi @@ -23,14 +29,21 @@ gcf: message: Mésaj user: Itilizatè user_preference: Sa itilizatè-la simyé + way: Chimen attributes: client_application: + name: Non (oblijé) allow_write_api: Modifyé kat-la + diary_comment: + body: Kò diary_entry: user: Itilizatè + body: Kò latitude: latitid longitude: lonjitid language_code: Lang + doorkeeper/application: + name: Non friend: user: Itilizatè friend: Sendika @@ -38,6 +51,8 @@ gcf: user: Itilizatè latitude: Latitid longitude: Lonjitid + message: + body: Kò user: home_lat: 'Latitid:' home_lon: 'Lonjitid:' @@ -49,9 +64,12 @@ gcf: new_email: (Pa janmen maké piblikman) auth: providers: + none: Pon wikipedia: Wikipédya api: notes: + rss: + commented: Komantasyon nèf (ora a %{place}) entry: comment: Komantasyon account: @@ -104,11 +122,24 @@ gcf: no_comment: (pon komantasyon) download_xml: Chantyé XML location: 'Ki koté:' + way: + title_html: 'Chimen: %{name}' + relation_member: + type: + way: Chimen containing_relation: entry_html: Rèlasion %{relation_name} entry_role_html: Rèlasion %{relation_name} (adan wol %{relation_role}) not_found: sorry: Désolé, l’objet %{type} nº %{id} n’a pas pu être trouvé. + type: + way: chimen + timeout: + type: + way: chimen + redacted: + type: + way: chimen start_rjs: load_data: Chajé sé doné la loading: Y ka chajé... @@ -174,13 +205,16 @@ gcf: other: '%{count} Komantè' no_comments: Pa ni komantasyon edit_link: Modifyé nouvèl-lasa + confirm: Konfirmé diary_comment: comment_from_html: Komantè a %{link_user} koté %{comment_created_at} hide_link: Dévwè komantasyon-lasa + confirm: Konfirmé location: view: Vwè comments: comment: Komantasyon + newer_comments: Sé komantasyon pli nèf la older_comments: Pli vyé komantasyon doorkeeper: scopes: @@ -214,7 +248,9 @@ gcf: taxiway: Koulwa a avyon terminal: Tèminal a layopò amenity: + bar: Bivèt bench: ban-fennyan + bicycle_parking: Ga a biskèt bicycle_rental: Lwéyaj a biskèt boat_rental: Lwéyaj a bato brothel: Kaz a bòbò @@ -238,6 +274,7 @@ gcf: townhall: Lanméri waste_basket: Bwètazòdi bridge: + suspension: Pon ka pann "yes": Pon building: chapel: Chapèl @@ -254,6 +291,9 @@ gcf: defibrillator: Bouwèkyè siren: Kòn highway: + abandoned: Lotowout yo bandonné + construction: Chimen yo ka konstwi + crossing: fouchèt a chimen cycleway: Chimen a biskèt motorway: Lotowout motorway_junction: Britèl lotowout @@ -342,9 +382,12 @@ gcf: junction: Fouchèt a chimen fè level_crossing: Janbaj féwovyè rail: Chimen fè + station: Laga féwovyè + subway: Laga a métwo shop: bicycle: Boutik a bisiklèt books: Boutik a liv + car: Boutik a loto cheese: Boutik a fomaj clothes: Boutik a lenj florist: Boutik a flè @@ -352,9 +395,14 @@ gcf: massage: Fòtman optician: Boutik a linèt perfumery: Boutik a losyon + pet: Boutik a zannimo + photo: Boutik a pòtré seafood: Manjé lannè shoes: Boutik a Soulyé + tea: Boutik a dité ticket: Boutik a bon + tobacco: Boutik a tabak + video: Boutik a vidéwo "yes": Lolo tourism: hotel: Lotèl @@ -420,7 +468,24 @@ gcf: text: Ba OpenStreetMap On Fòs more: Plis user_mailer: + diary_comment_notification: + hi: Yéla %{to_user}, + message_notification: + hi: Yéla %{to_user}, + friendship_notification: + hi: Yéla %{to_user}, + subject: '[OpenStreetMap] %{user} jouté-w kon on zanmi' + had_added_you: '%{user} jouté-w kontèl on zanmi adan OpenStreetMap.' + gpx_failure: + hi: Yéla %{to_user}, + gpx_success: + hi: Yéla %{to_user}, + email_confirm: + greeting: Yéla, + lost_password: + greeting: Yéla, note_comment_notification: + greeting: Yéla, commented: subject_own: '[OpenStreetMap] %{commenter} voyé on komantasyon asi on biten ou maké' @@ -433,6 +498,8 @@ gcf: commented_note_html: '%{commenter} kité on komantasyon anlè on maké a kat ou konmanté. Maké-la ora a %{place}.' changeset_comment_notification: + hi: Yéla %{to_user}, + greeting: Yéla, commented: subject_own: '[OpenStreetMap] %{commenter} voyé on komantasyon asi yonn a krèy a modifikasyon a-w' @@ -472,18 +539,23 @@ gcf: no home location: Ou po ko mèt la ou ka rété. update home location on click: Eskè y fo modifié la ou ka rété lè ou ka kliké asi kat la? + show: Montré + delete: Néyantizé sessions: new: - title: Konèkté-w - heading: Konekté - email or username: 'Adres imél ouben nom itilizaté aw :' + title: Konnékté-w + heading: Konnékté-w + email or username: 'Adrès imél oben nom itilizatè a-w :' password: 'Kòd a''w:' + remember: Sonjé-mwen lost password link: Ou pèd kòd a-w? - login_button: Konektéw + login_button: Konnékté-w auth_providers: wikipedia: title: Konèkté-w épi Wikipédya site: + about: + next: Jousapré copyright: native: mapping_link: koumansé kataj-la @@ -530,12 +602,15 @@ gcf: forest: Granbwa grass: Zèb sand: Sab + lake: Létan reservoir: Rézèvwa reef: Kay cemetery: Simityè beach: Bòdlanmè school: Lékòl hospital: Lopital + station: Laga féwovyè + peak: Fètay toilets: Kakatwa welcome: title: Kontan vwè-w! @@ -546,6 +621,12 @@ gcf: traces: new: help: Anmwé + show: + map: kat + trace: + more: plis + index: + empty_title: Ayen pò-ò la oauth: authorize: allow_write_api: modifyé kat-la. @@ -554,10 +635,14 @@ gcf: oauth_clients: show: confirm: Ès ou sèkten? + oauth2_applications: + show: + delete: Néyantizé users: new: no_auto_account_create: Malérezman, alè kilé, nou pé pa ouvè kont automatikman. terms: + continue: Kontinyé legale_names: france: Frans italy: Itali @@ -584,15 +669,25 @@ gcf: flash success: Tou sa ou fè jis alè ki lé piblik ou pa otorizé édité. suspended: support: janmdifòs + user_role: + revoke: + confirm: Konfirmé user_blocks: show: confirm: Ès ou sèkten? + user_mutes: + index: + table: + tbody: + send_message: Voyé on mésaj notes: index: last_changed: Dènyé lèwvwè yo modifyé-y javascripts: + close: Fèmé share: title: Simé + cancel: Annilé download: Chantyé map: locate: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 1d51a2ba6..90cf01bdf 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1490,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} @@ -1688,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 @@ -1795,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. @@ -1810,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 diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 37f4ca6ed..0d0d2b168 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -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 @@ -342,6 +342,7 @@ gl: 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) @@ -354,7 +355,10 @@ 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:' node: title_html: 'Nó: %{name}' @@ -476,8 +480,25 @@ gl: 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} @@ -559,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}. @@ -617,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: @@ -1542,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 @@ -1589,7 +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_2024_html: O aloxamento está fornecido por %{fastly}, %{corpmembers} + e outros %{partners}. partners_fastly: Fastly + 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 @@ -1611,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}:' @@ -1682,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: @@ -1721,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: @@ -1743,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! @@ -1830,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: @@ -1864,6 +1901,10 @@ gl: help_text: Escribe o enderezo de correo electrónico que empregaches para te rexistrares. Enviarémosche unha ligazón que poderás empregar para restablecer o teu contrasinal. + create: + 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} @@ -1916,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? @@ -1930,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 @@ -2145,6 +2186,12 @@ gl: %{france}: Contén datos procedentes da Direction Générale des Impôts. contributors_fr_france: Francia + contributors_hr_credit_html: |- + %{croatia}: Contén datos da %{dgu_link} e o %{open_data_portal} + (información pública de Croacia). + contributors_hr_croatia: Croacia + contributors_hr_dgu: administración xeodésica estatal de Croacia + contributors_hr_open_data_portal: portal nacional de datos libres contributors_nl_credit_html: '%{netherlands}: Contén datos © AND, 2007 (%{and_link})' contributors_nl_netherlands: Países Baixos @@ -2575,8 +2622,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 @@ -2893,9 +2940,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 @@ -2920,8 +2969,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. @@ -3036,7 +3085,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. @@ -3051,9 +3099,15 @@ gl: reason: Motivo para o bloqueo status: Estado revoker_name: Revogado por - showing_page: Páxina %{page} - next: Seguinte » - previous: « Anterior + older: Bloqueos máis antigos + newer: Bloqueos máis novos + navigation: + all_blocks: Todos os bloqueos + blocks_on_me: Os meus bloqueos + blocks_on_user: Bloqueos feitos a %{user} + blocks_by_me: Bloqueos efectuados + blocks_by_user: Bloqueos feitos por %{user} + block: Bloqueo n.º %{id} user_mutes: index: title: Usuarios silenciados @@ -3209,7 +3263,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, diff --git a/config/locales/gsw.yml b/config/locales/gsw.yml index 595b47f34..ffd78b12b 100644 --- a/config/locales/gsw.yml +++ b/config/locales/gsw.yml @@ -247,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} diff --git a/config/locales/he.yml b/config/locales/he.yml index 0172e29a0..18291aabd 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -351,7 +351,7 @@ he: agreed_with_pd: הצהרת גם שמבחינתך העריכות שלך יהיו בנחלת הכלל. link text: מה זה? save changes button: שמירת השינויים - delete_account: למחוק חשבון… + delete_account: מחיקת חשבון... go_public: heading: עריכה ציבורית currently_not_public: כעת, העריכות שלך אלמוניות ואנשים לא יכולים לשלוח לך הודעות @@ -360,7 +360,7 @@ he: only_public_can_edit: מאז המעבר ל־API 0.6, רק משתמשים ציבוריים יכולים לערוך נתוני מפה. find_out_why: לברר למה - email_not_revealed: כתובת הדוא"ל שלך לא תיחשף על־ידי הפיכתה לציבור. + email_not_revealed: כתובת הדוא"ל שלך לא תיחשף כשתהפוך לציבורית. not_reversible: לא ניתן להפוך את הפעולה הזאת, וכל המשתמשים החדשים כעת ציבוריים כברירת מחדל. make_edits_public_button: להפוך את כל עריכותיי לציבוריות @@ -1571,11 +1571,11 @@ he: no_other_issues: אין בעיות נוספות עם המשתמש הזה. comments_on_this_issue: הערות על בעיה זו resolve: - resolved: מצב הבעיה שונה ל"טופל" + resolved: מצב הבעיה שונה ל„טופל” ignore: - ignored: מצב הבעיה שונה ל"התעלמות" + ignored: מצב הבעיה שונה ל„התעלמות” reopen: - reopened: מצב הבעיות שונה ל"פתוחה" + reopened: מצב הבעיות שונה ל„פתוחה” comments: comment_from_html: תגובה מאת %{user_link} על %{comment_created_at} reassign_param: להקצות את הבעיה מחדש? @@ -1885,7 +1885,7 @@ he: destroy_button: מחיקה back: חזרה wrong_user: נכנסת בשם „%{user}”, אבל ההודעה שביקשת לקרוא לא נשלחה לאותו המשתמש. - נא להיכנס בחשבון הנכון כדי ללקרוא אותה. + נא להיכנס לחשבון הנכון כדי לקרוא אותה. sent_message_summary: destroy_button: מחיקה heading: @@ -1986,8 +1986,8 @@ he: title: כניסה עם מיקרוסופט alt: כניסה עם חשבון מיקרוסופט github: - title: כניסה באמצעות GitHub - alt: כניסה עם חשבון GitHub + title: כניסה עם גיטהאב + alt: כניסה עם חשבון גיטהאב wikipedia: title: כניסה עם ויקיפדיה alt: כניסה עם חשבון ויקיפדיה @@ -2182,6 +2182,12 @@ he: %{france}: מכילה נתונים שהגיעו במקור ממנהלת המיסים הכללית (Direction Générale des Impôts). contributors_fr_france: צרפת + contributors_hr_credit_html: |- + %{croatia}: מכילה נתונים מ%{dgu_link} ומ%{open_data_portal} + (מידע ציבורי של קרואטיה). + contributors_hr_croatia: קרואטיה + contributors_hr_dgu: המִנהל הגאודטי הממלכתי של קרואטיה + contributors_hr_open_data_portal: פורטל הנתונים הפתוחים הלאומי contributors_nl_credit_html: '%{netherlands}: מכילה © נתוני AND‏, 2007 (‏%{and_link})' contributors_nl_netherlands: הולנד contributors_nz_credit_html: |- @@ -2594,8 +2600,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 שלי @@ -2789,7 +2795,7 @@ he: display name description: שם המשתמש שלך, שמוצג בפומבי. אפשר לשנות את זה בהעדפות שלך. external auth: 'אימות עם צד שלישי:' - use external auth: 'לחלופין, אפשר להשתמש בגורמי צד שלישי כדי להיכנס:' + use external auth: לחלופין, אפשר להשתמש בגורמי צד שלישי כדי להיכנס auth no password: עם אימות צד שלישי אין צורך בסיסמה, אבל כלים נוספים או שרת יכולים להזדקק לכזה. continue: הרשמה @@ -2900,9 +2906,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: אישור משתמשים נבחרים @@ -2961,13 +2971,13 @@ he: period: למשך כמה זמן מעכשיו החשבון ייחסם מביצוע פעולות API. back: הצגת כל החסימות edit: - title: חסימת עריכה על %{name} - heading_html: חסימת עריכה על %{name} + title: עריכת החסימה על %{name} + heading_html: עריכת החסימה על %{name} period: למשך כמה זמן מעכשיו החשבון ייחסם מביצוע פעולות API. show: הצגת החסימה הזאת back: הצגת כל החסימות filter: - block_expired: ייתכן שהחסימה כבר פקעה ואי־אפשר לערוך אותה. + block_expired: החסימה כבר פקעה ואי־אפשר לערוך אותה. block_period: תקופת החסימה צריכה להיות אחד הערכים שאפשר לבחור ברשימה הנפתחת. create: flash: נוצרה חסימה על חשבון %{name} @@ -2979,7 +2989,7 @@ he: heading: רשימת חסימות משתמש empty: עוד לא נעשו חסימות. revoke: - title: בוטלה החסימה על %{block_on} + title: ביטול החסימה על %{block_on} heading_html: ביטול החסימה של %{block_on} על־ידי %{block_by} time_future_html: החסימה תסתיים ב־%{time}. past_html: החסימה הזאת הסתיימה ב־%{time} ואי־אפשר לבטל אותה. @@ -3040,15 +3050,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: @@ -3062,9 +3071,15 @@ he: 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: משתמשים מושתקים @@ -3164,8 +3179,8 @@ he: embed: report_problem: דיווח על בעיה key: - title: מפת מפתח - tooltip: מפת מפתח + title: מפתח מפה + tooltip: מפתח מפה tooltip_disabled: מפתח מפה אינו זמין לשכבה הזאת map: zoom: @@ -3184,11 +3199,11 @@ he: many: המרחק שלך מהנקודה הזאת הוא עד %{count} רגל other: המרחק שלך מהנקודה הזאת הוא עד %{count} רגל base: - standard: תקני + standard: תקנית cycle_map: מפת אופניים transport_map: מפת תחבורה tracestracktop_topo: טופוגרפיה של Tracestrack - hot: הומניטרי + hot: הומניטרית layers: header: שכבות במפה notes: הערות במפה @@ -3210,11 +3225,11 @@ he: edit_tooltip: עריכת המפה edit_disabled_tooltip: להתקרב כדי לערוך את המפה createnote_tooltip: הוספת הערה למפה - createnote_disabled_tooltip: נא להתקרב כדי להוסיף הערה למפה - map_notes_zoom_in_tooltip: יש להתקרב כדי לראות הערות על המפה + createnote_disabled_tooltip: התקרבות כדי להוסיף הערה למפה + map_notes_zoom_in_tooltip: התקרבות כדי לראות הערות על המפה map_data_zoom_in_tooltip: יש להתקרב כדי לראות נתוני מפה queryfeature_tooltip: שאילתת ישויות - queryfeature_disabled_tooltip: יש להתקרב כדי להריץ שאילתת ישויות + queryfeature_disabled_tooltip: התקרבות כדי להריץ שאילתת ישויות embed_html_disabled: הטבעת HTML אינה זמינה בשכבת המפה הזאת changesets: show: diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 0878275c6..d04efe349 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -1279,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: @@ -1296,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 @@ -1512,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} @@ -1682,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 @@ -1794,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: @@ -1808,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} diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index a9652efb6..295de5cc9 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -1784,10 +1784,10 @@ hsb: edit_preferences: Preferency wobdźěłać edit: title: Preferency wobdźěłać - save: Nastajenja aktualizować + 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: @@ -2248,8 +2248,6 @@ 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} @@ -2520,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 @@ -2666,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: @@ -2680,9 +2674,6 @@ 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 diff --git a/config/locales/hu.yml b/config/locales/hu.yml index f9c7c9753..c94bc6141 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -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: @@ -351,6 +353,7 @@ hu: 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) @@ -363,7 +366,9 @@ 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:' node: title_html: '%{name} pont' @@ -442,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' @@ -476,8 +490,24 @@ hu: 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} @@ -561,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 @@ -615,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: @@ -1584,7 +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_2024_html: A hostingot a %{fastly}, %{corpmembers} és más %{partners} + támogatják. partners_fastly: Fastly + 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 @@ -1606,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:' @@ -1614,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}! @@ -1677,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: @@ -1713,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: @@ -1733,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! @@ -1853,6 +1897,9 @@ hu: new password button: Jelszó alaphelyzetbe állítása 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: + 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' @@ -2098,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}: © 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 @@ -2119,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, @@ -2177,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 @@ -2194,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 @@ -2218,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? @@ -2395,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: @@ -2464,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 @@ -2555,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: @@ -2643,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 @@ -2658,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 @@ -2668,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 @@ -2684,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 @@ -2749,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 @@ -2766,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 @@ -2856,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. @@ -2897,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: @@ -2911,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' @@ -2947,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, @@ -3029,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 diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 1e05c164b..94bcbb3e1 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -326,6 +326,7 @@ ia: 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) @@ -338,7 +339,10 @@ 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:' node: title_html: 'Nodo: %{name}' @@ -460,8 +464,24 @@ ia: 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} @@ -546,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 @@ -598,10 +619,16 @@ 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: - account_selection_required: Le servitor de autorisation require le section + account_selection_required: Le servitor de autorisation require le selection de un conto de usator consent_required: Le servitor de autorisation require le consentimento del usator @@ -1573,7 +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_2024_html: Le allogiamento web es supportate per %{fastly}, %{corpmembers} + e altere %{partners}. partners_fastly: Fastly + 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 @@ -1595,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 @@ -1605,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}, @@ -1670,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: @@ -1709,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: @@ -1817,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: @@ -1851,6 +1886,10 @@ ia: new password button: Reinitialisar contrasigno 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: + 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} @@ -2117,6 +2156,12 @@ ia: %{france}: Contine datos fornite per le Direction General de Impostos. contributors_fr_france: Francia + contributors_hr_credit_html: |- + %{croatia}: Contine datos del %{dgu_link} e %{open_data_portal} + (information public de Croatia). + contributors_hr_croatia: Croatia + contributors_hr_dgu: Administration Geodetic Statal de Croatia + contributors_hr_open_data_portal: Portal national de datos aperte contributors_nl_credit_html: '%{netherlands}: Contine datos © AND, 2007 (%{and_link})' contributors_nl_netherlands: Nederlandia @@ -2546,8 +2591,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 @@ -2643,6 +2688,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: @@ -2726,6 +2772,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 @@ -2775,7 +2822,7 @@ ia: consider_pd: In addition a lo que precede, io considera mi contributiones como essente in le dominio public consider_pd_why: que es isto? - guidance_info_html: 'Information pro adjutar a comprneder iste terminos: un + guidance_info_html: 'Information pro adjutar a comprender iste terminos: un %{readable_summary_link} e qualque %{informal_translations_link}' readable_summary: summario legibile per humanos informal_translations: traductiones informal @@ -2862,9 +2909,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 @@ -3003,7 +3052,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: @@ -3017,9 +3065,15 @@ 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 + navigation: + all_blocks: Tote le blocadas + blocks_on_me: Blocadas sur me + blocks_on_user: Blocadas sur %{user} + blocks_by_me: Blocadas facite per me + blocks_by_user: Blocadas facite per %{user} + block: Blocada №%{id} user_mutes: index: title: Usatores silentiate diff --git a/config/locales/id.yml b/config/locales/id.yml index 0d53f53bd..55a8bc97f 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -32,6 +32,7 @@ # Author: Polos # Author: RXerself # Author: Rachmat04 +# Author: Rafka Aditia # Author: Reksa Tresna # Author: Relly Komaruzaman # Author: Rizkiahmadz @@ -558,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}' @@ -1610,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}, @@ -1671,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: @@ -1715,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: @@ -1736,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! @@ -1820,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 @@ -1854,6 +1861,10 @@ id: help_text: Masukkan alamat email yang Anda gunakan untuk mendaftar, kami akan mengirim link ke alamat tersebut yang dapat Anda gunakan untuk menyetel ulang kata sandi Anda. + create: + 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} @@ -1906,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? @@ -1924,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 @@ -2254,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 @@ -2536,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 @@ -2851,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 @@ -2989,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: @@ -3003,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 diff --git a/config/locales/is.yml b/config/locales/is.yml index 69322f026..df04164cd 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -2557,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 @@ -2873,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 @@ -3006,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: @@ -3020,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: diff --git a/config/locales/it.yml b/config/locales/it.yml index 25e5303c5..0d5c82930 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -99,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 @@ -383,6 +385,7 @@ it: 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) @@ -397,6 +400,8 @@ it: 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:' node: title_html: 'Nodo: %{name}' @@ -476,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} @@ -510,8 +524,24 @@ it: 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} @@ -648,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: @@ -1622,7 +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_2024_html: L'hosting è supportato da %{fastly}, %{corpmembers} + e da altri %{partners}. partners_fastly: Fastly + 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 @@ -1644,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 @@ -1654,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}, @@ -1691,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' @@ -1717,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: @@ -1755,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: @@ -1898,6 +1944,9 @@ it: help_text: Inserire l'indirizzo email che si è utilizzato per l'iscrizione, a cui verrà inviato un collegamento che permetterà la reimpostazione della propria password. + create: + 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} @@ -2438,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! @@ -2594,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 @@ -2686,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: @@ -2773,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 @@ -2910,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 @@ -3053,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: @@ -3067,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 diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 58fcd54a6..218c87d3c 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -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: 日記エントリを作成する、コメントする、友達を作る。 - allow_write_api: 地図を変更する。 - allow_read_gpx: 非公開GPSトレースを読み込む。 + allow_read_prefs: 利用者設定を読み込む + allow_write_prefs: 利用者設定を変更する + allow_write_diary: 日記エントリを作成する・コメントする・友達を作る + 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: ご都合の良い時にこのリンクをクリックして新しい協力者規約を確認の上、承諾してしてください。 + not yet agreed: あなたは、まだ新しい投稿規約を承諾していません。 + review link text: ご都合の良い時にこのリンクをクリックして新しい協力者規約を確認の上、承諾してください。 agreed_with_pd: また、あなたは、自分の編集結果がパブリックドメインにあるべきだと考えているということも宣言しています。 link text: これは何ですか? save changes button: 変更を保存 @@ -331,16 +336,16 @@ 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: deleted_ago_by_html: '%{user}が%{time_ago}に削除' edited_ago_by_html: '%{user}が%{time_ago}に編集' @@ -507,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: 日記エントリの新規作成 @@ -524,11 +529,11 @@ ja: location: 位置 use_map_link: 地図を使用 index: - title: 利用者さんの日記 + title: 利用者の日記 title_friends: 友達の日記 title_nearby: 周辺の利用者の日記 user_title: '%{user}さんの日記' - in_language_title: '%{language} の日記エントリ' + in_language_title: '%{language}の日記エントリ' new: 日記エントリを新規作成 new_title: 自分の日記にエントリを新規作成 my_diary: 自分の日記 @@ -551,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: 確認 @@ -612,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} との友達を解除しました。' + success: '%{name} を友達から解除しました。' not_a_friend: '%{name} は友達ではありません。' geocoder: search_osm_nominatim: @@ -652,7 +657,7 @@ ja: amenity: animal_boarding: 動物宿泊施設 animal_shelter: 動物保護施設 - arts_centre: アート センター + arts_centre: アートセンター atm: ATM bank: 銀行 bar: バー @@ -670,7 +675,7 @@ ja: cafe: 喫茶店 car_rental: レンタカー car_sharing: カーシェアリング - car_wash: 洗車 + car_wash: 洗車場 casino: è³­å ´ charging_station: 充電ステーション childcare: 保育所 @@ -678,14 +683,14 @@ ja: clinic: 診療所 clock: 時計 college: 短期大学・専門学校 - community_centre: コミュニティ センター + community_centre: コミュニティセンター conference_centre: 会議施設 courthouse: 裁判所 crematorium: 火葬場 dentist: 歯科医 doctors: 医師 - drinking_water: 飲み水 - driving_school: 自動車学校 + drinking_water: 水飲み場 + driving_school: 自動車教習所 embassy: 大使館 events_venue: イベント会場 fast_food: ファストフード @@ -724,7 +729,7 @@ ja: post_box: 郵便ポスト post_office: 郵便局 prison: 刑務所 - pub: パブ + pub: 居酒屋 public_bath: 公衆浴場 public_bookcase: ブックポスト public_building: 公共建築物 @@ -743,7 +748,7 @@ ja: telephone: 公衆電話 theatre: 劇場 toilets: トイレ - townhall: 市庁舎 + townhall: タウンホール training: トレーニング施設 university: 大学 vehicle_inspection: 車検場 @@ -762,8 +767,8 @@ ja: administrative: 行政境界 census: 国勢調査の境界 national_park: 国立公園 - political: 選挙区 - protected_area: 保護された領域 + political: 選挙区の境界 + protected_area: 保護区 "yes": 境界 bridge: aqueduct: 水道橋 @@ -824,7 +829,7 @@ ja: sport: スポーツクラブ "yes": クラブ craft: - beekeeper: 養蜂家 + beekeeper: 養蜂所 blacksmith: 金属加工 brewery: 醸造所 carpenter: 工務店 @@ -839,7 +844,7 @@ ja: hvac: 空調システム施工業 metal_construction: 鉄工所 painter: 塗装業 - photographer: 撮影者 + photographer: 写真館 plumber: 配管業 roofer: 屋根施工業 sawmill: 製材所 @@ -871,11 +876,11 @@ ja: corridor: 通路 crossing: 交差点 cycleway: 自転車道 - elevator: エレベータ + elevator: エレベーター emergency_access_point: 緊急アクセスポイント emergency_bay: 緊急停車帯 footway: 歩道 - ford: ç ¦ + ford: 洗い越し give_way: 前方優先道路標識 living_street: 住宅街 milestone: マイルストーン @@ -920,7 +925,7 @@ ja: battlefield: 戦場 boundary_stone: 境界石 building: 歴史的な建物 - bunker: 貯蔵庫 + bunker: 掩体壕 cannon: 引退大砲 castle: 城 charcoal_pile: 炭窯跡 @@ -931,9 +936,9 @@ ja: heritage: 遺産 hollow_way: 切土 (堀切) house: 住宅 - manor: 荘園 + manor: 歴史的邸宅 memorial: 記念碑 - milestone: 古い道標 + milestone: 歴史的な道標 mine: 鉱山 mine_shaft: 竪坑 monument: 記念碑 @@ -946,7 +951,7 @@ ja: tower: 塔 wayside_chapel: 祠 (ほこら) wayside_cross: 道路際の十字架 - wayside_shrine: 道祖神 + wayside_shrine: 路傍の神仏 wreck: 沈没船 "yes": 史跡 junction: @@ -1077,7 +1082,7 @@ ja: military: airfield: 軍用飛行場 barracks: バラック - bunker: 貯蔵庫 + bunker: 掩体壕 checkpoint: 検問所 trench: 溝 "yes": 軍用施設 @@ -1408,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: 最近の更新 @@ -1464,7 +1469,7 @@ ja: intro: サイトの仲裁者にレポートを送信する前に、以下の各点をご確認ください。 not_just_mistake: 問題が単純ミスでないと確証している unable_to_fix: ご自身またはコミュニティの仲間の皆さんの手を借りて取り組んだが、問題を修正できなかった - resolve_with_user: 当事者であるユーザとすでに問題解決を試みた + resolve_with_user: 当事者である利用者とすでに問題解決を試みた categories: diary_entry: spam_label: この日誌の内容はスパムを含む/スパムである @@ -1480,7 +1485,7 @@ ja: spam_label: この利用者プロフィールはスパムを含む/スパムである offensive_label: この利用者プロフィールは卑猥/違法である threat_label: この利用者プロフィールは脅迫を含む - vandal_label: このユーザは破壊者である + vandal_label: この利用者は破壊者である other_label: その他 note: spam_label: この注記はスパムである @@ -1496,7 +1501,7 @@ ja: home: ホーム地点に移動 logout: ログアウト log_in: ログイン - sign_up: ユーザー登録 + sign_up: 利用者登録 start_mapping: マッピングを開始 edit: 編集 history: 履歴 @@ -1663,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} への新規メッセージ送信' @@ -1681,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: @@ -1693,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: @@ -1710,7 +1726,9 @@ ja: heading: パスワードを忘れた場合はこちら email address: 'メールアドレス:' new password button: パスワードを再設定 - help_text: ユーザー登録に使用したメール アドレスを入力してください。そのアドレス宛に、パスワードを再設定するためのリンクをお送りします。 + help_text: 利用者登録に使用したメール アドレスを入力してください。そのアドレス宛に、パスワードを再設定するためのリンクをお送りします。 + create: + send_paranoid_instructions: メールアドレスが当サイトのデータベースに存在する場合、数分以内にあなたのメールアドレスにパスワード復元リンクが送信されます。 edit: title: パスワードの再設定 heading: '%{user} のパスワードのリセット' @@ -1751,7 +1769,9 @@ ja: home location: ホーム地点 no home location: あなたはまだホーム地点を登録していません。 update home location on click: ホーム地点を、地図上のクリックした地点に変更 + show: 表示 delete: 削除 + undelete: 削除を取り消し update: success: プロフィール更新済み。 failure: プロファイルを更新できませんでした。 @@ -1767,11 +1787,11 @@ ja: register now: 今すぐ登録 with external: 'サードパーティのアカウントでもログインできます:' no account: アカウントを持っていませんか? - auth failure: 申し訳ありませんが、入力した情報でログインできませんでした。 + auth failure: 申し訳ありませんが、入力された情報ではログインできませんでした。 openid_logo_alt: OpenID でログイン auth_providers: openid: - title: OpenIDでログイン + title: OpenID でログイン alt: OpenID URLでログイン google: title: Googleでログイン @@ -1822,16 +1842,16 @@ ja: about: next: 次へ used_by_html: '%{name} は数千ものウェブサイト、モバイル アプリ、ハードウェア機器に地図データを提供しています' - lede_text: OpenStreetMapは、道路、通路、カフェ、鉄道駅など、世界中にあるすべてのものに関するデータを提供・メンテナンスしているマッパーのコミュニティによって構築されました。 + lede_text: OpenStreetMapは、道路、通路、カフェ、鉄道駅など、世界中にあるすべてのものに関するデータを提供・メンテナンスしているマッパーのコミュニティによって構築されています。 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: 著作権とライセンス @@ -1896,8 +1916,8 @@ ja: edit: not_public: あなたの編集結果を公開できません。 not_public_description_html: このようなことをしない限り、あなたは地図を編集できません。あなたは%{user_page}から編集内容を公開できます。 - user_page_link: ユーザーページ - anon_edits_link_text: なぜこれれが事例なのかを見る。 + user_page_link: 利用者ページ + anon_edits_link_text: なぜそうなのかを調べる。 id_not_configured: iDが設定されていません。 no_iframe_support: あなたのブラウザーは、この機能に必須の HTML iframe に未対応です。 export: @@ -1940,7 +1960,7 @@ ja: description: OpenStreetMap の基礎を網羅しているこのクイック ガイドから始めましょう。 beginners_guide: title: 初心者向けの手引き - description: コミュニティは、初心者向けガイドが整備しています。 + description: コミュニティが、初心者向けガイドを整備しています。 community: title: コミュニティフォーラム mailing_lists: @@ -1960,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: ヘルプを取得 @@ -2052,9 +2072,12 @@ ja: an_editor_html: '%{editor}は、地図を編集できるプログラムやウェブサイトです。' editor: 編集者 node: ノード + way: ウェイ tag: タグ rules: title: ルール + imports: インポート + automated_edits: 自動編集 start_mapping: マッピングを開始 add_a_note: title: 編集する時間がないためメモを残します @@ -2064,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: 非公開 (匿名、点は順不同) @@ -2136,8 +2168,6 @@ ja: identifiable: 識別可能 private: 非公開 trackable: 追跡可能 - by: '投稿者:' - in: 'タグ:' index: public_traces: 公開GPSトレース my_gps_traces: 自作のGPSトレース @@ -2181,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トレースを読み込む。 @@ -2207,14 +2238,14 @@ ja: permissions: missing: この機能についてアプリケーションにアクセスを許可していません。 scopes: - read_prefs: ユーザー設定の読み込み - write_prefs: ユーザー設定の変更 - write_diary: 日記エントリを作成する、コメントする、友達を作る。 + read_prefs: 利用者設定の読み込み + write_prefs: 利用者設定の変更 + write_diary: 日記エントリを作成する・コメントする・友達を作る write_api: マップの修正 read_gpx: 非公開GPSトレースを読む - write_gpx: GPSトレースをアップロードする。 - write_notes: メモを変更する。 - read_email: ユーザーのメールアドレスを読む + write_gpx: GPSトレースをアップロードする + write_notes: メモを変更する + read_email: 利用者のメールアドレスを読む skip_authorization: 自動的に申請を承認する oauth_clients: new: @@ -2303,7 +2334,7 @@ ja: confirm_revoke: このアプリケーションへのアクセスを取り消しますか? users: new: - title: ユーザー登録 + title: 利用者登録 no_auto_account_create: 残念ながら、現在、自動ではアカウントを作成できません。 support: サポート about: @@ -2312,7 +2343,7 @@ ja: external auth: 'サードパーティ認証:' use external auth: サードパーティのアカウントでもログインできます auth no password: サードパーティ認証があるとパスワードは不要ですが、それでもその他のツールやサーバーが必要な場合があります。 - continue: ユーザー登録 + continue: 利用者登録 terms accepted: 新しい協力者規約を承諾していただき、ありがとうございます! privacy_policy: プライバシー・ポリシー terms: @@ -2359,7 +2390,8 @@ ja: my_dashboard: 私のダッシュボード blocks on me: 自分に与えられたブロック blocks by me: 自分が実行したブロック - create_mute: この利用者をミュートする + create_mute: この利用者をミュート + destroy_mute: この利用者のミュートを解除 edit_profile: プロフィールを編集 send message: メッセージを送信 diary: 日記 @@ -2372,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: モデレーター権限を許可 @@ -2389,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: この利用者を通報 @@ -2402,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: アカウント停止 @@ -2431,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: 権限付与の確認 @@ -2455,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: @@ -2518,7 +2547,6 @@ ja: revoke: 取り消す! confirm: 本当によろしいですか? reason: 'ブロックの理由:' - back: すべてのブロックを表示 revoker: '取消:' needs_view: ブロックを解除するには、利用者はログインし直す必要があります。 block: @@ -2532,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} さんが投稿またはコメントしたメモ' @@ -2560,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: 閉じる @@ -2622,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: 地図データを閲覧するには拡大してください @@ -2725,16 +2771,16 @@ ja: node: ノード way: ウェイ relation: リレーション - nothing_found: 地物が見つかりませんでした + nothing_found: 地物が見つかりません error: '%{server}接続のエラーです: %{error}' timeout: '%{server}接続が時間切れです' context: directions_from: ここから出発する道順 directions_to: ここへの道順 - add_note: ラベルをここに追加 + add_note: メモをここに追加 show_address: アドレスを表示 query_features: 地物を検索 - centre_map: ここで地図を中央に置く + centre_map: ここを地図の中心にする redactions: edit: heading: 改訂の編集 diff --git a/config/locales/ka.yml b/config/locales/ka.yml index a92fa8016..5de173aa9 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -978,7 +978,6 @@ ka: identifiable: იდენტიფიცირებადი private: პირადი trackable: კონტროლირებადი - by: 'ავტორი:' oauth: authorize: allow_write_api: რუკის შეცვლა. @@ -1081,7 +1080,6 @@ ka: revoke: განბლოკვა! confirm: დარწმუნებული ხართ? reason: 'დაბლოკვის მიზეზი:' - back: ყველა ბლოკირების ჩვენება revoker: 'განმბლოკველი:' needs_view: სანამ მოხდება ბლოკის მოხსნა, მანამდე საჭიროა მომხმარებლის დარეგისტრირება block: @@ -1095,9 +1093,6 @@ ka: reason: დაბლოკვის მიზეზი status: სტატუსი revoker_name: განბლოკილია - showing_page: გვერდი %{page} - next: შემდეგი » - previous: « წინა notes: index: creator: შემქმნელი diff --git a/config/locales/kab.yml b/config/locales/kab.yml index b720abaac..22963af6a 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -1141,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} @@ -1281,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 @@ -1324,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 @@ -1336,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} diff --git a/config/locales/kk-cyrl.yml b/config/locales/kk-cyrl.yml index 76595014c..cff82e6e9 100644 --- a/config/locales/kk-cyrl.yml +++ b/config/locales/kk-cyrl.yml @@ -13,12 +13,12 @@ kk-cyrl: prompt: Файлды таңдаңыз submit: diary_comment: - create: Сақтау + create: Пікір жазу diary_entry: create: Жариялау update: Жаңарту issue_comment: - create: Пікір қалдыру + create: Пікір қосу message: create: Жіберу client_application: @@ -94,6 +94,7 @@ kk-cyrl: diary_entry: user: Қолданушы title: Тақырып + body: Мәтін latitude: Ендік longitude: Бойлық language_code: Тіл @@ -151,32 +152,32 @@ kk-cyrl: datetime: distance_in_words_ago: about_x_hours: - one: шамамен 1 сағат бұрын + one: шамамен %{count} сағат бұрын other: шамамен %{count} сағат бұрын about_x_months: - one: шамамен 1 ай бұрын + one: шамамен %{count} ай бұрын other: шамамен %{count} ай бұрын about_x_years: - one: шамамен 1 жыл бұрын + one: шамамен %{count} жыл бұрын other: шамамен %{count} жыл бұрын almost_x_years: - one: 1 жыл бұрын дерлік + one: '%{count} жыл бұрын дерлік' other: '%{count} жыл бұрын дерлік' half_a_minute: жарты минут бұрын x_seconds: - one: 1 секунд бұрын + one: '%{count} секунд бұрын' other: '%{count} секунд бұрын' x_minutes: - one: 1 минут бұрын + one: '%{count} минут бұрын' other: '%{count} минут бұрын' x_days: - one: 1 күн бұрын + one: '%{count} күн бұрын' other: '%{count} күн бұрын' x_months: - one: 1 ай бұрын + one: '%{count} ай бұрын' other: '%{count} ай бұрын' x_years: - one: 1 жыл бұрын + one: '%{count} жыл бұрын' other: '%{count} жыл бұрын' editor: default: Әдепкі (қазіргі уақытта %{name}) @@ -200,6 +201,8 @@ kk-cyrl: opened_at_by_html: '%{when} %{user} жасаған' commented_at_html: '%{when} жаңартылған' commented_at_by_html: '%{when} %{user} жаңартқан' + rss: + title: OpenStreetMap ескертпелері entry: comment: Пікір account: @@ -216,14 +219,22 @@ kk-cyrl: openid: link text: бұл не? public editing: + heading: Жария өңдеу enabled link text: бұл не? disabled link text: Неге өзгерістер енгізе алмаймын? contributor terms: + heading: Жобаға қатысу шарттары link text: бұл не? save changes button: Өзгерістерді сақтау delete_account: Тіркелгіні жою... go_public: heading: Жария өңдеу + only_public_can_edit: API 0.6 нұсқасына жаңарғаннан бері, жария қолданушылар + ғана карта дерегін өзгерте алады. + find_out_why: неге екенін білу + email_not_revealed: Тіркелгіңіз жария боп кеткеннен кейін, басқалар бұрынғыша + эл. поштаңызды көре алмайды. + not_reversible: Бұл қайтымсыз әрекет. Барлық жаңа қолданушы жария болып тіркеледі. make_edits_public_button: Барлық өңдемелерімді жария ету destroy: success: Тіркелгі жойылды. @@ -233,15 +244,15 @@ kk-cyrl: anonymous: аноним no_comment: (пікір жоқ) part_of_relations: - one: 1 қатынас + one: '%{count} қатынас' other: '%{count} қатынас' part_of_ways: - one: 1 сызық + one: '%{count} сызық' other: '%{count} сызық' download_xml: XML жүктеп алу view_history: Тарихын көру view_details: Егжей-тегжейін көру - location: 'Географиялық орны:' + location: 'Орналасуы:' node: title_html: 'Нүкте: %{name}' history_title_html: 'Нүкте тарихы: %{name}' @@ -250,6 +261,7 @@ kk-cyrl: history_title_html: 'Сызық тарихы: %{name}' nodes: Нүктелер nodes_count: + one: '%{count} нүкте' other: '%{count} нүкте' relation: title_html: 'Қатынас: %{name}' @@ -268,21 +280,26 @@ kk-cyrl: way: сызық relation: қатынас changeset: өңдеме дестесі - note: естелік + note: ескертпе timeout: type: node: нүкте way: сызық relation: қатынас changeset: өңдеме дестесі - note: естелік + note: ескертпе redacted: redaction: Түзету %{id} + message_html: Бұл нысанның (%{type}) %{version} нұсқасы жасырылды, сондықтан + оны көре алмайсыз. Көбірек білу үшін %{redaction_link} көріңіз. type: node: нүкте way: сызық relation: қатынас start_rjs: + feature_warning: '%{num_features} нысанды жүктеп алғаннан кейін, браузеріңіз + баяулап кетуі мүмкін. Осынша көп деректі шынымен көрсету керек пе?' + load_data: Дерек жүктеу loading: Жүктелуде… tag_details: tags: Тегтер @@ -292,6 +309,9 @@ kk-cyrl: telephone_link: '%{phone_number} қоңырау шалу' colour_preview: '%{colour_value} түсін көру' email_link: '%{email} хат жіберу' + query: + title: Маңайдағы нысандар + nearby: Маңайдағы нысандар changesets: changeset_paging_nav: showing_page: '%{page}-беті' @@ -313,6 +333,11 @@ kk-cyrl: feed: title: Өңдеме дестесі %{id} closed: Жабық + belongs_to: Автор + heading: + title: Өңдеме дестесі %{id} + no_such_entry: + title: Мұндай өңдеме дестесі жоқ show: title: 'Өңдеме дестесі: %{id}' discussion: Талқылау @@ -330,17 +355,22 @@ kk-cyrl: km away: Бұдан %{count} км жерде m away: Бұдан %{count} м жерде popup: + your location: Орналасқан жеріңіз friend: Дос show: + title: Ақпарат панелім my friends: Достарым friends_changesets: достардың өңдеме дестелері friends_diaries: Достардың күнделік жазбалары diary_entries: new: title: Жаңа күнделік жазбасы + form: + location: Орналасуы index: title: Қолданушылардың күнделіктері title_friends: Достардың күнделіктері + user_title: '%{user} күнделігі' in_language_title: '%{language} тіліндегі күнделік жазбалары' new: Жаңа күнделік жазбасы my_diary: Күнделігім @@ -355,7 +385,7 @@ kk-cyrl: user_title: '%{user} күнделігі' leave_a_comment: Пікір қалдыру login_to_leave_a_comment_html: Пікір қалдыру үшін %{login_link} - login: кіріңіз + login: Кіру no_such_entry: title: Күнделікте мұндай жазба жоқ diary_entry: @@ -374,11 +404,20 @@ kk-cyrl: comment: Пікір newer_comments: Жаңалау пікірлер older_comments: Ескілеу пікірлер + subscribe: + button: Талқыға жазылу doorkeeper: flash: applications: create: notice: Қосымша тіркелген. + scopes: + address: Орналасқан жеріңізді көру + email: Эл. поштаңызды көру + phone: Телефон нөміріңізді көру + errors: + not_found: + title: Файл табылмады friendships: make_friend: heading: '%{user} достарға қосу керек пе?' @@ -389,9 +428,15 @@ kk-cyrl: success: '%{name} достардан жойылды.' not_a_friend: '%{name} досыңыз емес.' geocoder: + search: + title: + results_from_html: '%{results_link} берген нәтиже' + latlon: Жүйе search_osm_nominatim: prefix: aerialway: + cable_car: Бір/екі вагоны бар арқан жол + gondola: Көп вагоны бар арқан жол pylon: Тірек "yes": Арқан жол aeroway: @@ -408,7 +453,10 @@ kk-cyrl: atm: Банкомат bank: Банк bar: Бар + bench: Орындық + bicycle_parking: Велосипед тұрағы bicycle_rental: Велосипедтерді жалға беру + bicycle_repair_station: Велосипед жөндеу шеберханасы biergarten: Ашық ауадағы сырахана blood_bank: Қан банкі boat_rental: Қайықтарды жалға беру @@ -450,6 +498,7 @@ kk-cyrl: nursing_home: Қарттар үйі payment_terminal: Төлем терминалы pharmacy: Дәріхана + place_of_worship: Табыну орны police: Полиция post_box: Пошта жәшігі post_office: Пошта бөлімшесі @@ -458,6 +507,7 @@ kk-cyrl: public_bookcase: Қоғамдық кітап шкафы restaurant: Мейрамхана school: Мектеп + shelter: Қалқа shower: Душ studio: Студия swimming_pool: Бассейн @@ -465,6 +515,7 @@ kk-cyrl: telephone: Телефон theatre: Театр toilets: Дәретхана + townhall: Қала әкімдігі training: Оқу орталығы university: Университет vehicle_inspection: Техникалық байқау @@ -472,6 +523,7 @@ kk-cyrl: veterinary: Мал дәрігерлік клиника waste_basket: Қоқыс шелегі waste_disposal: Қоқыс жәшігі + weighbridge: Көлік таразысы "yes": Инфрақұрылым boundary: administrative: Әкімшілік шекара @@ -479,12 +531,16 @@ kk-cyrl: "yes": Шекара bridge: aqueduct: Акведук + boardwalk: Ағаш тротуар suspension: Аспалы көпір viaduct: Виадук "yes": Көпір building: + apartment: Пәтер + apartments: Көп пәтерлі үй bungalow: Бунгало church: Шіркеу ғимараты + civic: Қоғамдық ғимарат college: Колледж ғимараты dormitory: Жатақхана garage: Гараж @@ -504,6 +560,7 @@ kk-cyrl: school: Мектеп ғимараты stable: Ат қора temple: Ғибадатхана ғимараты + train_station: Темір жол вокзалы university: Университет ғимараты warehouse: Қойма "yes": Ғимарат @@ -521,9 +578,11 @@ kk-cyrl: handicraft: Қолөнер painter: Cуретші photographer: Фотограф + plumber: Сантехник roofer: Шатыршы sawmill: Ағаш кесетін зауыт shoemaker: Етікші + stonemason: Тасшы tailor: Тігінші "yes": Шеберхана emergency: @@ -568,7 +627,7 @@ kk-cyrl: landuse: cemetery: Зират conservation: Қорық - construction: Құрылыс + construction: Құрылыс алаңы forest: Орман шаруашылығы garages: Гараждар grass: Шөп @@ -642,6 +701,8 @@ kk-cyrl: atoll: Атолл bay: Шығанақ beach: Жағажай + cave_entrance: Үңгірге кіреберіс + cliff: Тік жартас coastline: Жағалық сызық crater: Кратер fjord: Фьорд @@ -679,6 +740,7 @@ kk-cyrl: estate_agent: Жылжымайтын мүлік агенттігі government: Мемлекеттік мекеме insurance: Сақтандыру компаниясы + it: IT кеңсесі lawyer: Заңгер notary: Нотариус research: Ғылыми-зерттеу ұйымы @@ -695,6 +757,7 @@ kk-cyrl: houses: Үйлер island: Арал islet: Аралшық + municipality: Муниципалитет postcode: Пошта индексі region: Өңір sea: Теңіз @@ -716,7 +779,10 @@ kk-cyrl: antiques: Антиквариат appliance: Тұрмыстық техника дүкені baby_goods: Балалар тауарлары + bakery: Наубайхана + beauty: Сұлулық салоны bed: Төсек жабдықтары + beverages: Сусын дүкені bicycle: Велосипед дүкені bookmaker: Букмекер books: Кітап дүкені @@ -732,8 +798,12 @@ kk-cyrl: clothes: Киім дүкені coffee: Кофе дүкені computer: Компьютер дүкені + confectionery: Кондитерлік дүкен + convenience: Үй жанындағы дүкен copyshop: Көшірме орталығы cosmetics: Косметика дүкені + craft: Қолөнерге қажетті тауарлар + curtain: Перде дүкені dairy: Сүт өнімдері дүкені deli: Деликатестер department_store: Универмаг @@ -745,7 +815,9 @@ kk-cyrl: fashion: Сәнді киім дүкені fishing: Балық аулау құралдары florist: Гүлдер дүкені + funeral_directors: Жерлеу қызметтері furniture: Жиһаз + gas: Газ дүкені grocery: Азық-түлік дүкені hairdresser: Шаштараз hardware: Шаруашылық дүкені @@ -757,10 +829,12 @@ kk-cyrl: laundry: Кір жуатын орын lottery: Лотерея mall: Сауда орталығы + massage: Массаж mobile_phone: Ұялы телефондар дүкені motorcycle: Мотоцикл дүкені motorcycle_repair: Мотоцикл жөндеу musical_instrument: Музыкалық аспаптар + nutrition_supplements: Тағамдық қоспалар optician: Оптика pawnbroker: Ломбард perfumery: Парфюмерия @@ -770,12 +844,15 @@ kk-cyrl: sports: Спорт дүкені stationery: Кеңсе тауарлары supermarket: Супермаркет + tailor: Тігінші tattoo: Тату салоны tea: Шай дүкені ticket: Касса tobacco: Темекі дүкені toys: Ойыншықтар дүкені travel_agency: Туристік агенттік + tyres: Шиналар дүкені + vacant: Қаңырап қалған дүкен wholesale: Көтерме сауда дүкені wine: Шарап дүкені "yes": Дүкен @@ -792,13 +869,20 @@ kk-cyrl: "yes": Туннель waterway: dam: Бөгетше + lock: Шлюз rapids: Шоңғал river: Өзен waterfall: Сарқырама weir: Бөгет admin_levels: + level2: Мемлекет шекарасы + level5: Өңір шекарасы + level6: Аудан шекарасы level8: Қала шекарасы + level9: Ауыл шекарасы types: + cities: Үлкен қалалар + towns: Қалалар places: Орындар results: no_results: Ештеңе табылмады @@ -807,6 +891,8 @@ kk-cyrl: search: Іздеу states: open: Ашық + show: + reopen: Қайта ашу reports: new: categories: @@ -817,6 +903,9 @@ kk-cyrl: user: other_label: Басқа note: + spam_label: Бұл ескертпе спамға ұқсайды + personal_label: Бұл ескертпеде біреудің жеке дерегі бар + abusive_label: Бұл ескертпеде балағат сөздер бар other_label: Басқа layouts: logo: @@ -833,38 +922,73 @@ kk-cyrl: edit_with: '%{editor} көмегімен өңдеу' intro_header: OpenStreetMap-ке қош келдіңіз! partners_fastly: Fastly + tou: Қолдану шарты help: Анықтама about: Жоба туралы copyright: Авторлық құқықтар communities: Қауымдастықтар + community: Қауымдастық community_blogs: Қауымдастық блогтары learn_more: Көбірек білу + more: Мәзір user_mailer: + diary_comment_notification: + hi: Сәлеметсіз бе, %{to_user}, message_notification: subject: '[OpenStreetMap] %{message_title}' + hi: Сәлеметсіз бе, %{to_user}, + header: 'OpenStreetMap қолданушысы %{from_user} сізге хат жіберді. Тақырыбы: + %{subject}' + friendship_notification: + hi: Сәлеметсіз бе, %{to_user}, + gpx_failure: + hi: Сәлеметсіз бе, %{to_user}, gpx_success: + hi: Сәлеметсіз бе, %{to_user}, subject: '[OpenStreetMap] GPX сәтті импортталды' signup_confirm: subject: '[OpenStreetMap] OpenStreetMap-ке қош келдіңіз' + email_confirm: + greeting: Сәлеметсіз бе, lost_password: subject: '[OpenStreetMap] Құпиясөзді арылту сұранысы' + greeting: Сәлеметсіз бе, + note_comment_notification: + greeting: Сәлеметсіз бе, + changeset_comment_notification: + hi: Сәлеметсіз бе, %{to_user}, + greeting: Сәлеметсіз бе, messages: messages_table: + from: Кімнен + to: Кімге subject: Тақырып + actions: Әрекеттер message_summary: unread_button: Оқылмаған деп белгілеу read_button: Оқылды деп белгілеу reply_button: Жауап беру destroy_button: Жою + new: + title: Хат жіберу + outbox: + actions: Әрекеттер + messages: + one: '%{count} хат жібердіңіз' + other: '%{count} хат жібердіңіз' show: reply_button: Жауап беру unread_button: Оқылмаған деп белгілеу destroy_button: Жою + back: Артқа sent_message_summary: destroy_button: Жою + mark: + as_read: Хатқа оқылды деген белгі қойдыңыз + as_unread: Хатқа оқылмады деген белгі қойдыңыз passwords: new: - email address: 'Е-пошта мекенжайы:' + email address: Эл. пошта мекенжайы edit: title: Құпиясөзді арылту update: @@ -890,16 +1014,35 @@ kk-cyrl: keep image: Ағымдағы суретті сақтап қалу delete image: Ағымдағы суретті жою replace image: Ағымдағы суретті алмастыру + show: Көрсету + delete: Жою update: success: Бейін жаңартылды. sessions: new: title: Кіру heading: Кіру - password: 'Құпиясөз:' + password: Құпиясөз remember: Жүйеде қалу login_button: Кіру no account: Тіркелгіңіз жоқ па? + auth_providers: + openid: + title: OpenID арқылы кіру + google: + title: Google арқылы кіру + facebook: + title: Facebook арқылы кіру + microsoft: + title: Microsoft арқылы кіру + github: + title: GitHub арқылы кіру + wikipedia: + title: Уикипедия арқылы кіру + wordpress: + title: Wordpress арқылы кіру + aol: + title: AOL арқылы кіру destroy: title: Шығу heading: OpenStreetMap-тен шығу @@ -921,10 +1064,26 @@ kk-cyrl: english_link: Ағылшынша түпнұсқасы native: title: Бұл бет туралы + legal_babble: + contributors_at_austria: Аустрия + contributors_au_australia: Аустралия + contributors_ca_canada: Канада + contributors_cz_czechia: Чехия + contributors_fi_finland: Финляндия + contributors_fi_nlsfi_license: NLSFI лицензиясы + contributors_fr_france: Франция + contributors_hr_croatia: Хорватия + contributors_nl_netherlands: Нидерланд + contributors_nz_new_zealand: Жаңа Зеландия + contributors_rs_serbia: Сербия + contributors_si_slovenia: Словения + contributors_es_spain: Испания + contributors_za_south_africa: Оңтүстік Африка + contributors_gb_united_kingdom: Ұлыбритания index: permalink: Тұрақты сілтеме shortlink: Қысқа сілтеме - createnote: Естелік қосу + createnote: Ескертпе қосу edit: user_page_link: қолданушы беті export: @@ -956,6 +1115,8 @@ kk-cyrl: close: Жабу search: search: Іздеу + where_am_i: Бұл қайда? + submit_text: Өту key: table: entry: @@ -966,7 +1127,9 @@ kk-cyrl: secondary: Екінші дәрежелі жол unclassified: Жергілікті жол rail: Темір жол + train: Пойыз subway: Метро + bus: Автобус apron: Әуежай перроны admin: Әкімшілік шекара forest: Орман @@ -983,14 +1146,19 @@ kk-cyrl: centre: Спорт орталығы military: Әскери аймақ school: Мектеп - university: университет + university: Университет building: Елеулі ғимарат station: Темір жол бекеті - peak: шың + peak: Шың + bus_stop: Автобус аялдамасы bicycle_shop: Велосипед дүкені + bicycle_parking: Велосипед тұрағы toilets: Дәретхана welcome: title: Қош келдіңіз! + basic_terms: + node: нүкте + way: сызық rules: title: Ережелерi! communities: @@ -1009,6 +1177,7 @@ kk-cyrl: download: жүктеп алу map: карта edit: өңдеу + owner: 'Иесі:' tags: 'Тегтер:' none: Жоқ delete_trace: Бұл бағдарды жою @@ -1033,6 +1202,7 @@ kk-cyrl: delete: Жою confirm_delete: Бұл қосымшаны жою керек пе? show: + edit: Өңдеу delete: Жою confirm_delete: Бұл қосымшаны жою керек пе? oauth2_authorized_applications: @@ -1055,9 +1225,12 @@ kk-cyrl: my diary: Күнделігім my edits: Өңдемелерім my traces: Бағдарларым - my notes: Естеліктерім + my notes: Ескертпелерім + my messages: Хаттарым + my profile: Бейінім my settings: Баптауларым my_preferences: Қалауларым + send message: Хат жіберу diary: Күнделік traces: Бағдарлары remove as friend: Достардан жою @@ -1069,19 +1242,19 @@ kk-cyrl: helper: block_duration: hours: - one: 1 сағ. + one: '%{count} сағ.' other: '%{count} сағ.' days: - one: 1 күн + one: '%{count} күн' other: '%{count} күн' weeks: - one: 1 апта + one: '%{count} апта' other: '%{count} апта' months: - one: 1 ай + one: '%{count} ай' other: '%{count} ай' years: - one: 1 жыл + one: '%{count} жыл' other: '%{count} жыл' show: edit: Өңдеу @@ -1091,18 +1264,16 @@ kk-cyrl: edit: Өңдеу blocks: reason: 'Бұғаттау себебі:' - next: Келесі » - previous: « Алдыңғы notes: index: description: Сипаттама show: - title: 'Естелік: %{id}' + title: 'Ескертпе: %{id}' description: Сипаттама hide: Жасыру new: - title: Жаңа естелік - add: Естелік қосу + title: Жаңа ескертпе + add: Ескертпе қосу javascripts: close: Жабу share: @@ -1116,19 +1287,31 @@ kk-cyrl: embed: HTML format: 'Форматы:' scale: 'Масштабы:' - image_dimensions: Өлшемі %{width} x %{height} суретте стандартты қабат көрсетіледі + image_dimensions: Өлшемі %{width} x %{height} болатын суретте стандартты қабат + көрсетіледі download: Жүктеп алу short_url: Қысқа URL + key: + title: Шартты белгілер + tooltip: Шартты белгілер + tooltip_disabled: Бұл қабаттың шартты белгілері қолжетімсіз map: zoom: in: Үлкейту out: Кішірейту + locate: + title: Орналасқан жерімді көрсету base: standard: Cтандартты transport_map: Көлік картасы layers: header: Карта қабаттары title: Қабаттар + site: + edit_disabled_tooltip: Картаны өңдеу үшін оны үлкейтіп жіберіңіз + queryfeature_tooltip: Маңайдағы нысандар + queryfeature_disabled_tooltip: Маңайдағы нысандарды көру үшін картаны үлкейтіп + жіберіңіз changesets: show: subscribe: Жазылу @@ -1153,10 +1336,18 @@ kk-cyrl: eighth: 8-ші ninth: 9-шы tenth: 10-шы + time: Ұзақтығы query: node: Нүкте + way: Сызық + relation: Қатынас context: + directions_from: Осы жерден маршрут құру + directions_to: Осы жерге маршрут құру + add_note: Мұнда ескертпе қосу show_address: Мекенжайды көрсету + query_features: Маңайдағы нысандар + centre_map: Карта ортасын мұнда жылжыту redactions: edit: heading: Түзетуді өңдеу @@ -1170,4 +1361,6 @@ kk-cyrl: flash: Түзету жасалды. update: flash: Өзгерістер сақталды. + validations: + invalid_characters: ішінде жарамсыз таңбалар бар ... diff --git a/config/locales/km.yml b/config/locales/km.yml index 0fcf1a91a..77e530ce1 100644 --- a/config/locales/km.yml +++ b/config/locales/km.yml @@ -744,8 +744,6 @@ km: edit_map: កែប្រែផែនទី​ public: សាធារណៈ​ private: ឯកជន​ - by: ដោយ​ - in: ក្នុង​ index: tagged_with: ' បានដាកស្លាកជា %{tags}' oauth_clients: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 746c0f5d8..b6cd13f24 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1769,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로 로그인 @@ -1940,6 +1940,7 @@ ko: %{france}: 프랑스 국세청 (Direction Générale des Impôts)이 제공한 데이터를 포함합니다. contributors_fr_france: 프랑스 + contributors_hr_croatia: 크로아티아 contributors_nl_credit_html: '%{netherlands}: 2007년 © AND 데이터 (%{and_link})를 포함합니다.' contributors_nl_netherlands: 네덜란드 @@ -2295,8 +2296,6 @@ ko: identifiable: 식별 가능 private: 비공개 trackable: 추적 가능 - by: 사용자 - in: 위치 index: public_traces: 공개 GPS 궤적 my_gps_traces: 내 GPS 궤적 @@ -2584,9 +2583,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: 선택한 사용자 확인 @@ -2701,7 +2697,6 @@ ko: revoke: 해제! confirm: 확실합니까? reason: '차단 이유:' - back: 모든 차단 보기 revoker: '해제:' needs_view: 차단 해제하기 전에 다시 로그인해야합니다. block: @@ -2715,9 +2710,9 @@ ko: reason: 차단 이유 status: 상태 revoker_name: 해제자 - showing_page: '%{page}쪽' - next: 다음 » - previous: « 이전 + navigation: + all_blocks: 모든 차단 + block: '#%{id} 차단' notes: index: title: '%{user} 님이 제출했거나 덧글을 남긴 참고' diff --git a/config/locales/ksh.yml b/config/locales/ksh.yml index 0cbe9713c..6a4251096 100644 --- a/config/locales/ksh.yml +++ b/config/locales/ksh.yml @@ -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} diff --git a/config/locales/ku-Latn.yml b/config/locales/ku-Latn.yml index 4be48b612..f32e21b0c 100644 --- a/config/locales/ku-Latn.yml +++ b/config/locales/ku-Latn.yml @@ -2234,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ê @@ -2527,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 @@ -2663,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: @@ -2677,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 diff --git a/config/locales/lb.yml b/config/locales/lb.yml index a6eb4ab13..2d0f3ecc4 100644 --- a/config/locales/lb.yml +++ b/config/locales/lb.yml @@ -248,7 +248,7 @@ lb: account: deletions: show: - title: Mäi Benotzerkont läschen + title: Mäi Kont läschen warning: Opgepasst! De Läschprozess vum Benotzerkont ass definitiv a kann net réckgängeg gemaach ginn. delete_account: Benotzerkont läschen @@ -1730,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 @@ -1812,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? @@ -1826,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 @@ -1919,6 +1919,7 @@ lb: contributors_cz_czechia: Tschechien contributors_fi_finland: Finnland contributors_fr_france: Frankräich + contributors_hr_croatia: Kroatien contributors_nl_netherlands: Holland contributors_nz_new_zealand: Neiséiland contributors_rs_serbia: Serbien @@ -2125,8 +2126,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} @@ -2288,6 +2287,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 @@ -2370,7 +2374,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 @@ -2381,9 +2384,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: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 941e568f4..8cf035c06 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -2416,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 @@ -2701,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 @@ -2847,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: @@ -2861,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} diff --git a/config/locales/lv.yml b/config/locales/lv.yml index ee0598c7d..43a84bbad 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1828,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} @@ -2022,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 @@ -2131,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: @@ -2145,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} diff --git a/config/locales/mk.yml b/config/locales/mk.yml index 3d322885e..466886758 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -2140,6 +2140,12 @@ mk: %{france}: Содржи податоци преземени од Главната даночна управа. contributors_fr_france: Франција + contributors_hr_credit_html: |- + %{croatia}: Содржи податоци од %{dgu_link} и %{open_data_portal} + (информации од јавен карактер на Хрватска). + contributors_hr_croatia: Хрватска + contributors_hr_dgu: Државна геодетска управа на Хрватска + contributors_hr_open_data_portal: Портал за отворени податоци contributors_nl_credit_html: '%{netherlands}: Содржи © и податоци, 2007 (%{and_link})' contributors_nl_netherlands: Холандија @@ -2566,8 +2572,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: Мои ГПС-траги @@ -2882,9 +2888,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: Потврди ги одбраните корисници @@ -3026,7 +3034,6 @@ mk: revoke: Поништи! confirm: Дали сте сигурни? reason: 'Причина за блокирање:' - back: Преглед на сите блокови revoker: 'Поништувач:' needs_view: Овој корисник мора да се најави пред да се исчисти блокот. block: @@ -3040,9 +3047,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: Замолкнати корисници diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 4b94e9068..c5f915a8f 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -1263,8 +1263,6 @@ mr: identifiable: ओळखण्याजोगी private: खाजगी trackable: मागोव्याजोगा - by: तर्फे - in: आत index: public_traces: सार्वजनिक GPS अनुरेख my_gps_traces: माझ्या GPS अनुरेखा @@ -1353,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: @@ -1371,10 +1366,6 @@ mr: years: one: '%{count} वर्ष' other: '%{count} वर्षे' - blocks: - showing_page: पान %{page} - next: पुढील » - previous: « मागील notes: show: title: 'टीप: %{id}' diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 4c5a8b207..5737994fc 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1825,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 @@ -1865,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 @@ -2048,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 @@ -2149,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: @@ -2163,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} diff --git a/config/locales/my.yml b/config/locales/my.yml index 1af177af9..8501a5764 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -776,9 +776,6 @@ my: blocks: creator_name: ဖန်တီးသူ status: အခြေအနေ - showing_page: စာမျက်နှာ %{page} - next: ရှေ့ » - previous: « ယခင်က notes: index: creator: ဖန်တီးသူ diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 29aa8b6c7..6c95a901a 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -29,6 +29,7 @@ # Author: Oyvind # Author: SuperPotato # Author: The real emj +# Author: Yupik # Author: 6400 --- nb: @@ -1744,6 +1745,7 @@ nb: contributors_cz_czechia: Tsjekkia contributors_fi_finland: Finland contributors_fr_france: Frankrike + contributors_hr_croatia: Kroatia contributors_nl_netherlands: Nederland contributors_nz_new_zealand: New Zealand contributors_rs_serbia: Serbia @@ -2020,8 +2022,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} @@ -2247,9 +2247,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 @@ -2372,7 +2371,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: @@ -2386,9 +2384,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} diff --git a/config/locales/nds.yml b/config/locales/nds.yml index 3ed6f3624..acaed1b3c 100644 --- a/config/locales/nds.yml +++ b/config/locales/nds.yml @@ -566,8 +566,6 @@ nds: edit_map: Koort ännern public: APEN private: PRIVAAT - by: von - in: in oauth_clients: show: edit: Details ännern diff --git a/config/locales/ne.yml b/config/locales/ne.yml index 5f7004ab2..b5d6cdb3c 100644 --- a/config/locales/ne.yml +++ b/config/locales/ne.yml @@ -1037,8 +1037,6 @@ ne: edit_map: नक्सा सम्पादन गर्ने public: सार्वजनिक private: निजी - by: द्वारा - in: मा index: public_traces: सारवजनिक GPS ट्रेसहरु public_traces_from: '%{user}बाट सार्वकनिक GPS ट्रेसहरु' @@ -1124,9 +1122,6 @@ ne: blocks: creator_name: सर्जक status: वस्तुस्थिति - showing_page: पृष्ठ %{page} - next: अर्को » - previous: « अघिल्लो notes: index: id: आईडी diff --git a/config/locales/nl.yml b/config/locales/nl.yml index f9fe304bb..6563edcae 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -103,6 +103,10 @@ nl: messages: invalid_email_address: lijkt geen geldig e-mailadres te zijn email_address_not_routable: is niet routeerbaar + display_name_is_user_n: kan niet user_n zijn, tenzij n uw gebruikers-ID is + models: + user_mute: + is_already_muted: is al gedempt models: acl: Toegangscontrolelijst changeset: Wijzigingenset @@ -382,6 +386,7 @@ nl: 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) @@ -394,7 +399,10 @@ 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:' node: title_html: 'Knooppunt: %{name}' @@ -518,8 +526,24 @@ nl: 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}' @@ -602,6 +626,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 @@ -655,6 +680,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: @@ -1629,7 +1660,10 @@ 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_2024_html: Hosting wordt ondersteund door %{fastly}, %{corpmembers} + en andere %{partners}. partners_fastly: Fastly + partners_corpmembers: OSMF-bedrijfsleden partners_partners: partners tou: Gebruiksvoorwaarden osm_offline: De OpenStreetMap-database is momenteel niet beschikbaar wegens het @@ -1651,6 +1685,7 @@ nl: more: Meer user_mailer: diary_comment_notification: + description: 'OpenStreetMap-dagboekbericht #%{id}' subject: '[OpenStreetMap] %{user} heeft een reactie bij uw dagboek geplaatst' hi: Hallo %{to_user}, header: '%{from_user} heeft gereageerd op het OpenStreetMap-dagboekbericht met @@ -1661,6 +1696,8 @@ nl: op %{commenturl} of een bericht sturen naar de auteur via %{replyurl} footer_html: U kunt de reactie ook lezen op %{readurl} en u kunt zelf ook reageren op %{commenturl} of een bericht sturen naar de auteur via %{replyurl} + footer_unsubscribe: U kunt zich afmelden voor de discussie op %{unsubscribeurl} + footer_unsubscribe_html: U kunt zich afmelden van de discussie op %{unsubscribeurl} message_notification: subject: '[OpenStreetMap] %{message_title}' hi: Hallo %{to_user}, @@ -1696,6 +1733,8 @@ nl: loaded: one: goed ontvangen, met %{trace_points} van %{count} mogelijk punt. other: goed ontvangen; met %{trace_points} van %{count} mogelijke punten. + all_your_traces_html: Alle succesvol geüploade GPX-traces zijn te vinden op + %{url}. subject: '[OpenStreetMap] GPX-import afgerond' signup_confirm: subject: '[OpenStreetMap] Welkom bij OpenStreetMap' @@ -1721,6 +1760,7 @@ nl: click_the_link: Als u dit bent, klik dan op de onderstaande koppeling om uw wachtwoord opnieuw in te stellen. note_comment_notification: + description: 'OpenStreetMap-notitie #%{id}' anonymous: Een anonieme gebruiker greeting: Hallo, commented: @@ -1765,6 +1805,7 @@ nl: details: Meer details over de opmerking zijn te vinden op %{url}. details_html: Meer details over de opmerking zijn te vinden op %{url}. changeset_comment_notification: + description: 'OpenStreetMap-wijzigingenreeks #%{id}' hi: Hoi %{to_user}, greeting: Hallo, commented: @@ -1785,10 +1826,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 @@ -1837,11 +1877,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 @@ -1856,12 +1898,18 @@ 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 + messages: + one: '%{count} verborgen bericht' + other: U hebt %{count} genegeerde 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 @@ -1898,6 +1946,9 @@ 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: + send_paranoid_instructions: Als uw e-mailadres in onze database bestaat, ontvangt + u binnen enkele minuten een wachtwoordherstellink op uw e-mailadres. edit: title: Wachtwoord opnieuw instellen heading: Wachtwoord voor %{user} opnieuw instellen @@ -2175,6 +2226,11 @@ nl: %{france}: Bevat gegevens van de Direction Générale des Impôts. contributors_fr_france: Frankrijk + contributors_hr_credit_html: '%{croatia}: bevat gegevens uit de %{dgu_link} + en %{open_data_portal} (openbare informatie van Kroatië).' + contributors_hr_croatia: Kroatië + contributors_hr_dgu: Staatsgeodesisch bestuur van Kroatië + contributors_hr_open_data_portal: Nationaal Open Data Portaal contributors_nl_credit_html: '%{netherlands}: Bevat gegevens © AND, 2007 (%{and_link})' contributors_nl_netherlands: Nederland @@ -2390,6 +2446,7 @@ nl: cycleway_national: Nationale fietsroute cycleway_regional: Regionale fietsroute cycleway_local: Lokale fietsroute + cycleway_mtb: Mountainbikeroute footway: Voetpad rail: Spoorweg train: Trein @@ -2405,6 +2462,8 @@ nl: taxiway: Taxibaan apron: Luchthavenplatform admin: Bestuurlijke grens + capital: Hoofdstad + city: Stad orchard: Boomgaard vineyard: Wijngaard forest: Bos @@ -2426,7 +2485,9 @@ nl: scrubland: Struikgewas lake: Meer reservoir: Reservoir + intermittent_water: Onderbroken waterlichaam glacier: Gletsjer + reef: Rif wetland: Moeras farm: Boerderij brownfield: Braakliggend terrein @@ -2602,8 +2663,8 @@ nl: identifiable: IDENTIFICEERBAAR private: PERSOONLIJK trackable: TRACEERBAAR - by: door - in: in + details_with_tags_html: '%{time_ago} door %{user} in %{tags}' + details_without_tags_html: '%{time_ago} door %{user}' index: public_traces: Openbare gps-trajecten my_gps_traces: Mijn GPS-traces @@ -2693,6 +2754,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: @@ -2900,6 +2962,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 @@ -2916,9 +2979,11 @@ 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 + found_users: + one: '%{count} gebruiker gevonden' + other: '%{count} gebruikers gevonden' summary_html: '%{name} aangemaakt vanaf %{ip_address} op %{date}' summary_no_ip_html: '%{name} aangemaakt op %{date}' confirm: Geselecteerde gebruikers bevestigen @@ -3011,6 +3076,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. @@ -3052,7 +3127,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: @@ -3066,9 +3140,15 @@ nl: reason: Reden voor blokkade status: Status revoker_name: Ingetrokken door - showing_page: Pagina %{page} - next: Volgende » - previous: « Vorige + older: Oudere blokkades + newer: Nieuwere blokkades + navigation: + all_blocks: Alle blokkades + blocks_on_me: Blokkades voor u + blocks_on_user: Blokkades voor %{user} + blocks_by_me: Blokkades door u + blocks_by_user: Blokkades door %{user} + block: 'Blokkade #%{id}' user_mutes: index: title: Gedempte gebruikers @@ -3083,8 +3163,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}.' diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 2eb003980..58e2e5302 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -2259,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} @@ -2443,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 @@ -2545,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: @@ -2559,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' diff --git a/config/locales/nqo.yml b/config/locales/nqo.yml index 395cbcf0b..3422dd68e 100644 --- a/config/locales/nqo.yml +++ b/config/locales/nqo.yml @@ -1581,8 +1581,6 @@ nqo: identifiable: ߡߊ߬ߟߐ߲߬ߕߊ private: ߘߎ߲߬ߘߎ߬ߡߊ trackable: ߜߙߋ߬ߓߐ߬ߕߊ - by: ߞߊ߬ ߝߘߊ߫ - in: ߘߐ߫ index: public_traces: ߜߍߘߐ߫ GPS ߜߋ߬ߙߋ ߟߎ߬ public_traces_from: ߜߍߘߐ߫ ߜߙߋ ߟߎ߬ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫ @@ -1824,9 +1822,6 @@ nqo: blocks: creator_name: ߛߌ߲ߘߌߟߊ߲ reason: ߓߊ߬ߟߊ߲߬ߠߌ߲ ߞߎ߲߭ - showing_page: ߞߐߜߍ %{page} - next: ߟߊ߬ߕߎ߲߰ߠߊ » - previous: ߕߊ߬ߡߌ߲߬ߣߍ߲ notes: index: no_notes: ߦߟߌߣߐ߫ ߛߌ߫ ߕߴߦߋ߲߬ diff --git a/config/locales/oc.yml b/config/locales/oc.yml index c307080a1..0b4282652 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -2124,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 @@ -2307,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 @@ -2420,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: @@ -2434,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} diff --git a/config/locales/pa.yml b/config/locales/pa.yml index c79fe92ce..28b7c1d8d 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -5,6 +5,7 @@ # Author: Babanwalia # Author: Bgo eiu # Author: Jimidar +# Author: Kuldeepburjbhalaike # Author: Satnam S Virdi # Author: Tow --- @@ -244,7 +245,7 @@ pa: show: leave_a_comment: ਕੋਈ ਟਿੱਪਣੀ ਛੱਡੋ login_to_leave_a_comment_html: ਟਿੱਪਣੀ ਛੱਡਣ ਵਾਸਤੇ %{login_link} - login: ਲੌਗਇਨ + login: ਦਾਖ਼ਲ ਹੋਵੋ no_such_entry: title: ਅਜਿਹਾ ਕੋਈ ਡਾਇਰੀ ਇੰਦਰਾਜ ਨਹੀਂ diary_entry: @@ -827,13 +828,13 @@ pa: no home location: ਤੁਸੀਂ ਆਪਣੇ ਘਰ ਦੀ ਸਥਿਤੀ ਨਹੀਂ ਦੱਸੀ ਹੈ। sessions: new: - title: ਲੌਗਇਨ - heading: ਲੌਗਇਨ + title: ਦਾਖ਼ਲ ਹੋਵੋ + heading: ਦਾਖ਼ਲ ਹੋਵੋ email or username: 'ਈਮੇਲ ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰ-ਨਾਂ:' password: 'ਪਛਾਣ-ਸ਼ਬਦ:' remember: ਮੈਨੂੰ ਯਾਦ ਰੱਖੋ lost password link: ਆਪਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਗੁਆ ਦਿੱਤਾ? - login_button: ਲੌਗਇਨ + login_button: ਦਾਖ਼ਲ ਹੋਵੋ register now: ਹੁਣੇ ਰਜਿਸਟਰ ਕਰੋ no account: ਖਾਤਾ ਨਹੀਂ ਹੈ? destroy: @@ -998,8 +999,6 @@ pa: identifiable: ਪਛਾਣਯੋਗ private: ਨਿੱਜੀ trackable: ਪੈੜ ਕੱਢਣਯੋਗ - by: ਵੱਲੋਂ - in: ਵਿੱਚ index: tagged_with: '%{tags} ਨਾਲ਼ ਨਿਸ਼ਾਨਦੇਹ' upload_trace: ਕੋਈ ਖੁਰਾ-ਖੋਜ ਚੜ੍ਹਾਉ @@ -1112,7 +1111,6 @@ pa: edit: ਸੋਧੋ confirm: ਕੀ ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ? reason: 'ਰੋਕ ਦਾ ਕਾਰਨ:' - back: ਸਾਰੀਆਂ ਰੋਕਾਂ ਵੇਖੋ revoker: 'ਪਰਤਾਉਣ ਵਾਲ਼ਾ:' block: show: ਵਿਖਾਉ @@ -1123,8 +1121,6 @@ pa: creator_name: ਸਿਰਜਣਹਾਰ reason: ਰੋਕ ਦਾ ਕਾਰਨ status: ਦਰਜਾ - next: ਅਗਲਾ » - previous: « ਪਿਛਲਾ notes: index: creator: ਸਿਰਜਣਹਾਰ diff --git a/config/locales/pl.yml b/config/locales/pl.yml index a12ab3f81..0995fe264 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -2521,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 @@ -2833,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 @@ -2975,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: @@ -2989,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: diff --git a/config/locales/pnb.yml b/config/locales/pnb.yml index 6ae119469..a8acc3691 100644 --- a/config/locales/pnb.yml +++ b/config/locales/pnb.yml @@ -1741,8 +1741,6 @@ pnb: identifiable: پچھاݨیوگ private: نجی trackable: پیڑ کڈھݨیوگ - by: لیکھک - in: اے۔ ایہہ ٹیگ index: public_traces: عام کھرے کھوجاں my_gps_traces: میرے کھرے @@ -1922,9 +1920,6 @@ pnb: index: title: ورتنوالے heading: ورتنوالے - showing: - one: صفحہ %{page} (%{items} وچ %{first_item}) - other: صفحہ %{page} (%{items} وچ%{first_item}} توں %{last_item} نوں) confirm: چݨے ہوۓ ورتنوالیاں دی تصدیق کرو hide: چݨے ہوۓ ورتنوالے لُکاؤ empty: کوئی میل کھاندے ورتنوالے نہیں لبھے @@ -1988,7 +1983,6 @@ pnb: edit: سودھو revoke: پرتاؤ! confirm: پکے؟ - back: ساریاں روکاں ویکھو revoker: 'پرتاؤݨ والا:' block: not_revoked: (نہیں پرتائی دتی گئی) @@ -2000,9 +1994,6 @@ pnb: creator_name: لیکھک reason: روک دا کارن status: درجہ - showing_page: صفحہ نمبر %{page} - next: اگلا » - previous: « پچھلا notes: index: heading: '%{user} دے نوٹ' diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index ebf068735..e5dd51820 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -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 @@ -364,6 +365,7 @@ pt-PT: 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) @@ -376,7 +378,10 @@ 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:' node: title_html: 'Nó: %{name}' @@ -457,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} @@ -491,8 +505,24 @@ pt-PT: 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} @@ -578,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 @@ -632,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: @@ -1605,7 +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_2024_html: O alojamento é suportado por %{fastly}, %{corpmembers} + e outros %{partners}. partners_fastly: Fastly + 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 @@ -1627,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 @@ -1637,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}. @@ -1699,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: @@ -1737,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: @@ -1759,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! @@ -1875,10 +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: + 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} @@ -1930,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 @@ -1949,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 o 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 @@ -1958,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 @@ -2277,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 @@ -2560,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 @@ -2658,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: @@ -2741,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 @@ -2763,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. @@ -2882,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 @@ -2909,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. @@ -3027,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: @@ -3041,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 diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 2d02a871c..8d7789cd0 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -31,6 +31,7 @@ # Author: JasonZe # Author: Jgpacker # Author: Jgrocha +# Author: Lc97 # Author: Leosls # Author: Luckas # Author: Luckas Blade @@ -2586,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 @@ -2902,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 @@ -3042,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: @@ -3056,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 diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 690d6f538..21aad7862 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -6,6 +6,7 @@ # Author: Buraddo # Author: C1pr1an # Author: Cevamihnea +# Author: Cristina S # Author: EddyPetrisor # Author: GabiBil # Author: Gravitystorm @@ -1912,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 @@ -1923,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 @@ -1933,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 @@ -2547,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 @@ -2863,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 @@ -2894,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. @@ -3005,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ă @@ -3020,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: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 0840309c7..c0f5c12bf 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -25,6 +25,7 @@ # Author: DDPAT # Author: Danieldegroot2 # Author: Diralik +# Author: Dirruw'o # Author: Dmitry-s93 # Author: Dr&mx # Author: Edible Melon @@ -149,6 +150,11 @@ ru: messages: invalid_email_address: не похоже на действительный адрес электронной почты email_address_not_routable: не маршрутизирован + display_name_is_user_n: не может быть user_n, если n не является вашим идентификатором + пользователя + models: + user_mute: + is_already_muted: уже отключен звук models: acl: Список контроля доступа changeset: Пакет правок @@ -642,7 +648,7 @@ ru: user_title: Дневник пользователя %{user} leave_a_comment: Оставить комментарий login_to_leave_a_comment_html: '%{login_link}, чтобы оставить комментарий' - login: Представьтесь + login: Войти no_such_entry: title: Нет такой записи в дневнике heading: Нет записи с номером %{id} @@ -1622,6 +1628,8 @@ ru: intro_text: OpenStreetMap является картой мира, созданной такими же людьми, как и вы, и может свободно использоваться под открытой лицензией. intro_2_create_account: Создайте учётную запись + hosting_partners_2024_html: Хостинг поддерживается %{fastly}, %{corpmembers} и + другими %{partners}. partners_fastly: Fastly partners_partners: партнёрами tou: Условия использования @@ -1975,7 +1983,7 @@ ru: alt: Вход с использованием учётной записи в Википедии wordpress: title: Войти с помощью Wordpress - alt: Войти с помощью Wordpress OpenID + alt: Войти с помощью Wordpress OpenI aol: title: Войти с помощью AOL alt: Войти с помощью AOL OpenID @@ -2108,6 +2116,7 @@ ru: contributors_cz_czechia: Чехия contributors_fi_finland: Финляндия contributors_fr_france: Франция + contributors_hr_croatia: Хорватия contributors_nl_netherlands: Нидерланды contributors_nz_new_zealand: Новая Зеландия contributors_nz_cc_by: CC BY 4.0 @@ -2491,8 +2500,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-треки @@ -2689,7 +2698,7 @@ ru: display name description: Ваше имя, как оно будет видно другим пользователям. Вы сможете изменить его позже в настройках. external auth: 'Внешний сайт с учётной записью:' - use external auth: Либо воспользуйтесь аккаунтом с другого сайта + use external auth: Альтернативно, используйте третье лицо для входа в систему. auth no password: С внешним логином пароль не обязателен, но в некоторых случаях он необходим continue: Зарегистрироваться @@ -2796,9 +2805,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: Подтвердить выделенных пользователей @@ -2937,7 +2945,6 @@ ru: revoke: Разблокировать! confirm: Вы уверены? reason: 'Причина блокировки:' - back: Показать все блокировки revoker: 'Разблокировавший:' needs_view: Пользователь должен зарегистрироваться, прежде чем это блокирование будет снято. @@ -2952,9 +2959,6 @@ ru: reason: Причина блокировки status: Состояние revoker_name: Разблокировал - showing_page: Страница %{page} - next: Следующая → - previous: ← Предыдущая user_mutes: index: table: diff --git a/config/locales/sat.yml b/config/locales/sat.yml index 52697ac88..31cd0a1c5 100644 --- a/config/locales/sat.yml +++ b/config/locales/sat.yml @@ -670,9 +670,6 @@ sat: edit: ᱥᱟᱯᱲᱟᱣ blocks: status: ᱫᱚᱥᱟ - showing_page: ᱥᱟᱦᱴᱟ %{page} - next: ᱤᱱᱟ ᱛᱟᱭᱚᱢ >> - previous: « ᱛᱟᱭᱚᱢ notes: show: title: '%{id} :ᱠᱷᱟᱴᱟᱹ ᱚᱞ' diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 2adb201fc..541977c72 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -2522,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 @@ -2841,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 @@ -2977,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. @@ -2992,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} diff --git a/config/locales/scn.yml b/config/locales/scn.yml index 1672f906e..e4983f4f4 100644 --- a/config/locales/scn.yml +++ b/config/locales/scn.yml @@ -327,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) @@ -1621,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} @@ -1831,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 @@ -1945,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: @@ -1959,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} diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 6dd3afed7..0ac667e3f 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -2307,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} @@ -2547,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 @@ -2671,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: @@ -2685,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} diff --git a/config/locales/sl.yml b/config/locales/sl.yml index b76921956..da660c4f6 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -2625,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 @@ -2943,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 @@ -3092,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: @@ -3106,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 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index bb3a57ab6..ae9a032fe 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1234,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} @@ -1335,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 diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index c9cc48111..6468174b1 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1104,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} @@ -1258,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 @@ -1353,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: @@ -1367,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: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 0a9d08886..6c7d1dd06 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -73,9 +73,9 @@ sr: issue: Проблем language: Језик message: Порука - node: Тачка + node: Чвор node_tag: Ознака тачке - old_node: Стара тачка + old_node: Стари чвор old_node_tag: Ознака старе тачке old_relation: Стари однос old_relation_member: Стари члан односа @@ -89,7 +89,7 @@ sr: report: Пријави session: Сесија trace: Рута - tracepoint: Тачка руте + tracepoint: Чвор путање tracetag: Ознака руте user: Корисник user_preference: Подешавања корисника @@ -312,6 +312,7 @@ sr: browse: edited_ago_by_html: Уређено %{time_ago} од %{user} version: Верзија + redacted_version: Рецензирана верзија in_changeset: Скуп промена anonymous: анониман no_comment: (нема коментара) @@ -321,12 +322,12 @@ sr: view_details: Детаљније location: 'Локација:' node: - title_html: 'Тачка: %{name}' + title_html: 'Чвор: %{name}' history_title_html: 'Историја тачака: %{name}' way: title_html: 'Линија: %{name}' history_title_html: 'Историја линија: %{name}' - nodes: Тачке + nodes: Чворови also_part_of_html: one: део линије %{related_ways} other: део линија %{related_ways} @@ -337,7 +338,7 @@ sr: relation_member: entry_role_html: '%{type} %{name} као %{role}' type: - node: Тачка + node: Чвор way: Линија relation: Однос containing_relation: @@ -347,15 +348,16 @@ sr: title: Није нађено sorry: 'Нажалост, %{type} #%{id} није пронађен.' type: - node: тачка + node: чвор way: линија relation: однос changeset: скуп промена note: белешка timeout: + title: Истекло време sorry: Преузимање података за %{type} са ID-јем %{id} предуго траје. type: - node: тачка + node: чвор way: линија relation: однос changeset: скуп промена @@ -365,7 +367,7 @@ sr: message_html: Верзија %{version} %{type} је редигована и не може бити приказана. Детаљније на %{redaction_link}. type: - node: тачка + node: чвор way: линија relation: однос start_rjs: @@ -405,6 +407,7 @@ sr: index: title: Скупови промена title_user: Скупови промена корисника %{user} + title_user_link_html: Сетови промена за %{user_link} title_friend: Скупови промена мојих пријатеља title_nearby: Скупови промена корисника у близини empty: Скупови промена нису пронађени. @@ -423,9 +426,11 @@ sr: 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}' @@ -554,6 +559,7 @@ sr: scopes: address: Види своју физичку адресу email: Види своју имејл адресу + openid: Потврдите ваш налог phone: Види своју број телефона errors: contact: @@ -590,6 +596,7 @@ sr: aeroway: aerodrome: Аеродром airstrip: Писта + gate: Аеродромска капија hangar: Хангар helipad: Хелиодром parking_position: Место за паркинг @@ -693,10 +700,12 @@ sr: waste_disposal: Контејнер waste_dump_site: Депонија weighbridge: Теретна вага + "yes": Погодност boundary: administrative: Административна граница census: Пописна граница national_park: Национални парк + political: Изборна граница protected_area: Заштићено подручје "yes": Граница bridge: @@ -714,6 +723,7 @@ sr: cabin: Кабина chapel: Капела church: Црква + civic: Јавна зграда college: Факултетска зграда commercial: Пословна зграда construction: Зграда у изградњи @@ -760,11 +770,13 @@ sr: blacksmith: Ковач brewery: Пивара carpenter: Столар + caterer: Угоститељ confectionery: Кондитор dressmaker: Кројач electrician: Електричар electronics_repair: Поправка електронике gardener: Баштован + glaziery: Стаклар painter: Молер photographer: Фотограф plumber: Водоинсталатер @@ -783,6 +795,7 @@ sr: fire_extinguisher: ПП апарат landing_site: Место за хитно слетање phone: Телефон за хитне случајеве + siren: Сирена за узбуну highway: abandoned: Напуштени ауто-пут bridleway: Коњички пут @@ -897,6 +910,7 @@ sr: bird_hide: Осматрачница за птице bowling_alley: Куглана common: Општинско земљиште + dance: Плесна сала dog_park: Парк за псе firepit: Камин fishing: Место за риболов @@ -909,7 +923,9 @@ sr: marina: Марина miniature_golf: Мини-голф nature_reserve: Резерват природе + outdoor_seating: Одмориште park: Парк + picnic_table: Сто за ужину pitch: Спортски терен playground: Игралиште recreation_ground: Рекреативна зона @@ -923,23 +939,29 @@ sr: water_park: Аквапарк "yes": Разонода man_made: + adit: Проход advertising: Реклама antenna: Антена + avalanche_protection: Заштита од лавина beacon: Светионик beehive: Кошница са пчелама bridge: Мост bunker_silo: Бункер + cairn: Каир chimney: Димњак + clearcut: Целовита сеча communications_tower: Репетитор crane: Кран cross: Крст + dolphin: Битва dyke: Насип embankment: Насип flagpole: Јарбол за заставу gasometer: Гасометар - groyne: Брана + groyne: Таласобран kiln: Печењара lighthouse: Светионик + manhole: Шахт mast: Јарбол mine: Рудник mineshaft: Рударско окно @@ -950,7 +972,7 @@ sr: pumping_station: Црпна станица silo: Силос street_cabinet: Улични орман - surveillance: Присмотра + surveillance: Надзор telescope: Телескоп tower: Кула utility_pole: Бандера @@ -1004,15 +1026,19 @@ sr: sand: Пешчара scree: Осулина scrub: Густиш + shingle: Черепица spring: Извор stone: Камен strait: Мореуз tree: Дрво + tree_row: Дрворед + tundra: Тундра valley: Долина volcano: Вулкан water: Вода wetland: Мочварно подручје wood: Шума + "yes": Природно обележје office: accountant: Рачуновођа administrative: Администрација @@ -1031,6 +1057,7 @@ sr: ngo: Невладина организација notary: Нотар research: Истраживачка канцеларија + tax_advisor: Порески саветник telecommunication: Телекомуникациона компанија travel_agent: Туристичка агенција "yes": Канцеларија @@ -1051,6 +1078,7 @@ sr: locality: Локалитет municipality: Општина neighbourhood: Кварт + plot: Парцела postcode: Поштански број quarter: Четврт region: Регион @@ -1093,6 +1121,7 @@ sr: antiques: Антикварница appliance: Продавница уређаја art: Продавница опреме за уметнике + baby_goods: Беби опрема bag: Продавница кеса bakery: Пекара beauty: Козметички салон @@ -1110,15 +1139,15 @@ sr: cheese: Продавница сира chemist: Продавница кућне хемије chocolate: Чоколада - clothes: Продавница одеће + clothes: Бутик coffee: Кафић computer: Продавница рачунара confectionery: Посластичарница - convenience: Продавница мешовите робе + convenience: Мини-маркет copyshop: Фотокопирница cosmetics: Козметичка радња curtain: Продавница драперија - dairy: Продавница млечних производа + dairy: Млекара deli: Сендвичара department_store: Робна кућа discount: Дисконт @@ -1145,11 +1174,13 @@ sr: hairdresser: Фризерски салон hardware: Продавница алата health_food: Продавница здраве хране + herbalist: Травар hifi: Продавница аудио-опреме ice_cream: Сладоледџиница interior_decoration: Декорација ентеријера jewelry: Јувелирница kiosk: Трафика + kitchen: Кухињска опрема laundry: Перионица веша locksmith: Бравар lottery: Лутрија @@ -1164,24 +1195,28 @@ sr: organic: Продавница здраве хране outdoor: Продавница опреме за спортове на отвореном paint: Фарбара + pastry: Посластичарница pawnbroker: Залагаоничар perfumery: Парфимерија pet: Продавница за кућне љубимце photo: Фотографска радња seafood: Морски плодови second_hand: Продавница половне робе + sewing: Шиваоница shoes: Продавница обуће sports: Продавница спортске опреме stationery: Продавница канцеларијског прибора supermarket: Супермаркет tailor: Кројач tattoo: Тетоваже + tea: Чајџиница ticket: Продавница карата tobacco: Продавница цигарета toys: Продавница играчака travel_agency: Туристичка агенција tyres: Продавница гума vacant: Упражњен локал + variety_store: Мешовита роба video: Видеотека video_games: Продавница видео-игара wholesale: Велепродаја @@ -1189,7 +1224,7 @@ sr: "yes": Продавница tourism: alpine_hut: Планинарски дом - apartment: Апартман за одмор + apartment: Викенд-апартман artwork: Уметничко дело attraction: Атракција bed_and_breakfast: Полупансион @@ -1229,7 +1264,7 @@ sr: stream: Поток wadi: Вади waterfall: Водопад - weir: Брана + weir: Преливник "yes": Водоток admin_levels: level2: Државна граница @@ -1372,12 +1407,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] Добро дошли на ОпенСтритМап' @@ -1444,8 +1479,7 @@ sr: partial_changeset_with_comment: са коментаром „%{changeset_comment}” partial_changeset_without_comment: без коментара details: Више информација о чејнџсетовима може да се пронађе на %{url}. - unsubscribe: Да бисте престали пратити апдејте овог чејнџсета, посетите %{url} - и кликните на „Престани пратити”. + unsubscribe: Можете одјавити обавештења овог скупа измена на %{url}. confirmations: confirm: heading: Проверите Ваш имејл! @@ -1619,12 +1653,12 @@ sr: alt: Пријава преко Microsoft налога github: title: Пријава коришћењем GitHub-а - alt: Пријава коришћењем GitHub налога + alt: Пријава преко GitHub налога wikipedia: title: Пријава преко Википедије - alt: Пријава коришћењем Википедија налога + alt: Пријава преко Википедијиног налога wordpress: - title: Пријава коришћењем Wordpress-а + title: Пријава преко Wordpress-а alt: Пријава преко Wordpress OpenID-а aol: title: Пријава преко AOL-а @@ -1637,6 +1671,9 @@ sr: support: подршка shared: markdown_help: + headings: Наслови + heading: Наслов + subheading: Поднаслов first: Прва ставка second: Друга ставка link: Веза @@ -1718,6 +1755,7 @@ sr: BY 4.0) contributors_fi_finland: Финска contributors_fr_france: Француска + contributors_hr_croatia: Хрватска contributors_nl_netherlands: Холандија contributors_nz_new_zealand: Нови Зеланд contributors_rs_serbia: Србија @@ -1860,7 +1898,7 @@ sr: trolleybus: Тролејбус bus: Аутобус cable_car: Жичара - chair_lift: седишница + chair_lift: Жичара са седиштима runway: Аеродромска писта taxiway: Рулна стаза apron: Аеродромски перон @@ -1998,8 +2036,8 @@ sr: trace: pending: НА_ЧЕКАЊУ count_points: - one: 1 тачка - other: '%{count} тачака' + one: '%{count} чвор' + other: '%{count} чвора' more: више trace_details: Погледајте детаље о трагу view_map: Погледај карту @@ -2008,8 +2046,6 @@ sr: identifiable: МОЖЕ СЕ ПРЕПОЗНАТИ private: ПРИВАТНИ trackable: МОЖЕ СЕ ПРАТИТИ - by: од - in: у index: public_traces: Јавни ГПС трагови public_traces_from: Јавни GPS трагови корисника %{user} @@ -2244,9 +2280,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: Потврди изабране кориснике @@ -2343,8 +2376,8 @@ sr: time_past_html: Завршено пре %{time}. block_duration: hours: - one: 1 сат - other: '%{count} сата' + one: '%{count} час' + other: '%{count} часа' blocks_on: title: Блокаде за %{name} heading_html: Листа блокада за %{name} @@ -2364,7 +2397,6 @@ sr: revoke: Опозови confirm: Јесте ли сигурни? reason: 'Разлог за блокирање:' - back: Погледај све блокаде revoker: 'Опозивалац:' needs_view: Корисник мора да се пријави да би блокада била уклоњена. block: @@ -2378,9 +2410,6 @@ sr: reason: Разлози за блокирање status: Стање revoker_name: Опозвао - showing_page: Страница %{page} - next: Следеће » - previous: « Претходно user_mutes: index: title: Пригушени корисници @@ -2393,7 +2422,7 @@ sr: index: title: Белешке послао или коментарисао %{user} heading: Белешке корисника %{user} - subheading_html: Белешке послао или коментарисао %{user} + subheading_html: Белешке %{submitted} или %{commented} %{user} no_notes: Нема белешки id: Id creator: Творац @@ -2547,7 +2576,7 @@ sr: tenth: "10." time: Време query: - node: Тачка + node: Чвор way: Линија relation: Однос nothing_found: Нема објеката у близини diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 336bcc5dd..d723e336d 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -2555,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 @@ -2874,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 @@ -3020,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: @@ -3034,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 diff --git a/config/locales/ta.yml b/config/locales/ta.yml index c9b510dc0..2a8efd873 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -802,8 +802,6 @@ ta: public: பொது identifiable: அடையாளம் காணக்கூடிய private: தனியார் - by: மூலம் - in: உள் index: upload_trace: சுவடை பதிவேற்றவும் application: diff --git a/config/locales/te.yml b/config/locales/te.yml index b0d3fa9fc..325e8ec3e 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -2247,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: ఎంచుకున్న వాడూకరులను ధ్రువీకరించు @@ -2369,7 +2366,6 @@ te: revoke: ఎత్తివేయండి! confirm: నిశ్చయించుకున్నారా? reason: 'నిరోధానికి కారణం:' - back: అన్ని నిరోధాలను చూడండి revoker: 'ఎత్తివేసేవారు:' needs_view: ఈ నిరోధం తొలగిపోవాలంటే ఈ వాడుకరి లాగినవ్వాలి. block: @@ -2383,9 +2379,6 @@ te: reason: నిరోధానికి కారణం status: స్థితి revoker_name: ఎత్తివేసినవారు - showing_page: పేజీ %{page} - next: తదుపరి » - previous: « మునుపటి notes: index: title: గమనికలు సమర్పించినది లేదా వ్యాఖ్యానించినది %{user} diff --git a/config/locales/th.yml b/config/locales/th.yml index d6e8ea59e..042fcccc9 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1736,8 +1736,6 @@ th: identifiable: ระบุได้ private: ส่วนตัว trackable: ติดตามได้ - by: โดย - in: ใน index: public_traces: รอยทาง GPS สาธารณะ public_traces_from: รอยทางจีพีเอสสาธารณะโดยผู้ใช้ %{user} @@ -1910,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: ซ่อนผู้ใช้ที่เลือก @@ -2015,9 +2010,6 @@ th: reason: เหตุผลที่ต้องระงับใช้งาน status: สถานะ revoker_name: ยกเลิกโดย - showing_page: หน้า %{page} - next: ถัดไป » - previous: « ก่อนหน้า notes: index: heading: หมายเหตุของ %{user} diff --git a/config/locales/tl.yml b/config/locales/tl.yml index 62cf31204..e74b8b89d 100644 --- a/config/locales/tl.yml +++ b/config/locales/tl.yml @@ -1779,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} @@ -1997,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 @@ -2112,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. @@ -2127,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} diff --git a/config/locales/tr.yml b/config/locales/tr.yml index b75837e27..c964aa927 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1999,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ş @@ -2201,6 +2201,12 @@ tr: contributors_fr_credit_html: '%{france}: Direction Générale des Impôts''tan alınan verileri içerir.' contributors_fr_france: Fransa + contributors_hr_credit_html: |- + %{croatia}: %{dgu_link} ve %{open_data_portal} verilerini içerir. + (Hırvatistan halka açık bilgiler). + contributors_hr_croatia: Hırvatistan + contributors_hr_dgu: Hırvatistan Devlet Jeodezi Ä°daresi + contributors_hr_open_data_portal: Ulusal Açık Veri Portalı contributors_nl_credit_html: '%{netherlands}: © AND verilerini içerir, 2007 (%{and_link})' contributors_nl_netherlands: Hollanda @@ -2628,8 +2634,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 @@ -2949,9 +2955,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 @@ -3093,7 +3101,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: @@ -3107,9 +3114,15 @@ 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 + navigation: + all_blocks: Tüm Engellemeler + blocks_on_me: Engellendiklerim + blocks_on_user: '%{user} kişisinin engelleri' + blocks_by_me: Engellediklerim + blocks_by_user: '%{user} tarafından engellenenler' + block: 'Engel #%{id}' user_mutes: index: title: Sessize Alınan Kullanıcılar diff --git a/config/locales/tt.yml b/config/locales/tt.yml index 1830a614a..d32e95d5f 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -961,8 +961,6 @@ tt: blocks: creator_name: Төзүче status: Халәт - next: Киләсе » - previous: « Алдагы notes: index: creator: Төзүче diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e13c032bc..599232039 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -612,7 +612,7 @@ uk: щоб бачити маперів поруч.' edit_your_profile: Редагувати свій профіль my friends: Друзі - no friends: Ви не ще додали жодного друга. + no friends: Ви ще не додали жодного друга. nearby users: Інші мапери поруч no nearby users: Поблизу поки немає маперів, які позначили своє розташування. friends_changesets: набори змін друзів @@ -1937,16 +1937,16 @@ uk: many: Ви маєте %{count} стишених повідомлень other: "" 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: @@ -2668,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-треки @@ -2994,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: Підтвердити вибір учасників @@ -3150,7 +3154,6 @@ uk: revoke: Розблокувати! confirm: Ви впевнені? reason: 'Причина блокування:' - back: Показати всі блокування revoker: 'Розблокував:' needs_view: Учаснику потрібно увійти перед тим, як блокування буде знято. block: @@ -3164,9 +3167,8 @@ uk: reason: Причина блокування status: Стан revoker_name: Розблокував - showing_page: Сторінка %{page} - next: Наступна → - previous: ← Попередня + older: Старіші блокування + newer: Новіші блокування user_mutes: index: title: Стишені учасники diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 205ffe5a9..86a894940 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -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Æ° @@ -315,6 +330,7 @@ vi: 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ả) @@ -325,7 +341,10 @@ 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í:' node: title_html: 'Nốt: %{name}' @@ -402,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} @@ -436,8 +464,24 @@ vi: 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} @@ -518,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 @@ -533,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 @@ -568,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}? @@ -1322,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} @@ -1413,7 +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_2024_html: Dịch vụ lÆ°u trữ nhờ sá»± hỗ trợ của %{fastly}, %{corpmembers}, + và %{partners} khác. partners_fastly: Fastly + 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 @@ -1435,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 @@ -1445,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' @@ -1479,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' @@ -1504,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: @@ -1543,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: @@ -1563,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á»­! @@ -1578,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}. @@ -1614,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} @@ -1633,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 @@ -1651,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: @@ -1664,6 +1772,10 @@ vi: new password button: Đặt lại mật khẩu 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: + 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} @@ -1671,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 @@ -1928,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 @@ -2191,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 @@ -2291,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 @@ -2340,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 @@ -2377,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: @@ -2465,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 @@ -2552,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ý @@ -2572,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 @@ -2597,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 @@ -2690,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. @@ -2726,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: @@ -2740,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 diff --git a/config/locales/yi.yml b/config/locales/yi.yml index 7a548b85b..d366c22a3 100644 --- a/config/locales/yi.yml +++ b/config/locales/yi.yml @@ -155,9 +155,6 @@ yi: confirm: באַשטעטיקן revoke: confirm: באַשטעטיקן - user_blocks: - blocks: - showing_page: בלאַט %{page} notes: show: hide: באַהאַלטן diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 516c14511..25a4773a0 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -2416,8 +2416,6 @@ zh-CN: identifiable: 可识别 private: 私有 trackable: 可追踪 - by: 由 - in: 使用 index: public_traces: 公开GPS轨迹 my_gps_traces: 我的 GPS 轨迹 @@ -2700,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: 确认所选用户 @@ -2831,7 +2826,6 @@ zh-CN: revoke: 撤销! confirm: 您确定吗? reason: 封禁的原因: - back: 查看所有封禁 revoker: 撤销者: needs_view: 用户需要在该封禁清除前登录。 block: @@ -2845,9 +2839,6 @@ zh-CN: reason: 封禁的原因 status: 状态 revoker_name: 撤销者 - showing_page: 第 %{page} 页 - next: 下一页 » - previous: « 上一页 user_mutes: index: title: 已忽视用户 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index bb4e9b426..0a77485ef 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1605,7 +1605,7 @@ zh-TW: donate: 以 %{link} 給硬體升級基金來支援 OpenStreetMap。 help: 說明 about: 關於 - copyright: 版權 + copyright: 著作權 communities: 社群 community: 社群 community_blogs: 社群部落格 @@ -1790,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: @@ -1878,7 +1878,7 @@ zh-TW: lost password link: 忘記您的密碼? login_button: 登入 register now: 立即註冊 - with external: 或者使用第三方服務登入 + with external: 或者使用第三方服務登入: no account: 還沒有帳號嗎? auth failure: 很抱歉,無法以這些資料登入。 openid_logo_alt: 使用 OpenID 登入 @@ -1887,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: 使用維基百科登入 + alt: 使用維基百科帳號登入 wordpress: title: 使用 Wordpress 登入 alt: 使用 Wordpress OpenID 登入 @@ -2044,6 +2044,10 @@ zh-TW: %{france}:包含來自 Direction Générale des Impôts 的資料。 contributors_fr_france: 法國 + contributors_hr_credit_html: '%{croatia}:包含來自%{dgu_link}和%{open_data_portal}(克羅埃西亞的公共資訊)的資料。' + contributors_hr_croatia: 克羅埃西亞 + contributors_hr_dgu: 克羅埃西亞國家大地測量局 + contributors_hr_open_data_portal: 國家開放資料入口網站 contributors_nl_credit_html: '%{netherlands}:包含 © AND 資料,2007(%{and_link})' contributors_nl_netherlands: 荷蘭 contributors_nz_credit_html: '%{new_zealand}:包含來自 %{linz_data_service_link}與基於%{cc_by_link} @@ -2405,8 +2409,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 軌跡 @@ -2690,9 +2694,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: 確認選取的使用者 @@ -2821,7 +2827,6 @@ zh-TW: revoke: 撤銷! confirm: 您確定嗎? reason: 封鎖的理由: - back: 檢視所有封鎖 revoker: 撤銷者: needs_view: 在還原這個封鎖之前,該使用者需要先登入。 block: @@ -2835,9 +2840,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: 已忽視使用者 diff --git a/config/routes.rb b/config/routes.rb index 224639464..d1e4c74ae 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,7 +25,7 @@ OpenStreetMap::Application.routes.draw do 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#query" + 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+/ @@ -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/20240405083825_add_creator_index_to_user_blocks.rb b/db/migrate/20240405083825_add_creator_index_to_user_blocks.rb new file mode 100644 index 000000000..542a1020d --- /dev/null +++ b/db/migrate/20240405083825_add_creator_index_to_user_blocks.rb @@ -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 diff --git a/db/structure.sql b/db/structure.sql index 294fda4c8..829595e7c 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2728,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: - -- @@ -3512,6 +3519,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('23'), ('22'), ('21'), +('20240405083825'), ('20240307181018'), ('20240307180830'), ('20240228205723'), diff --git a/lib/diff_reader.rb b/lib/diff_reader.rb index d1987a936..2784646af 100644 --- a/lib/diff_reader.rb +++ b/lib/diff_reader.rb @@ -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, diff --git a/lib/tasks/eslint.rake b/lib/tasks/eslint.rake index 7f96531d9..790ef150d 100644 --- a/lib/tasks/eslint.rake +++ b/lib/tasks/eslint.rake @@ -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 diff --git a/package.json b/package.json index 3f4432e9d..0a9ebf0b6 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb index 50ced0ff1..be1033ea6 100644 --- a/test/controllers/api/changesets_controller_test.rb +++ b/test/controllers/api/changesets_controller_test.rb @@ -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 diff --git a/test/controllers/api/nodes_controller_test.rb b/test/controllers/api/nodes_controller_test.rb index 7becffddc..5fde0277c 100644 --- a/test/controllers/api/nodes_controller_test.rb +++ b/test/controllers/api/nodes_controller_test.rb @@ -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" diff --git a/test/controllers/api/notes_controller_test.rb b/test/controllers/api/notes_controller_test.rb index 303bcea91..045e3bf43 100644 --- a/test/controllers/api/notes_controller_test.rb +++ b/test/controllers/api/notes_controller_test.rb @@ -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 diff --git a/test/controllers/api/old_nodes_controller_test.rb b/test/controllers/api/old_nodes_controller_test.rb index a982705ed..badc7301b 100644 --- a/test/controllers/api/old_nodes_controller_test.rb +++ b/test/controllers/api/old_nodes_controller_test.rb @@ -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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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 api_old_node_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) diff --git a/test/controllers/api/old_relations_controller_test.rb b/test/controllers/api/old_relations_controller_test.rb index 400271123..892e52991 100644 --- a/test/controllers/api/old_relations_controller_test.rb +++ b/test/controllers/api/old_relations_controller_test.rb @@ -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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 api_old_relation_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 diff --git a/test/controllers/api/old_ways_controller_test.rb b/test/controllers/api/old_ways_controller_test.rb index 959c3514a..8081082cf 100644 --- a/test/controllers/api/old_ways_controller_test.rb +++ b/test/controllers/api/old_ways_controller_test.rb @@ -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 api_old_way_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 api_old_way_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,14 +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 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." @@ -205,17 +205,17 @@ module Api # check moderator can still see the redacted data, when passing # the appropriate flag - get api_old_way_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 api_old_way_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." @@ -235,11 +235,11 @@ module Api auth_header = basic_authorization_header create(:user).email, "test" # check can't see the redacted data - get api_old_way_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." @@ -253,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 @@ -267,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 @@ -282,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 api_old_way_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." @@ -299,11 +299,11 @@ module Api auth_header = basic_authorization_header create(:user).email, "test" # check normal user can now see the unredacted data - get api_old_way_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." @@ -324,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 api_old_way_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) @@ -336,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" @@ -345,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 api_old_way_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}" @@ -368,11 +368,11 @@ module Api end def do_redact_way(way, redaction, headers = {}) - get api_old_way_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) diff --git a/test/controllers/api/relations_controller_test.rb b/test/controllers/api/relations_controller_test.rb index 7ff369fa4..e69dcdfe2 100644 --- a/test/controllers/api/relations_controller_test.rb +++ b/test/controllers/api/relations_controller_test.rb @@ -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 api_old_relation_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 api_old_relation_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 api_old_relation_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) diff --git a/test/controllers/api/ways_controller_test.rb b/test/controllers/api/ways_controller_test.rb index 791da8029..e11cceeb2 100644 --- a/test/controllers/api/ways_controller_test.rb +++ b/test/controllers/api/ways_controller_test.rb @@ -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 diff --git a/test/controllers/changesets_controller_test.rb b/test/controllers/changesets_controller_test.rb index 32a4e4f70..1fd9de2e8 100644 --- a/test/controllers/changesets_controller_test.rb +++ b/test/controllers/changesets_controller_test.rb @@ -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 diff --git a/test/controllers/diary_entries_controller_test.rb b/test/controllers/diary_entries_controller_test.rb index e2300e27b..2b10402fa 100644 --- a/test/controllers/diary_entries_controller_test.rb +++ b/test/controllers/diary_entries_controller_test.rb @@ -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 diff --git a/test/controllers/friendships_controller_test.rb b/test/controllers/friendships_controller_test.rb index 19de4ae8e..f63a8e449 100644 --- a/test/controllers/friendships_controller_test.rb +++ b/test/controllers/friendships_controller_test.rb @@ -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 diff --git a/test/controllers/messages_controller_test.rb b/test/controllers/messages_controller_test.rb index 0bc031cb4..40581993f 100644 --- a/test/controllers/messages_controller_test.rb +++ b/test/controllers/messages_controller_test.rb @@ -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" @@ -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/notes_controller_test.rb b/test/controllers/notes_controller_test.rb index 5a920349a..e68a5f33b 100644 --- a/test/controllers/notes_controller_test.rb +++ b/test/controllers/notes_controller_test.rb @@ -40,28 +40,30 @@ class NotesControllerTest < ActionDispatch::IntegrationTest create(:note_comment, :note => note, :author => second_user) end - get user_notes_path(:display_name => first_user.display_name) + get user_notes_path(first_user) assert_response :success + 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 ".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 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 tbody tr", :count => 2 - get user_notes_path(:display_name => "non-existent") + get user_notes_path("non-existent") assert_response :not_found end @@ -72,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 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 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 @@ -97,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" diff --git a/test/controllers/oauth_clients_controller_test.rb b/test/controllers/oauth_clients_controller_test.rb index e448e0954..c4dd4a181 100644 --- a/test/controllers/oauth_clients_controller_test.rb +++ b/test/controllers/oauth_clients_controller_test.rb @@ -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 diff --git a/test/controllers/redactions_controller_test.rb b/test/controllers/redactions_controller_test.rb index 002e483fe..5ca72fe47 100644 --- a/test/controllers/redactions_controller_test.rb +++ b/test/controllers/redactions_controller_test.rb @@ -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/traces/icons_controller_test.rb b/test/controllers/traces/icons_controller_test.rb new file mode 100644 index 000000000..24786b3ac --- /dev/null +++ b/test/controllers/traces/icons_controller_test.rb @@ -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 index 000000000..af203394e --- /dev/null +++ b/test/controllers/traces/pictures_controller_test.rb @@ -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 diff --git a/test/controllers/traces_controller_test.rb b/test/controllers/traces_controller_test.rb index e6f3af4f1..73966641e 100644 --- a/test/controllers/traces_controller_test.rb +++ b/test/controllers/traces_controller_test.rb @@ -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 diff --git a/test/controllers/user_blocks_controller_test.rb b/test/controllers/user_blocks_controller_test.rb index b74e3de46..a7ab02c75 100644 --- a/test/controllers/user_blocks_controller_test.rb +++ b/test/controllers/user_blocks_controller_test.rb @@ -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 tbody", :count => 1 do - assert_select "tr", :count => 20 - 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 tbody", :count => 1 do - assert_select "tr", :count => 20 - 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 tbody", :count => 1 do - assert_select "tr", :count => 20 - 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 tbody", :count => 1 do - assert_select "tr", :count => 20 - 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 tbody", :count => 1 do - assert_select "tr", :count => 20 - 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_by_path(:display_name => user.display_name, :page => 2) + get next_path assert_response :success - assert_select "table#block_list tbody", :count => 1 do - assert_select "tr", :count => 20 + 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 + + 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 diff --git a/test/controllers/user_mutes_controller_test.rb b/test/controllers/user_mutes_controller_test.rb index cc22faaaa..2e98dc819 100644 --- a/test/controllers/user_mutes_controller_test.rb +++ b/test/controllers/user_mutes_controller_test.rb @@ -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 diff --git a/test/controllers/user_roles_controller_test.rb b/test/controllers/user_roles_controller_test.rb index c2ebd3c47..73b4f0424 100644 --- a/test/controllers/user_roles_controller_test.rb +++ b/test/controllers/user_roles_controller_test.rb @@ -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 diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index a8feab6d2..62bb34279 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -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 @@ -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 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 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 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/factories/user_blocks.rb b/test/factories/user_blocks.rb index 2f68dc8dc..6d5c02a03 100644 --- a/test/factories/user_blocks.rb +++ b/test/factories/user_blocks.rb @@ -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 diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb index 34120e207..a905090db 100644 --- a/test/helpers/application_helper_test.rb +++ b/test/helpers/application_helper_test.rb @@ -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 diff --git a/test/helpers/user_helper_test.rb b/test/helpers/user_helper_test.rb index 0767dea56..f7d2726db 100644 --- a/test/helpers/user_helper_test.rb +++ b/test/helpers/user_helper_test.rb @@ -8,12 +8,12 @@ class UserHelperTest < ActionView::TestCase gravatar_user = create(:user, :image_use_gravatar => true) image = user_image(user) - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_image(user, :class => "foo") - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_image(gravatar_user) - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_image(gravatar_user, :class => "foo") assert_match %r{^$}, image @@ -24,13 +24,13 @@ class UserHelperTest < ActionView::TestCase gravatar_user = create(:user, :image_use_gravatar => true) image = user_thumbnail(user) - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_thumbnail(user, :class => "foo") - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_thumbnail(gravatar_user) - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_thumbnail(gravatar_user, :class => "foo") assert_match %r{^$}, 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{^$}, image + assert_match %r{^$}, image image = user_thumbnail_tiny(user, :class => "foo") - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_thumbnail_tiny(gravatar_user) - assert_match %r{^$}, image + assert_match %r{^$}, image image = user_thumbnail_tiny(gravatar_user, :class => "foo") assert_match %r{^$}, image diff --git a/test/models/node_test.rb b/test/models/node_test.rb index ee0a77649..94cb5ec81 100644 --- a/test/models/node_test.rb +++ b/test/models/node_test.rb @@ -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 diff --git a/test/models/relation_test.rb b/test/models/relation_test.rb index 575813ad5..405dd353d 100644 --- a/test/models/relation_test.rb +++ b/test/models/relation_test.rb @@ -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/way_test.rb b/test/models/way_test.rb index 8674b3790..36debfac0 100644 --- a/test/models/way_test.rb +++ b/test/models/way_test.rb @@ -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 diff --git a/test/system/messages_test.rb b/test/system/messages_test.rb index dea0d2208..b78568314 100644 --- a/test/system/messages_test.rb +++ b/test/system/messages_test.rb @@ -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 diff --git a/test/system/user_email_change_test.rb b/test/system/user_email_change_test.rb index eceb73416..ec2c8f093 100644 --- a/test/system/user_email_change_test.rb +++ b/test/system/user_email_change_test.rb @@ -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 diff --git a/yarn.lock b/yarn.lock index 410b50260..487e55542 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,32 +19,32 @@ 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" @@ -53,10 +53,10 @@ 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" @@ -79,20 +79,15 @@ "@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" @@ -215,13 +210,6 @@ diacritics@^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== - dependencies: - esutils "^2.0.2" - 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" @@ -239,54 +227,55 @@ escape-string-regexp@^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" @@ -296,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" @@ -351,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" @@ -366,23 +355,18 @@ 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.2.9" + keyv "^4.5.4" -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== - -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.2: version "1.1.2" @@ -407,24 +391,10 @@ 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@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== - dependencies: - type-fest "^0.20.2" +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== gopd@^1.0.1: version "1.0.1" @@ -485,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" @@ -537,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" @@ -547,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" @@ -577,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== @@ -599,13 +568,6 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -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" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -651,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" @@ -672,9 +629,9 @@ punycode@^2.1.0: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@^6.9.4: - version "6.12.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" - integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg== + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== dependencies: side-channel "^1.0.6" @@ -693,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" @@ -772,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" @@ -791,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"