From: Andy Allan Date: Wed, 30 Aug 2023 14:11:57 +0000 (+0100) Subject: Merge pull request #4197 from AntonKhorev/user-resources X-Git-Tag: live~607 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e68d4efc3cdf02f35144e3967be998aaa633a3de?hp=7de9f6a977fe2fd0f8c4906b43946d472e4eb880 Merge pull request #4197 from AntonKhorev/user-resources Move user lookup/error methods from app controller to concerns --- diff --git a/Gemfile.lock b/Gemfile.lock index 774803788..e58f26e1a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,73 +3,73 @@ GEM specs: aasm (5.5.0) concurrent-ruby (~> 1.0) - actioncable (7.0.7) - actionpack (= 7.0.7) - activesupport (= 7.0.7) + actioncable (7.0.7.2) + actionpack (= 7.0.7.2) + activesupport (= 7.0.7.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.7) - actionpack (= 7.0.7) - activejob (= 7.0.7) - activerecord (= 7.0.7) - activestorage (= 7.0.7) - activesupport (= 7.0.7) + actionmailbox (7.0.7.2) + actionpack (= 7.0.7.2) + activejob (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.7) - actionpack (= 7.0.7) - actionview (= 7.0.7) - activejob (= 7.0.7) - activesupport (= 7.0.7) + actionmailer (7.0.7.2) + actionpack (= 7.0.7.2) + actionview (= 7.0.7.2) + activejob (= 7.0.7.2) + activesupport (= 7.0.7.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.7) - actionview (= 7.0.7) - activesupport (= 7.0.7) + actionpack (7.0.7.2) + actionview (= 7.0.7.2) + activesupport (= 7.0.7.2) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) actionpack-page_caching (1.2.4) actionpack (>= 4.0.0) - actiontext (7.0.7) - actionpack (= 7.0.7) - activerecord (= 7.0.7) - activestorage (= 7.0.7) - activesupport (= 7.0.7) + actiontext (7.0.7.2) + actionpack (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.7) - activesupport (= 7.0.7) + actionview (7.0.7.2) + activesupport (= 7.0.7.2) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) active_record_union (1.3.0) activerecord (>= 4.0) - activejob (7.0.7) - activesupport (= 7.0.7) + activejob (7.0.7.2) + activesupport (= 7.0.7.2) globalid (>= 0.3.6) - activemodel (7.0.7) - activesupport (= 7.0.7) - activerecord (7.0.7) - activemodel (= 7.0.7) - activesupport (= 7.0.7) - activerecord-import (1.4.1) + activemodel (7.0.7.2) + activesupport (= 7.0.7.2) + activerecord (7.0.7.2) + activemodel (= 7.0.7.2) + activesupport (= 7.0.7.2) + activerecord-import (1.5.0) activerecord (>= 4.2) - activestorage (7.0.7) - actionpack (= 7.0.7) - activejob (= 7.0.7) - activerecord (= 7.0.7) - activesupport (= 7.0.7) + activestorage (7.0.7.2) + actionpack (= 7.0.7.2) + activejob (= 7.0.7.2) + activerecord (= 7.0.7.2) + activesupport (= 7.0.7.2) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.7) + activesupport (7.0.7.2) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -86,8 +86,8 @@ GEM autoprefixer-rails (10.4.13.0) execjs (~> 2) aws-eventstream (1.2.0) - aws-partitions (1.804.0) - aws-sdk-core (3.180.3) + aws-partitions (1.813.0) + aws-sdk-core (3.181.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.5) @@ -95,8 +95,8 @@ GEM aws-sdk-kms (1.71.0) aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.132.1) - aws-sdk-core (~> 3, >= 3.179.0) + aws-sdk-s3 (1.134.0) + aws-sdk-core (~> 3, >= 3.181.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.6) aws-sigv4 (1.6.0) @@ -178,7 +178,7 @@ GEM concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) - dry-schema (1.13.2) + dry-schema (1.13.3) concurrent-ruby (~> 1.0) dry-configurable (~> 1.0, >= 1.0.1) dry-core (~> 1.0, < 2) @@ -198,7 +198,7 @@ GEM dry-initializer (~> 3.0) dry-schema (>= 1.12, < 2) zeitwerk (~> 2.6) - erb_lint (0.4.0) + erb_lint (0.5.0) activesupport better_html (>= 2.0.1) parser (>= 2.7.1.4) @@ -388,20 +388,20 @@ GEM rack-test (2.1.0) rack (>= 1.3) rack-uri_sanitizer (0.0.2) - rails (7.0.7) - actioncable (= 7.0.7) - actionmailbox (= 7.0.7) - actionmailer (= 7.0.7) - actionpack (= 7.0.7) - actiontext (= 7.0.7) - actionview (= 7.0.7) - activejob (= 7.0.7) - activemodel (= 7.0.7) - activerecord (= 7.0.7) - activestorage (= 7.0.7) - activesupport (= 7.0.7) + rails (7.0.7.2) + actioncable (= 7.0.7.2) + actionmailbox (= 7.0.7.2) + actionmailer (= 7.0.7.2) + actionpack (= 7.0.7.2) + actiontext (= 7.0.7.2) + actionview (= 7.0.7.2) + activejob (= 7.0.7.2) + activemodel (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) bundler (>= 1.15.0) - railties (= 7.0.7) + railties (= 7.0.7.2) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -416,9 +416,9 @@ GEM rails-i18n (7.0.8) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.7) - actionpack (= 7.0.7) - activesupport (= 7.0.7) + railties (7.0.7.2) + actionpack (= 7.0.7.2) + activesupport (= 7.0.7.2) method_source rake (>= 12.2) thor (~> 1.0) @@ -435,7 +435,7 @@ GEM rinku (2.0.6) rotp (6.2.2) rouge (4.1.3) - rubocop (1.56.0) + rubocop (1.56.2) base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) @@ -523,7 +523,7 @@ GEM i18n vendorer (0.2.0) version_gem (1.1.3) - webmock (3.18.1) + webmock (3.19.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) diff --git a/app/assets/javascripts/index/changeset.js b/app/assets/javascripts/index/changeset.js index 9e38917af..a6213b9c4 100644 --- a/app/assets/javascripts/index/changeset.js +++ b/app/assets/javascripts/index/changeset.js @@ -29,6 +29,7 @@ OSM.Changeset = function (map) { function updateChangeset(form, method, url, include_data) { var data; + $(form).find("#comment-error").prop("hidden", true); $(form).find("input[type=submit]").prop("disabled", true); if (include_data) { @@ -44,6 +45,11 @@ OSM.Changeset = function (map) { data: data, success: function () { OSM.loadSidebarContent(window.location.pathname, page.load); + }, + error: function (xhr, xhr_status, http_status) { + $(form).find("#comment-error").text(http_status); + $(form).find("#comment-error").prop("hidden", false); + $(form).find("input[type=submit]").prop("disabled", false); } }); } diff --git a/app/controllers/api/changeset_comments_controller.rb b/app/controllers/api/changeset_comments_controller.rb index 8b971834d..a9e80630e 100644 --- a/app/controllers/api/changeset_comments_controller.rb +++ b/app/controllers/api/changeset_comments_controller.rb @@ -17,6 +17,7 @@ module Api # Check the arguments are sane raise OSM::APIBadUserInput, "No id was given" unless params[:id] raise OSM::APIBadUserInput, "No text was given" if params[:text].blank? + raise OSM::APIRateLimitExceeded if current_user.changeset_comments.where("created_at >= ?", Time.now.utc - 1.hour).count >= current_user.max_changeset_comments_per_hour # Extract the arguments id = params[:id].to_i diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb index 9da9d3226..ab48a5189 100644 --- a/app/controllers/api/users_controller.rb +++ b/app/controllers/api/users_controller.rb @@ -19,7 +19,7 @@ module Api raise OSM::APIBadUserInput, "No users were given to search for" if ids.empty? - @users = User.visible.find(ids) + @users = User.visible.where(:id => ids).in_order_of(:id, ids) # Render the result respond_to do |format| diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 0f9e16767..9d4b3d258 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -186,6 +186,9 @@ class UsersController < ApplicationController end if current_user.save + SIGNUP_IP_LIMITER&.update(request.remote_ip) + SIGNUP_EMAIL_LIMITER&.update(canonical_email(current_user.email)) + flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo) referer = welcome_path @@ -344,7 +347,13 @@ class UsersController < ApplicationController domain_mx_servers(domain) end - if blocked = Acl.no_account_creation(request.remote_ip, :domain => domain, :mx => mx_servers) + blocked = Acl.no_account_creation(request.remote_ip, :domain => domain, :mx => mx_servers) + + blocked ||= SIGNUP_IP_LIMITER && !SIGNUP_IP_LIMITER.allow?(request.remote_ip) + + blocked ||= email && SIGNUP_EMAIL_LIMITER && !SIGNUP_EMAIL_LIMITER.allow?(canonical_email(email)) + + if blocked logger.info "Blocked signup from #{request.remote_ip} for #{email}" render :action => "blocked" @@ -353,6 +362,20 @@ class UsersController < ApplicationController !blocked end + def canonical_email(email) + local_part, domain = if email.nil? + nil + else + email.split("@") + end + + local_part.sub!(/\+.*$/, "") + + local_part.delete!(".") if %w[gmail.com googlemail.com].include?(domain) + + "#{local_part}@#{domain}" + end + ## # get list of MX servers for a domains def domain_mx_servers(domain) diff --git a/app/models/user.rb b/app/models/user.rb index 5c21736b0..fe2a98d61 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -395,6 +395,19 @@ class User < ApplicationRecord max_friends.clamp(0, Settings.max_friends_per_hour) end + def max_changeset_comments_per_hour + if moderator? + 36000 + else + previous_comments = changeset_comments.limit(200).count + active_reports = issues.with_status(:open).sum(:reports_count) + max_comments = previous_comments / 200.0 * Settings.max_changeset_comments_per_hour + max_comments = max_comments.floor.clamp(Settings.min_changeset_comments_per_hour, Settings.max_changeset_comments_per_hour) + max_comments /= 2**active_reports + max_comments.floor.clamp(1, Settings.max_changeset_comments_per_hour) + end + end + private def encrypt_password diff --git a/app/views/api/users/index.xml.builder b/app/views/api/users/index.xml.builder index 60fcfa898..1b284ef5e 100644 --- a/app/views/api/users/index.xml.builder +++ b/app/views/api/users/index.xml.builder @@ -1,4 +1,4 @@ xml.instruct! :xml, :version => "1.0" xml.osm(OSM::API.new.xml_root_attributes) do |osm| - osm << render(@users) + osm << (render(@users) || "") end diff --git a/app/views/browse/changeset.html.erb b/app/views/browse/changeset.html.erb index 3c5ba7de0..b5c360a03 100644 --- a/app/views/browse/changeset.html.erb +++ b/app/views/browse/changeset.html.erb @@ -78,6 +78,8 @@
+
" data-changeset-id="<%= @changeset.id %>" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled="1" class="btn btn-sm btn-primary" />
diff --git a/config/initializers/rate_limits.rb b/config/initializers/rate_limits.rb new file mode 100644 index 000000000..5caa3007f --- /dev/null +++ b/config/initializers/rate_limits.rb @@ -0,0 +1,15 @@ +require "rate_limiter" + +SIGNUP_IP_LIMITER = if Settings.memcache_servers && Settings.signup_ip_per_day && Settings.signup_ip_max_burst + RateLimiter.new( + Dalli::Client.new(Settings.memcache_servers, :namespace => "rails:signup:ip"), + 86400, Settings.signup_ip_per_day, Settings.signup_ip_max_burst + ) + end + +SIGNUP_EMAIL_LIMITER = if Settings.memcache_servers && Settings.signup_email_per_day && Settings.signup_email_max_burst + RateLimiter.new( + Dalli::Client.new(Settings.memcache_servers, :namespace => "rails:signup:email"), + 86400, Settings.signup_email_per_day, Settings.signup_email_max_burst + ) + end diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb index 53ab76808..e710019da 100644 --- a/config/initializers/secure_headers.rb +++ b/config/initializers/secure_headers.rb @@ -28,7 +28,7 @@ csp_policy[:img_src] << Settings.trace_image_storage_url if Settings.key?(:trace csp_policy[:report_uri] << Settings.csp_report_url if Settings.key?(:csp_report_url) cookie_policy = { - :httponly => { :only => ["_osm_session"] } + :httponly => { :only => %w[_osm_session _osm_totp_token] } } SecureHeaders::Configuration.default do |config| diff --git a/config/locales/af.yml b/config/locales/af.yml index 1db4fa18d..4a18cd9f2 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -1579,7 +1579,7 @@ af: facebook: title: Meld aan met Facebook alt: Meld aan met ’n Facebook-rekening - windowslive: + microsoft: title: Meld aan met Windows Live alt: Meld aan met ’n Windows Live-rekening github: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 508a21f7d..7ba39bd48 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -308,7 +308,7 @@ ar: openid: هوية مفتوحة google: جوجل facebook: فيسبوك - windowslive: مايكروسوفت + microsoft: مايكروسوفت github: جيت هب wikipedia: ويكيبيديا api: @@ -1887,7 +1887,7 @@ ar: facebook: title: تسجيل الدخول باستخدام فيس بوك alt: تسجيل الدخول بحساب فيسبوك - windowslive: + microsoft: title: تسجيل الدخول مع مايكروسوفت alt: تسجيل الدخول بحساب مايكروسوفت github: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index bb821a040..bafcf785c 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -1491,7 +1491,7 @@ ast: facebook: title: Anicia sesión con Facebook alt: Anicia sesión con una cuenta de Facebook - windowslive: + microsoft: title: Anicia sesión con Windows Live alt: Anicia sesión con una cuenta de Windows Live github: diff --git a/config/locales/ba.yml b/config/locales/ba.yml index a943ecac5..81475529a 100644 --- a/config/locales/ba.yml +++ b/config/locales/ba.yml @@ -224,7 +224,7 @@ ba: openid: OpenID google: Google facebook: Facebook - windowslive: Майкрософт + microsoft: Майкрософт github: GitHub wikipedia: Википедия api: diff --git a/config/locales/be.yml b/config/locales/be.yml index 5112e3988..fdf9d6f5a 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1498,7 +1498,7 @@ be: facebook: title: Увайсці праз Facebook alt: Увайсці праз уліковы запіс Facebook - windowslive: + microsoft: title: Увайсці праз Windows live alt: Увайсці праз уліковы запіс Windows Live github: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index e40ff79ff..384fb4202 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -212,7 +212,7 @@ bg: openid: OpenID google: Google facebook: Facebook - windowslive: Майкрософт + microsoft: Майкрософт github: GitHub wikipedia: Уикипедия api: @@ -1440,7 +1440,7 @@ bg: facebook: title: Влизане с Facebook alt: Влизане със сметка на Facebook - windowslive: + microsoft: title: Влизане с Майкрософт alt: Влизане със сметка на Майкрософт github: diff --git a/config/locales/bn.yml b/config/locales/bn.yml index ecc870fef..fdf69b13e 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -238,7 +238,7 @@ bn: openid: ওপেনআইডি google: গুগল facebook: ফেসবুক - windowslive: মাইক্রোসফট + microsoft: মাইক্রোসফট github: গিটহাব wikipedia: উইকিপিডিয়া api: @@ -1554,7 +1554,7 @@ bn: facebook: title: ফেসবুক দিয়ে প্রবেশ alt: ফেসবুক অ্যাকাউন্ট দিয়ে প্রবেশ করুন - windowslive: + microsoft: title: মাইক্রোসফট দিয়ে লগইন করুন alt: একটি মাইক্রোসফট অ্যাকাউন্ট দিয়ে লগইন করুন github: diff --git a/config/locales/br.yml b/config/locales/br.yml index 7ef4346e3..02e0240fa 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -1871,7 +1871,7 @@ br: facebook: title: Kevreañ ouzh Facebook alt: Kevreañ ouzh ur gont facebook - windowslive: + microsoft: title: Kevreañ ouzh Microsoft alt: Kevreañ ouzh ur gont Microsoft github: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index fa2a7676d..4f61e799e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -257,6 +257,7 @@ ca: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Viquipèdia api: @@ -1903,7 +1904,7 @@ ca: facebook: title: Inicieu la sessió amb Facebook alt: Inicieu la sessió amb un compte de Facebook - windowslive: + microsoft: title: Inicieu la sessió amb Windows alt: Inicieu de sessió amb un compte de Windows github: @@ -2924,7 +2925,9 @@ ca: index: title: Notes enviades o comentades per %{user} heading: notes de %{user} - subheading_html: Notes enviades o comentades per %{user} + subheading_html: Notes %{submitted} o %{commented} per %{user} + subheading_submitted: enviades + subheading_commented: comentades no_notes: Sense notes id: Id creator: Creador diff --git a/config/locales/cs.yml b/config/locales/cs.yml index f1abd90c3..010f23ec9 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1943,7 +1943,7 @@ cs: facebook: title: Přihlásit se přes Facebook alt: Přihlášení pomocí účtu na Facebooku - windowslive: + microsoft: title: Přihlásit se přes Microsoft alt: Přihlášení pomocí účtu Microsoft github: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 19dc32de1..58351acf1 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1476,7 +1476,7 @@ cy: facebook: title: Mewngofnodi â Facebook alt: Mewngofnodi â Chyfrif Facebook - windowslive: + microsoft: title: Mewngofnodi gyda Microsoft alt: Mewngofnodi gyda Chyfrif Microsoft github: diff --git a/config/locales/da.yml b/config/locales/da.yml index 502577aff..426d6a7e6 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1884,7 +1884,7 @@ da: facebook: title: Log pÃ¥ med Facebook alt: Log pÃ¥ med en Facebook-konto - windowslive: + microsoft: title: Log pÃ¥ med Windows Live alt: Log pÃ¥ med en Windows Live-konto github: diff --git a/config/locales/de.yml b/config/locales/de.yml index 0990c3d6d..b4b1b24aa 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1974,7 +1974,7 @@ de: facebook: title: Mit Facebook anmelden alt: Mit einem Facebook-Konto anmelden - windowslive: + microsoft: title: Mit Microsoft anmelden alt: Mit einem Microsoft-Konto anmelden github: diff --git a/config/locales/el.yml b/config/locales/el.yml index 4d9b62c59..fea612abb 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -172,7 +172,7 @@ el: user: auth_provider: Πάροχος αυθεντικοποίησης auth_uid: UID αυθεντικοποίησης - email: Ηλεκτρονικό ταχυδρομείο + email: Διεύθυνση ηλεκτρονικού ταχυδρομείου email_confirmation: Επιβεβαίωση διεύθυνσης email new_email: Νέα διεύθυνση email active: Ενεργό @@ -254,6 +254,7 @@ el: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Βικιπαίδεια api: @@ -580,6 +581,7 @@ el: zero: Χωρίς σχόλια one: '%{count} σχόλιο' other: '%{count} σχόλια' + no_comments: Κανένα σχόλιο edit_link: Επεξεργασία καταχώρησης hide_link: Απόκρυψη καταχώρησης unhide_link: Επανεμφάνιση καταχώρησης @@ -941,7 +943,7 @@ el: street_lamp: Λάμπα δρόμου tertiary: Τριτεύων δρόμος tertiary_link: Τριτεύων δρόμος - track: Χωματόδρομος + track: Αγροτικός / Δασικός δρόμος traffic_mirror: Καθρέφτης κυκλοφορίας traffic_signals: Σήματα κυκλοφορίας trailhead: Άκρη μονοπατιού @@ -1466,6 +1468,7 @@ el: zero: Καμία αναφορά one: 1 αναφορά other: '%{count} αναφορές' + no_reports: Καμία αναφορά report_created_at: Αναφέρθηκε για πρώτη φορά στις %{datetime} last_resolved_at: Επιλύθηκε για τελευταία φορά στις %{datetime} last_updated_at: Ενημερώθηκε για τελευταία φορά στις %{datetime} από τον %{displayname} @@ -1877,6 +1880,9 @@ el: no home location: Δεν έχετε εισάγει την τοποθεσία του σπιτιού σας. update home location on click: Ενημέρωση τοποθεσίας σπιτιού όταν κάνω κλικ στον χάρτη; + show: Εμφάνιση + delete: Διαγραφή + undelete: Αναίρεση διαγραφής update: success: Το προφίλ ενημερώθηκε. failure: Δεν μπόρεσε να ενημερωθεί το προφίλ. @@ -1905,7 +1911,7 @@ el: facebook: title: Σύνδεση με το Facebook alt: Σύνδεση με έναν Λογαριασμό Facebook - windowslive: + microsoft: title: Σύνδεση μέσω της Microsoft alt: Σύνδεση με ένα Λογαριασμό Microsoft github: @@ -1968,12 +1974,14 @@ el: community_driven_osm_foundation: Ίδρυμα OSM open_data_title: Ανοικτά Δεδομένα open_data_open_data: ανοιχτά δεδομένα + open_data_copyright_license: Σελίδα Πνευματικών Δικαιωμάτων και Άδειας Χρήσης legal_title: Νομικό legal_1_1_openstreetmap_foundation: Ίδρυμα OpenStreetMap legal_1_1_terms_of_use: Όροι Χρήσης legal_1_1_aup: Αποδεκτές Πολιτικές Χρήσης legal_1_1_privacy_policy: Πολιτική Απορρήτου legal_2_1_contact_the_osmf: επικοινωνήστε με το OSMF + legal_2_2_registered_trademarks: εγγεγραμμένα εμπορικά σήματα του OSMF partners_title: Συνεργάτες copyright: foreign: @@ -1993,13 +2001,18 @@ el: introduction_1_open_data: ανοιχτά δεδομένα introduction_1_osm_foundation: Ίδρυμα OpenStreetMap introduction_2_legal_code: νομικός κώδικας + introduction_3_creative_commons: Creative Commons Αναφορά Δημιουργού-Παρόμοια + Διανομή 2.0 credit_title_html: Πως να κάνετε αναφορά στο OpenStreetMap credit_1_html: 'Όπου χρησιμοποιήσετε δεδομένα του OpenStreetMap, χρειάζεται από σας να κάνετε τα παρακάτω πράγματα:' + credit_3_attribution_guidelines: Οδηγίες Αναφοράς + credit_4_1_this_copyright_page: αυτή τη σελίδα πνευματικών δικαιωμάτων attribution_example: alt: Παράδειγμα του πως αναφέρεται το OpenStreetMap σε μια ιστοσελίδα title: Παράδειγμα αναφοράς δημιουργού more_title_html: Μαθαίνοντας περισσότερα + more_1_1_osmf_licence_page: Σελίδα Άδειας Χρήσης OSMF more_2_1_api_usage_policy: Πολιτική Χρήσης API more_2_1_tile_usage_policy: Πολιτική Χρήσης Πλακιδίων more_2_1_nominatim_usage_policy: Πολιτική Χρήσης Nominatim @@ -2008,8 +2021,12 @@ el: έχουμε περιλάβει δεδομένα ανοικτής άδειας από εθνικές υπηρεσίες χαρτογράφησης και άλλες πηγές, μεταξύ αυτών:' contributors_at_austria: Αυστρία + contributors_at_stadt_wien: Stadt Wien contributors_at_cc_by: CC BY + contributors_at_land_vorarlberg: Land Vorarlberg + contributors_at_cc_by_at_with_amendments: CC BY AT με τροποποιήσεις contributors_au_australia: Αυστραλία + contributors_au_geoscape_australia: Geoscape Australia contributors_ca_canada: Καναδάς contributors_fi_finland: Φινλανδία contributors_fi_nlsfi_license: Άδεια NLSFI @@ -2024,7 +2041,11 @@ el: contributors_rs_serbia: Σερβία contributors_rs_rgz: Σερβική Γεωδαιτική Αρχή contributors_rs_open_data_portal: Εθνική Πύλη Ανοικτών Δεδομένων + contributors_si_credit_html: |- + %{slovenia}: Περιέχει δεδομένα από την %{gu_link} και το %{mkgp_link} + (δημόσιες πληροφορίες της Σλοβενίας). contributors_si_slovenia: Σλοβενία + contributors_si_gu: Αρχή Χωρομέτρησης και Χαρτογράφησης contributors_si_mkgp: Υπουργείο Γεωργίας, Δασών και Τροφίμων contributors_es_spain: Ισπανία contributors_es_ign: IGN @@ -2039,6 +2060,8 @@ el: infringement_1_html: Υπενθυμίζουμε στους συνεισφέροντες του OSM να μην προσθέτουν δεδομένα από πηγές με πνευματικά δικαιώματα (π.χ. Google Maps η έντυπους χάρτες) χωρίς την προηγούμενη άδεια από τους ιδιοκτήτες των δικαιωμάτων. + trademarks_title: Εμπορικά σήματα + trademarks_1_1_trademark_policy: Πολιτική Εμπορικών Σημάτων index: js_1: Είτε χρησιμοποιείτε πρόγραμμα περιήγησης που δεν υποστηρίζει JavaScript ή έχετε απενεργοποιήσει την JavaScript. @@ -2122,6 +2145,8 @@ el: στην αποθήκευση και άλλοι χαρτογράφοι θα το ερευνήσουν. other_concerns: title: Άλλες ανησυχίες + copyright: σελίδα πνευματικών δικαιωμάτων + working_group: Ομάδα εργασίας OSMF help: title: Βοήθεια introduction: Το OpenStreetMap έχει πολλαπλούς πόρους για να μάθετε για το εγχείρημα, @@ -2202,7 +2227,7 @@ el: primary: Κύρια Οδός secondary: Δευτερεύουσα Οδός unclassified: Αταξινόμητη Οδός - track: Χωματόδρομος + track: Αγροτικός / Δασικός δρόμος bridleway: Μονοπάτι για Άλογα cycleway: Ποδηλατόδρομος cycleway_national: Εθνικός ποδηλατόδρομος @@ -2842,12 +2867,12 @@ el: heading_html: Κατάλογος φραγών στον %{name} empty: Ο %{name} δεν έχει φραχτεί ακόμα. blocks_by: - title: Φραγές από τον %{name} - heading_html: Κατάλογος φραγών από τον %{name} - empty: Ο %{name} δεν έχει κάνει φραγή ακόμα. + title: Φραγές από %{name} + heading_html: Κατάλογος φραγών από %{name} + empty: Ο/Η %{name} δεν έχει κάνει φραγή ακόμα. show: - title: Ο %{block_on} έχει φραχτεί από τον %{block_by} - heading_html: Ο %{block_on} έχει φραχτεί από τον %{block_by} + title: Ο/Η %{block_on} έχει φραχτεί από τον/την %{block_by} + heading_html: Ο/Η %{block_on} έχει φραχτεί από τον/την %{block_by} created: 'Δημιουργήθηκε:' duration: 'Διάρκεια:' status: 'Κατάσταση:' diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index b192b0528..3fbb69c26 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1383,7 +1383,7 @@ en-GB: facebook: title: Login with Facebook alt: Login with a Facebook Account - windowslive: + microsoft: title: Login with Windows Live alt: Login with a Windows Live Account github: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 88bf0a112..4d112cdf4 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -235,6 +235,7 @@ eo: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Vikipedio api: @@ -1830,6 +1831,9 @@ eo: no home location: Vi ne enigis vian hejmlokon. update home location on click: Ĉu freŝigi la hejmlokon kiam mi alklakas sur la mapo? + show: Montri + delete: Forigi + undelete: Malforigi update: success: Aktualigis profilon. failure: Ne povis aktualigi la profilon. @@ -1858,7 +1862,7 @@ eo: facebook: title: Ensaluti per Fejsbuko alt: Ensaluti per konto je Fejsbuko - windowslive: + microsoft: title: Ensaluti per Microsoft alt: Ensaluti per konto Microsoft github: @@ -2915,7 +2919,9 @@ eo: index: title: Rimarkoj kreitaj aÅ­ komentitaj de %{user} heading: Rimarkoj de %{user} - subheading_html: Rimarkoj kreitaj aÅ­ komentitaj de %{user} + subheading_html: Rimarkoj %{submitted} aÅ­ %{commented} de %{user} + subheading_submitted: kreitaj + subheading_commented: komentitaj no_notes: Neniu rimarko id: Identigilo creator: AÅ­toro diff --git a/config/locales/es.yml b/config/locales/es.yml index 966991f11..1e08e1fbf 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -68,6 +68,7 @@ # Author: Nancystodd # Author: Nelthal # Author: Nemo bis +# Author: No se # Author: Nunte # Author: Ovruni # Author: Pantareje @@ -304,7 +305,7 @@ es: openid: OpenID google: Google facebook: Facebook - windowslive: Microsoft + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -626,7 +627,7 @@ es: login: Iniciar sesión no_such_entry: title: No existe esta entrada de diario - heading: No hay ninguna entrada con el identificador %{id} + heading: No hay ninguna entrada con el identificador "%{id}" body: No hay alguna entrada de diario o comentario con el identificador %{id}. Revisa la ortografía, o tal vez el enlace en el que hiciste clic es incorrecto. diary_entry: @@ -1960,7 +1961,7 @@ es: facebook: title: Iniciar sesión con Facebook alt: Iniciar sesión con una cuenta de Facebook - windowslive: + microsoft: title: Iniciar sesión con Microsoft alt: Iniciar sesión con una cuenta Microsoft github: diff --git a/config/locales/et.yml b/config/locales/et.yml index 263d70c8b..7bb68167c 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1399,7 +1399,7 @@ et: facebook: title: Logi sisse Facebooki kaudu alt: Logi sisse Facebooki kontoga - windowslive: + microsoft: title: Logi sisse Windows Live'i kaudu alt: Logi sisse Windows Live'i kontoga github: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index d17c5ca15..058e8464d 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1854,7 +1854,7 @@ eu: facebook: title: Saioa hasi Facebookekin alt: Saioa hasi Facebookekin - windowslive: + microsoft: title: Saioa hasi Windows Livekin alt: Windows Live kontu batekin saioa hasi github: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 6f51531b7..efa485f43 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -256,7 +256,7 @@ fa: openid: OpenID google: گوگل facebook: فیس‌بوک - windowslive: مایکروسافت + microsoft: مایکروسافت github: گیت‌هاب wikipedia: ویکی‌پدیا api: @@ -1837,7 +1837,7 @@ fa: facebook: title: ورود با فیسبوک alt: ورود با حساب فیسبوک - windowslive: + microsoft: title: ورود با مایکروسافت alt: ورود با حساب مایکروسافت github: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index a358fcd06..eb11333a9 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1166,7 +1166,7 @@ fi: financial: Rahoitusalan toimisto government: Virasto insurance: Vakuutusyhtiö - it: IT toimisto + it: IT-toimisto lawyer: Asianajotoimisto logistics: Logistiikkatoimisto newspaper: Sanomalehtitoimisto @@ -1821,6 +1821,9 @@ fi: home location: Kotipaikka no home location: Kotipaikkaa ei ole vielä määritetty. update home location on click: Päivitä kotipaikka karttaa napsauttaessa + show: Näytä + delete: Poista + undelete: Peruuta poistaminen update: success: Profiili päivitetty. failure: Profiilia ei voitu päivittää. @@ -1849,7 +1852,7 @@ fi: facebook: title: Kirjaudu Facebookin avulla alt: Kirjaudu käyttämällä Facebook-tunnustasi - windowslive: + microsoft: title: Kirjaudu Microsoft-tilin avulla alt: Kirjaudu sisään Microsoft-tililläsi github: @@ -2802,7 +2805,9 @@ fi: index: title: Käyttäjän %{user} kommentoimat ja luomat huomautukset heading: Käyttäjän %{user} karttailmoitukset - subheading_html: Käyttäjän %{user} kommentoimat ja luomat karttailmoitukset + subheading_html: Käyttäjän %{user} %{commented} ja %{submitted} karttailmoitukset + subheading_submitted: luomat + subheading_commented: kommentoimat no_notes: Ei muistiinpanoja id: Tunniste creator: Tekijä diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 0aa7d67d6..ce8569c48 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -41,11 +41,13 @@ # Author: JenyxGym # Author: Jiremek # Author: Jlrb+ +# Author: Koreller # Author: Linedwell # Author: Litlok # Author: Ljubinka # Author: Ltrlg # Author: Lucky +# Author: Lulucmy # Author: Macofe # Author: Manaviko # Author: Mathieu @@ -309,12 +311,13 @@ fr: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipédia api: notes: comment: - opened_at_html: Créé le %{when} + opened_at_html: Créé %{when} opened_at_by_html: Créée %{when} par %{user} commented_at_html: Mis à jour le %{when} commented_at_by_html: Mis à jour le %{when} par %{user} @@ -339,12 +342,12 @@ fr: show: title: Supprimer mon compte warning: Avertissement ! Le processus de suppression de compte est définitif - et ne pourra pas être annulé. + et ne peut pas être annulé. delete_account: Supprimer un compte delete_introduction: 'Vous pouvez supprimer votre compte OpenStreetMap en utilisant le bouton ci-dessous. Veuillez prendre note des détails suivants :' - delete_profile: Vos informations de profil, y compris votre avatar, votre - description et votre emplacement de domicile seront retirés. + delete_profile: Les informations de votre profil, y compris votre avatar, + votre description et votre lieu de résidence seront supprimées. delete_display_name: Votre nom affiché sera supprimé et pourra être réutilisé pour d’autres comptes. retain_caveats: 'Cependant, quelques informations vous concernant seront conservées @@ -369,7 +372,7 @@ fr: external auth: Authentification externe openid: link: https://wiki.openstreetmap.org/wiki/FR:OpenID - link text: qu’est-ce que ceci ? + link text: qu’est-ce que cela ? public editing: heading: Modification publique enabled: Activée. Non anonyme et peut modifier les données. @@ -390,7 +393,7 @@ fr: link: https://wiki.osmfoundation.org/wiki/Licence/Contributor_Terms/FR link text: qu’est-ce que ceci ? save changes button: Enregistrer les modifications - delete_account: Suppression du compte... + delete_account: Supprimer le compte... go_public: heading: Modification publique currently_not_public: Actuellement, vos modifications sont anonymes et les utilisateurs @@ -1986,7 +1989,7 @@ fr: facebook: title: Connexion avec Facebook alt: Se connecter avec un compte de Facebook - windowslive: + microsoft: title: Connexion avec Microsoft alt: Se connecter avec un compte Microsoft github: @@ -3117,7 +3120,9 @@ fr: index: title: Notes soumises ou commentées par « %{user} » heading: Notes de « %{user} » - subheading_html: Notes soumises ou commentées par « %{user} » + subheading_html: Notes %{submitted} ou %{commented} par %{user} + subheading_submitted: soumis + subheading_commented: commenté no_notes: Aucune note id: Identifiant creator: Créateur diff --git a/config/locales/fur.yml b/config/locales/fur.yml index 219c282f7..fddcd757a 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -1123,7 +1123,7 @@ fur: facebook: title: Jentre cun Facebook alt: Jentre cuntun un cont Facebook - windowslive: + microsoft: title: Jentre cun Windows Live alt: Jentre cuntun cont di Windows Live github: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index fc81f938d..60d2efa81 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1800,7 +1800,7 @@ fy: facebook: title: Oanmelde mei Facebook alt: Meld jo oan mei in Facebook-akkount - windowslive: + microsoft: title: Oanmelde mei Windows Live alt: Meld jo oan mei in Windows Live-akkount github: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 34d7bd4d6..81775a670 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1348,7 +1348,7 @@ ga: facebook: title: Logáil isteach le Facebook alt: Logáil isteach le Cuntas Facebook - windowslive: + microsoft: title: Logáil isteach le Windows Live alt: Logáil isteach le Cuntas Windows Live github: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index a2457bd6c..6a4f75c0c 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1189,7 +1189,7 @@ gd: facebook: title: Clàraich a-steach le Facebook alt: Clàraich a-steach le cunntas Facebook - windowslive: + microsoft: title: Clàraich a-steach le Windows Live alt: Clàraich a-steach le cunntas Windows Live github: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 460003de8..e241bf387 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -229,6 +229,7 @@ gl: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -1848,6 +1849,9 @@ gl: no home location: Non inseriches o teu lugar de orixe. update home location on click: Desexas actualizar a túa localización ó premer sobre o mapa? + show: Amosar + delete: Borrar + undelete: Desfacer o borrado update: success: Perfil actualizado. failure: Non foi posíbel actualizar o perfil. @@ -1876,7 +1880,7 @@ gl: facebook: title: Iniciar a sesión co Facebook alt: Iniciar a sesión cunha conta do Facebook - windowslive: + microsoft: title: Iniciar a sesión con Microsoft alt: Iniciar a sesión cunha conta de Microsoft github: @@ -2970,7 +2974,9 @@ gl: index: title: Notas enviadas ou comentadas por %{user} heading: Notas de %{user} - subheading_html: Notas enviadas ou comentadas por %{user} + subheading_html: Notas %{submitted} ou %{commented} por %{user} + subheading_submitted: enviadas + subheading_commented: comentadas no_notes: Sen notas id: ID creator: Creador diff --git a/config/locales/he.yml b/config/locales/he.yml index 36f7fab27..d059fcec6 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -51,7 +51,7 @@ he: prompt: בחירת קובץ submit: diary_comment: - create: הערה + create: פרסום הערה diary_entry: create: פרסום update: עדכון @@ -91,8 +91,8 @@ he: language: שפה message: הודעה node: נקודה - node_tag: תג צומת - old_node: צומת ישן + node_tag: תג נקודה + old_node: נקודה ישנה old_node_tag: תג צומת ישן old_relation: יחס ישן old_relation_member: איבר יחס ישן @@ -117,7 +117,7 @@ he: attributes: client_application: name: שם (נדרש) - url: כתובת יישום ראשית (נדרש) + url: כתובת יישום ראשית (נדרשת) callback_url: כתובת קריאה חוזרת (callback) support_url: כתובת לתמיכה allow_read_prefs: לקרוא את העדפות המשתמש שלהם @@ -273,7 +273,7 @@ he: openid: OpenID google: גוגל facebook: פייסבוק - windowslive: מיקרוסופט + microsoft: מיקרוסופט github: גיטהאב wikipedia: ויקיפדיה api: @@ -1898,7 +1898,7 @@ he: facebook: title: כניסה עם פייסבוק alt: כניסה עם חשבון פייסבוק - windowslive: + microsoft: title: כניסה עם מיקרוסופט alt: כניסה עם חשבון מיקרוסופט github: @@ -2956,7 +2956,9 @@ he: index: title: הערות ותגובות של %{user} heading: הערות של %{user} - subheading_html: הערות ותגובות של %{user} + subheading_html: הערות ש%{submitted} על־ידי %{user} או %{commented} מאת %{user} + subheading_submitted: שנשלחו + subheading_commented: קיבלו תגובות no_notes: אין הערות id: מזהה creator: יוצר diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 692428839..36d0cfcb4 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -231,7 +231,7 @@ hi: openid: OpenID google: गूगल facebook: फेसबुक - windowslive: विन्डोज़ लाइव + microsoft: विन्डोज़ लाइव github: गिट्हब wikipedia: विकिपीडिया api: @@ -942,6 +942,8 @@ hi: delete image: इस तस्वीर को हटाएं replace image: इस तस्वीर की जगह दूसरी लगाएं home location: घर का स्थान + show: दिखाएँ + delete: हटाएँ site: about: legal_1_1_terms_of_use: उपयोग की शर्तें diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 17ef797bc..4a9d1ba6b 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -1251,7 +1251,7 @@ hr: facebook: title: Prijavi se sa Facebook-om alt: Prijavi se sa računom Facebook-a - windowslive: + microsoft: title: Prijavi se sa Windows Live-om alt: Prijavi se sa računom Windows Live-a github: diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index 79052ed54..9c28c2cad 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -1782,7 +1782,7 @@ hsb: facebook: title: Přizjewjenje z Facebook alt: Přizjewjenje z facebookowym kontom - windowslive: + microsoft: title: Přizjewjenje z Windows Live alt: Přizjewjenje z kontom Windows Live github: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 5df67b976..9e9d6c018 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -33,6 +33,7 @@ # Author: Tacsipacsi # Author: Uno20001 # Author: Urbalazs +# Author: Zalán Hári # Author: Zizzerus --- hu: @@ -1882,7 +1883,7 @@ hu: facebook: title: Bejelentkezés Facebook-kal alt: Bejelentkezés Facebook fiókkal - windowslive: + microsoft: title: Bejelentkezés Microsofttal. alt: Bejelentkezés Microsoft fiókkal github: @@ -1965,7 +1966,7 @@ hu: szerzői jogi vagy egyéb jogi kérdései vannak. legal_2_1_contact_the_osmf: lépj kapcsolatba az OSM Alapítvánnyal legal_2_2_html: Az OpenStreetMap, a nagyító logó és a State of the Map %{registered_trademarks_link}. - legal_2_2_registered_trademarks: az OSMF bejegyzett védjegye + legal_2_2_registered_trademarks: az OSMF bejegyzett védjegyei partners_title: Partnerek copyright: foreign: diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 7a4063e4b..8bc1c6086 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -218,6 +218,7 @@ ia: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -1870,7 +1871,7 @@ ia: facebook: title: Aperir session con Facebook alt: Aperir session con un conto de Facebook - windowslive: + microsoft: title: Aperir session con Microsoft alt: Aperir session con un conto Microsoft github: @@ -2949,7 +2950,9 @@ ia: index: title: Notas submittite o commentate per %{user} heading: Notas de %{user} - subheading_html: Notas submittite o commentate per %{user} + subheading_html: Notas %{submitted} o %{commented} per %{user} + subheading_submitted: submittite + subheading_commented: commentate no_notes: Sin notas id: ID creator: Creator diff --git a/config/locales/id.yml b/config/locales/id.yml index 00943412a..69501f68c 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1888,7 +1888,7 @@ id: facebook: title: Masuk dengan Facebook alt: Masuk dengan akun Facebook - windowslive: + microsoft: title: Masuk dengan Windows Live alt: Masuk dengan akun Windows Live github: diff --git a/config/locales/is.yml b/config/locales/is.yml index 297191f9d..efc567067 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1864,6 +1864,9 @@ is: home location: Upphafsstaðsetning no home location: Þú hefur ekki stillt staðsetningu þína. update home location on click: Uppfæra staðsetninguna þegar ég smelli á kortið + show: Birta + delete: Eyða + undelete: Afturkalla eyðingu update: success: Notandasíða uppfært. failure: Gat ekki uppfært kjörstillingar. @@ -1892,7 +1895,7 @@ is: facebook: title: Skrá inn með Facebook alt: Skrá inn með Facebook-aðgangi - windowslive: + microsoft: title: Skrá inn með Microsoft alt: Skrá inn með Microsoft-aðgangi github: diff --git a/config/locales/it.yml b/config/locales/it.yml index e000c5781..449fa5ebc 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -272,6 +272,7 @@ it: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -1898,6 +1899,7 @@ it: update home location on click: Aggiorna la posizione quando clicco sulla mappa? show: Mostra delete: Cancella + undelete: Annulla eliminazione update: success: Il profilo è stato aggiornato. failure: Impossibile aggiornare il profilo. @@ -1926,7 +1928,7 @@ it: facebook: title: Accedi con Facebook alt: Accedi con un account Facebook - windowslive: + microsoft: title: Accedi con Microsoft alt: Accedi con un account Microsoft github: @@ -3008,7 +3010,9 @@ it: index: title: Note inserite o commentate da %{user} heading: Note dell'utente %{user} - subheading_html: Note inserite o commentate da %{user} + subheading_html: Note %{submitted} o %{commented} da %{user} + subheading_submitted: inviate + subheading_commented: commentate no_notes: Nessuna nota id: Identificativo creator: Autore diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9869ab108..13ec9bc9f 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -269,7 +269,7 @@ ja: openid: OpenID google: Google facebook: Facebook - windowslive: マイクロソフト + microsoft: マイクロソフト github: GitHub wikipedia: ウィキペディア api: @@ -350,12 +350,12 @@ ja: browse: created: 作成 closed: クローズ - created_ago_html: '%{time_ago} に作成されました' + created_ago_html: '%{time_ago} に作成' closed_ago_html: '%{time_ago}に閉じられました' - created_ago_by_html: '%{user}によって%{time_ago}に作成されました' - closed_ago_by_html: '%{time_ago}に%{user}によって閉じられました' - deleted_ago_by_html: '%{time_ago}に%{user}によって削除されました' - edited_ago_by_html: '%{time_ago}に%{user}によって編集されました' + created_ago_by_html: '%{user}が%{time_ago}に作成' + closed_ago_by_html: '%{user}が%{time_ago}に閉じました' + deleted_ago_by_html: '%{user}が%{time_ago}に削除' + edited_ago_by_html: '%{user}が%{time_ago}に編集' version: バージョン in_changeset: 変更セット anonymous: 匿名 @@ -1795,7 +1795,7 @@ ja: facebook: title: Facebookでログイン alt: Facebook アカウントを使用してログイン - windowslive: + microsoft: title: Microsoftでログイン alt: Microsoftアカウントでログイン github: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index d2cb1a0d7..a5abc42d7 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -984,7 +984,7 @@ kab: facebook: title: Qqen s Facebook alt: Qqen s umidan Facebook - windowslive: + microsoft: title: Qqen s Windows Live alt: Qqen s umiḍan Windows Live github: diff --git a/config/locales/km.yml b/config/locales/km.yml index bd6415282..d32001d7b 100644 --- a/config/locales/km.yml +++ b/config/locales/km.yml @@ -673,7 +673,7 @@ km: title: កត់ឈ្មោះចូលដោយប្រើ Google facebook: title: កត់ឈ្មោះចូលដោយប្រើ Facebook - windowslive: + microsoft: title: កត់ឈ្មោះចូលដោយប្រើ Windows Live github: title: កត់ឈ្មោះចូលដោយប្រើ GitHub diff --git a/config/locales/kn.yml b/config/locales/kn.yml index 5925bc1a1..1a2964d20 100644 --- a/config/locales/kn.yml +++ b/config/locales/kn.yml @@ -170,7 +170,7 @@ kn: none: ಯಾವುದೂ ಇಲ್ಲ google: ಗೂಗಲ್ facebook: ಫೇಸ್‍ಬುಕ್ - windowslive: ವಿಂಡೋಸ್ ಲೈವ್ + microsoft: ವಿಂಡೋಸ್ ಲೈವ್ github: ಗಿಟ್‌ಹಬ್ wikipedia: ವಿಕಿಪೀಡಿಯ api: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 9fe8930a3..8783f551e 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1686,7 +1686,7 @@ ko: facebook: title: 페이스북으로 로그인 alt: 페이스북 계정으로 로그인하기 - windowslive: + microsoft: title: 윈도 라이브로 로그인하기 alt: 윈도 라이브 계정으로 로그인하기 github: diff --git a/config/locales/ksh.yml b/config/locales/ksh.yml index 3afc544cf..3cf67f7b5 100644 --- a/config/locales/ksh.yml +++ b/config/locales/ksh.yml @@ -228,7 +228,7 @@ ksh: facebook: title: Donn övver ene Zohjang op Facebook ennlogge alt: Donn övver ene Zohjang op Facebook ennlogge - windowslive: + microsoft: title: Donn medd enem Zohjang op Windows Live ennlogge alt: Donn medd enem Zohjang op Windows Live ennlogge github: diff --git a/config/locales/ku-Latn.yml b/config/locales/ku-Latn.yml index 5f245f4f8..1d45aad4f 100644 --- a/config/locales/ku-Latn.yml +++ b/config/locales/ku-Latn.yml @@ -1852,7 +1852,7 @@ ku-Latn: facebook: title: Bi Facebookê têkeve alt: Bi hesabekî Facebookê têkeve - windowslive: + microsoft: title: Bi Windows Live'ê têkeve alt: Bi hesabê xwe yê Windows Liveê têkeve github: diff --git a/config/locales/lb.yml b/config/locales/lb.yml index 7d92e3a5a..7d04b25fb 100644 --- a/config/locales/lb.yml +++ b/config/locales/lb.yml @@ -1840,7 +1840,7 @@ lb: facebook: title: Mat Facebook aloggen alt: Mat engem Facebook Benotzerkont aloggen - windowslive: + microsoft: title: Mat Microsoft aloggen alt: Mat engem Microsoft-Benotzerkont aloggen github: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index b09bc0c78..7447cf521 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1775,6 +1775,9 @@ lt: home location: Pradinė lokacija no home location: JÅ«s neįvedėte savo namų pozicijos update home location on click: Atnaujinti namų poziciją paspaudus ant žemėlapio? + show: Rodyti + delete: Trinti + undelete: Anuliuoti trynimą update: success: Profilis atnaujintas. failure: Nepavyko atnaujinti profilio. @@ -1803,7 +1806,7 @@ lt: facebook: title: Prisijungti su Facebook alt: Prisijungti su Facebook paskyra - windowslive: + microsoft: title: Prisijungti su Windows Live alt: Prisijungti su Windows Live paskyra github: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 3c78c0c8a..4133eec39 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1462,7 +1462,7 @@ lv: facebook: title: Pieslēgties ar Facebook alt: Pieslēgties ar Facebook kontu - windowslive: + microsoft: title: Pieslēgties ar Microsoft alt: Pieslēgties ar Microsoft kontu github: diff --git a/config/locales/mk.yml b/config/locales/mk.yml index 720b34c6b..1e4085af7 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -1859,7 +1859,7 @@ mk: facebook: title: Најава со Фејсбук alt: Најава со профил на Фејсбук - windowslive: + microsoft: title: Најава со Microsoft alt: Најава со сметка на Microsoft github: diff --git a/config/locales/mo.yml b/config/locales/mo.yml index 1fe000ae9..b8183b232 100644 --- a/config/locales/mo.yml +++ b/config/locales/mo.yml @@ -580,7 +580,7 @@ mo: facebook: title: Ынтраря ку ажуторул Facebook alt: Ынтраря ку ажуторул контулуй де Facebook - windowslive: + microsoft: title: Ынтраря ку ажуторул Windows Live alt: Ынтраря ку ажуторул контулуй де Windows Live github: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 129e0d1a1..09186db88 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1464,7 +1464,7 @@ ms: facebook: title: Log masuk dengan Facebook alt: Log masuk dengan Akuan Facebook - windowslive: + microsoft: title: Log masuk dengan Window Live alt: Log masuk dengan Akaun Windows Live github: diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 34e08cea6..6d8323aab 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -1616,7 +1616,7 @@ nb: facebook: title: Logg inn med Facebook alt: Logg inn med en Facebook-konto - windowslive: + microsoft: title: Logg inn med Microsoft alt: Logg inn med en Microsoft-konto github: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 95794336a..0be36dcf6 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1931,7 +1931,7 @@ nl: facebook: title: Aanmelden met Facebook alt: Aanmelden met een Facebookaccount - windowslive: + microsoft: title: Aanmelden met Microsoft alt: Aanmelden met een Microsoft-account github: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index e5cda0b9c..b6c0ba2c8 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1209,7 +1209,7 @@ nn: facebook: title: Logg inn med Facebook alt: Logg inn med ein Facebook-konto - windowslive: + microsoft: title: Logg inn med Windows Live alt: Logg inn med ein Windows Live-konto github: diff --git a/config/locales/nqo.yml b/config/locales/nqo.yml index d40120227..846b4375e 100644 --- a/config/locales/nqo.yml +++ b/config/locales/nqo.yml @@ -178,7 +178,7 @@ nqo: openid: ߏߔߌ߲ ID google: ߜ߭ߎߜ߭ߏߟ facebook: ߝߋߛߑߓߎߞ - windowslive: ߡߌߞߙߏߛߐߝߕ + microsoft: ߡߌߞߙߏߛߐߝߕ github: GitHub wikipedia: ߥߞߌߔߋߘߌߦߊ api: @@ -1369,7 +1369,7 @@ nqo: facebook: title: ߌ ߜߊ߲߬ߞߎ߲߫ ߝߋߛߑߓߎߞ ߟߊ߫ alt: ߌ ߜߊ߲߬ߞߎ߲߫ ߝߋߛߑߓߎߞ ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߟߊ߫ - windowslive: + microsoft: title: ߌ ߜ߭ߊ߲߬ߞߎ߲߫ ߥߌ߲ߘߏߥߛ ߟߊߌߝ߭ ߟߊ߫ alt: ߌ ߜߊ߲߬ߞߎ߲߫ ߥߌ߲ߘߏߥߛ ߟߊߌߝ߭ ߖߊ߬ߕߋ߬ߘߊ ߟߊ߫ github: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 2e98de102..6d2b120ac 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -1806,7 +1806,7 @@ oc: facebook: title: Se connectar amb Facebook alt: Se connectar amb un commpte Facebook - windowslive: + microsoft: title: Se connectar amb Windows Live alt: Se connectar amb un compte Windows Live github: diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 50a2e90cf..6d71349c5 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -129,7 +129,7 @@ pa: none: ਕੋਈ ਨਹੀਂ google: ਗੂਗਲ facebook: ਫੇਸਬੁੱਕ - windowslive: ਵਿੰਡੋਜ਼ ਲਾਈਵ + microsoft: ਵਿੰਡੋਜ਼ ਲਾਈਵ github: ਗਿੱਟਹੱਬ wikipedia: ਵਿਕੀਪੀਡੀਆ api: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f248db1c1..51285dae1 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1957,7 +1957,7 @@ pl: facebook: title: Zaloguj się przez Facebooka alt: Zaloguj się przez konto Facebook - windowslive: + microsoft: title: Zaloguj się przez Microsoft alt: Zaloguj się kontem Microsoft github: diff --git a/config/locales/pnb.yml b/config/locales/pnb.yml index 1ce103fea..d085b897b 100644 --- a/config/locales/pnb.yml +++ b/config/locales/pnb.yml @@ -210,7 +210,7 @@ pnb: openid: اوپن آئی ڈی google: گوگل facebook: فیسبوک - windowslive: وِنڈوز لائیو + microsoft: وِنڈوز لائیو github: گِٹ ہب wikipedia: وِکیپیدیا api: @@ -1463,7 +1463,7 @@ pnb: facebook: title: فیس‌بوک نال لوگ‌این کرو alt: فیسبوک ورتو - windowslive: + microsoft: title: وینڈوز لائیو نال لوگ‌این کرو alt: وینڈوز لائیو ورتو github: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 5b3c3bdd5..ffe0f4ff8 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -252,6 +252,7 @@ pt-PT: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipédia api: @@ -403,7 +404,7 @@ pt-PT: history_title_html: 'Histórico da Linha: %{name}' nodes: Nós nodes_count: - one: 1 nó + one: '%{count} nó' other: '%{count} nós' also_part_of_html: one: parte da linha %{related_ways} @@ -583,8 +584,8 @@ pt-PT: reply_link: Enviar mensagem ao autor comment_count: one: '%{count} comentário' - zero: Sem comentários other: '%{count} comentários' + no_comments: Sem comentários edit_link: Editar hide_link: Ocultar unhide_link: Mostrar @@ -859,7 +860,7 @@ pt-PT: stable: Estábulo static_caravan: Caravana temple: Edíficio de templo - terrace: Edifício terraçado + terrace: Edifício geminado train_station: Edifício de estação dos comboios university: Edifício universitário warehouse: Armazém @@ -1130,13 +1131,13 @@ pt-PT: "yes": Desfiladeiro natural: atoll: Atol - bare_rock: Rocha visível + bare_rock: Rocha exposta bay: Baía beach: Praia cape: Cabo cave_entrance: Entrada de gruta cliff: Precipício - coastline: Litoral + coastline: Linha costeira crater: Cratera dune: Duna fell: Encosta desflorestada @@ -1471,9 +1472,9 @@ pt-PT: show: title: '%{status} Denúncia #%{issue_id}' reports: - zero: Sem denúncias - one: 1 denúncia + one: '%{count} denúncia' other: '%{count} denúncias' + no_reports: Sem denúncias report_created_at: Denunciado pela primeira vez em %{datetime} last_resolved_at: Resolvido pela última vez em %{datetime} last_updated_at: Atualizado pela última vez em %{datetime} por %{displayname} @@ -1875,6 +1876,9 @@ pt-PT: home location: Localização principal no home location: Não definiste a tua localização principal. update home location on click: Atualizar a localização ao clicar no mapa? + show: Mostrar + delete: Eliminar + undelete: Desfazer eliminação update: success: Perfil atualizado. failure: Não foi possível atualizar o perfil. @@ -1903,7 +1907,7 @@ pt-PT: facebook: title: Iniciar sessão com o Facebook alt: Iniciar sessão com uma conta do Facebook - windowslive: + microsoft: title: Iniciar sessão com Microsoft alt: Iniciar sessão com uma conta Microsoft github: @@ -2978,7 +2982,9 @@ pt-PT: index: title: Notas submetidas ou comentadas por %{user} heading: Notas de %{user} - subheading_html: Notas submetidas ou comentadas por %{user} + subheading_html: Notas %{submitted} ou %{commented} por %{user} + subheading_submitted: enviada + subheading_commented: comentada em no_notes: Sem notas id: Id creator: Criador @@ -3004,7 +3010,7 @@ pt-PT: anonymous_warning: Esta nota inclui comentários de utilizadores anónimos que devem ser confirmados por fonte independente. hide: Esconder - resolve: Marcar como resolvido + resolve: Marcar como resolvida reactivate: Reabrir comment_and_resolve: Comentar e resolver comment: Comentar diff --git a/config/locales/pt.yml b/config/locales/pt.yml index fe8160327..5247428bb 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -1913,7 +1913,7 @@ pt: facebook: title: Entrar com o Facebook alt: Entrar com uma conta do Facebook - windowslive: + microsoft: title: Entrar com o Windows Live alt: Entrar com uma conta do Windows Live github: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index ae2b93da1..f9007390f 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -185,40 +185,50 @@ ro: few: aproximativ %{count} ore în urmă}} other: …}} about_x_months: - one: aproximativ 1 lună în urmă - other: aproximativ %{count} luni în urmă + one: aproximativ o lună în urmă + few: aproximativ %{count} luni în urmă + other: aproximativ %{count} de luni în urmă about_x_years: - one: aproximativ 1 an în urmă - other: aproximativ %{count} ani în urmă + one: aproximativ un an în urmă + few: aproximativ %{count} ani în urmă + other: aproximativ %{count} de ani în urmă almost_x_years: - one: aproape 1 an în urmă - few: acum câțiva ani - other: aproape %{count} ani în urmă + one: aproape un an în urmă + few: aproape %{count} ani în urmă + other: aproape %{count} de ani în urmă half_a_minute: o jumătate de minut în urmă less_than_x_seconds: - one: mai puțin de 1 secundă în urmă - other: aproximativ acum %{count} luni în urmă + one: mai puțin de o secundă în urmă + few: mai puțin de %{count} secunde în urmă + other: mai puțin de %{count} de secunde în urmă less_than_x_minutes: one: mai puțin de un minut în urmă - other: mai puțin de %{count} minute în urmă + few: mai puțin de %{count} minute în urmă + other: mai puțin de %{count} de minute în urmă over_x_years: - one: acum peste 1 an - other: peste %{count} ani în urmă + one: mai mult de un an în urmă + few: mai mult de %{count} ani în urmă + other: mai mult de %{count} de ani în urmă x_seconds: - one: acum 1 secundă - other: cu %{count} secunde în urmă + one: acum o secundă + few: cu %{count} secunde în urmă + other: cu %{count} de secunde în urmă x_minutes: - one: acum 1 minut - other: cu %{count} minute în urmă + one: acum un minut + few: cu %{count} minute în urmă + other: cu %{count} de minute în urmă x_days: - one: acum 1 zi - other: cu %{count} zile în urmă + one: acum o zi + few: cu %{count} zile în urmă + other: cu %{count} de zile în urmă x_months: - one: acum 1 lună - other: cu %{count} luni în urmă + one: acum o lună + few: cu %{count} luni în urmă + other: cu %{count} de luni în urmă x_years: - one: acum 1 an - other: cu %{count} ani în urmă + one: acum un an + few: cu %{count} ani în urmă + other: cu %{count} de ani în urmă editor: default: Implicit (în prezent %{name}) id: @@ -233,6 +243,7 @@ ro: openid: OpenID google: OpenID facebook: OpenID + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -273,6 +284,15 @@ ro: de alte conturi. retain_caveats: 'Cu toate acestea, unele informații despre dvs. vor fi păstrate pe OpenStreetMap, chiar și după ștergerea contului:' + retain_edits: Editările dvs. la baza de date a hărții, dacă există, vor fi + păstrate. + retain_traces: Înregistrările încărcate, dacă există, vor fi păstrate. + retain_diary_entries: Înregistrările și comentariile din jurnal, dacă există, + vor fi păstrate, dar ascunse. + retain_notes: Notele dvs. de hartă și comentariile notelor, dacă există, vor + fi reținute, dar ascunse pentru vedere. + retain_changeset_discussions: Discuțiile dvs. privind setul de modificări, + dacă există, vor fi păstrate. retain_email: Adresa dvs. de e-mail va fi păstrată. confirm_delete: Sunteți sigur(ă)? cancel: Anulează @@ -357,6 +377,8 @@ ro: relation: Comunicații (%{count}) relation_paginated: Comunicații (%{x}-%{y} din %{count}) comment: Comentarii (%{count}) + hidden_comment_by_html: Comentariu ascuns de la %{user} %{time_ago} + comment_by_html: Comentariu de la %{user} %{time_ago} changesetxml: Set de modificări XML osmchangexml: XML osmChange feed: @@ -374,9 +396,9 @@ ro: history_title_html: 'Istoricul căii: %{name}' nodes: Noduri nodes_count: - one: 1 nod + one: un nod few: '%{count} noduri' - other: "" + other: '%{count} de noduri' also_part_of_html: one: parte a liniei de %{related_ways} other: parte din liniile de %{related_ways} @@ -385,9 +407,9 @@ ro: history_title_html: 'Istoricul relației: %{name}' members: Membri members_count: - one: 1 membru + one: un membru few: '%{count} membri' - other: "" + other: '%{count} de membri' relation_member: entry_role_html: '%{type} %{name} ca %{role}' type: @@ -499,6 +521,8 @@ ro: friend: Prieten show: title: Dashboardul meu + no_home_location_html: '%{edit_profile_link} și setați locația de acasă pentru + a vedea utilizatorii din apropiere.' edit_your_profile: Editați-vă profilul my friends: Prietenii mei no friends: Nu ați adăugat încă niciun prieten. @@ -549,9 +573,9 @@ ro: comment_link: Comentează la această înregistrare reply_link: Trimite un mesaj autorului comment_count: - zero: Niciun comentariu - one: '%{count} comentariu' - other: '%{count} comentarii' + one: Un comentariu + few: '%{count} comentarii' + other: '%{count} de comentarii' no_comments: Fără comentarii edit_link: Editează această înregistrare hide_link: Ascunde această înregistrare @@ -580,6 +604,9 @@ ro: title: Înregistrări în jurnalul OpenStreetMap description: Înregistrări recente în jurnale de la utilizatorii OpenStreetMap comments: + title: Comentarii din jurnal adăugate de %{user} + heading: Comentariile la jurnal a lui %{user} + subheading_html: Comentarii din jurnal adăugate de %{user} no_comments: Fără comentarii din jurnal post: Postează when: Când @@ -592,8 +619,16 @@ ro: create: notice: Aplicație înregistrată. errors: + contact: + contact_url_title: Diferite metode de contact explicate + contact: contact + contact_the_community_html: Simțiți-vă liber să %{contact_link} comunitatea + OpenStreetMap dacă ați găsit un link invalid/o eroare. Notați adresa URL exactă + a solicitării dvs. forbidden: title: Interzis + description: Operația pe care ați solicitat-o pe serverul OpenStreetMap este + disponibilă numai pentru administratori (HTTP 403) internal_server_error: title: Eroare aplicație description: Serverul OpenStreetMap a întâlnit o condiție neașteptată care l-a @@ -1829,6 +1864,9 @@ ro: no home location: Nu ați introdus locația dvs. de domiciliu. update home location on click: Actualizați locația locuinței dvs. când faceți click pe hartă? + show: Arată + delete: Șterge + undelete: Anulează ștergerea update: success: Profil actualizat. failure: Nu s-a putut actualiza profilul. @@ -1857,7 +1895,7 @@ ro: facebook: title: Autentificare cu Facebook alt: Conectați-vă cu un cont Facebook - windowslive: + microsoft: title: Conectare cu Microsoft alt: Conectare cu un Cont Microsoft github: @@ -2057,6 +2095,12 @@ ro: %{france}: Conține date provenite din Direction Générale des Impôts. contributors_fr_france: Franța + contributors_nl_credit_html: '%{netherlands}: Conține © AND data, 2007 + (%{and_link})' + contributors_nl_netherlands: Țările de Jos + contributors_nz_credit_html: |- + %{new_zealand}: Conține date provenite din %{linz_data_service_link} + și licențiate pentru reutilizare sub %{cc_by_link}. contributors_nz_new_zealand: Noua Zeelandă contributors_nz_linz_data_service: Serviciul de date LINZ contributors_nz_cc_by: CC BY 4.0 @@ -2243,8 +2287,19 @@ ro: removed: Editorul dvs. implicit OpenStreetMap este setat ca Potlatch. Deoarece Adobe Flash Player a fost retras, Potlatch nu mai este disponibil pentru utilizare într-un browser web. + desktop_application_html: Puteți utiliza în continuare Potlatch %{download_link}. + download: descărcând aplicația desktop pentru Mac și Windows + id_editor_html: Alternativ, puteți seta editorul implicit la iD, care rulează + în browserul dvs. web așa cum a făcut anterior Potlatch. %{change_preferences_link}. + change_preferences: Schimbați-vă preferințele aici any_questions: title: Întrebări? + paragraph_1_html: |- + OpenStreetMap vă pune la dispoziție resurse pentru a afla despre proiect, pentru a pune și a răspunde la + întrebări și pentru a discuta și a documenta colaborativ despre cartografiere. + %{help_link}. Ești o organizație care are planuri pentru OpenStreetMap? %{welcome_mat_link}. + get_help_here: Obțineți ajutor aici + welcome_mat: Consultați Pagina de Bun Venit sidebar: search_results: Rezultatele căutării close: Închide @@ -2297,6 +2352,7 @@ ro: common: - Comun - luncă + - grădină retail: Spațiul de retail industrial: Zonă industrială commercial: Zonă comercială @@ -2336,18 +2392,71 @@ ro: lucruri pe care trebuie să le cunoașteți. whats_on_the_map: title: Ce este pe Hartă + on_the_map_html: |- + OpenStreetMap este un loc pentru cartografierea lucrurilor care sunt %{real_and_current} - + include milioane de clădiri, drumuri și alte detalii despre locații. Puteți pune pe hartă orice caracteristici ale limii reale de care sunteți interesați. + real_and_current: reale și curente + off_the_map_html: Ce %{doesnt} include sunt date subiective cum ar fi recenzii, + date istorice sau ipotetice și date provenite din surse protejate prin drepturi + de autor. Dacă nu aveți permisiune, nu copiați de pe hărți online sau hărți + clasice. + doesnt: nu basic_terms: title: Termeni de bază pentru cartografiere paragraph_1: OpenStreetMap are propriul jargon. Iată câteva cuvinte cheie care vă vor veni în ajutor. + an_editor_html: Un %{editor} este un program sau un website pe care îl puteți + utiliza pentru a edita harta. + a_node_html: Un %{node} este un punct de pe hartă, de exemplu un singur restaurant + sau copac. + a_way_html: O %{way} este o linie sau o zonă, cum ar fi un drum, un curs de + apă, un lac sau o clădire. + a_tag_html: O %{tag} este un atribut al unui nod sau a unei căi, de exemplu + numele restaurantului sau limita de viteză a unui drum. + editor: editor + node: nod + way: cale + tag: etichetă rules: title: Reguli! + para_1_html: |- + OpenStreetMap are puține reguli formale, dar ne așteptăm ca toți participanții să colaboreze și să comunice cu comunitatea. Dacă vă gândiți la + orice activități, altele decât editarea manuală, vă rugăm să citiți și să urmați instrucțiunile de pe + %{imports_link} și %{automated_edits_link}. + imports: Importurile + automated_edits: Editări automate start_mapping: Începeți să cartografiați add_a_note: title: Nu aveți timp pentru editare? Adaugați o notă! para_1: |- Dacă doriți doar ceva îndreptați o eroare minoră și nu aveți timp să vă înscrieți și să învățați cum să editați, este ușor să adăugați o notă. + para_2_html: |- + Accesați %{map_link} și faceți clic pe pictograma notă: %{note_icon}. + Acest lucru va adăuga un marcator pe hartă, pe care îl puteți muta prin glisare. + Adăugați mesajul dvs., apoi faceți clic pe Salvare și alți cartografi vor investiga. + the_map: harta + communities: + title: Comunitățile + lede_text: "Oameni din întreaga lume contribuie sau folosesc OpenStreetMap.\nÎn + timp ce mulți participă ca indivizi, alții au format comunități.\nAceste grupuri + au o gamă largă de dimensiuni și reprezintă zone geografice de la orașe mici + până la regiuni mari cu mai multe țări. \nDe asemenea, pot fi formale sau + informale." + local_chapters: + title: Capitolele locale + about_text: |- + Capitolele locale sunt grupuri la nivel de țară sau la nivel de regiune care au făcut pasul oficial de + înființarea de entități juridice non-profit. Ele reprezintă harta și cartografii zonei atunci când au de-a face cu administrația locală, firme și mass-media. Ei și-au format, de asemenea, o afiliere + cu Fundația OpenStreetMap (OSMF), oferindu-le o legăturăa către organismul de conducere legal și de drepturi de autor. + list_text: 'Următoarele comunități sunt înființate oficial drept capitole + locale:' + other_groups: + title: Alte Grupuri + other_groups_html: |- + Nu este nevoie să se înființeze în mod oficial un grup în aceeași măsură ca și Capitolele locale. + Într-adevăr, multe grupuri există cu mare succes ca o adunare informală de oameni sau ca un grup comunitar. Oricine le poate configura sau se poate alătura. Citiți mai multe pe %{communities_wiki_link}. + communities_wiki: Pagina wiki comunități traces: visibility: private: Privat (partajat ca puncte anonime, neordonate) @@ -2411,9 +2520,9 @@ ro: trace: pending: ÎN AȘTEPTARE count_points: - one: 1 punct + one: un punct few: '%{count} puncte' - other: "" + other: '%{count} de puncte' more: mai multe trace_details: Vezi detaliile urmei view_map: Vezi hartă @@ -2426,11 +2535,20 @@ ro: in: în index: public_traces: Trasee GPS publice + my_gps_traces: Track-uri GPS public_traces_from: Traseele GPS publice de la %{user} description: Căutați încărcări recente din traseul GPS tagged_with: etichetat cu %{tags} + empty_title: Nimic aici încă + empty_upload_html: '%{upload_link} sau aflați mai multe despre înregistrările + GPS pe %{wiki_link}.' + upload_new: Încărcați un track nou + wiki_page: pagina wiki upload_trace: Încărcați urma + all_traces: Toate track-urile my_traces: Înregistrările mele GPS + traces_from: Traseele GPS publice de la %{user} + remove_tag_filter: Eliminați filtrul de etichete destroy: scheduled_for_deletion: Traseul este programat pentru ștergere make_public: @@ -2465,6 +2583,9 @@ ro: de acord, dar trebuie să le vizualizați. settings_menu: account_settings: Setările contului + oauth1_settings: Setări OAuth 1 + oauth2_applications: Aplicații OAuth 2 + oauth2_authorizations: Autorizări OAuth 2 oauth: authorize: title: Autorizați accesul la contul dvs. @@ -2492,6 +2613,16 @@ ro: flash: Ați revocat tokenul pentru %{application} permissions: missing: Nu ați permis accesul aplicației la această facilitate + scopes: + read_prefs: Citiți preferințele utilizatorului + write_prefs: Modificați preferințele utilizatorului + write_diary: Creează înregistrări în jurnal, comentarii și fă-ți prieteni + write_api: Modificați harta + read_gpx: Citiți track-urile GPS private + write_gpx: Încărcați track-uri GPS + write_notes: Modificați notele + read_email: Citiți adresa de e-mail a utilizatorului + skip_authorization: Aprobare automată a cererii oauth_clients: new: title: Înregistrare aplicație nouă @@ -2534,8 +2665,40 @@ ro: flash: Actualizarea informațiilor despre client cu succes destroy: flash: A distrus înregistrarea aplicației clientului + oauth2_applications: + index: + title: Aplicațiile mele client + no_applications_html: Aveți o aplicație pe care doriți să o înregistrați pentru + a fi utilizată la noi folosind standardul %{oauth2}? Trebuie să vă înregistrați + aplicația înainte ca aceasta să poată face solicitări OAuth către acest serviciu. + new: Înregistrați o nouă aplicație + name: Nume + permissions: Permisiuni + application: + edit: Editați + delete: Șterge + confirm_delete: Ștergeți această aplicație? + new: + title: Înregistrați o nouă aplicație + edit: + title: Editați-vă aplicația + show: + edit: Editați + delete: Șterge + confirm_delete: Ștergeți această aplicație? + client_id: ID client + client_secret: Secretul clientului + client_secret_warning: Asigurați-vă că salvați acest secret - nu va fi accesibil + din nou + permissions: Permisiuni + redirect_uris: Redirecționați URI-uri + not_found: + sorry: Ne pare rău, acea aplicație nu a putut fi găsită. oauth2_authorizations: new: + title: Este necesară autorizarea + introduction: Autorizați %{application} să vă acceseze contul cu următoarele + permisiuni? authorize: Autorizează deny: Respinge error: @@ -2544,8 +2707,10 @@ ro: title: Code de autorizare oauth2_authorized_applications: index: + title: Aplicațiile mele autorizate application: Aplicație permissions: Permisiuni + no_applications_html: Nu ați autorizat încă nicio aplicație %{oauth2}. application: revoke: Revocă accesul confirm_revoke: Revocați accesul acestei aplicații? @@ -2554,8 +2719,17 @@ ro: title: Înregistrare no_auto_account_create: Din păcate, în prezent nu putem crea automat un cont pentru dvs. + please_contact_support_html: Vă rugăm să contactați %{support_link} pentru a + aranja crearea unui cont - vom încerca să rezolvăm solicitarea cât mai repede + posibil. + support: suport about: header: Liberă și editabilă + paragraph_1: Spre deosebire de alte hărți, OpenStreetMap este creat complet + de oameni ca tine și este gratuit pentru oricine să repare, să actualizeze, + să descarce și să folosească. + paragraph_2: Înscrie-te pentru a începe să contribui. Vă vom trimite un e-mail + pentru a vă confirma contul. display name description: Numele dvs. de utilizator afișat public. Puteți schimba acest lucru mai târziu în preferințe. external auth: 'Verificarea terță parte:' @@ -2564,6 +2738,11 @@ ro: dar unele instrumente suplimentare sau serverul pot avea nevoie de una. continue: Înregistrare terms accepted: Vă mulțumim pentru acceptarea noilor termeni de contribuire! + email_confirmation_help_html: Adresa dvs. nu este afișată public, consultați + %{privacy_policy_link} pentru mai multe informații. + privacy_policy: Politica de confidențialitate + privacy_policy_title: Politica de confidențialitate OSMF, inclusiv secțiunea + privind adresele de e-mail terms: title: Termeni heading: Termeni @@ -2582,6 +2761,10 @@ ro: în Domeniul Public consider_pd_why: Ce este aceasta? consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain + guidance_info_html: 'Informații pentru a ajuta la înțelegerea acestor termeni: + un %{readable_summary_link} și câteva %{informal_translations_link}' + readable_summary: rezumat care poate fi citit de om + informal_translations: traduceri informale continue: Continuă decline: Declină you need to accept or decline: Citiți și apoi acceptați sau refuzați continuarea @@ -2614,6 +2797,7 @@ ro: my_dashboard: Dashboardul meu blocks on me: Blochează pe mine blocks by me: Blochează de mine + edit_profile: Editează profilul send message: Trimite mesajul diary: Jurnal edits: Modificare @@ -2645,6 +2829,8 @@ ro: create_block: Blochează acest utilizator activate_user: Activează acest utilizator confirm_user: Confirmă acest utilizator + unconfirm_user: Deconfirmați acest utilizator + unsuspend_user: Anulați suspendarea acestui utilizator hide_user: Ascunde acest utilizator unhide_user: Descoperă acest utilizator delete_user: Șterge acest utilizator @@ -2667,12 +2853,19 @@ ro: suspended: title: Cont Suspendat heading: Cont Suspendat + support: suport + automatically_suspended: Ne pare rău, contul dvs. a fost suspendat automat din + cauza activității suspecte. + contact_support_html: Această decizie va fi examinată de un administrator în + curând sau puteți contacta %{support_link} dacă doriți să discutați despre + acest lucru. auth_failure: connection_failed: Conectarea la furnizorul de autentificare a eșuat invalid_credentials: Autentificări nevalide de autentificare no_authorization_code: Nu există cod de autorizare unknown_signature_algorithm: Algoritm de semnătură necunoscut invalid_scope: Domeniu nevalid + unknown_error: Autentificare eșuată auth_association: heading: ID-ul dvs. nu este încă asociat cu un cont OpenStreetMap. option_1: |- @@ -2753,20 +2946,25 @@ ro: time_past_html: Terminat în urmă cu %{time}. block_duration: hours: - one: 1 oră - other: '%{count} ore' + one: o oră + few: '%{count} ore' + other: '%{count} de ore' days: - one: 1 zi - other: '%{count} zile' + one: o zi + few: '%{count} zile' + other: '%{count} de zile' weeks: - one: 1 săptămână - other: '%{count} săptămâni' + one: o săptămână + few: '%{count} săptămâni' + other: '%{count} de săptămâni' months: - one: 1 lună - other: '%{count} luni' + one: o lună + few: '%{count} luni' + other: '%{count} de luni' years: - one: 1 an - other: '%{count} ani' + one: un an + few: '%{count} ani' + other: '%{count} de ani' blocks_on: title: Blocări pe %{name} heading_html: Lista blocărilor pe %{name} @@ -2808,7 +3006,9 @@ ro: index: title: Notele trimise sau comentate de %{user} heading: Notele %{user} - subheading_html: Notele trimise sau comentate de %{user} + subheading_html: Note %{submitted} sau %{commented} de %{user} + subheading_submitted: trimise + subheading_commented: comentate no_notes: Nicio notă id: Id creator: Creator @@ -2821,6 +3021,15 @@ ro: open_title: 'Notă nerezolvată #%{note_name}' closed_title: 'Notă rezolvată #%{note_name}' hidden_title: 'Notă ascunsă #%{note_name}' + event_opened_by_html: Creat de %{user} %{time_ago} + event_opened_by_anonymous_html: Creat anonim %{time_ago} + event_commented_by_html: Comentariu de la %{user} %{time_ago} + event_commented_by_anonymous_html: Comentariu anonim %{time_ago} + event_closed_by_html: Rezolvată de %{user} %{time_ago} + event_closed_by_anonymous_html: Rezolvată anonim %{time_ago} + event_reopened_by_html: Reactivată de %{user} %{time_ago} + event_reopened_by_anonymous_html: Reactivată anonim %{time_ago} + event_hidden_by_html: Ascunsă de %{user} %{time_ago} report: Raportează această notă anonymous_warning: Această notă include comentarii de la utilizatori anonimi, care ar trebui verificați independent. @@ -2829,6 +3038,12 @@ ro: reactivate: Reactivează comment_and_resolve: Comentariu & Rezolvare comment: Comentariu + report_link_html: Dacă această notă conține informații sensibile care trebuie + eliminate, puteți %{link}. + other_problems_resolve: Pentru toate celelalte probleme legate de notă, vă rugăm + să o rezolvați singur printr-un comentariu. + other_problems_resolved: Pentru toate celelalte probleme, rezolvarea este suficientă. + disappear_date_html: Această notă rezolvată va dispărea de pe hartă în %{disappear_in}. new: title: Notă nouă intro: A apărut o greșeală sau lipsește ceva? Lăsați alți cartografi să știe @@ -2875,11 +3090,11 @@ ro: metersPopup: one: Sunteți la un metru de acest punct few: Sunteți la %{count} metri de acest punct - other: "" + other: Sunteți la %{count} de metri de acest punct feetPopup: - one: Sunteți la un picior unitate de măsură de acest punct - few: Sunteți la %{count} picioare unitate de măsură de acest punct - other: "" + one: Sunteți la un picior de acest punct + few: Sunteți la %{count} picioare de acest punct + other: Sunteți la %{count} de picioare de acest punct base: standard: Standard cyclosm: CyclOSM @@ -2901,6 +3116,9 @@ ro: osm_france: OpenStreetMap Franța thunderforest_credit: Plăci prin amabilitatea lui %{thunderforest_link} andy_allan: Andy Allan + opnvkarte_credit: Tile-uri prin amabilitatea lui %{memomaps_link} + memomaps: MeMoMaps + hotosm_credit: Stilul tile-urilor creat de %{hotosm_link} găzduit de %{osm_france_link} hotosm_name: Echipa Umanitară OpenStreetMap site: edit_tooltip: Modifică harta diff --git a/config/locales/ru.yml b/config/locales/ru.yml index f83b663a5..f96ebc048 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -425,6 +425,7 @@ ru: closed: Закрыто created_ago_html: Создано %{time_ago} closed_ago_html: Закрыто %{time_ago} + created_ago_by_html: Создал %{time_ago} %{user} edited_ago_by_html: Редактировал %{time_ago} %{user} version: Версия in_changeset: Пакет правок @@ -455,6 +456,7 @@ ru: relation: Отношения (%{count}) relation_paginated: Отношения (%{x}-%{y} из %{count}) comment: Комментарии (%{count}) + comment_by_html: Комментарий от %{user} %{time_ago} changesetxml: XML пакета правок osmchangexml: osmChange XML feed: @@ -653,6 +655,7 @@ ru: one: '%{count} комментарий' zero: Нет комментариев other: '%{count} комментариев' + no_comments: Нет комментариев edit_link: Изменить запись hide_link: Скрыть эту запись unhide_link: Отобразить эту запись @@ -730,6 +733,7 @@ ru: search: title: results_from_html: Результаты из %{results_link} + latlon: Внутренний search_osm_nominatim: prefix: aerialway: @@ -960,6 +964,7 @@ ru: ambulance_station: Станция скорой медицинской помощи assembly_point: Место сбора defibrillator: Дефибриллятор + fire_water_pond: Пожарный водоём landing_site: Место аварийной посадки phone: Телефон экстренной связи water_tank: Пожарный водоём/резервуар @@ -1009,6 +1014,7 @@ ru: trailhead: Тропа trunk: Трасса trunk_link: Развязка + turning_circle: Разворотное кольцо turning_loop: Дорога для разворота unclassified: Дорога местного значения "yes": Дорога @@ -1146,6 +1152,7 @@ ru: pier: Пирс pipeline: Трубопровод pumping_station: Насосная станция + reservoir_covered: Крытый резервуар silo: Силос snow_cannon: Снежная пушка snow_fence: Снегозащитное заграждение @@ -1154,6 +1161,7 @@ ru: surveillance: Камера наблюдения telescope: Телескоп tower: Башня + utility_pole: Электрический столб wastewater_plant: Станция очистки сточных вод watermill: Водяная мельница water_tap: Водопроводный кран @@ -1220,6 +1228,7 @@ ru: water: Водоём wetland: Заболоченная территория wood: Лес + "yes": Природный объект office: accountant: Бухгалтер administrative: Администрация @@ -1358,6 +1367,7 @@ ru: funeral_directors: Похоронное бюро furniture: Мебель garden_centre: Садовый центр + gas: Магазин газового оборудования general: Магазин gift: Магазин подарков greengrocer: Овощной магазин @@ -1500,6 +1510,7 @@ ru: status: Статус reports: Сообщения last_updated: Последнее изменение + last_updated_time_ago_user_html: '%{time_ago} %{user}' link_to_reports: Просмотр сообщений reports_count: one: 1 сообщение @@ -1924,6 +1935,9 @@ ru: no home location: Вы не обозначили свое домашнее местоположение. update home location on click: Обновлять моё местоположение, когда я нажимаю на карту? + show: Показать + delete: Удалить + undelete: Отменить удаление update: success: Профиль обновлён. failure: Не удалось обновить профиль. @@ -1952,9 +1966,9 @@ ru: facebook: title: Войти с помощью Facebook alt: Войти с помощью учётной записи в Facebook - windowslive: - title: Войти с помощью Windows Live - alt: Войти с помощью учётной записи Windows Live + microsoft: + title: Войти с помощью Microsoft + alt: Войти с помощью учётной записи Microsoft github: title: Войти с GitHub alt: Войти с учётной записи на GitHub @@ -2054,10 +2068,29 @@ ru: legal_babble: title_html: Авторские права и лицензирование introduction_1_open_data: открытые данные + introduction_2_html: Вы можете свободно копировать, распространять, передавать + и дорабатывать наши данные до тех пор, пока вы ссылаетесь на OpenStreetMap + и его участников. Если вы изменяете или берёте наши данные за основу, то + вы должны распространять результат только по такой же лицензии. Полный %{legal_code_link} + юридический текст лицензии разъясняет ваши права и обязанности. credit_title_html: Как сослаться на OpenStreetMap credit_1_html: 'Если вы используете данные OpenStreetMap, вы должны выполнить следующие два условия:' + credit_2_1: Отдайте должное OpenStreetMap, поместив наше уведомление об авторских + правах. + credit_2_2: Дайте понять, что данные доступны по лицензии открытой базы данных. + credit_3_html: 'У нас есть различные требования к тому, как должно отображаться + наше уведомление об авторских правах: всё зависит от того, как вы используете + наши данные. Например, действуют разные правила при отображении уведомления + об авторских правах в разных случаях: создали ли вы просматриваемую карту, + печатную карту или статичное изображение. Полную информацию о требованиях + можно найти в %{attribution_guidelines_link}.' credit_3_attribution_guidelines: Руководство по атрибуции + credit_4_1_html: |- + Чтобы явно указать, что данные доступны по лицензии Open Database License, вы можете сослаться на %{this_copyright_page_link}. + В качестве альтернативы, а также в качестве требования, если вы распространяете OSM в виде набора данных, вы можете назвать лицензию(и) и дать на неё(них) прямую ссылку. + В СМИ, где ссылки физически невозможны (например, в печатных изданиях), мы предлагаем вам направлять читателей на сайт openstreetmap.org (возможно, расширив написание «OpenStreetMap» до полного веб-адреса) и на opendatacommons.org. + В этом примере, упоминание находится в углу карты. attribution_example: alt: Пример того, как сослаться на OpenStreetMap с веб-страницы title: Пример указания авторства @@ -2085,6 +2118,7 @@ ru: contributors_2_html: |- Для получения дополнительной информации об этих и других источниках, которые использовались для улучшения OpenStreetMap, см. %{contributors_page_link} на OpenStreetMap Wiki. + contributors_2_contributors_page: Страница авторов contributors_footer_2_html: Включение данных в OpenStreetMap не означает, что поставщик первичных данных каким-либо образом поддерживает OpenStreetMap, предоставляет гарантии или принимает на себя какую-любую ответственность. @@ -2333,6 +2367,7 @@ ru: с сообществом и общаться с ним. Если вы планируете какие-либо действия, кроме редактирования вручную, прочтите и следуйте инструкциям: %{imports_link} и %{automated_edits_link}. + imports: Импорты automated_edits: Автоматические правки start_mapping: Начать картографировать add_a_note: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 5660a99aa..11a947a05 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -221,6 +221,7 @@ sc: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -375,7 +376,7 @@ sc: history_title_html: 'Istòria de sa lìnia: %{name}' nodes: Nodos nodes_count: - one: 1 nodu + one: '%{count} nodu' other: '%{count} nodos' also_part_of_html: one: parte de sa lìnia %{related_ways} @@ -552,6 +553,7 @@ sc: comment_count: one: '%{count} cummentu' other: '%{count} cummentos' + no_comments: Perunu cummentu edit_link: Modìfica custa intrada hide_link: Cua custa intrada unhide_link: Ammustra custa intrada @@ -1443,6 +1445,7 @@ sc: reports: one: '%{count} sinnalatzione' other: '%{count} sinnalatziones' + no_reports: Perunu informe report_created_at: Sinnaladu pro sa prima borta su %{datetime} last_resolved_at: Risoltu pro s'ùrtima borta su %{datetime} last_updated_at: Ùrtima atualizatzione de %{displayname} su %{datetime} @@ -1853,6 +1856,9 @@ sc: no home location: No as insertadu sa positzione de incumintzu tua. update home location on click: Atualizare sa positzione de incumintzu incarchende in sa mapa? + show: Ammustra + delete: Iscantzella + undelete: Annulla s'iscantzellamentu update: success: Profilu atualizadu. failure: Non s'est pòdidu atualizare su profilu. @@ -1881,7 +1887,7 @@ sc: facebook: title: Intra cun Facebook alt: Intra cun unu contu de Facebook - windowslive: + microsoft: title: Intra cun Microsoft alt: Intra cun unu contu de Microsoft github: @@ -2994,7 +3000,9 @@ sc: index: title: Notas insertadas o cummentadas dae %{user} heading: Notas de %{user} - subheading_html: Notas imbiadas o cummentadas dae %{user} + subheading_html: Notas %{submitted} o %{commented} dae %{user} + subheading_submitted: imbiadas + subheading_commented: cummentadas no_notes: Peruna nota id: Id creator: Creadore diff --git a/config/locales/scn.yml b/config/locales/scn.yml index cb4aa3f5b..bf4cf06d1 100644 --- a/config/locales/scn.yml +++ b/config/locales/scn.yml @@ -1297,7 +1297,7 @@ scn: facebook: title: Trasi cu Facebook alt: Trasi cûn cuntu di Facebook - windowslive: + microsoft: title: Trasi cu Windows Live alt: Trasi cûn cuntu di Windows Live github: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index cc0b3b486..4e3fa8fa7 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -808,7 +808,7 @@ sco: facebook: title: Login wi Facebook alt: Login wi a Facebook Accoont - windowslive: + microsoft: title: Login wi Windows Live alt: Login wi a Windows Live Accoont github: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 7bd8b6e87..69551cb83 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1781,7 +1781,7 @@ sk: facebook: title: Prihlásenie sa pomocou Facebooku alt: Prihlásenie sa pomocou účtu na Facebooku - windowslive: + microsoft: title: Prihlásenie sa pomocou Windows Live alt: Prihlásenie sa pomocou účtu Windows Live github: diff --git a/config/locales/skr-arab.yml b/config/locales/skr-arab.yml index b33dcc7b7..ebf024269 100644 --- a/config/locales/skr-arab.yml +++ b/config/locales/skr-arab.yml @@ -148,7 +148,7 @@ skr-arab: openid: کھلی آئی ڈی google: گوگل facebook: فیسبوک - windowslive: مائیکروسافٹ + microsoft: مائیکروسافٹ github: گِٹ ہب wikipedia: وکیپیڈیا api: @@ -1111,7 +1111,7 @@ skr-arab: alt: گوگل اوپن آئی ڈی نال لاگ ان تھیوو facebook: title: فیس بک نال لاگ ان تھیوو - windowslive: + microsoft: title: مائیکروسافٹ نال لاگ ان تھیوو alt: مائیکروسافٹ کھاتے نال لاگ ان تھیوو github: @@ -1320,6 +1320,8 @@ skr-arab: show: ݙِکھاؤ edit: تبدیلی کرو notes: + index: + subheading_submitted: جمع تھی ڳیا show: title: نوٹ:%{id} description: تفصیل diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 3bbe874dd..9d0554c8b 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1926,7 +1926,7 @@ sl: facebook: title: Prijavi se s Facebookom alt: Prijavi se z računom Facebook - windowslive: + microsoft: title: Prijava z Microsoftom alt: Prijava z računom Microsoft github: @@ -3017,7 +3017,9 @@ sl: index: title: Opombe, ki jih je posredoval_a ali komentiral_a %{user} heading: Opombe uporabnika %{user} - subheading_html: Opombe, ki jih je posredoval_a ali komentiral_a %{user} + subheading_html: Opombe, ki jih je %{submitted} ali %{commented} %{user} + subheading_submitted: posredoval_a + subheading_commented: komentiral_a no_notes: Ni opomb id: Id creator: Ustvarjalec diff --git a/config/locales/sr.yml b/config/locales/sr.yml index f980de83b..d015c9baf 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1457,7 +1457,7 @@ sr: facebook: title: Пријавити се са Facebook-ом alt: Пријава преко Facebook налога - windowslive: + microsoft: title: Пријава преко Microsoft-а alt: Пријава преко Microsoft налога github: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 847d18f50..08a76ff6b 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1872,7 +1872,7 @@ sv: facebook: title: Logga in med Facebook alt: Logga in med ett Facebook-konto - windowslive: + microsoft: title: Logga in med Microsoft alt: Logga in med ett Microsoft-konto github: diff --git a/config/locales/te.yml b/config/locales/te.yml index 095c11d2f..fc7874b99 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -1781,7 +1781,7 @@ te: facebook: title: Facebook తో లాగినవండి alt: Facebook ఖాతాతో లాగినవండి - windowslive: + microsoft: title: Windows Live తో లాగినవండి alt: Windows Live ఖాతాతో లాగినవండి github: diff --git a/config/locales/th.yml b/config/locales/th.yml index c11f31ee2..64e1da4e9 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1468,7 +1468,7 @@ th: facebook: title: เข้าใช้งานด้วย Facebook alt: เข้าใช้งานด้วยบัญชี Facebook - windowslive: + microsoft: title: เข้าใช้งานด้วย Windows Live alt: เข้าใช้งานด้วยบัญชี Windows Live github: diff --git a/config/locales/tl.yml b/config/locales/tl.yml index 41a18baf6..78226dcaf 100644 --- a/config/locales/tl.yml +++ b/config/locales/tl.yml @@ -1494,7 +1494,7 @@ tl: facebook: title: Lumagda gamit ang Facebook alt: Lumagda gamit ang isang akawnt sa Facebook - windowslive: + microsoft: title: Lumagda gamit ang Windows Live alt: Lumagda gamit ang isang akawnt sa Windows Live github: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 5c325292f..ca015f965 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -262,6 +262,7 @@ tr: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Vikipedi api: @@ -410,6 +411,7 @@ tr: history_title_html: 'Yol geçmişi: %{name}' nodes: Noktalar nodes_count: + one: '%{count} düğüm' other: '%{count} düğüm' also_part_of_html: one: yol parçası %{related_ways} @@ -583,7 +585,6 @@ tr: comment_link: Bu girdiyi yorumla reply_link: Yazara mesaj gönder comment_count: - zero: Yorum yok one: '%{count} yorum' other: '%{count} yorum' no_comments: Yorum yok @@ -1474,8 +1475,7 @@ tr: show: title: '%{status} Sorun #%{issue_id}' reports: - zero: Rapor yok - one: 1 rapor + one: '%{count} rapor' other: '%{count} rapor' no_reports: Rapor yok report_created_at: Ä°lk defa %{datetime} tarihinde bildirildi @@ -1911,7 +1911,7 @@ tr: facebook: title: Facebook ile giriş alt: Facebook Hesabı ile giriş - windowslive: + microsoft: title: Microsoft ile giriş alt: Microsoft Hesabı ile giriş github: @@ -2019,6 +2019,8 @@ tr: credit_title_html: OpenStreetMap'e nasıl atıfta bulunulur credit_1_html: 'OpenStreetMap verilerini kullandığınız yerde aşağıdaki iki şeyi yapmanız gerekiyor:' + credit_2_1: Telif hakkı bildirimimizi görüntüleyerek OpenStreetMap'e atıfta + bulunun. credit_2_2: Verilerin Açık Veritabanı Lisansı kapsamında mevcut olduğunu açıkça belirtin. credit_4_1_this_copyright_page: bu telif hakkı sayfası @@ -2052,6 +2054,12 @@ tr: contributors_nz_new_zealand: Yeni Zelanda contributors_nz_linz_data_service: LINZ Veri Hizmeti contributors_nz_cc_by: CC BY 4.0 + contributors_rs_serbia: Sırbistan + contributors_rs_rgz: Sırp Jeodezi Kurumu + contributors_rs_open_data_portal: Ulusal Açık Veri Portalı + contributors_si_credit_html: |- + %{slovenia}: %{gu_link} ve %{mkgp_link} + (Slovenya'nın kamuya açık bilgileri) verilerini içerir. contributors_si_slovenia: Slovenya contributors_si_mkgp: Tarım, Orman ve Gıda Bakanlığı contributors_es_spain: Ä°spanya diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 0b51488b7..c3e0b9624 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -283,6 +283,7 @@ uk: openid: OpenID google: Google facebook: Facebook + microsoft: Microsoft github: GitHub wikipedia: Вікіпедія api: @@ -1921,6 +1922,9 @@ uk: no home location: Ви не позначили своє основне місце розташування. update home location on click: Оновлювати моє місце розташування, коли я клацаю на мапу? + show: Показати + delete: Вилучити + undelete: Скасувати вилучення update: success: Профіль збережено. failure: Неможливо зберегти оновлення профілю. @@ -1949,7 +1953,7 @@ uk: facebook: title: Увійти з Facebook alt: Увійти з облікового запису Facebook - windowslive: + microsoft: title: Увійти з Microsoft alt: Увійти з облікового запису Microsoft github: @@ -3048,7 +3052,9 @@ uk: index: title: Нотатки створені чи прокоментовані %{user} heading: Нотатки %{user} - subheading_html: Нотатки, створені чи прокоментовані %{user} + subheading_html: Нотатки, %{submitted} чи %{commented} %{user} + subheading_submitted: створені + subheading_commented: прокоментовані no_notes: Нотаток немає id: Номер creator: Автор diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 530ebb705..4144a3f01 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1738,9 +1738,9 @@ vi: facebook: title: Đăng nhập qua Facebook alt: Đăng nhập dùng tài khoản Facebook - windowslive: - title: Đăng nhập qua Windows Live - alt: Đăng nhập dùng tài khoản Windows Live + microsoft: + title: Đăng nhập qua Microsoft + alt: Đăng nhập dùng Tài khoản Microsoft github: title: Đăng nhập qua GitHub alt: Đăng nhập dùng tài khoản GitHub diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index d07cacfeb..a20d5891b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1826,7 +1826,7 @@ zh-CN: facebook: title: 使用脸书登录 alt: 使用Facebook账户登录 - windowslive: + microsoft: title: 使用Microsoft登录 alt: 使用Microsoft账户登录 github: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 085c06003..ac484938d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -255,6 +255,7 @@ zh-TW: openid: OpenID google: Google facebook: 臉書 + microsoft: 微軟 github: GitHub wikipedia: 維基百科 api: @@ -1809,7 +1810,7 @@ zh-TW: facebook: title: 使用臉書登入 alt: 使用臉書帳號登入 - windowslive: + microsoft: title: 使用 Microsoft 帳號登入 alt: 使用 Microsoft 帳號登入 github: @@ -2735,7 +2736,9 @@ zh-TW: index: title: 由 %{user} 送出或評論的註記 heading: '%{user} 的註記' - subheading_html: '%{user} 送出或評論的註記' + subheading_html: 由%{user}%{submitted}或%{commented}的註記 + subheading_submitted: 已提交 + subheading_commented: 已評論 no_notes: 沒有註記 id: ID creator: 建立者 diff --git a/config/settings.yml b/config/settings.yml index d9910ce28..5330ed678 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -55,6 +55,9 @@ user_block_periods: [0, 1, 3, 6, 12, 24, 48, 96, 168, 336, 731, 4383, 8766, 8766 max_messages_per_hour: 60 # Rate limit for friending max_friends_per_hour: 60 +# Rate limit for changeset comments +min_changeset_comments_per_hour: 6 +max_changeset_comments_per_hour: 60 # Domain for handling message replies #messages_domain: "messages.openstreetmap.org" # MaxMind GeoIPv2 database @@ -140,3 +143,8 @@ smtp_user_name: null smtp_password: null # Matomo settings for analytics #matomo: +# Signup rate limits +#signup_ip_per_day: +#signup_ip_max_burst: +#signup_email_per_day: +#signup_email_max_burst: diff --git a/db/migrate/20230825162137_restore_author_index_to_changeset_comments.rb b/db/migrate/20230825162137_restore_author_index_to_changeset_comments.rb new file mode 100644 index 000000000..81741322e --- /dev/null +++ b/db/migrate/20230825162137_restore_author_index_to_changeset_comments.rb @@ -0,0 +1,7 @@ +class RestoreAuthorIndexToChangesetComments < ActiveRecord::Migration[7.0] + disable_ddl_transaction! + + def change + add_index :changeset_comments, [:author_id, :created_at], :algorithm => :concurrently + end +end diff --git a/db/structure.sql b/db/structure.sql index 86537003f..1874e6461 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2370,6 +2370,13 @@ CREATE UNIQUE INDEX index_active_storage_blobs_on_key ON public.active_storage_b CREATE UNIQUE INDEX index_active_storage_variant_records_uniqueness ON public.active_storage_variant_records USING btree (blob_id, variation_digest); +-- +-- Name: index_changeset_comments_on_author_id_and_created_at; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_changeset_comments_on_author_id_and_created_at ON public.changeset_comments USING btree (author_id, created_at); + + -- -- Name: index_changeset_comments_on_changeset_id_and_created_at; Type: INDEX; Schema: public; Owner: - -- @@ -3396,6 +3403,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20220201183346'), ('20220223140543'), ('20230816135800'), +('20230825162137'), ('21'), ('22'), ('23'), diff --git a/lib/osm.rb b/lib/osm.rb index 4241ad700..6d945c4fe 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -353,6 +353,13 @@ module OSM end end + # Raised when a rate limit is exceeded + class APIRateLimitExceeded < APIError + def status + :too_many_requests + end + end + # Helper methods for going to/from mercator and lat/lng. class Mercator include Math diff --git a/lib/rate_limiter.rb b/lib/rate_limiter.rb new file mode 100644 index 000000000..438f5a1e2 --- /dev/null +++ b/lib/rate_limiter.rb @@ -0,0 +1,38 @@ +class RateLimiter + def initialize(cache, interval, limit, max_burst) + @cache = cache + @requests_per_second = limit.to_f / interval + @burst_limit = max_burst + end + + def allow?(key) + last_update, requests = @cache.get(key) + + if last_update + elapsed = Time.now.to_i - last_update + + requests -= elapsed * @requests_per_second + else + requests = 0.0 + end + + requests < @burst_limit + end + + def update(key) + now = Time.now.to_i + + last_update, requests = @cache.get(key) + + if last_update + elapsed = now - last_update + + requests -= elapsed * @requests_per_second + requests += 1.0 + else + requests = 1.0 + end + + @cache.set(key, [now, [requests, 1.0].max]) + end +end diff --git a/test/controllers/api/changeset_comments_controller_test.rb b/test/controllers/api/changeset_comments_controller_test.rb index 26500babd..624b8a358 100644 --- a/test/controllers/api/changeset_comments_controller_test.rb +++ b/test/controllers/api/changeset_comments_controller_test.rb @@ -132,6 +132,27 @@ module Api assert_response :bad_request end + ## + # create comment rate limit + def test_create_comment_rate_limit + changeset = create(:changeset, :closed) + user = create(:user) + + auth_header = basic_authorization_header user.email, "test" + + assert_difference "ChangesetComment.count", Settings.min_changeset_comments_per_hour do + 1.upto(Settings.min_changeset_comments_per_hour) do |count| + post changeset_comment_path(:id => changeset, :text => "Comment #{count}"), :headers => auth_header + assert_response :success + end + end + + assert_no_difference "ChangesetComment.count" do + post changeset_comment_path(:id => changeset, :text => "One comment too many"), :headers => auth_header + assert_response :too_many_requests + end + end + ## # test hide comment fail def test_destroy_comment_fail diff --git a/test/controllers/api/users_controller_test.rb b/test/controllers/api/users_controller_test.rb index cb2c75205..aa4bf1e9d 100644 --- a/test/controllers/api/users_controller_test.rb +++ b/test/controllers/api/users_controller_test.rb @@ -419,13 +419,19 @@ module Api check_json_details(js["users"][1], user3, false, false) get api_users_path, :params => { :users => create(:user, :suspended).id } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 get api_users_path, :params => { :users => create(:user, :deleted).id } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 get api_users_path, :params => { :users => 0 } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 end def test_index_oauth1 @@ -506,13 +512,19 @@ module Api check_json_details(js["users"][1], user3, false, false) signed_get api_users_path, :params => { :users => create(:user, :suspended).id }, :oauth => { :token => good_token } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 signed_get api_users_path, :params => { :users => create(:user, :deleted).id }, :oauth => { :token => good_token } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 signed_get api_users_path, :params => { :users => 0 }, :oauth => { :token => good_token } - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 end def test_index_oauth2 @@ -593,13 +605,19 @@ module Api check_json_details(js["users"][1], user3, false, false) get api_users_path, :params => { :users => create(:user, :suspended).id }, :headers => bearer_authorization_header(good_token.token) - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 get api_users_path, :params => { :users => create(:user, :deleted).id }, :headers => bearer_authorization_header(good_token.token) - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 get api_users_path, :params => { :users => 0 }, :headers => bearer_authorization_header(good_token.token) - assert_response :not_found + assert_response :success + assert_equal "application/xml", response.media_type + assert_select "user", :count => 0 end def test_gpx_files diff --git a/test/integration/oauth2_test.rb b/test/integration/oauth2_test.rb index 5750a30b2..81f12f7cb 100644 --- a/test/integration/oauth2_test.rb +++ b/test/integration/oauth2_test.rb @@ -2,22 +2,24 @@ require "test_helper" class OAuth2Test < ActionDispatch::IntegrationTest def test_oauth2 + user = create(:user) client = create(:oauth_application, :redirect_uri => "https://some.web.app.example.org/callback", :scopes => "read_prefs write_api read_gpx") state = SecureRandom.urlsafe_base64(16) - authorize_client(client, :state => state) + authorize_client(user, client, :state => state) assert_response :redirect code = validate_redirect(client, state) token = request_token(client, code) - test_token(token, client) + test_token(token, user, client) end def test_oauth2_oob + user = create(:user) client = create(:oauth_application, :redirect_uri => "urn:ietf:wg:oauth:2.0:oob", :scopes => "read_prefs write_api read_gpx") - authorize_client(client) + authorize_client(user, client) assert_response :redirect follow_redirect! assert_response :success @@ -28,42 +30,44 @@ class OAuth2Test < ActionDispatch::IntegrationTest token = request_token(client, code) - test_token(token, client) + test_token(token, user, client) end def test_oauth2_pkce_plain + user = create(:user) client = create(:oauth_application, :redirect_uri => "https://some.web.app.example.org/callback", :scopes => "read_prefs write_api read_gpx") state = SecureRandom.urlsafe_base64(16) verifier = SecureRandom.urlsafe_base64(48) challenge = verifier - authorize_client(client, :state => state, :code_challenge => challenge, :code_challenge_method => "plain") + authorize_client(user, client, :state => state, :code_challenge => challenge, :code_challenge_method => "plain") assert_response :redirect code = validate_redirect(client, state) token = request_token(client, code, verifier) - test_token(token, client) + test_token(token, user, client) end def test_oauth2_pkce_s256 + user = create(:user) client = create(:oauth_application, :redirect_uri => "https://some.web.app.example.org/callback", :scopes => "read_prefs write_api read_gpx") state = SecureRandom.urlsafe_base64(16) verifier = SecureRandom.urlsafe_base64(48) challenge = Base64.urlsafe_encode64(Digest::SHA256.digest(verifier), :padding => false) - authorize_client(client, :state => state, :code_challenge => challenge, :code_challenge_method => "S256") + authorize_client(user, client, :state => state, :code_challenge => challenge, :code_challenge_method => "S256") assert_response :redirect code = validate_redirect(client, state) token = request_token(client, code, verifier) - test_token(token, client) + test_token(token, user, client) end private - def authorize_client(client, options = {}) + def authorize_client(user, client, options = {}) options = options.merge(:client_id => client.uid, :redirect_uri => client.redirect_uri, :response_type => "code", @@ -73,8 +77,6 @@ class OAuth2Test < ActionDispatch::IntegrationTest assert_response :redirect assert_redirected_to login_path(:referer => request.fullpath) - user = create(:user) - post login_path(:username => user.email, :password => "test") follow_redirect! assert_response :success @@ -138,7 +140,7 @@ class OAuth2Test < ActionDispatch::IntegrationTest token["access_token"] end - def test_token(token, client) + def test_token(token, user, client) get user_preferences_path assert_response :unauthorized @@ -156,6 +158,21 @@ class OAuth2Test < ActionDispatch::IntegrationTest get api_trace_path(:id => 2), :headers => auth_header assert_response :forbidden + user.suspend! + + get user_preferences_path, :headers => auth_header + assert_response :forbidden + + user.hide! + + get user_preferences_path, :headers => auth_header + assert_response :forbidden + + user.unhide! + + get user_preferences_path, :headers => auth_header + assert_response :success + post oauth_revoke_path(:token => token) assert_response :forbidden diff --git a/test/integration/oauth_test.rb b/test/integration/oauth_test.rb index 2c473aac5..70f161fc9 100644 --- a/test/integration/oauth_test.rb +++ b/test/integration/oauth_test.rb @@ -5,12 +5,9 @@ class OAuthTest < ActionDispatch::IntegrationTest def test_oauth10_web_app client = create(:client_application, :callback_url => "http://some.web.app.example.org/callback", :allow_read_prefs => true, :allow_write_api => true, :allow_read_gpx => true) + user = create(:user) - get "/login" - follow_redirect! - post "/login", :params => { :username => client.user.email, :password => "test" } - follow_redirect! - assert_response :success + session_for(user) oauth10_without_callback(client) oauth10_with_callback(client, "http://another.web.app.example.org/callback") @@ -19,12 +16,9 @@ class OAuthTest < ActionDispatch::IntegrationTest def test_oauth10_desktop_app client = create(:client_application, :allow_read_prefs => true, :allow_write_api => true, :allow_read_gpx => true) + user = create(:user) - get "/login" - follow_redirect! - post "/login", :params => { :username => client.user.email, :password => "test" } - follow_redirect! - assert_response :success + session_for(user) oauth10_without_callback(client) oauth10_refused(client) @@ -32,12 +26,9 @@ class OAuthTest < ActionDispatch::IntegrationTest def test_oauth10a_web_app client = create(:client_application, :callback_url => "http://some.web.app.example.org/callback", :allow_read_prefs => true, :allow_write_api => true, :allow_read_gpx => true) + user = create(:user) - get "/login" - follow_redirect! - post "/login", :params => { :username => client.user.email, :password => "test" } - follow_redirect! - assert_response :success + session_for(user) oauth10a_without_callback(client) oauth10a_with_callback(client, "http://another.web.app.example.org/callback") @@ -46,12 +37,9 @@ class OAuthTest < ActionDispatch::IntegrationTest def test_oauth10a_desktop_app client = create(:client_application, :allow_read_prefs => true, :allow_write_api => true, :allow_read_gpx => true) + user = create(:user) - get "/login" - follow_redirect! - post "/login", :params => { :username => client.user.email, :password => "test" } - follow_redirect! - assert_response :success + session_for(user) oauth10a_without_callback(client) oauth10a_refused(client) @@ -95,12 +83,28 @@ class OAuthTest < ActionDispatch::IntegrationTest assert_nil token.invalidated_at assert_allowed token, [:allow_read_prefs] + post logout_path + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } assert_response :success signed_get "/api/0.6/gpx/2", :oauth => { :token => token } assert_response :forbidden + token.user.suspend! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :forbidden + + token.user.hide! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :forbidden + + token.user.unhide! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :success + + session_for(token.user) + post "/oauth/revoke", :params => { :token => token.token } assert_redirected_to oauth_clients_url(token.user.display_name) token = OauthToken.find_by(:token => token.token) @@ -173,13 +177,29 @@ class OAuthTest < ActionDispatch::IntegrationTest assert_nil token.invalidated_at assert_allowed token, [:allow_write_api, :allow_read_gpx] - trace = create(:trace, :user => client.user) + post logout_path + + trace = create(:trace, :user => token.user) signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } assert_response :success signed_get "/api/0.6/user/details", :oauth => { :token => token } assert_response :forbidden + token.user.suspend! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :forbidden + + token.user.hide! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :forbidden + + token.user.unhide! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :success + + session_for(token.user) + post "/oauth/revoke", :params => { :token => token.token } assert_redirected_to oauth_clients_url(token.user.display_name) token = OauthToken.find_by(:token => token.token) @@ -232,13 +252,29 @@ class OAuthTest < ActionDispatch::IntegrationTest assert_nil token.invalidated_at assert_allowed token, [:allow_read_prefs] + post logout_path + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } assert_response :success - trace = create(:trace, :user => client.user) + trace = create(:trace, :user => token.user) signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } assert_response :forbidden + token.user.suspend! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :forbidden + + token.user.hide! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :forbidden + + token.user.unhide! + signed_get "/api/0.6/user/preferences", :oauth => { :token => token } + assert_response :success + + session_for(token.user) + post "/oauth/revoke", :params => { :token => token.token } assert_redirected_to oauth_clients_url(token.user.display_name) token = OauthToken.find_by(:token => token.token) @@ -283,13 +319,29 @@ class OAuthTest < ActionDispatch::IntegrationTest assert_nil token.invalidated_at assert_allowed token, [:allow_write_api, :allow_read_gpx] - trace = create(:trace, :user => client.user) + post logout_path + + trace = create(:trace, :user => token.user) signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } assert_response :success signed_get "/api/0.6/user/details", :oauth => { :token => token } assert_response :forbidden + token.user.suspend! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :forbidden + + token.user.hide! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :forbidden + + token.user.unhide! + signed_get "/api/0.6/gpx/#{trace.id}", :oauth => { :token => token } + assert_response :success + + session_for(token.user) + post "/oauth/revoke", :params => { :token => token.token } assert_redirected_to oauth_clients_url(token.user.display_name) token = OauthToken.find_by(:token => token.token) diff --git a/yarn.lock b/yarn.lock index 6256a8aef..77abf634c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,10 +34,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.47.0": - version "8.47.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d" - integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== +"@eslint/js@8.48.0": + version "8.48.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" + integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== "@humanwhocodes/config-array@^0.11.10": version "0.11.10" @@ -224,14 +224,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.0.0: - version "8.47.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806" - integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== + version "8.48.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" + integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "^8.47.0" + "@eslint/js" "8.48.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -568,9 +568,9 @@ optionator@^0.9.3: type-check "^0.4.0" osm-community-index@^5.2.0: - version "5.5.5" - resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.5.5.tgz#dd7a4d333d01dc83ac1b5cf83c3f0f99f4339ec4" - integrity sha512-bGl9WqkfPhIsAkv62QW2erlTQolSjMODmiH0Dp7ld2k1bTUz1D3ZRKRyjGi7fFuUwlrkE1MrbP0mRFezmPbaww== + version "5.6.0" + resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.6.0.tgz#b2361fce7ded723844b0ed68d47bddfc4a8cb240" + integrity sha512-C5AqEWidBIgKeaJKQwuPWvDqSzm9CpZgDbHDi+k4+ZCHBazRQjnl7TpWVv2/fQWMqsJL3I5qzh19rXBTWMWL1A== dependencies: diacritics "^1.3.0"