From: Tom Hughes Date: Tue, 16 Jul 2024 16:16:45 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/4973' X-Git-Tag: live~785 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/28726e5f11cb46add4e6b86eb9a958798b83c46a?hp=08fa95cbfcc3a2ebaa8fb693c8a2c42c9734010f Merge remote-tracking branch 'upstream/pull/4973' --- diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index fdc7c35a5..6fe5b2e57 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -24,7 +24,7 @@ FactoryBot/ExcessiveCreateList: # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns. # URISchemes: http, https Layout/LineLength: - Max: 248 + Max: 266 # Offense count: 29 # This cop supports unsafe autocorrection (--autocorrect-all). diff --git a/Gemfile.lock b/Gemfile.lock index 774d795bc..412ef4820 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -95,8 +95,8 @@ GEM autoprefixer-rails (10.4.16.0) execjs (~> 2) aws-eventstream (1.3.0) - aws-partitions (1.950.0) - aws-sdk-core (3.201.0) + aws-partitions (1.956.0) + aws-sdk-core (3.201.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) @@ -186,7 +186,7 @@ GEM doorkeeper (>= 5.5, < 5.8) jwt (>= 2.5) drb (2.2.1) - dry-configurable (1.1.0) + dry-configurable (1.2.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) dry-core (1.0.1) @@ -234,8 +234,9 @@ GEM factory_bot_rails (6.4.3) factory_bot (~> 6.4) railties (>= 5.0.0) - faraday (2.9.2) + faraday (2.10.0) faraday-net_http (>= 2.0, < 3.2) + logger faraday-net_http (3.1.0) net-http ffi (1.17.0) @@ -255,7 +256,8 @@ GEM google-protobuf (3.25.3) hashdiff (1.1.0) hashie (5.0.0) - highline (3.0.1) + highline (3.1.0) + reline htmlentities (4.3.4) http_accept_language (2.1.1) i18n (1.14.5) @@ -288,7 +290,7 @@ GEM image_size (3.4.0) in_threads (1.6.0) io-console (0.7.2) - irb (1.13.2) + irb (1.14.0) rdoc (>= 4.0.0) reline (>= 0.4.2) jbuilder (2.12.0) @@ -326,7 +328,7 @@ GEM marcel (1.0.4) matrix (0.4.2) maxminddb (0.1.22) - mini_magick (4.13.1) + mini_magick (4.13.2) mini_mime (1.1.5) mini_portile2 (2.8.7) mini_racer (0.9.0) @@ -402,7 +404,7 @@ GEM omniauth (~> 2.0) openstreetmap-deadlock_retry (1.3.1) parallel (1.25.1) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc pg (1.5.6) @@ -483,20 +485,20 @@ GEM io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) - rexml (3.3.1) + rexml (3.3.2) strscan rinku (2.0.6) rotp (6.3.0) rouge (4.3.0) rtlcss (0.2.1) mini_racer (>= 0.6.3) - rubocop (1.64.1) + rubocop (1.65.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) + regexp_parser (>= 2.4, < 3.0) rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) @@ -507,7 +509,7 @@ GEM rubocop (~> 1.41) rubocop-factory_bot (2.26.1) rubocop (~> 1.61) - rubocop-minitest (0.35.0) + rubocop-minitest (0.35.1) rubocop (>= 1.61, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) rubocop-performance (1.21.1) @@ -588,7 +590,7 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) webrick (1.8.1) - websocket (1.2.10) + websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index c0b2f3982..a0eea302f 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -42,7 +42,8 @@ class Ability can [:new, :show, :create, :destroy], :oauth2_authorization can [:edit, :update, :destroy], :account can [:show], :dashboard - can [:new, :create, :edit, :update, :comment, :subscribe, :unsubscribe], DiaryEntry + can [:new, :create, :edit, :update, :subscribe, :unsubscribe], DiaryEntry + can [:create], DiaryComment can [:make_friend, :remove_friend], Friendship can [:new, :create, :reply, :show, :inbox, :outbox, :muted, :mark, :unmute, :destroy], Message can [:close, :reopen], Note diff --git a/app/assets/images/banners/SOTMAsia_x_FOSS4G_2023.jpg b/app/assets/images/banners/SOTMAsia_x_FOSS4G_2023.jpg deleted file mode 100644 index f4a498c1c..000000000 Binary files a/app/assets/images/banners/SOTMAsia_x_FOSS4G_2023.jpg and /dev/null differ diff --git a/app/assets/images/banners/StateOfTheMapAfrica_2023.jpg b/app/assets/images/banners/StateOfTheMapAfrica_2023.jpg deleted file mode 100644 index b2bf06209..000000000 Binary files a/app/assets/images/banners/StateOfTheMapAfrica_2023.jpg and /dev/null differ diff --git a/app/assets/images/banners/StateOfTheMapAfrica_2023@2x.jpg b/app/assets/images/banners/StateOfTheMapAfrica_2023@2x.jpg deleted file mode 100644 index d7d362ae7..000000000 Binary files a/app/assets/images/banners/StateOfTheMapAfrica_2023@2x.jpg and /dev/null differ diff --git a/app/assets/images/banners/StateoftheMapEurope_2024.png b/app/assets/images/banners/StateoftheMapEurope_2024.png index d0d1cee62..2f35f7b98 100644 Binary files a/app/assets/images/banners/StateoftheMapEurope_2024.png and b/app/assets/images/banners/StateoftheMapEurope_2024.png differ diff --git a/app/assets/images/banners/sotm_2024.png b/app/assets/images/banners/sotm_2024.png new file mode 100644 index 000000000..6e0af8efc Binary files /dev/null and b/app/assets/images/banners/sotm_2024.png differ diff --git a/app/assets/images/banners/sotm_2024@2x.png b/app/assets/images/banners/sotm_2024@2x.png new file mode 100644 index 000000000..e505e7f24 Binary files /dev/null and b/app/assets/images/banners/sotm_2024@2x.png differ diff --git a/app/assets/javascripts/auth_providers.js b/app/assets/javascripts/auth_providers.js index 975c57a9b..fe0a4fdce 100644 --- a/app/assets/javascripts/auth_providers.js +++ b/app/assets/javascripts/auth_providers.js @@ -9,15 +9,11 @@ $(document).ready(function () { }); // Add click handler to show OpenID field - $("#openid_open_url").click(function (e) { - e.preventDefault(); - $("#openid_url").val("http://"); - $("#login_auth_buttons").hide().removeClass("d-flex"); - $("#login_openid_url").show(); - $("#openid_login_button").show(); + $("#openid_open_url").click(function () { + $("#login_auth_buttons").hide(); + $("#openid_login_form").show(); }); // Hide OpenID field for now - $("#login_openid_url").hide(); - $("#openid_login_button").hide(); + $("#openid_login_form").hide(); }); diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 8ffa05c53..5c7b2d26e 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -12,9 +12,9 @@ //= require leaflet.contextmenu //= require index/contextmenu //= require index/search -//= require index/browse +//= require index/layers/data //= require index/export -//= require index/notes +//= require index/layers/notes //= require index/history //= require index/note //= require index/new_note @@ -160,12 +160,12 @@ $(document).ready(function () { OSM.initializeContextMenu(map); if (OSM.STATUS !== "api_offline" && OSM.STATUS !== "database_offline") { - OSM.initializeNotes(map); + OSM.initializeNotesLayer(map); if (params.layers.indexOf(map.noteLayer.options.code) >= 0) { map.addLayer(map.noteLayer); } - OSM.initializeBrowse(map); + OSM.initializeDataLayer(map); if (params.layers.indexOf(map.dataLayer.options.code) >= 0) { map.addLayer(map.dataLayer); } diff --git a/app/assets/javascripts/index/browse.js b/app/assets/javascripts/index/layers/data.js similarity index 95% rename from app/assets/javascripts/index/browse.js rename to app/assets/javascripts/index/layers/data.js index 7a761b500..0a996f0c7 100644 --- a/app/assets/javascripts/index/browse.js +++ b/app/assets/javascripts/index/layers/data.js @@ -1,5 +1,5 @@ -OSM.initializeBrowse = function (map) { - var browseBounds; +OSM.initializeDataLayer = function (map) { + var loadedBounds; var dataLayer = map.dataLayer; dataLayer.setStyle({ @@ -41,7 +41,7 @@ OSM.initializeBrowse = function (map) { function updateData() { var bounds = map.getBounds(); - if (!browseBounds || !browseBounds.contains(bounds)) { + if (!loadedBounds || !loadedBounds.contains(bounds)) { getData(); } } @@ -96,7 +96,7 @@ OSM.initializeBrowse = function (map) { function addFeatures() { $("#browse_status").empty(); dataLayer.addData(features); - browseBounds = bounds; + loadedBounds = bounds; } function cancelAddFeatures() { diff --git a/app/assets/javascripts/index/notes.js b/app/assets/javascripts/index/layers/notes.js similarity index 98% rename from app/assets/javascripts/index/notes.js rename to app/assets/javascripts/index/layers/notes.js index 5d553e970..eaa5c3654 100644 --- a/app/assets/javascripts/index/notes.js +++ b/app/assets/javascripts/index/layers/notes.js @@ -1,4 +1,4 @@ -OSM.initializeNotes = function (map) { +OSM.initializeNotesLayer = function (map) { var noteLayer = map.noteLayer, notes = {}; diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 05fa76658..c6223fb9d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -181,7 +181,7 @@ class ApplicationController < ActionController::Base # TODO: some sort of escaping of problem characters in the message response.headers["Error"] = message - if request.headers["X-Error-Format"]&.casecmp("xml")&.zero? + if request.headers["X-Error-Format"]&.casecmp?("xml") result = OSM::API.new.xml_doc result.root.name = "osmError" result.root << (XML::Node.new("status") << "#{Rack::Utils.status_code(status)} #{Rack::Utils::HTTP_STATUS_CODES[status]}") diff --git a/app/controllers/diary_comments_controller.rb b/app/controllers/diary_comments_controller.rb index 8abf2071b..a9a7a2641 100644 --- a/app/controllers/diary_comments_controller.rb +++ b/app/controllers/diary_comments_controller.rb @@ -11,7 +11,7 @@ class DiaryCommentsController < ApplicationController authorize_resource before_action :lookup_user, :only => :index - before_action :check_database_writable, :only => [:hide, :unhide] + before_action :check_database_writable, :only => [:create, :hide, :unhide] allow_thirdparty_images :only => :index @@ -26,6 +26,29 @@ class DiaryCommentsController < ApplicationController @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user]) end + def create + @entry = DiaryEntry.find(params[:id]) + @comments = @entry.visible_comments + @diary_comment = @entry.comments.build(comment_params) + @diary_comment.user = current_user + if @diary_comment.save + + # Notify current subscribers of the new comment + @entry.subscribers.visible.each do |user| + UserMailer.diary_comment_notification(@diary_comment, user).deliver_later if current_user != user + end + + # Add the commenter to the subscribers if necessary + @entry.subscriptions.create(:user => current_user) unless @entry.subscribers.exists?(current_user.id) + + redirect_to diary_entry_path(@entry.user, @entry) + else + render :action => "new" + end + rescue ActiveRecord::RecordNotFound + render "diary_entries/no_such_entry", :status => :not_found + end + def hide comment = DiaryComment.find(params[:comment]) comment.update(:visible => false) @@ -37,4 +60,12 @@ class DiaryCommentsController < ApplicationController comment.update(:visible => true) redirect_to diary_entry_path(comment.diary_entry.user, comment.diary_entry) end + + private + + ## + # return permitted diary comment parameters + def comment_params + params.require(:diary_comment).permit(:body) + end end diff --git a/app/controllers/diary_entries_controller.rb b/app/controllers/diary_entries_controller.rb index bf6e8d0b1..1a888547d 100644 --- a/app/controllers/diary_entries_controller.rb +++ b/app/controllers/diary_entries_controller.rb @@ -11,7 +11,7 @@ class DiaryEntriesController < ApplicationController authorize_resource before_action :lookup_user, :only => :show - before_action :check_database_writable, :only => [:new, :create, :edit, :update, :comment, :hide, :unhide, :subscribe, :unsubscribe] + before_action :check_database_writable, :only => [:new, :create, :edit, :update, :hide, :unhide, :subscribe, :unsubscribe] allow_thirdparty_images :only => [:new, :create, :edit, :update, :index, :show] @@ -136,29 +136,6 @@ class DiaryEntriesController < ApplicationController render :action => "no_such_entry", :status => :not_found end - def comment - @entry = DiaryEntry.find(params[:id]) - @comments = @entry.visible_comments - @diary_comment = @entry.comments.build(comment_params) - @diary_comment.user = current_user - if @diary_comment.save - - # Notify current subscribers of the new comment - @entry.subscribers.visible.each do |user| - UserMailer.diary_comment_notification(@diary_comment, user).deliver_later if current_user != user - end - - # Add the commenter to the subscribers if necessary - @entry.subscriptions.create(:user => current_user) unless @entry.subscribers.exists?(current_user.id) - - redirect_to diary_entry_path(@entry.user, @entry) - else - render :action => "show" - end - rescue ActiveRecord::RecordNotFound - render :action => "no_such_entry", :status => :not_found - end - def subscribe @diary_entry = DiaryEntry.find(params[:id]) @@ -239,12 +216,6 @@ class DiaryEntriesController < ApplicationController ActionController::Parameters.new.permit(:title, :body, :language_code, :latitude, :longitude) end - ## - # return permitted diary comment parameters - def comment_params - params.require(:diary_comment).permit(:body) - end - ## # decide on a location for the diary entry map def set_map_location diff --git a/app/controllers/geocoder_controller.rb b/app/controllers/geocoder_controller.rb index 8ec0ab6b7..43f276efa 100644 --- a/app/controllers/geocoder_controller.rb +++ b/app/controllers/geocoder_controller.rb @@ -35,15 +35,15 @@ class GeocoderController < ApplicationController @results = [] if lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180 - @results.push(:lat => lat, :lon => lon, + @results.push(:lat => params[:lat], :lon => params[:lon], :zoom => params[:zoom], - :name => "#{lat}, #{lon}") + :name => "#{params[:lat]}, #{params[:lon]}") end if lon >= -90 && lon <= 90 && lat >= -180 && lat <= 180 - @results.push(:lat => lon, :lon => lat, + @results.push(:lat => params[:lon], :lon => params[:lat], :zoom => params[:zoom], - :name => "#{lon}, #{lat}") + :name => "#{params[:lon]}, #{params[:lat]}") end if @results.empty? @@ -61,9 +61,9 @@ class GeocoderController < ApplicationController @error = "Longitude #{lon} out of range" render :action => "error" else - @results = [{ :lat => lat, :lon => lon, + @results = [{ :lat => params[:lat], :lon => params[:lon], :zoom => params[:zoom], - :name => "#{lat}, #{lon}" }] + :name => "#{params[:lat]}, #{params[:lon]}" }] render :action => "results" end @@ -206,20 +206,12 @@ class GeocoderController < ApplicationController if query = params[:query] query.strip! - if latlon = query.match(/^([NS])\s*(\d{1,3}(\.\d*)?)\W*([EW])\s*(\d{1,3}(\.\d*)?)$/).try(:captures) || # [NSEW] decimal degrees - query.match(/^(\d{1,3}(\.\d*)?)\s*([NS])\W*(\d{1,3}(\.\d*)?)\s*([EW])$/).try(:captures) # decimal degrees [NSEW] - params.merge!(nsew_to_decdeg(latlon)).delete(:query) + if latlon = query.match(/^(?[NS])\s*#{dms_regexp('ns')}\W*(?[EW])\s*#{dms_regexp('ew')}$/) || + query.match(/^#{dms_regexp('ns')}\s*(?[NS])\W*#{dms_regexp('ew')}\s*(?[EW])$/) + params.merge!(to_decdeg(latlon.named_captures.compact)).delete(:query) - elsif latlon = query.match(/^([NS])\s*(\d{1,3})°?(?:\s*(\d{1,3}(\.\d*)?)?['′]?)?\W*([EW])\s*(\d{1,3})°?(?:\s*(\d{1,3}(\.\d*)?)?['′]?)?$/).try(:captures) || # [NSEW] degrees, decimal minutes - query.match(/^(\d{1,3})°?(?:\s*(\d{1,3}(\.\d*)?)?['′]?)?\s*([NS])\W*(\d{1,3})°?(?:\s*(\d{1,3}(\.\d*)?)?['′]?)?\s*([EW])$/).try(:captures) # degrees, decimal minutes [NSEW] - params.merge!(ddm_to_decdeg(latlon)).delete(:query) - - elsif latlon = query.match(/^([NS])\s*(\d{1,3})°?\s*(\d{1,2})['′]?(?:\s*(\d{1,3}(\.\d*)?)?["″]?)?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,2})['′]?(?:\s*(\d{1,3}(\.\d*)?)?["″]?)?$/).try(:captures) || # [NSEW] degrees, minutes, decimal seconds - query.match(/^(\d{1,3})°?\s*(\d{1,2})['′]?(?:\s*(\d{1,3}(\.\d*)?)?["″]?)?\s*([NS])\W*(\d{1,3})°?\s*(\d{1,2})['′]?(?:\s*(\d{1,3}(\.\d*)?)?["″]?)?\s*([EW])$/).try(:captures) # degrees, minutes, decimal seconds [NSEW] - params.merge!(dms_to_decdeg(latlon)).delete(:query) - - elsif latlon = query.match(%r{^([+-]?\d+(\.\d*)?)(?:\s+|\s*[,/]\s*)([+-]?\d+(\.\d*)?)$}) - params.merge!(:lat => latlon[1].to_f, :lon => latlon[3].to_f).delete(:query) + elsif latlon = query.match(%r{^(?[+-]?\d+(?:\.\d+)?)(?:\s+|\s*[,/]\s*)(?[+-]?\d+(?:\.\d+)?)$}) + params.merge!(:lat => latlon["lat"], :lon => latlon["lon"]).delete(:query) params[:latlon_digits] = true end @@ -228,39 +220,28 @@ class GeocoderController < ApplicationController params.permit(:query, :lat, :lon, :latlon_digits, :zoom, :minlat, :minlon, :maxlat, :maxlon) end - def nsew_to_decdeg(captures) - begin - Float(captures[0]) - lat = captures[2].casecmp("s").zero? ? -captures[0].to_f : captures[0].to_f - lon = captures[5].casecmp("w").zero? ? -captures[3].to_f : captures[3].to_f - rescue StandardError - lat = captures[0].casecmp("s").zero? ? -captures[1].to_f : captures[1].to_f - lon = captures[3].casecmp("w").zero? ? -captures[4].to_f : captures[4].to_f - end - { :lat => lat, :lon => lon } + def dms_regexp(name_prefix) + / + (?: (?<#{name_prefix}d>\d{1,3}(?:\.\d+)?)°? ) | + (?: (?<#{name_prefix}d>\d{1,3})°?\s*(?<#{name_prefix}m>\d{1,2}(?:\.\d+)?)['′]? ) | + (?: (?<#{name_prefix}d>\d{1,3})°?\s*(?<#{name_prefix}m>\d{1,2})['′]?\s*(?<#{name_prefix}s>\d{1,2}(?:\.\d+)?)["″]? ) + /x end - def ddm_to_decdeg(captures) - begin - Float(captures[0]) - lat = captures[3].casecmp("s").zero? ? -(captures[0].to_f + (captures[1].to_f / 60)) : captures[0].to_f + (captures[1].to_f / 60) - lon = captures[7].casecmp("w").zero? ? -(captures[4].to_f + (captures[5].to_f / 60)) : captures[4].to_f + (captures[5].to_f / 60) - rescue StandardError - lat = captures[0].casecmp("s").zero? ? -(captures[1].to_f + (captures[2].to_f / 60)) : captures[1].to_f + (captures[2].to_f / 60) - lon = captures[4].casecmp("w").zero? ? -(captures[5].to_f + (captures[6].to_f / 60)) : captures[5].to_f + (captures[6].to_f / 60) - end - { :lat => lat, :lon => lon } - end + def to_decdeg(captures) + ns = captures.fetch("ns").casecmp?("s") ? -1 : 1 + nsd = BigDecimal(captures.fetch("nsd", "0")) + nsm = BigDecimal(captures.fetch("nsm", "0")) + nss = BigDecimal(captures.fetch("nss", "0")) - def dms_to_decdeg(captures) - begin - Float(captures[0]) - lat = captures[4].casecmp("s").zero? ? -(captures[0].to_f + ((captures[1].to_f + (captures[2].to_f / 60)) / 60)) : captures[0].to_f + ((captures[1].to_f + (captures[2].to_f / 60)) / 60) - lon = captures[9].casecmp("w").zero? ? -(captures[5].to_f + ((captures[6].to_f + (captures[7].to_f / 60)) / 60)) : captures[5].to_f + ((captures[6].to_f + (captures[7].to_f / 60)) / 60) - rescue StandardError - lat = captures[0].casecmp("s").zero? ? -(captures[1].to_f + ((captures[2].to_f + (captures[3].to_f / 60)) / 60)) : captures[1].to_f + ((captures[2].to_f + (captures[3].to_f / 60)) / 60) - lon = captures[5].casecmp("w").zero? ? -(captures[6].to_f + ((captures[7].to_f + (captures[8].to_f / 60)) / 60)) : captures[6].to_f + ((captures[7].to_f + (captures[8].to_f / 60)) / 60) - end - { :lat => lat, :lon => lon } + ew = captures.fetch("ew").casecmp?("w") ? -1 : 1 + ewd = BigDecimal(captures.fetch("ewd", "0")) + ewm = BigDecimal(captures.fetch("ewm", "0")) + ews = BigDecimal(captures.fetch("ews", "0")) + + lat = ns * (nsd + (nsm / 60) + (nss / 3600)) + lon = ew * (ewd + (ewm / 60) + (ews / 3600)) + + { :lat => lat.round(6).to_s("F"), :lon => lon.round(6).to_s("F") } end end diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index 3e779a00c..5863a9403 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -52,33 +52,29 @@ module UserHelper # External authentication support - def openid_logo - image_tag "openid.svg", :size => "36", :alt => t("application.auth_providers.openid_logo_alt"), :class => "align-text-bottom" - end - - def auth_button(name, provider, options = {}) + def auth_button(provider, options = {}) link_to( - image_tag("#{name}.svg", - :alt => t("application.auth_providers.#{name}.alt"), + image_tag("#{provider}.svg", + :alt => t("application.auth_providers.#{provider}.alt"), :class => "rounded-1", :size => "36"), auth_path(options.merge(:provider => provider)), :method => :post, - :class => "auth_button btn btn-light p-2 d-block", - :title => t("application.auth_providers.#{name}.title") + :class => "auth_button btn btn-light p-2", + :title => t("application.auth_providers.#{provider}.title") ) end - def auth_button_preferred(name, provider, options = {}) + def auth_button_preferred(provider, options = {}) link_to( - image_tag("#{name}.svg", - :alt => t("application.auth_providers.#{name}.alt"), + image_tag("#{provider}.svg", + :alt => t("application.auth_providers.#{provider}.alt"), :class => "rounded-1 me-3", - :size => "36") + t("application.auth_providers.#{name}.title"), + :size => "36") + t("application.auth_providers.#{provider}.title"), auth_path(options.merge(:provider => provider)), :method => :post, :class => "auth_button btn btn-outline-secondary border py-2 px-4 d-flex justify-content-center align-items-center", - :title => t("application.auth_providers.#{name}.title") + :title => t("application.auth_providers.#{provider}.title") ) end diff --git a/app/models/request_token.rb b/app/models/request_token.rb index adeabb184..ec38f7421 100644 --- a/app/models/request_token.rb +++ b/app/models/request_token.rb @@ -73,7 +73,7 @@ class RequestToken < OauthToken end def oob? - callback_url.nil? || callback_url.casecmp("oob").zero? + callback_url.nil? || callback_url.casecmp?("oob") end def oauth10? diff --git a/app/views/application/_auth_providers.html.erb b/app/views/application/_auth_providers.html.erb index e3e5123cc..89de3b4ff 100644 --- a/app/views/application/_auth_providers.html.erb +++ b/app/views/application/_auth_providers.html.erb @@ -1,57 +1,59 @@ -
-
+<% prefered_auth_button_available = false %> +<% %w[google facebook microsoft github wikipedia].each do |provider| %> + <% if Settings.key?("#{provider}_auth_id".to_sym) -%> + <% if @preferred_auth_provider == provider %> + <% prefered_auth_button_available = true %> + <% end %> + <% end -%> +<% end -%> - <% prefered_auth_button_available = false %> - <% %w[google facebook microsoft github wikipedia].each do |provider| %> - <% if Settings.key?("#{provider}_auth_id".to_sym) -%> - <% if @preferred_auth_provider == provider %> - <% prefered_auth_button_available = true %> - <% end %> - <% end -%> - <% end -%> +
+ <%= tag.div :id => "login_auth_buttons", + :class => ["row row-cols-1", { "row-cols-sm-2" => prefered_auth_button_available }, "g-2 mb-3"] do %> <% if prefered_auth_button_available %> -
+
<% %w[google facebook microsoft github wikipedia].each do |provider| %> <% if Settings.key?("#{provider}_auth_id".to_sym) -%> <% if @preferred_auth_provider == provider %> - <%= auth_button_preferred provider, provider %> + <%= auth_button_preferred provider %> <% end %> <% end -%> <% end -%>
-
- <% else %> -
<% end %> - <%= link_to image_tag("openid.svg", - :alt => t("application.auth_providers.openid.alt"), - :size => "36"), - "#", - :id => "openid_open_url", - :title => t("application.auth_providers.openid.title"), - :class => "btn btn-light p-2 d-block" %> +
+ <%= button_tag image_tag("openid.svg", + :alt => t(".openid.alt"), + :size => "36"), + :type => "button", + :id => "openid_open_url", + :title => t(".openid.title"), + :class => "btn btn-light p-2" %> <% %w[google facebook microsoft github wikipedia].each do |provider| %> <% unless @preferred_auth_provider == provider %> <% if Settings.key?("#{provider}_auth_id".to_sym) -%> - <%= auth_button provider, provider %> + <%= auth_button provider %> <% end -%> <% end %> <% end -%>
-
+ <% end %> <%# :tabindex starts high to allow rendering at the bottom of the template %> <%= form_tag(auth_path(:provider => "openid"), :id => "openid_login_form") do %> -
- +
+ <%= hidden_field_tag("referer", params[:referer], :autocomplete => "off") %> - <%= text_field_tag("openid_url", "", :tabindex => 20, :autocomplete => "on", :class => "openid_url form-control") %> + <%= text_field_tag("openid_url", "https://", :tabindex => 20, :autocomplete => "on", :class => "form-control") %> (" target="_new"><%= t "accounts.edit.openid.link text" %>)
- <%= submit_tag t(".openid_login_button"), :tabindex => 21, :id => "openid_login_button", :class => "btn btn-primary" %> + <%= submit_tag t(".openid_login_button"), :tabindex => 21, :class => "btn btn-primary" %> <% end %>
diff --git a/app/views/diary_comments/new.html.erb b/app/views/diary_comments/new.html.erb new file mode 100644 index 000000000..91e646944 --- /dev/null +++ b/app/views/diary_comments/new.html.erb @@ -0,0 +1,12 @@ +<% content_for :heading do %> +

<%= t ".heading" %>

+<% end %> + +<%= render :partial => "diary_entries/diary_entry_heading", :object => @entry, :as => "diary_entry" %> + +

<%= t "diary_entries.show.leave_a_comment" %>

+ +<%= bootstrap_form_for @diary_comment, :url => comment_diary_entry_path(@entry.user, @entry) do |f| %> + <%= f.richtext_field :body, :cols => 80, :rows => 20, :hide_label => true %> + <%= f.primary %> +<% end %> diff --git a/app/views/diary_entries/show.html.erb b/app/views/diary_entries/show.html.erb index 1830c9ced..e80a44f09 100644 --- a/app/views/diary_entries/show.html.erb +++ b/app/views/diary_entries/show.html.erb @@ -21,7 +21,7 @@ <% if @entry.subscribers.exists?(current_user.id) %> <%= link_to t(".unsubscribe"), diary_entry_unsubscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %> <% else %> - <%= link_to t(".subscribe"), diary_entry_subscribe_path(@entry.user, @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %> + <%= link_to t(".subscribe"), diary_entry_subscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %> <% end %>
<% end %> @@ -34,7 +34,7 @@ <% if current_user %>

<%= t ".leave_a_comment" %>

- <%= bootstrap_form_for @entry.comments.new, :url => { :action => "comment" } do |f| %> + <%= bootstrap_form_for @entry.comments.new, :url => comment_diary_entry_path(@entry.user, @entry) do |f| %> <%= f.richtext_field :body, :cols => 80, :rows => 20, :hide_label => true %> <%= f.primary %> <% end %> diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index 52e014442..9d05d4af8 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -22,35 +22,33 @@
<% end %> -
- <% if @preferred_auth_provider %> - <%= render :partial => "auth_providers" %> - <%= render :partial => "shared/section_divider", :locals => { :text => t(".or") } %> +<% if @preferred_auth_provider %> + <%= render :partial => "auth_providers" %> + <%= render :partial => "shared/section_divider", :locals => { :text => t(".or") } %> <% end %> - <%= bootstrap_form_tag(:action => "login", :html => { :id => "login_form" }) do |f| %> - <%= hidden_field_tag("referer", h(params[:referer]), :autocomplete => "off") %> +<%= bootstrap_form_tag(:action => "login", :html => { :id => "login_form" }) do |f| %> + <%= hidden_field_tag("referer", h(params[:referer]), :autocomplete => "off") %> - <%= f.text_field :username, :label => t(".email or username"), :autofocus => true, :tabindex => 1, :value => params[:username] %> + <%= f.text_field :username, :label => t(".email or username"), :autofocus => true, :tabindex => 1, :value => params[:username] %> -
- <%= f.label :password, t(".password") %> - <%= link_to(t(".lost password link"), user_forgot_password_path) %> -
- - <%= f.password_field :password, :autocomplete => "on", :tabindex => 2, :value => "", :skip_label => true %> +
+ <%= f.label :password, t(".password") %> + <%= link_to(t(".lost password link"), user_forgot_password_path) %> +
- <%= f.form_group do %> - <%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %> - <% end %> + <%= f.password_field :password, :autocomplete => "on", :tabindex => 2, :value => "", :skip_label => true %> -
- <%= f.primary t(".login_button"), :tabindex => 4 %> -
+ <%= f.form_group do %> + <%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %> <% end %> - <% unless @preferred_auth_provider %> - <%= render :partial => "shared/section_divider", :locals => { :text => t(".with external") } %> - <%= render :partial => "auth_providers" %> - <% end %> -
+
+ <%= f.primary t(".login_button"), :tabindex => 4 %> +
+<% end %> + +<% unless @preferred_auth_provider %> + <%= render :partial => "shared/section_divider", :locals => { :text => t(".with external") } %> + <%= render :partial => "auth_providers" %> +<% end %> diff --git a/app/views/users/blocked.html.erb b/app/views/users/blocked.html.erb index a3ef3429b..a5fb08a34 100644 --- a/app/views/users/blocked.html.erb +++ b/app/views/users/blocked.html.erb @@ -12,7 +12,5 @@
<% end %> -
-

<%= t "users.new.no_auto_account_create" %>

-

<%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %>

-
+

<%= t "users.new.no_auto_account_create" %>

+

<%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %>

diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb index d2f1d27de..37493418a 100644 --- a/app/views/users/new.html.erb +++ b/app/views/users/new.html.erb @@ -22,79 +22,77 @@
<% end %> -
- <% if current_user.auth_uid.nil? %> -
-

<%= t ".about.header" %> <%= t ".about.paragraph_1" %>

-

<%= t ".about.paragraph_2" %>

-
+<% if current_user.auth_uid.nil? %> +
+

<%= t ".about.header" %> <%= t ".about.paragraph_1" %>

+

<%= t ".about.paragraph_2" %>

+
- <% unless @preferred_auth_provider.nil? %> - <%= render :partial => "auth_providers" %> - <%= render :partial => "shared/section_divider", :locals => { :text => t(".or") } %> -<% end %> - <% else %> -

<%= t ".about.welcome" %>

+ <% unless @preferred_auth_provider.nil? %> + <%= render :partial => "auth_providers" %> + <%= render :partial => "shared/section_divider", :locals => { :text => t(".or") } %> <% end %> +<% else %> +

<%= t ".about.welcome" %>

+<% end %> - <%= bootstrap_form_for current_user, :url => { :action => "create" } do |f| %> - <%= hidden_field_tag("referer", h(@referer)) unless @referer.nil? %> - <%= hidden_field_tag("email_hmac", h(@email_hmac)) unless @email_hmac.nil? %> - <%= f.hidden_field :auth_provider unless current_user.auth_provider.nil? %> - <%= f.hidden_field :auth_uid unless current_user.auth_uid.nil? %> +<%= bootstrap_form_for current_user, :url => { :action => "create" } do |f| %> + <%= hidden_field_tag("referer", h(@referer)) unless @referer.nil? %> + <%= hidden_field_tag("email_hmac", h(@email_hmac)) unless @email_hmac.nil? %> + <%= f.hidden_field :auth_provider unless current_user.auth_provider.nil? %> + <%= f.hidden_field :auth_uid unless current_user.auth_uid.nil? %> - <% if current_user.auth_uid.nil? or @email_hmac.nil? or not current_user.errors[:email].empty? %> - <%= f.email_field :email, :help => t(".email_help.html", - :privacy_policy_link => link_to(t(".email_help.privacy_policy"), - t(".email_help.privacy_policy_url"), - :title => t(".email_help.privacy_policy_title"), - :target => :new)), - :autofocus => true, - :tabindex => 1 %> - <% else %> - <%= f.hidden_field :email %> - <% end %> + <% if current_user.auth_uid.nil? or @email_hmac.nil? or not current_user.errors[:email].empty? %> + <%= f.email_field :email, :help => t(".email_help.html", + :privacy_policy_link => link_to(t(".email_help.privacy_policy"), + t(".email_help.privacy_policy_url"), + :title => t(".email_help.privacy_policy_title"), + :target => :new)), + :autofocus => true, + :tabindex => 1 %> + <% else %> + <%= f.hidden_field :email %> + <% end %> - <%= f.text_field :display_name, :help => t(".display name description"), :tabindex => 2 %> + <%= f.text_field :display_name, :help => t(".display name description"), :tabindex => 2 %> - <% if current_user.auth_uid.nil? %> -
-
- <%= f.password_field :pass_crypt, :tabindex => 3 %> -
-
- <%= f.password_field :pass_crypt_confirmation, :tabindex => 4 %> -
+ <% if current_user.auth_uid.nil? %> +
+
+ <%= f.password_field :pass_crypt, :tabindex => 3 %> +
+
+ <%= f.password_field :pass_crypt_confirmation, :tabindex => 4 %>
- <% end %> - -

<%= t(".by_signing_up.html", - :tou_link => link_to(t("layouts.tou"), - "https://wiki.osmfoundation.org/wiki/Terms_of_Use", - :target => :new), - :privacy_policy_link => link_to(t(".by_signing_up.privacy_policy"), - t(".by_signing_up.privacy_policy_url"), - :title => t(".by_signing_up.privacy_policy_title"), - :target => :new), - :contributor_terms_link => link_to(t(".by_signing_up.contributor_terms"), - t(".by_signing_up.contributor_terms_url"), - :target => :new)) %>

- <%= f.form_group do %> - <%= f.check_box :consider_pd, - :tabindex => 5, - :label => t(".consider_pd_html", - :consider_pd_link => link_to(t(".consider_pd"), - t(".consider_pd_url"), - :target => :new)) %> - <% end %> - -
- <%= submit_tag(t(".continue"), :name => "continue", :id => "continue", :class => "btn btn-primary", :tabindex => 6) %>
<% end %> - <% if current_user.auth_uid.nil? and @preferred_auth_provider.nil? %> - <%= render :partial => "shared/section_divider", :locals => { :text => t(".use external auth") } %> - <%= render :partial => "auth_providers" %> +

<%= t(".by_signing_up.html", + :tou_link => link_to(t("layouts.tou"), + "https://wiki.osmfoundation.org/wiki/Terms_of_Use", + :target => :new), + :privacy_policy_link => link_to(t(".by_signing_up.privacy_policy"), + t(".by_signing_up.privacy_policy_url"), + :title => t(".by_signing_up.privacy_policy_title"), + :target => :new), + :contributor_terms_link => link_to(t(".by_signing_up.contributor_terms"), + t(".by_signing_up.contributor_terms_url"), + :target => :new)) %>

+ <%= f.form_group do %> + <%= f.check_box :consider_pd, + :tabindex => 5, + :label => t(".consider_pd_html", + :consider_pd_link => link_to(t(".consider_pd"), + t(".consider_pd_url"), + :target => :new)) %> <% end %> -
+ +
+ <%= submit_tag(t(".continue"), :name => "continue", :id => "continue", :class => "btn btn-primary", :tabindex => 6) %> +
+<% end %> + +<% if current_user.auth_uid.nil? and @preferred_auth_provider.nil? %> + <%= render :partial => "shared/section_divider", :locals => { :text => t(".use external auth") } %> + <%= render :partial => "auth_providers" %> +<% end %> diff --git a/config/banners.yml b/config/banners.yml index bc5497a4c..1f2056194 100644 --- a/config/banners.yml +++ b/config/banners.yml @@ -11,23 +11,16 @@ donate_2023: sotmeu_2024: id: sotmeu_2024 alt: State of the Map Europe 2024 - link: https://stateofthemap.eu/ + link: https://openstreetmap.org.pl/2024/sotm-eu-2024-community-tickets-70/ img: banners/StateoftheMapEurope_2024.png enddate: 2024-jul-18 -sotmasia_2023: - id: sotmasia_2023 - alt: State of the Map Asia x Foss4G Thailand 2023 - link: https://stateofthemap.asia/ - img: banners/SOTMAsia_x_FOSS4G_2023.jpg - startdate: 2023-oct-18 - enddate: 2023-nov-18 -sotmafrica_2023: - id: sotmafrica_2023 - alt: State of the Map Africa 2023 - link: https://2023.stateofthemap.africa - img: banners/StateOfTheMapAfrica_2023.jpg +sotm_2024: + id: sotm_2024 + alt: State of the Map 2024 + link: https://2024.stateofthemap.org + img: banners/sotm_2024.png srcset: - - [banners/StateOfTheMapAfrica_2023.jpg, 1x] - - [banners/StateOfTheMapAfrica_2023@2x.jpg, 2x] - startdate: 2023-oct-30 - enddate: 2023-nov-30 + - [banners/sotm_2024.png, 1x] + - [banners/sotm_2024@2x.png, 2x] + startdate: 2024-jul-10 + enddate: 2024-sep-05 \ No newline at end of file diff --git a/config/locales/af.yml b/config/locales/af.yml index 41ea119b1..9e76dbf2b 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -1786,7 +1786,6 @@ af: oauth1_settings: OAuth 1 instellings oauth2_applications: OAuth 2 programme auth_providers: - openid_logo_alt: Meld aan met 'n OpenID openid: title: Meld aan met OpenID alt: Meld aan met 'n OpenID-URL diff --git a/config/locales/ar.yml b/config/locales/ar.yml index a46f6d18e..d8cc0a6f5 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -2359,7 +2359,6 @@ ar: settings_menu: account_settings: إعدادات الحساب auth_providers: - openid_logo_alt: تسجيل الدخول بOpenID openid: title: تسجيل الدخول بOpenID alt: تسجيل الدخول باستخدام مسار OpenID diff --git a/config/locales/ast.yml b/config/locales/ast.yml index b3884f3d4..1a8715510 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -1822,7 +1822,6 @@ ast: coneuta pela interfaz web pa ver los Términos de Collaboración. Nun fai falta aceutalos, pero debes conocelos. auth_providers: - openid_logo_alt: Coneutar con una OpenID openid: title: Aniciar sesión con OpenID alt: Aniciar sesión con una URL d'OpenID diff --git a/config/locales/az.yml b/config/locales/az.yml index 1c2d0a24e..7dc5da35f 100644 --- a/config/locales/az.yml +++ b/config/locales/az.yml @@ -1012,7 +1012,6 @@ az: private: MƏXFÄ° application: auth_providers: - openid_logo_alt: OpenID ilə hesabınıza daxil olun microsoft: title: Microsoft ilə daxil olun github: diff --git a/config/locales/be-Tarask.yml b/config/locales/be-Tarask.yml index e9d926b7c..87af26366 100644 --- a/config/locales/be-Tarask.yml +++ b/config/locales/be-Tarask.yml @@ -1282,8 +1282,6 @@ be-Tarask: need_to_see_terms: Ваш доступ да API часова прыпынены. Калі ласка, увайдзіце ў ўэб-інтэрфэйс, каб каб паглядзець умовы супрацоўніцтва. Вам не абавязкова пагаджацца зь імі, але неабходна зь імі азнаёміцца. - auth_providers: - openid_logo_alt: Увайсьці ў сыстэму з дапамогай OpenID oauth: authorize: request_access_html: Дастасаваньне %{app_name} патрабуе доступ да Вашага рахунку, diff --git a/config/locales/be.yml b/config/locales/be.yml index 2c62bea7f..5bf21b9c7 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -2438,7 +2438,6 @@ be: ў вэб-інтэрфейс для прагляду ўмоў удзелу. Вы не абавязаны пагаджацца, але вам варта праглядзець іх. auth_providers: - openid_logo_alt: Увайсці з дапамогай OpenID openid: title: Уваход праз OpenID alt: Уваход праз OpenID URL diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 1f9b584e4..9141fcb0b 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1265,6 +1265,8 @@ bg: tou: Условия за ползване osm_offline: Базата на данни на OpenStreetMap в момента е изключена докато се извършва необходима поддръжка. + osm_read_only: В момента базата данни на OpenStreetMap е в режим "само за четене", + тъй като се извършва техническа поддръжка на базата данни. help: Помощ about: За проекта copyright: Авторски права @@ -1861,7 +1863,6 @@ bg: require_admin: not_an_admin: Трябва да сте админ за да извършите това действие auth_providers: - openid_logo_alt: Влизане с OpenID openid: title: Влизане с OpenID alt: Влизане с адрес на OpenID diff --git a/config/locales/br.yml b/config/locales/br.yml index 660bf209d..96bf2e421 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -2481,7 +2481,6 @@ br: oauth2_authorizations: Aotreoù OAuth 2 muted_users: Implijerien kuzhet auth_providers: - openid_logo_alt: Kevreañ gant un OpenID openid_login_button: Kenderc'hel openid: title: Kevreañ gant OpenID diff --git a/config/locales/bs.yml b/config/locales/bs.yml index 2f1b7e928..9eda7a4e8 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -1294,8 +1294,6 @@ bs: need_to_see_terms: VaÅ¡ pristup API-ju je privremeno suspendovan. Molimo da se prijavite na web upravljačku ploču da pogledate Uslove za doprinosioce. Ne morate se složiti, ali ih morate pogledati. - auth_providers: - openid_logo_alt: Prijavite se sa OtvorenimID oauth: authorize: request_access_html: 'Aplikacija %{app_name} zahtjeva pristup VaÅ¡em korisničkom diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 6d277ea0f..6cd0f05c2 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -2528,7 +2528,6 @@ ca: oauth2_authorizations: Autoritzacions OAuth 2 muted_users: Usuaris silenciats auth_providers: - openid_logo_alt: Inicia sessió amb un compte OpenID openid: title: Inicia sessió amb un compte OpenID alt: Inicia sessió amb un URL d'OpenID diff --git a/config/locales/ce.yml b/config/locales/ce.yml index 10092ac1b..e4ef57af6 100644 --- a/config/locales/ce.yml +++ b/config/locales/ce.yml @@ -4,6 +4,7 @@ # Author: McDutchie # Author: Sasan700 # Author: Исмаил Садуев +# Author: Робин # Author: Умар --- ce: @@ -11,9 +12,11 @@ ce: formats: friendly: '%e %B %Y %H:%M' helpers: + file: + prompt: Харжа файл submit: diary_comment: - create: Ӏалашдан + create: Коммент diary_entry: create: Ӏалашйан update: Карлайаккха @@ -23,7 +26,10 @@ ce: create: ДӀадахьийта client_application: create: ДӀайаздала - update: Хийца + update: Карлайаккха + oauth2_application: + create: Регистраци йан + update: Карлайаккха redaction: create: Нисдар кхоллар update: Хийцам Ӏалашбе @@ -38,6 +44,10 @@ ce: messages: invalid_email_address: электронан поштан адресе тера дац email_address_not_routable: неъбиллина бац + display_name_is_user_n: user_n хила йиш йац, наггахь n хьан лелоша ID йацахь + models: + user_mute: + is_already_muted: хӀинцале а дӀайаккхина models: acl: ТӀецакхачаран бахьанин могӀа changeset: Нисдарш @@ -46,6 +56,7 @@ ce: diary_comment: Коммент diary_entry: Къамелан дӀайаздар friend: ДоттагӀ + issue: Хаттар language: Мотт message: Хаам node: ТӀадам @@ -61,6 +72,7 @@ ce: relation: Хилар relation_member: Хиларан декъашхо relation_tag: Хиларан тег + report: хаам session: Сесси trace: Трек tracepoint: Трекан тӀадам @@ -72,56 +84,105 @@ ce: way_node: Сизан тӀадам way_tag: Сизан тег attributes: + client_application: + name: ЦIе (схьадоьхург) + url: Приложенена URL (схьадоьхург) + callback_url: URL йухакхайкха + support_url: URL гӀо дар + allow_read_prefs: йеша лелорчера лаамаш + allow_write_prefs: хийца лелорчера лаамаш + allow_write_diary: |- + тептар тIехь йаздарш кхолла а, комментареш йа а, + доттагӀий лаха + allow_write_api: карта нисдар + allow_read_gpx: долахь йолу GPS-трекаш йеша + allow_write_gpx: GPS-трекаш чуйаха + allow_write_notes: заметкаш нисайар diary_comment: body: Текст diary_entry: user: Декъашхо title: Тема + body: Текст latitude: Шоралла longitude: Дохалла language_code: Мотт + doorkeeper/application: + name: ЦӀе + redirect_uri: URI-ш хийца + confidential: Къайле приложени? + scopes: Магор friend: user: Декъашхо friend: ДоттагӀ trace: user: Декъашхо visible: Гуш хилар - name: ЦӀе + name: Файлан цӀе size: Барам latitude: Шоралла longitude: Дохалла public: Массарна description: Цуьнах лаьцна - visibility: 'Гуш хилар:' + gpx_file: GPX файл чуяккха + visibility: Гуш хилар + tagstring: Тегаш message: sender: Баийтинарг title: Тема body: Текст recipient: Кхаьчнарг + redaction: + title: Корта + description: Цуьнах лаьцна + report: + category: Хьай хаамина бахьан гайта + details: Дехар ду, кхин а цхьацца дерг дийца проблемех лаьцна (оьшуш ду). user: + auth_provider: Аутентификацин провайдер + auth_uid: Аутентификаци email: Электронан пошт - new_email: 'Электронан поштан керла адрес:' + new_email: Электронан поштан керла адрес active: Жигара display_name: Гуш йолу цӀе description: Цуьнах лаьцна - home_lat: 'Шоралла:' - home_lon: 'Дохалла:' - languages: Меттанаш + home_lat: Шоралла + home_lon: Дохалла + languages: ГӀоле хета меттанаш + preferred_editor: ГӀоле хеташ волу редактор pass_crypt: Пароль + pass_crypt_confirmation: Бакъйе пароль + help: + doorkeeper/application: + confidential: |- + Приложени лелор йу клиентан къайле ларъян йиш йолчохь + (долахь йолу мобилан программаш а, цхьана агӀонан программаш а къайлаха йац) + redirect_uri: Цхьа могӀа лелабе URI тIехь + trace: + tagstring: цӀоьмалгца хадийна + user_block: + reason: Юзер дӀакъовларан бахьана. Дехар ду, хьайн ницкъ ма-кхоччу тийна а, + хьекъале а хила. Хьайн ницкъ ма-кхоччу пайдаэцархочун алсам хаам ло и дIа + хунда ваьккхан аьла и хIума нахана гуш хир дуйла дагахь а долуш. Диц ма + де, массо а пайдаэцархо кхеташ вац йукъараллин жаргонех, цундела дилитантан + терминаш лело хьажа. + needs_view: Бакъо йал оьший юзерин система чу вала, блок дӀаяккхале хьалха? + user: + new_email: (гайтан хир йац) datetime: distance_in_words_ago: about_x_hours: - one: герг сахьт хьалха - other: '%{count} герг сахьт хьалха' + one: '%{count} сахьт герг' + other: '%{count} масех сахьт хьалха' about_x_months: - one: герг бутт хьалха - other: '%{count} герг бутт хьалха' + one: '%{count} герг бутт хьалха' + other: '%{count} массех бутт хьалхьа' about_x_years: - one: герг шо хьалха - other: '%{count} герг шо хьалха' + one: '%{count} герг шо хьалха' + other: '%{count} месех шо хьалха' almost_x_years: - one: герг шо хьалха - other: '%{count} герг шо хьалха' + one: '%{count} шо герг хьалха' + other: '%{count} масех шо хьалха' half_a_minute: ахминот хьалхьа less_than_x_seconds: one: секундал кӀезга хьалха @@ -135,22 +196,16 @@ ce: x_seconds: one: 1 секунд хьалха other: '%{count} секунд хьалха' - x_minutes: - one: 1 минот хьалха - few: '%{count} минот хьалха' - other: '%{count} минот хьалха' + x_minutes: '{{PLURAL|one=%{count}1 минот хьалха|few=%{count} минот хьалха|many=%{count}' x_days: - one: 1 де хьалха - few: '%{count} де хьалха' - other: '%{count} де хьалха' + one: '%{count} де хьалха' + other: '%{count} масех де хьалха' x_months: - one: 1 бутт хьалха - few: '%{count} бутт хьалха' - other: '%{count} бутт хьалха' + one: '%{count} бутт хьалха' + other: '%{count} масех бутт хьалха' x_years: - one: 1 шо хьалха - few: '%{count} шо хьалха' - other: '%{count} шо хьалха' + one: '%{count} шо хьалха' + other: '%{count} масех шо хьалха' editor: default: Ӏадйитаран кеп (хӀоттина %{name}) id: @@ -159,39 +214,131 @@ ce: remote: name: Генара лелор description: Генара лелор (JOSM йа Merkaartor) + auth: + providers: + none: Йаьсса + google: Google + facebook: Facebook + github: GitHub + wikipedia: Википеди api: notes: comment: opened_at_html: Кхоьллина %{when} - opened_at_by_html: Кхоьллина %{when} хьалха %{user} - commented_at_html: Карлаяьккхина %{when} хьалха - commented_at_by_html: Карлаяьккхина %{when} хьалха %{user} - closed_at_html: Кичйина %{when} хьалха - closed_at_by_html: Кечйина %{when} хьалха %{user} - reopened_at_html: Йуха йеллина %{when} хьалха - reopened_at_by_html: Йуха йиллина %{when} хьалха %{user} + opened_at_by_html: Кхоьллина %{when} пайдаэцархочо %{user} + commented_at_html: Карлаяьккхина %{when} + commented_at_by_html: Карлаяьккхина %{when} пайдаэцархочо %{user} + closed_at_html: Кичйина %{when} + closed_at_by_html: Кечйина %{when} пайдаэцархочо %{user} + reopened_at_html: Йуха йиллина %{when} + reopened_at_by_html: Йуха йиллина %{when} пайдаэцархочо %{user} rss: title: OpenStreetMap билгалонаш + description_all: Къепйоза кхоьллина а, комментареш йина йа дӀакъевлина тептарш + description_area: Тептари къепйоза, кхоьллина а, комментареш йина йа дӀакъевлина + шуна меттигера [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})] + description_item: RSS-Ӏовраш билгалонаш %{id} + opened: керла билгалдаккхар (герга %{place}) + commented: керла комментари (герга %{place}) + closed: къоьвлина билгалдаккхар (герга %{place}) + reopened: йуха хьайилин билгалдаккхар (герга %{place}) entry: comment: Коммент full: Йуьззина текст + account: + deletions: + show: + title: Са аккаунт дӀайаккхар + warning: Терго йе! Аккаунт дӀаяккхаран процесс тӀаьххьара йу, йухаерзо йиш + яц. + delete_account: Аккаунт дӀайаккхар + delete_introduction: 'Хьай OpenStreetMap аккаунт дӀадаккха йиш йу лахахь йолчу + нуьйдица. Дехар ду, тидам бе лахахь долчу детальшна:' + delete_profile: Хьан профилан информаци, аватар а, йаздар а, цӀахь волу меттиг + а йолуш, дӀайаккхина хир ю. + delete_display_name: Хьан гойтуш йолу цӀе дӀаяьккхина хир ю, кхечу аккаунташа + юха лело йиш ю. + retain_caveats: 'Делахь а, хьох лаьцна цхьаболу хаамаш латтор бу OpenStreetMap-ехь, + хьан аккаунт дӀаяьккхинчул тӀаьхьа а:' + retain_edits: Картан базехь ахь дина хийцамаш, нагахь санна уьш белахь, ларбийр + бу. + retain_traces: Ахь чуйиллина лараш, нагахь санна уьш елахь, ларйийр йу. + retain_diary_entries: Хьан дневникан йаззамаш а, дневникан комментареш а, + нагахь санна уьш елахь, ларйийр ю, амма гуш ца хилийта къайлаяьхна хир йу. + retain_notes: Хьан картан тептарш а, цун тIе комментареш а, нагахь санна уьш + елахь, ларйийр ю, амма гуш ца хилийта къайлайахна хир ю. + retain_changeset_discussions: Хьан хийцамийн дискуссеш, нагахь санна уьш елахь, + ларйийр ю. + retain_email: Хьан почтан адрес лардийр ду. + recent_editing_html: Ахь дукха хан йоццуш хийцамаш бина хила дер, хьан аккаунт + карарчу хенахь дӀайаккха йиш яц. ДӀайаккха йиш хир йу цхьана %{time}. + confirm_delete: Бакъалла лаьий хӀуна? + cancel: Цаоьшу accounts: edit: - current email address: 'Карара электронан поштан адрес:' + title: Аккаунт хийца + my settings: Сан нисдаран гӀирс + current email address: Карара электронан поштан адрес + external auth: Арахьара аутентификаци openid: link text: хӀун йу хӀара? + public editing: + heading: Йукъара нисайар + enabled: ДӀахӀоттийна. Аноним йац, нисайа йиш ю. + enabled link text: хӀун йу хӀара? + disabled: ДӀасакъаьстина а, нисайа йиш йоцуш а, хьалха дина массо а хийцамаш + анониман ду. + disabled link text: Соьга хьунда ца йало нийсарш? contributor terms: + heading: Дакъалацарна хьоьлаш + agreed: Хьо реза хила керлачу дакъалацаран низаман. + not yet agreed: Хьо хинца а, реза ца хила керлачу дакъалацаран низаман. + review link text: Дехар ду хьайна аттачу хенахь хӀокху ссылки тӀе хьажа, керла + дакъалацаран Низам талла а, тӀеэца а. + agreed_with_pd: Иштта ахь дӀакхайкхийна, хьайн хийцамаш Къоман Кхиам лоруш + йу аьлла. link text: хӀун йу хӀара? save changes button: Хийцамаш дӀаӀалашбан + delete_account: Аккаунт дӀайаккхар... + go_public: + heading: Йукъара нисайар + currently_not_public: Карарчу хенахь хьан хийцамаш анониман бу, наха хьуна хаамаш + дӀакхачо а, хьан меттиг ган а йиш яц. Ахь хийцинарг гайта а, сайтехула хьайца + зӀене бовла а, лахахь йолчу нуьйда тӀе Ӏоттало. + only_public_can_edit: 0.6 API хийцаелчахьана, йукъараллин пайдаэцархойн бен + йиш яц картан хаамаш хийца. + find_out_why: хӀунда ду хаа + email_not_revealed: Хьан электронан почтан адрес гучудер дац, иза публични гIоттадахь. + not_reversible: И гӀуллакх йухадерзо йиш яц, массо а керла пайдаэцархой хӀинца + публични лоруш бу. + make_edits_public_button: Сан массо а хийцамаш нахана гойтуш дӀахӀиттабе + update: + success_confirm_needed: Декъашхочун информаци кхиамца карлаяьккхина. Хьайн электронан + почтан чу хьажа, хьай керла адрес тӀечӀагӀда. + success: Декъашхочунахь лаьцна информаци кхиамца карлайаькхна. + destroy: + success: Аккаунт дӀайаккхина. browse: + deleted_ago_by_html: ДӀадаьккхина %{time_ago} декъашхочо %{user} + edited_ago_by_html: Нисайина %{time_ago} декъашхочо %{user} version: Верси + redacted_version: Нисайина верси in_changeset: Нисдарш anonymous: аноним no_comment: (коммент йац) part_of: Дакъалоцу цу + part_of_relations: + one: '%{count} йукъаметтиг ' + other: '%{count} йукъаметтигаш' + part_of_ways: + one: '%{count} сиза' + other: '%{count} сизнаш' download_xml: Схьаэца XML view_history: Хьажа истори + view_unredacted_history: Хьажа нисайаза историга view_details: Мадарра + view_redacted_data: Хьажа нисайина историга + view_redaction_message: Хьажа нийсабина хаамига location: 'Географин йолу меттиг:' node: title_html: 'ТӀадам: %{name}' @@ -200,6 +347,9 @@ ce: title_html: 'Сиз: %{name}' history_title_html: 'Сизан истори: %{name}' nodes: ТӀадам + nodes_count: + one: '%{count} шад' + other: '%{count} шаднаш' also_part_of_html: one: сиза чохь йу %{related_ways} other: сизийн чохь йу %{related_ways} @@ -207,6 +357,9 @@ ce: title_html: 'Хилар: %{name}' history_title_html: 'Хиларан истори: %{name}' members: Декъашхой + members_count: + one: '%{count} декъашхо ' + other: '%{count} декъашхоша' relation_member: entry_role_html: '%{type} %{name} ролехь %{role}' type: @@ -217,6 +370,7 @@ ce: entry_html: Хилар %{relation_name} entry_role_html: Хилар %{relation_name} (ролехь %{relation_role}) not_found: + title: Цакарийна sorry: 'Халахетарх, %{type} #%{id} цакарий.' type: node: тӀадам @@ -225,6 +379,7 @@ ce: changeset: нисдарш note: билгалдаккхар timeout: + title: Тайм-аут гIалат sorry: Бехк ба билла, цу %{type} хаамаш %{id} чуьра чубаха тӀех беха бу. type: node: тӀадамаш @@ -252,12 +407,24 @@ ce: tag: Вики агӀонгахь гойту, тег %{key}=%{value} wikidata_link: Элемент %{page} Викихаамашкахь wikipedia_link: АгӀо %{page} Википедин чохь + wikimedia_commons_link: Викиларми тIера элемент %{page} telephone_link: Телпо тоха %{phone_number} + colour_preview: Басе %{colour_value} хьажа + email_link: Электронан почта %{email} query: title: ХӀун йу кхузахь? introduction: Уллера объекташ карайан, картин тӀетаӀайe nearby: Уллера объекташ enclosing: Йолу меттиг + old_nodes: + not_found: + sorry: 'Бехк ма билла, шад #%{id} версин %{version} карийна бац.' + old_ways: + not_found: + sorry: 'Бехк ма била, некъ #%{id} версин %{version} карийна бац.' + old_relations: + not_found: + sorry: 'Бехк ма билла, йукъаметтиг #%{id} версин %{version} карийна йац.' changesets: changeset_paging_nav: showing_page: АгӀо %{page} @@ -276,14 +443,15 @@ ce: index: title: Нисдарш title_user: Декъашхочун %{user} нисдарш + title_user_link_html: Декъашхочун %{user_link} нисдарш title_friend: Хьан доттагӀийн нисдарш title_nearby: Уллера декъашхойн нисдарш - empty: Нисдарш цакарий + empty: Нисдарш цакарий. empty_area: Кхузахь нисдарш дина дац. - empty_user: Кхузахь хӀокху декъашхочо нисдарш дийна дац. + empty_user: Кхузахь хӀокху декъашхочо нисдарш дина дац. no_more: Кхи цхьа нисдарш цакарий. - no_more_area: Кхузахь нисдарш дина дац. - no_more_user: Кхузахь хӀокху декъашхочо нисдарш дина дац. + no_more_area: Кхи кхузахь нисдарш дина дац. + no_more_user: Кхи кхузахь хӀокху декъашхочо нисдарш дина дац. load_more: Чуйаха кхин а feed: title: 'Нисдарш: %{id}' @@ -291,10 +459,36 @@ ce: created: Кхоьллина closed: ДӀачӀагӀа belongs_to: Автор + subscribe: + heading: ТIевазалур вуй хийцамийн дийцар тIе? + button: ТIевазало дийцар тIе + unsubscribe: + heading: ХӀокху хийцамийн дийцар тIера дӀакъаста? + button: ДӀакъаста дийцар тIера + heading: + title: 'Нисдарш: %{id}' + created_by_html: Кхоьлина %{link_user} on %{created}. + no_such_entry: + title: Иштта хийцама пакет бац + heading: 'ДӀайазайина йац id: %{id}' + body: Бехк ма билла, id %{id} хийцамаш бац. Дехар ду, нийса йазийни хьажа, хьо + чоьха ваьла ссылка нийса ца хила а тарло. show: title: 'Нисдарш: %{id}' + created: Кхоьллина %{when} + closed: 'ДӀакъевлина: %{when}' + created_ago_html: Кхоьллина %{time_ago} + closed_ago_html: ДӀакъевлина %{time_ago} + created_ago_by_html: Кхоьллина %{time_ago} декъашхочо %{user} + closed_ago_by_html: ДӀакъевлина %{time_ago} декъашхочо %{user} discussion: Дийцар join_discussion: Дийцарехь дакъалаца системин чугӀо + still_open: Хийцамийн пакет хӀинца а йиллина йу - дискусси схьайоьллур йу хийцамийн + пакет дӀакъевлича. + subscribe: Йаздала + unsubscribe: Йаздалар дӀадаккха + comment_by_html: Комментари йина %{user} %{time_ago} + hidden_comment_by_html: Къайлаха комментари йина %{user} %{time_ago} hide_comment: къайлайаккха unhide_comment: гайта comment: Коммент @@ -308,35 +502,58 @@ ce: relations: Хилар (%{count}) relations_paginated: Хилар (%{x}-%{y} чуьра %{count}) timeout: - sorry: Ахьа бихина нисдарийн могӀа, арабаккха тӀехь беха бу. + sorry: Бехк ма билла, ахьа бихина нисдарийн могӀа, арабаккха тӀехь сов хьан + оьшу. changeset_comments: comment: - comment: '#%{changeset_id} %{author} керла коммент' - commented_at_by_html: Карлаяьккхина %{when} хьалха %{user} + comment: '#%{changeset_id} %{author} керла коммент нисдаран пакет тIе' + commented_at_by_html: Карлайаккхина %{when} декъашхочо %{user} + comments: + comment: 'Керла комментари нисдаран пакет тIе #%{changeset_id} декъашхочо %{author}' index: title_all: OpenStreetMap тӀехь дина нисдарийн дийцар title_particular: 'OpenStreetMap #%{changeset_id} тӀехь дина нисдарийн дийцар' + timeout: + sorry: Бехк ма билла, ахьа бихина нисдарийн могӀанаш, арабаха тӀехь сов хьан + оьшу. dashboards: contact: + km away: Хьун тIера %{count} км + m away: Хьун тIера %{count} м latest_edit_html: 'ТӀаьххьара нисдар %{ago}:' popup: + your location: Хьо волу/йолу меттиг + nearby mapper: Уллера картадилархо friend: ДоттагӀ show: + title: Сан панель + no_home_location_html: '%{edit_profile_link} а, хьо волу меттиг а хӀоттае, уллера + декъашхо гарахьам.' + edit_your_profile: Хьайн профиль нисайе my friends: ДоттагӀий + no friends: Цкъачунна цхьа а доттагӀ тӀетоьхна вац ахь. + nearby users: Кхибола уллера декъашхой + no nearby users: Кхин цхьа а декъашхо вац цкъачунна уллех карта хӀоттош болх + беш. + friends_changesets: доттагӀийн хийцамаш + friends_diaries: доттагӀийн тептарш + nearby_changesets: лулара хийцамаш + nearby_diaries: лулара тептаран йаздарш diary_entries: new: title: Керла дӀайаздар дневник чохь form: - location: 'Меттиг:' - use_map_link: Гайта картан тӀехь + location: Меттиг + use_map_link: Карта лела де index: - title: Дневникаш - title_friends: ДоттагӀийн дневникаш - title_nearby: Уллера декъашхойн дневникаш - user_title: Декъашхочун дневник %{user} + title: Тептарш + title_friends: ДоттагӀийн тептарш + title_nearby: Уллера декъашхойн тептарш + user_title: Декъашхочун тептар %{user} in_language_title: '%{language} маттахь дневникан дӀайаздарш' new: Дневник чуьра керла дӀайаздар new_title: Кхолла хьайн дневник чохь керла дӀайаздар + my_diary: Сан тептар no_entries: Дневник чохь дӀайаздарш дац recent_entries: Дукха хан йоцу дӀайаздарш older_entries: Шира дӀайаздарш @@ -345,8 +562,11 @@ ce: title: ДӀайаздарш тадар marker_text: Билгало йазйаран меттиг show: - title: Декъашхочун дневник %{user} | %{title} - user_title: Декъашхочун дневник %{user} + title: Декъашхочун тептар %{user} | %{title} + user_title: Декъашхочун тептар %{user} + discussion: Дийцар + subscribe: Йаздала + unsubscribe: Йаздалар дӀадаккха leave_a_comment: Йитта коммент login_to_leave_a_comment_html: '%{login_link}, коммент йитарна' login: ЧугӀо @@ -356,12 +576,14 @@ ce: body: id %{id} чуьра дӀайаздарш цакарий. хьажа нийса йаздиний. Хьажорг гӀалате хила мега. diary_entry: - posted_by_html: 'ДӀабахийтина %{link_user} %{created}, мотт: %{language_link}' - comment_link: Йитта коммент - reply_link: Жоп ло + posted_by_html: 'Арахецна %{link_user} %{created}, мотт: %{language_link}' + updated_at_html: ТӀаьххьара карладаккхар %{updated}. + comment_link: Комментари е хӀокху йаззамна + reply_link: Авторе йаза де comment_count: - few: '%{count} коммент яц' - other: '%{count} коммент яц' + one: '%{count} коммент' + other: '%{count} комментареш' + no_comments: Комментари йац edit_link: Хийца дӀайаздар hide_link: Къайладаккха дӀайаздар unhide_link: Гучудаккха хӀара дӀайаздар @@ -369,13 +591,13 @@ ce: report: Хаамбе хӀокху дӀайаздарх дневник тӀехь diary_comment: comment_from_html: Коммент %{link_user} %{comment_created_at} - hide_link: Къайладаккха хӀара коммент + hide_link: Къайлайаккха хӀара коммент unhide_link: Гучуйаккха хӀара коммент confirm: Бакъдан report: ХӀокху комментах хаамбе location: location: 'Меттиг:' - view: Гар + view: Хьажа edit: Нисдар feed: user: @@ -388,25 +610,134 @@ ce: all: title: Дневникан дӀайаздарш OpenStreetMap description: OpenStreetMap декъашхойн тӀаьххьарлера дӀайаздарш + subscribe: + heading: РoгӀepa йаззам йазъечу дискуссина тIе вазлой? + button: ТIевазало дийцар тIе + unsubscribe: + heading: РoгӀepa йаззам йазъечу дискуссина тIера дӀакъастий? + button: ДӀакъаста дийцар тIера diary_comments: index: + title: Декъашхочо тӀетоьхначу дневникан йаздаршна комментареш %{user} + heading: '%{user} тептар тIе комментареш' + subheading_html: тдекъашхочо тептар тIе комментареш тоьхна %{user} + no_comments: цхьа комментари йац тептартех post: Хаам when: Маца comment: Коммент newer_comments: Керла комменташ older_comments: Шира комменташ + new: + heading: Дневник йазъйаран дискуссе комментари тӀетоха? + doorkeeper: + errors: + messages: + account_selection_required: Авторизацин серверо декъашхочуна тептар къасто + деза доьху + consent_required: Авторизацин серверо декъашхочуна резахилар доьху + interaction_required: Авторизацин серверна оьшу декъашхочуна йукъаметтигаш + лелайар + login_required: Авторизацин серверна оьшу чаккхенан декъашхочуна аутентификаци + flash: + applications: + create: + notice: Приложенин регистраци йина. + openid_connect: + errors: + messages: + auth_time_from_resource_owner_not_configured: ГIулкх ца хила хIара кехо + бахьанехь::OpenidConnect.configure.auth_time_from_resource_owner конфугираци + йац. + reauthenticate_resource_owner_not_configured: ГIулкх ца хила хIара кехо + бахьанехь::OpenidConnect.configure.reauthenticate_resource_owner конфугираци + йац. + resource_owner_from_access_token_not_configured: ГIулкх ца хила хIара кехо + бахьанехь::OpenidConnect.configure.resource_owner_from_access_token конфугираци + йац. + select_account_for_resource_owner_not_configured: ГIулкх ца хила хIара кехо + бахьанехь::OpenidConnect.configure.select_account_for_resource_owner конфугираци + йац. + subject_not_configured: ID Токен генераци ца хилира Кехо бахьана долуш::OpenidConnect.configure.subject + конфугираци йац. + scopes: + address: Хьо волу адрес хьажа + email: Хьайн электронан почтан адрес хьажа + openid: Хьайн аккаунте аутинфикаци + phone: Хьайн телефон номере хьажа + profile: Хьайн профилан хаамашка хьажа + errors: + contact: + contact_url_title: Тайп-тайпанчу контактийн каналаша гайтан + contact: Контакт + contact_the_community_html: Маьрша хила %{contact_link} OpenStreetMap йукъаралле, + нагахь санна хьуна йоьхна ссылка / гIалат карийнехь. Нийса URL дӀаязъе хьайн + дехаран йуккхех. + bad_request: + title: Нийса доцу дехар + description: OpenStreetMap сервер тӀехь ахь йехна операци нийса йац (HTTP 400) + forbidden: + title: Магийна дац + description: OpenStreetMap сервер тӀехь ахь йехна операци администраторшна бен + магина йац (HTTP 403) + internal_server_error: + title: Приложенин гIалат + description: OpenStreetMap серверна дагахь доцу хьал нисделира, цо новкъарло + йира дехар кхочушдан (HTTP 500) + not_found: + title: Файл цакарий + description: Цу цӀарца йолу файл/каталог/API операци ца карийра OpenStreetMap + сервер тӀехь (HTTP 404) + friendships: + make_friend: + heading: '%{user} доттагӀ санна тӀетохий?' + button: ТӀетоха доттагӀ сана + success: '%{name} хIинца хьа доттагI ву!' + failed: Бехк ма билла, %{name} доттагӀ санна тӀе цатохавела. + already_a_friend: Хьо хӀинца %{name} доттагӀ ву . + limit_exceeded: Дукха юзершца доттагӀалла лелийна ахь тӀаьхьарчу хенахь. Кхин + доттагӀалла лело гӀертале жимма собар дехьа. + remove_friend: + heading: ДоттагӀ %{user} дӀаваккхий? + button: ДоттагӀ дӀаваккха + success: '%{name} хьан доттагIшна йукъара дӀаваьккхина.' + not_a_friend: '%{name} хIинца хьа доттагI вац.' geocoder: + search: + title: + results_from_html: '%{results_link} тӀера жамӀаш' + latlon: Чоьхьара search_osm_nominatim: prefix: aerialway: cable_car: Муьшан некъ + chair_lift: Муш тесна хьалаойург + drag_lift: Якорь тесна хьалаойург + gondola: Канатан некъ + magic_carpet: Инзаре кузан хьалаойург + platter: Бугелан хьалаойург + pylon: БӀогӀам + station: Канатан хьалаойургачун станци + t-bar: Т-сан хьалаойург + "yes": ХӀаваан некъ aeroway: aerodrome: Аэродром - apron: Перрон + airstrip: Кеман хьалагIоту-охьахуа некъ + apron: Аэропортан перрон + gate: Аэропортан гэйт hangar: Ангар helipad: Беркеманийн майда - terminal: Терминал + holding_position: Собар до меттиг + navigationaid: Авиацин навигацина систем + parking_position: Машен дӀахӀотто меттиг + runway: Кема хьалагIоту некъ + taxilane: Таксин некъ + taxiway: Кема нийсадо некъ + terminal: Аэропортер терминал + windsock: Мох гойтуш йерг amenity: + animal_boarding: Дийнатан интернат + animal_shelter: Дийнаташан тховкӀело + arts_centre: Исбаьхьаллин центр atm: Банкомат bank: Банк bar: Бар @@ -414,17 +745,26 @@ ce: bench: ГӀант bicycle_parking: Велопарковка bicycle_rental: Вилспетийн прокат + bicycle_repair_station: вилспеташ та йо меттиг + biergarten: Йий духку меттиг + blood_bank: ЦIина доккху банк + boat_rental: Лодкан прокат brothel: Бордель + bureau_de_change: Валюта хуьйцу меттиг + bus_station: Автобусан станци cafe: Кафе car_rental: Автомобилийн аренда car_sharing: Каршаринг car_wash: Авто йуьлу меттиг casino: Казино + charging_station: Электромашенан ток ло станци + childcare: Берига хьожу Iедал cinema: Кинотеатр clinic: Поликлиника clock: Сахьташ college: Колледж community_centre: Йукъараллин центр + conference_centre: Конференц-центр courthouse: Суд crematorium: Крематоорий dentist: Стоматологи @@ -432,6 +772,7 @@ ce: drinking_water: Молу хи driving_school: Автошкола embassy: Векалалла + events_venue: Вовшахкхеттар дӀахьуш йолу меттиг fast_food: Фаст-фуд ferry_terminal: Пароман станци fire_station: ЦӀеяйаран станци @@ -440,23 +781,42 @@ ce: fuel: Йагорг йоттар gambling: Ловза цӀа grave_yard: ДӀабухку меттиг + grit_bin: ГIум чохь йол контейнер hospital: Госпиталь + hunting_stand: Талларан стенд + ice_cream: Морожени + internet_cafe: Интернет кафе + kindergarten: Берийн беш + language_school: Мотт Iамо ишкол library: Библиотека + loading_dock: ТIедуту док + love_hotel: Безаман отель marketplace: Базар + mobile_money_agent: Мобилан ахчанан агент monastery: Монастырь + money_transfer: Ахч дехьадокху меттиг + motorcycle_parking: Маццикл дӀахӀотто меттиг + music_school: Музыкийн ишкол nightclub: Буьйсанан клуб nursing_home: Къанойн цӀа parking: ДӀахӀуттийла + parking_entrance: Парковкан чуволийла parking_space: Парковка + payment_terminal: Ахча дӀадаларан терминал pharmacy: Аптека + place_of_worship: Ӏибадат до меттиг police: Полици post_box: Поштан йаьшка post_office: Поштан дакъа prison: Набахте pub: Паб + public_bath: Йукъара бани + public_bookcase: Йукъара книжкан шкаф public_building: Йукъараллин гӀишло + ranger_station: Рейнджерин станци recycling: Утилизацин меттиг restaurant: Ресторан + sanitary_dump_station: Санитарийн кхели school: Ишкол shelter: ДӀахьуллойла shower: Душ @@ -469,17 +829,27 @@ ce: theatre: Театр toilets: ХьаштагӀа townhall: ГӀалин администраци + training: Ӏаморан меттиг university: Университет + vehicle_inspection: Машенаг хьожу меттиг vending_machine: Махбаран автомат veterinary: Ветеринаран клиника village_hall: Керт waste_basket: Урна waste_disposal: Нехийн бак + waste_dump_site: Нехаш дӀакхуссу меттиг + watering_place: Хи доккху меттиг water_point: Хи гулдар + weighbridge: ТӀайан терза + "yes": ПаргIатто boundary: + aboriginal_lands: Аборигенан латташ administrative: Административан дакъа + census: Бахархойн дӀаязбаран доза national_park: Къоман парк + political: Хьаржаман доза protected_area: ГӀорала деш йолу меттиг + "yes": Доза bridge: aqueduct: Акведук boardwalk: Тротуар @@ -488,82 +858,244 @@ ce: viaduct: Виадук "yes": ТӀай building: + apartment: Петар + apartments: Петарш + barn: Амбар + bungalow: Бунгало + cabin: ЛаппагӀа + chapel: Килс + church: Килс + civic: Граждански гӀишло + college: Колледжан гIишло + commercial: Коммерцин гӀишло + construction: Йаш йолу гIишло + cowshed: Божал + detached: Ша лаьтта цIа + dormitory: Общежити + duplex: Шина агIор цIа + farm: Ферма + farm_auxiliary: Фермера цIа + garage: Гараж + garages: Гаражаш + greenhouse: Теплиц + hangar: Ангар + hospital: Лазартне гIишло + hotel: ХьешацӀа + house: ЦӀа + houseboat: ЦӀийнан хинкема + hut: ЛаппагӀа + industrial: Промышленни гӀишло + kindergarten: Берийн беш + manufacture: Промышленни гӀишло + office: Офисан гIишло + public: Йукъараллин гӀишло + residential: Нах беха цIа + retail: Йохк-эцаран гIишло + roof: Тхов + ruins: Доьхна цIа + school: Ишколан гIишло + semidetached_house: Ши петар йол цIа + service: Сервисан гIишло + shed: Божал + stable: Кхай + static_caravan: ДIайсалело цIа + sty: Хьакхин божал + temple: Килсан гIишло + terrace: МогIара цIенош + train_station: Аьчка некъан вокзал + university: Университет + warehouse: Дуо "yes": ГӀишло + club: + scout: Скаутан база + sport: Спортан клуб + "yes": Клуб craft: + beekeeper: Накхаршлелорхо + blacksmith: Пхьар brewery: Йий доккху carpenter: Дечиг-пхьар + caterer: Юург латтош верг + confectionery: Кондитерски + dressmaker: Ð¥Iумаша тоьгург electrician: Электрик + electronics_repair: Электроник тайо меттиг gardener: Бешахо + glaziery: Аьнглилелархо + handicraft: Пхьола + hvac: HVAC Пхьола + metal_construction: Эчкан пхьар painter: Исбаьхьалча photographer: Суртдоккхург plumber: Сантехник + roofer: Тхован пхьар + sawmill: Дечкан хьер shoemaker: Эткийн пхьар + stonemason: ТӀулгбуттург tailor: Тегархо + window_construction: Кораш до меттиг + winery: Вино до меттиг "yes": ПхьалгӀа emergency: + access_point: Интернет тIекхочу меттиг + ambulance_station: Сиха гIо до станци assembly_point: Гулдо меттиг defibrillator: Дефибриллятор + fire_extinguisher: ЦӀейойург + fire_water_pond: ЦӀейойурган Iам + landing_site: Аварийна охьааран меттиг + life_ring: Аварийн хинтIехь латто хӀоз + phone: Аварийн телефон + siren: Аварийн хаамийн сирен + suction_point: Аварийн хи чуузу меттиг + water_tank: ЦӀейойургучер Iам highway: + abandoned: Тесна некъ + bridleway: Говр хьохку некъ + bus_guideway: Автобусан моха bus_stop: Автобус соцу меттиг + construction: Некъ тобар + corridor: Йуккъахула чекхвала + crossing: Биъ-некъ + cycleway: Вилиспетан некъ + elevator: Лифт + emergency_access_point: Дуьххьара гIо до меттиг + emergency_bay: Аварийн лоттийла + footway: Тротуар ford: Гечо + give_way: Знак "Некъ битта" + living_street: Нах беха урам + milestone: Километаран бIогIам + motorway: Бокх некъ + motorway_junction: Бокх биъ-некъ + motorway_link: Некъан къастар + passing_place: Некъ къастаран моха path: 'Некъ:' + pedestrian: ГIаш лела урам platform: Платформа primary: Коьрта некъ primary_link: Коьрта некъ proposed: Проектехь болу некъ + raceway: Машен къовсу некъ residential: Урам rest_area: СадоӀу зона road: Некъ + secondary: Къезга лелабо некъ + secondary_link: Къезга лелабо некъ + service: ДӀасалелар + services: Некъаца йолу сервис + speed_camera: Сихаллин камера steps: ТӀегӀанаш + stop: Соцу знак street_lamp: Урамера фонарь + tertiary: КхозлолгIа классан некъ + tertiary_link: КхозлолгIа классан некъ + track: Ворданан некъ + traffic_mirror: Некъан куьзга + traffic_signals: Светофор + trailhead: Тача trunk: Некъ + trunk_link: Бокх некъ + turning_circle: Чувоьрзу гуо + turning_loop: Чувоьрзу некъ + unclassified: Меттигера некъ "yes": Некъ historic: + aircraft: Историйн кема archaeological_site: Эхкарш + bomb_crater: Хьалхалера бомбехь дисина ор battlefield: ТӀеман бай boundary_stone: Дозанан тӀулг building: Историн гӀишло bunker: Бункер + cannon: Историйн йокх топ castle: ГӀап + charcoal_pile: Историйн дечкан кIора church: Килс city_gate: ГӀалин ков citywalls: Историн чӀагӀанаш fort: Форт heritage: Культуран тӀаьхьалон объект + hollow_way: ТIаьIана некъ house: ЦӀа manor: Латта memorial: Мемориал + milestone: Историйн мур mine: Хьаст + mine_shaft: Шахтан гIад + monument: Монумент + railway: Историйн цӀерпоштан некъ + roman_road: Римхойн некъ ruins: Саьлнаш + rune_stone: Рунийн тIулг stone: ТӀулг tomb: Каш tower: БӀов + wayside_chapel: Некъаца йол килс + wayside_cross: Некъаца долу жIара + wayside_shrine: Некъаца йолу Iибадатан меттиг + wreck: Ð¥Iорд-кеман остов + "yes": Иэсан меттиг junction: "yes": Галморзе landuse: allotments: Бешлелор + aquaculture: Аквакультур basin: Бассейн + brownfield: ГIишло йа кечайина меттиг cemetery: Кешнаш commercial: Офисан меттиг conservation: Лардойла construction: ГӀишлош йар + farmland: ДIадуьйша латт + farmyard: Ферман керт + forest: Хьун garages: Гаражаш grass: Буц + greenfield: Кхиаза йолу территори + industrial: Ерматаллин кIошта landfill: ДӀакхийсуьйла meadow: Бай military: ТӀеман меттиг mine: Шахта orchard: Стоьмийн беш + plant_nursery: Ораматаш кхио меттиг quarry: Карьер railway: Аьчкан некъ recreation_ground: СадоӀу некъ + religious: Динан территори reservoir: Хи латтийла + reservoir_watershed: Резервуарийн хидоькъе + residential: Нах беха меттиг retail: Мах бен территори + village_green: Эвлан юкъ + vineyard: Кемсийн беш + "yes": Латталелор leisure: + adult_gaming_centre: Боккхиниш ловзу центр + amusement_arcade: Самукъадаккхаран Аркада + bandstand: Эстрада + beach_resort: Диттнаш долуш пляж + bird_hide: Олхазарша толлу пункт + bleachers: Трибунаш + bowling_alley: Боулинган моха + common: Йукъара латта + dance: Хелхаран чоь + dog_park: ЖIаьлина майда + firepit: ЦIе латто меттиг + fishing: ЧӀерийлецар + fitness_centre: Фитнес-центр + fitness_station: Тренажер + garden: Беш + golf_course: Гольфан майда + horse_riding: Говр хохку меттиг + ice_rink: Ша marina: Йист miniature_golf: Минигольф nature_reserve: Лардойла + outdoor_seating: Арахь охьаховшар park: Парк + picnic_table: Пикникан стоьла pitch: Спортан майда playground: Берийн ловзу майда recreation_ground: СадоӀу зона @@ -578,55 +1110,147 @@ ce: "yes": Мукъа хан man_made: adit: Галерей + advertising: Реклама + antenna: Антенна + avalanche_protection: Хьаьттан дуьхьало beacon: Маяк + beam: ЗӀенар beehive: Улей + breakwater: ТулгӀа-хьадорг bridge: ТӀай bunker_silo: Бункер + cairn: ТIулган пирамида chimney: КӀуьран биргӀа + clearcut: Ирзу + communications_tower: ЗӀенан бӀов crane: Кран + cross: Некъ хадор + dolphin: Ð¥Iорд-кема дӀатосийла + dyke: Дамба embankment: ЦӀерпоштнекъан вал flagpole: ГӀуркх gasometer: Газгольдер groyne: Буна kiln: Пеш lighthouse: Маяк + manhole: Люк mast: Мачта mine: Хьаст + mineshaft: Шахтан гIад + monitoring_station: Тидам бо станци + petroleum_well: Мехкадаьттан буру pier: Мор pipeline: Турбанаш йахкар + pumping_station: Насосан станци + reservoir_covered: ДӀакъевлина резервуар silo: Силос + snow_cannon: Ло тухарг + snow_fence: Лона дуьхьало + storage_tank: Къойлана резервуар + street_cabinet: Урамера шкаф + surveillance: Тидам бо камер + telescope: Телескоп tower: БӀов + utility_pole: Тоькан бIогIам + wastewater_plant: Боьха хи цIандо станци + watermill: Хина хьера + water_tap: Хин кран + water_tower: Хин бӀов water_well: ГӀу + water_works: Хидокху меттиг + windmill: Мохан электростанци + works: Фабрика + "yes": Адмо кхоьллина + military: + airfield: ТIеман аэродром + barracks: Баракаш + bunker: Бункер + checkpoint: Блокпост + trench: Саьнгар + "yes": ТIеман + mountain_pass: + "yes": Дукъ даккхар natural: + atoll: Атолл + bare_rock: Йерзина тарх bay: Айма + beach: Пляж cape: Кафе + cave_entrance: Хьех чувола меттиг + cliff: Тарх + coastline: ХӀордан йист crater: Кратер + dune: Дюна + fell: Ломар йеса меттиг fjord: Фьорд forest: Хьуьн geyser: Гейзер glacier: Шалам grassland: Бай + heath: Йеса аре hill: Барз + hot_spring: Муьжхи island: ГӀайре + isthmus: Лаг land: Латта + marsh: Буц йолу ишал + moor: Ишал mud: Хатт peak: Ломан бохь + peninsula: АxгӀайpe point: Мара reef: Риф ridge: Дукъ rock: Тарх saddle: Лам баккхар sand: ГӀум + scree: Охьатекхна жагӀа + scrub: Коьллаш + shingle: ЖагӀа + spring: |2- + + Хьаст stone: ТӀулг strait: Хидоькъе tree: Дитт + tree_row: Диттан могӀа + tundra: Тундра + valley: ТогӀе volcano: ТӀаплам + water: Хи + wetland: Ишалан меттиг + wood: Хьун + "yes": Ӏаламан хӀума office: + accountant: Бухгалтер administrative: Администраци + advertising_agency: Рекламан агентство architect: Архитектор + association: Ассоциаци company: Компани + diplomatic: Дипломатин офис + educational_institution: Дешаран меттиг + employment_agency: Болх луьху агентство + energy_supplier: Ток латтучун офис + estate_agent: ГIишлонан агенство + financial: Финансан офис + government: Ӏедалан урхалла + insurance: Страховийн офис + it: IT-офис + lawyer: Юрист + logistics: Логистикан офис + newspaper: Газетан офис + ngo: НКО офис + notary: Нотариус + religion: Динан офис + research: Талламан офис + tax_advisor: Налогийн хьехамча + telecommunication: Телекоммуникацин офис + travel_agent: Туристийн агенталла "yes": Офис place: + allotments: Бешлелор + archipelago: Архипелаг city: ГӀала city_block: ГӀалин куп country: Пачхьалкх @@ -637,8 +1261,11 @@ ce: houses: ЦӀа island: ГӀайре islet: Жима гӀайре + isolated_dwelling: Фермера цIа + locality: Меттиг municipality: Муниципалитет neighbourhood: Лулахалла + plot: Дакъа postcode: Поштан индекс quarter: ГӀалин кӀошт region: Регион @@ -651,22 +1278,208 @@ ce: village: Дитташ "yes": Йолу меттиг railway: + abandoned: ДӀасабаькхна цӀерпоштан некъ + buffer_stop: Буферан сацар + construction: Баьш болу цӀерпоштнекъ + disused: ДӀатесна цӀерпоштан некъ + funicular: Фуникулер + halt: ЦӀерпоштан вокзал + junction: ЦӀерпоштнекъан дӀасакъастар + level_crossing: ЦӀерпоштнекъах дехьаволийла + light_rail: Йей рельсан транспорт + miniature: ЦӀерпоштнекъан макет monorail: Монорельс + narrow_gauge: готта аьчка некъ + platform: Эчка некъан платформа + preserved: Историйн эчка некъ + proposed: Ба безаш эчкан некъ + rail: Рельс + spur: ЦӀерпоштан лини + station: ЦӀерпоштан вокзал + stop: ЦӀерпоштан сацар + subway: Метро + subway_entrance: Метро чувола меттиг + switch: ЦӀерпоштан коммутатор + tram: Трамвай + tram_stop: Трамвайан сацар + turntable: Чуваьрзу гуо + yard: ЦӀерпоштан керт shop: + agrarian: Латталелахочун туька + alcohol: Къаьркъан туька + antiques: Антиквариат + appliance: Чура хӀумман туька + art: Исбаьхьаллин салон + baby_goods: Берийн хӀуманаш + bag: Тоьрмагин туька + bakery: Бепиг + bathroom_furnishing: Ванни мебель + beauty: Хазалан салон + bed: Меттан хӀуманаш + beverages: Маларш духку туька + bicycle: Вилспетан туька + bookmaker: Букмекер + books: Жайнан туька + boutique: Бутик + butcher: Жижиг духку туька + car: Машенийн туька + car_parts: Машенан дакъош духку туька + car_repair: Машен тайорг + carpet: Кузанаш + charity: СагӀийна туька + cheese: Нехчан туька + chemist: Хими + chocolate: Шоколад + clothes: Духарш духку туька + coffee: Кофина туька + computer: Компьютеран туька + confectionery: Кондитеран туька + convenience: Сурсатина туька + copyshop: Копий йо меттиг + cosmetics: Косметика + craft: Пхьеран хӀуманан туька + curtain: Бойш йухку туька + dairy: Шуран туька + deli: Деликатесан туька + department_store: Универсам + discount: ДӀадохкаран туька + doityourself: '"Айха де" тайпа туька' + dry_cleaning: Химйилар + e-cigarette: Электронан сигаьркан туька + electronics: Электроникан туька + erotic: Эротикан туька + estate_agent: ГIишлонан агенство + fabric: Къади духку туька + farm: Кертар сурсатийн туька + fashion: Духаран туька + fishing: ЧӀаралацархочун туька + florist: Зезагийна туька + food: Сурсаташ + frame: Гуран туька + funeral_directors: ДӀаверзоран бюро + furniture: Мебель + garden_centre: Бешан центр + gas: Газ техникан гӀирс + general: Йукъара туька + gift: СовгӀатийн туька + greengrocer: Хасстоьман туька + grocery: Сурсатин туька + hairdresser: Парикмахер + hardware: ГӀирсан туька + health_food: Могша даарин туька + hearing_aids: Къорачан аппараташ + herbalist: Бецан говзанча hifi: Аудио/видео аппаратурийн туька houseware: ПхьегӀийн туька + ice_cream: Морожени туька interior_decoration: Интерьер кечйар + jewelry: Деши духка туька + kiosk: Киоск + kitchen: Кухни туька + laundry: ХӀуманаш йутту + locksmith: Слесар + lottery: Лотерей + mall: Йоккха туька + massage: Массаж + medical_supply: Медицинан хӀуманаш йухку туька + mobile_phone: Смартфонаш йухку туька + money_lender: Кредитор + motorcycle: Моццикалан туька + motorcycle_repair: Моццикалаш тайар music: Музыкийн туька + musical_instrument: Иллийн гӀирс newsagent: Газетийн киоск + nutrition_supplements: Кхачанан тӀетохарш optician: Оптика + organic: Органикан сурсата туька + outdoor: Арахь садаӀаран туька + paint: Басарши туька + pastry: Кондитерски + pawnbroker: Ломбард + perfumery: Парфюмери + pet: Дийнатин туька + pet_grooming: Дийнаташка хьажар + photo: Фототуька + seafood: ХӀордан сурсаташ + second_hand: Лелайин хIуманаш йухку туька + sewing: Ð¥Iум тоьгу цех + shoes: Мачийн туька + sports: Спортан туька + stationery: Канцеляран гIирс + storage_rental: Дуон аренда + supermarket: Супермаркет + tailor: Тегархо + tattoo: Тату салон + tea: Чайн туька + ticket: Касса + tobacco: Сигаьркан туька + toys: Ловза хIуман туька + travel_agency: Туристийн агенство + tyres: Чкъурган туька + vacant: Йеса туька + variety_store: Цхьа мах болу туька + video: Видео туька + video_games: Видеоловзаршан туька + wholesale: Туьпахьан туька + wine: Винон туька "yes": Туька tourism: alpine_hut: Альпийн цӀа apartment: Апартаменташ + artwork: Исбаьхьаллин болх attraction: Сийлахь меттиг - cabin: ЛаппагӀа + bed_and_breakfast: Эхан пансион + cabin: Туристан лаппагӀа + camp_pitch: Кемпинг camp_site: Лагерь + caravan_site: ЧкъургтIех долу цIеношна латтар + chalet: Шале + gallery: Галерей + guest_house: Хьешан цIа + hostel: Хостел + hotel: Отель + information: Хаам + motel: Мотель + museum: Музей + picnic_site: Пикникан меттиг + theme_park: Сакъуьру парк + viewpoint: Хьажаран меттиг + wilderness_hut: Акха меттехь лаппагӀа zoo: Зоопарк + tunnel: + building_passage: ГӀишлочухула чакхавалар + culvert: Хина турба + "yes": Тоннель + waterway: + artificial: Искусствени хи дIадохар + boatyard: Верфь + canal: Канал + dam: Дамба + derelict_canal: Дакъадела татол + ditch: Татол + dock: Док + drain: Харш + lock: Шлюз + lock_gate: Шлюзан ков + mooring: Швартовкан меттиг + rapids: Хинан тарх + river: Хи + stream: Шовда + wadi: Лекъан хи + waterfall: Чухчари + weir: ЧӀинг + "yes": Хичура маршрут + admin_levels: + level2: Паччалкхан доза + level3: Регионан доза + level4: Штатан доза + level5: Регионан доза + level6: КIоштан доза + level7: Муниципалитетан доза + level8: ГIалан доза + level9: Йуртан доза + level10: ГӀалин йистан доза + level11: Лулахойн доза types: cities: ГӀаланаш towns: ГӀаланийн маттигаш @@ -679,35 +1492,106 @@ ce: title: Проблемаш select_status: Харжа статус select_type: Харжа тайпа + select_last_updated_by: ТӀаьххьара карлаваьлига хьаржа + reported_user: Декъашхо хаам йуккъехь + not_updated: Карлайаккхин йац search: Лахар + search_guidance: 'Проблемаш лахар:' + user_not_found: Иштта декъашхо вац + issues_not_found: Иштта проблемаш карийна йац status: Статус + reports: Хаамаш + last_updated: ТӀаьххьара хийцам + last_updated_time_ago_user_html: '%{time_ago} хIокху %{user}' + link_to_reports: Хаамашка хьажа + reports_count: + one: '%{count} хаам' + other: '%{count} хаамаш' + reported_item: Хаамин тема states: ignored: Игнорйина open: Елина resolved: Кечйина show: + title: '%{status} проблема #%{issue_id}' reports: - zero: Хаам бац - one: 1 хаам - other: '%{count} хаам' + one: '%{count} хаам' + other: '%{count} хаамаш' + no_reports: Цхьа хаам бац + report_created_at_html: Дуьххьара хаам бина %{datetime} + last_resolved_at_html: ТӀаьххьара карладаьккхийна %{datetime} + last_updated_at_html: ТӀаьххьара карладаьккхийна %{datetime} декъашхочо %{displayname} resolve: Кечйан ignore: Тергал ца дан reopen: Йуха схьайелла + reports_of_this_issue: Цу проблемах лаьцна хаам + read_reports: Баьшна хаамаш + new_reports: Керла хаамаш + other_issues_against_this_user: Кхин йолу проблемаш оцу декъашхочунца + no_other_issues: Кхин проблемаш йац оцу декъашхочунца + comments_on_this_issue: Эца проблемах лаьцна комментари + resolve: + resolved: Проблеман статус гIотайира 'ДӀадерзийна' чу. + ignore: + ignored: Проблеман статус гIотайира 'Таьргал ца йина' чу + reopen: + reopened: Проблеман статус гIотайира 'Хьайилина' чу + comments: + comment_from_html: Декъашхочуна коммент %{user_link} йина %{comment_created_at} + reassign_param: ДIахьажайай проблем? + reports: + reported_by_html: Иштта гайта йу %{category} дакъашхочу %{user}кхучохь %{updated_at} + helper: + reportable_title: + diary_comment: '%{entry_title}, коммент #%{comment_id}' + note: 'Йаззор #%{note_id}' + issue_comments: + create: + comment_created: Хьан комментарий аьттонца кхоьллина + issue_reassigned: Хьан комментарий кхоьллина, проблем йухахьажийна reports: new: title_html: Хаам %{link} + missing_params: Керла хаам кхолла йиш яц + disclaimer: + intro: 'Дехар ду, хьайн рапорт сайтан модераторшка дӀахьажайале, хьажа:' + not_just_mistake: Хьо тешна вуй, проблема еккъа цхьа гӀалат ца хиларх. + unable_to_fix: Хьан аьтто бац хьайна йа хьайн юкъараллин декъашхойн гӀоьнца + и проблема нисъян + resolve_with_user: Хьо хӀинцале а хьаьжна цу декъашкочунгар проблема дӀаяккха categories: diary_entry: + spam_label: ХӀара тептаран йаззам спам йу + offensive_label: ХӀокха тептартехь йаздинарг эвхьаза йе сийдоцуш ду + threat_label: ХӀокху тептаре йаззамехь кхерам тосуш бу other_label: Кхийерг diary_comment: + spam_label: ХӀара тептаран комментари спам йу + offensive_label: ХӀокха тептартера комментари эвхьаза йе сийдоцуш ду + threat_label: ХӀокху тептаран комментарехь кхерам тосуш бу other_label: Кхийерг user: + spam_label: ХӀара декъашхочуна профиль спам йу + offensive_label: ХӀара лелоран профиль эвхьаза йе сийдоцуш йу + threat_label: ХӀокху декъашхочун профилехь кхерам бу + vandal_label: ХӀара декъашхо вандал ву other_label: Кхийерг note: + spam_label: ХӀара билгалдаккхар спам ду + personal_label: ХӀокху билгалдаккхарехь персональни хаамаш бу + abusive_label: ХӀара билгало сийдоцуш ду other_label: Кхийерг + create: + successful_report: Хьан хаам кхиамца дӀаязбина + provide_details: Дехар ду, оьшуш болу хаамаш схьаалар layouts: + logo: + alt_text: OpenStreetMap-ан логотип + home: ЦӀа дӀагӀо logout: Болх дӀаберзор log_in: ЧугӀо + sign_up: ДӀайаздалар + start_mapping: Карт дила волаво edit: Нисдар history: Истори export: Экспорт @@ -717,82 +1601,380 @@ ce: gps_traces: GPS-трекаш gps_traces_tooltip: Болхбе GPS-трекашца user_diaries: Декъашхочун дневник + user_diaries_tooltip: Декъашхошна тептаршка хьажа + edit_with: Нисайе кхуьнца %{editor} + tag_line: Маьрша дуьненан Вики карта + intro_header: Марша вогӀийла хьо OpenStreetMap! + intro_text: OpenStreetMap — дуьненан карта ду, хьо санна болчу наха кхоьллина, + ткъа хIара маьрша лело йиш йу йиллина лицензица. + intro_2_create_account: Декъашхочун аккаунт кхолла + hosting_partners_2024_html: Хостинг лелош йу %{fastly}, %{corpmembers}, кхин а + %{partners}. + partners_fastly: Сиха + partners_corpmembers: ОСМФ корпорацин декъашхой + partners_partners: Партнёраш + tou: Лелоран биллам + osm_offline: OpenStreetMap база карарчу хенахь хьайалалуш йац, база Ӏалашъяран + коьрта белхаш дӀахьош долу дера. + osm_read_only: OpenStreetMap база карарчу хенахь ешаран режимехь йу,база Ӏалашъяран + белхаш дӀахьош долу дер. + donate: Дехар ду, гӀо де OpenStreetMap %{link} аппаратан фонда карлайоккхуш. help: ГӀо about: Проектах лаьцна copyright: Авторийн бакъонаш + communities: Тобаш + community: Тоба + community_blogs: Тобан блог + community_blogs_title: OpenStreetMap тобан декъашхошна блогаш + make_a_donation: + title: ГIо де OpenStreetMap-ан сахана ахчаца + text: ГIо де проектан learn_more: Цул совнаха хаа more: Кхин а user_mailer: + diary_comment_notification: + description: 'OpenStreetMap Тептар Чувалар #%{id}' + subject: Декъашхочо OpenStreetMap] %{user} комментари йитан тептар чохь + hi: Маршалла ду %{to_user}, + header: '%{from_user} комментари йина OpenStreetMap тептаран йаззамна %{subject}:' + header_html: '%{from_user} комментари йина OpenStreetMap тептаран йаззамна %{subject}:' + footer: Иштта комментари еша йиш йу %{readurl} тӀехь а, комментари йазъян а + йиш йу %{commenturl} тӀехь я авторе хаам бан йиш йу %{replyurl} тӀехь + footer_html: Иштта комментари еша йиш йу %{readurl} тӀехь а, комментари йазъян + а йиш йу %{commenturl} тӀехь я авторе хаам бан йиш йу %{replyurl} тӀехь + footer_unsubscribe: Хьан йиш йу дискуссера дӀавала %{unsubscribeurl} + footer_unsubscribe_html: Хьан йиш йу дискуссера дӀавала %{unsubscribeurl} + message_notification: + subject: '[OpenStreetMap] %{message_title}' + hi: Маршалла ду %{to_user}, + header: '%{from_user} хьуьга хаам баийтина OpenStreetMap чухула %{subject} темаца:' + header_html: '%{from_user} хьуьга хаам баийтина OpenStreetMap чухула %{subject} + темаца:' + footer: Иштта хьа %{readurl} тӀера хаам еша йиш йу, авторе хаам бахьийта мегар + ду %{replyurl} тӀера + footer_html: Иштта хьа %{readurl} тӀера хаам еша йиш йу, авторе хаам бахьийта + мегар ду %{replyurl} тӀера + friendship_notification: + hi: Маршалла ду %{to_user}, + subject: '[OpenStreetMap] %{user} хьо доттагӀ санна тӀетоьхна' + had_added_you: '%{user} -о OpenStreetMap чохь хьо доттагӀ санна тӀетоьхна.' + see_their_profile: Хьан церан профиль ган йиш йу %{userurl} тӀехь. + see_their_profile_html: Хьан церан профиль ган йиш йу %{userurl} тӀехь. + befriend_them: Иштта %{befriendurl} чохь доттагӀ санна тӀетоха йиш йу хьан. + befriend_them_html: Иштта %{befriendurl} чохь доттагӀ санна тӀетоха йиш йу хьан. + gpx_description: + description_with_tags_html: 'Иза хьан GPX файлах тера йу %{trace_name} %{trace_description} + описаниеца а, хӀара тегашца а: %{tags}' + description_with_no_tags_html: Иза хьан GPX файлах тера йу %{trace_name} %%{trace_description} + дицарца, цхьа а тег йоцуш + gpx_failure: + hi: Маршалла ду %{to_user}, + failed_to_import: 'импорт ян аьтто ца баьлла. Кхузахь гӀалат ду:' + more_info_html: GPX импортан кхачамбацарех лаьцна кхин а хаамаш каро йиш йу + %{url} тӀехь. + subject: '[OpenStreetMap] GPX Импорт ца хилира' + gpx_success: + hi: Маршалла ду %{to_user}, + loaded: + one: кхиамца дӀатоьхна %{trace_points}хила тарлучу %{count} point. точках. + other: loaded successfully with %{trace_points}хила тарлучу %{count} points. + точках. + all_your_traces_html: Хьан ерриге а кхиамца чуйиллина GPX лараш каро йиш йу + %{url} тӀехь. + subject: '[OpenStreetMap] GPX Импортан дика хилира' signup_confirm: + subject: '[OpenStreetMap] Марша вогIийла OpenStreetMap чу' greeting: Маршалла! + created: Цхьаммо (сатийсам бу ахь) хӀинцца %{site_url} чохь аккаунт йина. + confirm: 'Кхин хӀумма а данле, оха тӀечӀагӀдан деза и дехар хьоьгара хилла хилар, + цундела нагахь санна иза хьоьгара хиллехь, лахахь йолчу ссылки тӀе хьажа хьайн + аккаунт тӀечӀагӀъян:' + welcome: Ахь хьайн аккаунт тӀечӀагӀйинчул тӀаьхьа, оха хьуна кхин а цхьацца + хаамаш лур бу, ахь дӀадолорхьама. email_confirm: + subject: '[OpenStreetMap] Хьайн электронан почтан адрес тӀечӀагӀде' greeting: Маршалла, + hopefully_you: Цхьаммо (сатийсам бу ахь) шен электронан почтан адрес хийца лаьа + %{server_url} тӀехь %{new_address} хIокхун тIе. + click_the_link: Нагахь санна хӀара хьо велахь, лахахь йолчу ссылки тӀе хьажа, + хийцам тӀечӀагӀбан. lost_password: + subject: '[OpenStreetMap] Пароль хийцаран дехар' greeting: Маршалла, + hopefully_you: Цхьаммо (хила тарло ахь) оцу электронан почтан адресан openstreetmap.org + аккаунтехь пароль йухаметтахӀоттор дехна. + click_the_link: Нагахь санна хӀара хьо велахь, лахахь йолчу ссылки тӀе хьажа, + хьайн пароль йухаметтахӀотто. note_comment_notification: + description: 'OpenStreetMap Билгалдаккхар #%{id}' + anonymous: Анониман декъашхой greeting: Маршалла, + commented: + subject_own: '[OpenStreetMap] %{commenter} комментари йина хьан цхьана тептарна' + subject_other: '[OpenStreetMap] %{commenter} комментари хӀотийна хьуна хьашта + йол заметкин' + your_note: '%{commenter} комментари гIотийна хьа цхьана заметкан герге %{place}.' + your_note_html: '%{commenter} комментари йитина хьан картан цхьана билгалонна + тӀехь %{place} уллехь.' + commented_note: '%{commenter} комментари йитина ахь комментари йина картан + билгалдаккхарехь. Билгалдаккхар %{place} уллехь ду.' + commented_note_html: '%{commenter} комментари йитина ахьаъ комментари йина + картан билгалдаккхарехь. Билгалдаккхар %{place} уллехь ду.' + closed: + subject_own: '[OpenStreetMap] %{commenter} хьан цхьа билгалдаккхар дӀакъоьвлина' + subject_other: '[OpenStreetMap] %{commenter} дӀакъоьвлина хьуна хьашт долу + билгалдаккхар' + your_note: '%{commenter} хьан картан цхьа билгалдаккхар дӀакъоьвлина %{place} + уллехь.' + your_note_html: '%{commenter} хьан картан цхьа билгалдаккхар дӀакъоьвлина + %{place} гена йоцуш.' + commented_note: '%{commenter} ахь йина заметкин комментари дӀайаккхина %{place} + гена йоцуш.' + commented_note_html: '%{commenter} ахь комментари йина картан билгалдаккхар + дӀайаккхина, %%{place} уллера.' + reopened: + subject_own: '[OpenStreetMap] %{commenter} хьан цхьа билгалдаккхар йуха а + дӀахӀоттийна' + subject_other: '[OpenStreetMap] %{commenter} йуха а дӀахӀоттийна хьуна хьашт + долу билгалдаккхар' + your_note: '%{commenter} йуха а дӀахӀоттийна хьан картан цхьа билгалдаккхар + %{place} уллехь.' + your_note_html: '%{commenter} йуха а дӀахӀоттийна хьан картан цхьа билгалдаккхар + %{place} уллехь.' + commented_note: '%{commenter} йуха дӀахӀоттийна ахь комментари йина картан + билгалдаккхар, %{place} уллехь.' + commented_note_html: '%{commenter} йeха дӀахӀоттийна ахь комментари йина картан + билгалдаккхар, %{place} уллехь.' + details: Жоп ло йа кхин дӀа а довза %{url} тӀехь. + details_html: Жоп ло йа кхин дӀа а довза %{url} тӀехь. changeset_comment_notification: + description: 'OpenStreetMap хийцаман гулам #%{id}' + hi: Маршалла ду %{to_user}, greeting: Маршалла, + commented: + subject_own: '[OpenStreetMap] %{commenter} комментари йина хьан цхьана хийцаман + гуламна' + subject_other: '[OpenStreetMap] %{commenter} комментари йина хьуна хьашта + хетта хийцаман гуламна' + your_changeset: '%{commenter} комментари йитина %{time} хьан цхьана хийцамийн + гуламех' + your_changeset_html: '%{commenter} комментари йитина %{time} хьан цхьана + хийцамийн гуламех' + commented_changeset: '%{commenter} комментари йитина %{time} ахь хьоьжуш долчу + хийцамашна тӀехь, декъашхочо кхоьллина %{changeset_author}' + commented_changeset_html: '%{commenter} комментари йитина %{time} ахь хьоьжуш + долчу хийцамашна тӀехь, декъашхочо кхоьллина %{changeset_author}' + partial_changeset_with_comment: комментарица '%{changeset_comment}' + partial_changeset_with_comment_html: комментарица '%{changeset_comment}' + partial_changeset_without_comment: комментарица + details: Жоп ло йа хийцамех лаьцна кхин дӀа а довза %{url}. + details_html: Жоп ло йа хийцамех лаьцна кхин дӀа а довза %{url}. + unsubscribe: Хьан йиш йу %{url} тӀехь оцу хийцамийн карладаккхарех дӀавала. + unsubscribe_html: Хьан йиш йу %{url} тӀехь оцу хийцамийн карладаккхарех дӀавала. confirmations: confirm: + heading: Хьайн почте хьажа! + introduction_1: Оха хьуна тӀечӀагӀдаран почте хьажийна. + introduction_2: Хьайн аккаунт тӀечӀагӀъе, почтехь йолчу ссылки тӀе а ваьла, + карта хӀотто дӀадоло аьтто хир бу хьан. + press confirm button: Хьайн аккаунт дӀахӀотто лахахь йолу кнопка тӀе а таӀа + йе. button: Бакъдан + success: Хьайн аккаунт тӀечӀагӀйина, баркалла хьуна дӀаязвелла хиларна! + already active: И аккаунт хӀинцале а тӀечӀагӀйина йу. + unknown token: И тӀечӀагӀдаран код чекхъяьлла йа йолуш йац. + resend_html: Нагахь санна хьуна оха тӀечӀагӀдаран почта йуха дӀаяхьийта оьшуш + делахь, %{reconfirm_link}. + click_here: тӀетаӀайе кхузахь + confirm_resend: + failure: Декъашхо %{name} ца карийна. confirm_email: heading: Бакъде электронан поштан адрес хуьйцуш хилар + press confirm button: Хьайн керла электронан почтан адрес тӀечӀагӀдан, лахахь + йолу тӀечӀагӀдар кнопка тӀе таӀа йе. button: Бакъдан + success: Хьан электронан почтан адрес хийцина! + failure: ХӀинцале а цу токенца тӀечӀагӀдина электронан почтан адрес. + unknown_token: И тӀечӀагӀдаран код чекхъяьлла йа йолуш йац. + resend_success_flash: + confirmation_sent: Оха керла тӀечӀагӀдаран кехат даийтина %{email} тӀе, ткъа + цкъа хьайн аккаунт тӀечӀагӀйина, хьан аьтто хир бу карта хӀотто. + whitelist: Нагахь санна ахь антиспам-система лелош елахь, цо тӀечӀагӀдаран дехарш + дохьуьйту, тӀаккха дехар ду ахь %{sender} хьан кӀайн тептаре язде, хӀунда + аьлча тхан аьтто бац и санна дехаршна жоп дала. messages: inbox: title: ЧуйогӀурш + messages: Хьан %{new_messages} а, %{old_messages} а ду + new_messages: + one: '%{count} керла хаам' + other: '%{count} керла хаамаш' + old_messages: + one: '%{count} шира хаам' + other: '%{count} шира хаамаш' + no_messages_yet_html: Цкъачунна цхьа а хаам бац хьан. ХӀокхарца %{people_mapping_nearby_link} + къамел да мегар дарий? + people_mapping_nearby: Карта хӀоттош нах бу уллехь messages_table: from: Хьаьнгара to: Хьаьнга subject: Тема date: Терахь + actions: Дар message_summary: + unread_button: Билгалйе ца йешна санна + read_button: Билгалйе йешна санна reply_button: Жоп ло destroy_button: ДӀайаккха + unmute_button: ДӀаяхийта Инбокс чу new: + title: ДӀабахьийта хаам + send_message_to_html: Керла хаам кхунга %{name} бахийта back_to_inbox: ЧубогӀучаьрга йуханехьа + create: + message_sent: Хаам дӀахьажийна + limit_exceeded: ТӀаьххьарчу хенахь дуккха а хаамаш бахьийтина ахь. Кхин дӀасахьажо + гӀортале жимма собар дехьа. + no_such_message: + title: Иштта хаам бац + heading: Иштта хаам бац + body: Бехк ма билла цу ID-ца цхьа а хаам бац. outbox: title: ДӀайохьуьйтурш + actions: Дар + messages: + one: Хьан %{count} дIабахийтина хаам + other: Хьан %{count} дIабахийтина хаамаш + no_sent_messages_html: Хьан цкъачунна дIакхехийтина хаамаш бац. ХӀокхарца %{people_mapping_nearby_link} + къамел да мегар дарий? + people_mapping_nearby: Карта хӀоттош нах бу уллехь + muted: + title: ДӀадаьхна хаамаш + messages: + one: '%{count} дӀабаькхина хаам' + other: You have %{count} дӀадаьхна хаамаш + reply: + wrong_user: Хьо чуваьлла `%{user}' санна, амма ахь жоп дала дехна хаам цу декъашхочуьнга + ца баийтина. Дехар ду, нийса лелош верг санна чу вала, жоп даларна а. show: title: Хаамашка хьажар reply_button: Жоп ло unread_button: Билгалйе ца-йешна санна destroy_button: ДӀайаккха back: Йуха + wrong_user: Хьо `%{user}' санна чуваьлла ву, амма ахь деша дехна хаам цу декъашхочо + я цуьнга дӀа ца бахьийтина. Дехар ду, нийса лелош верг санна чу вала, иза + ешара а. sent_message_summary: destroy_button: ДӀайаккха + heading: + my_inbox: Сан чудохурша + my_outbox: Сан дIадохитнарш + muted_messages: ДӀадаьхна хаамаш + mark: + as_read: Хаам баьшна аьлла билгалбаьккхина + as_unread: Хаам ца баьшна аьлла билгалбаьккхина + unmute: + notice: Хаам дӀабаькхна "Чудохурша" чура + error: Хаам дӀа ца бахийтина "Чудохурша" чу. + destroy: + destroyed: Хаам дӀабаьккхина passwords: new: title: Пароль меттахӀоттор heading: Йицйелла пароль? - email address: 'Электронан поштан адрес:' + email address: Электронан поштан адрес new password button: Керла пароль кхосса соьга + help_text: Ахь дӀаязвелла лелийна электронан почтан адрес йазде, оха цу тӀе + ссылка йоуьйтур йу, ахь хьайн пароль йухаметтахӀотто йиш йолуш. + create: + send_paranoid_instructions: Нагахь санна хьан электронан почтан адрес тхан базехь + делахь, масех минот йалча хьан электронан почтан адресе пароль меттахӀотторан + ссылка кхачор йу хьуна. edit: title: Йуха а йазйе пароль heading: Йуха а йазйе пароль %{user} reset: ХӀоттайе пароль + flash token bad: Ца карийна и токен, URL хьажа мегар дуй? update: flash changed: Хьан пароль хийцина. + flash token bad: Ца карийна и токен, URL хьажа мегар дуй? + preferences: + show: + title: Суна хазахеттарш + preferred_editor: ГӀоле хеташ волу редактор + preferred_languages: ГӀоле хета меттанаш + edit_preferences: Хийца хазахеттарш + edit: + title: Хийца хазахеттарш + save: Карладаха хазахеттарш + cancel: Цаоьшу + update: + failure: Хазахеттарш карладаха аьтто ца баьлла. + update_success_flash: + message: Хазахеттарш карладаьхна. profiles: edit: - image: 'Сурт:' + title: Профиль нисйан + save: Карлайаккха профиль + cancel: Цаоьшу + image: Сурт gravatar: + gravatar: Gravatar лелайар + what_is_gravatar: Gravatar хIун йу? disabled: Gravatar дӀайайина. + enabled: Хьан Gravatar гайтар дӀахӀоттийна. + new image: Сурт тӀетоха + keep image: ХӀинцалера сурт дита + delete image: ХӀинцалера сурт дӀадаккха + replace image: ХӀинцалера сурт хийца + image size hint: (квадратан суьрташ лаххара а 100x100 дика болх беш ду) + home location: Со волу меттиг + no home location: Хьайн цӀера меттиг ца гайтина ахь. + update home location on click: Карта тӀе хьаьжча цӀийнан меттиг карлаяккха? + show: Гайта + delete: ДӀайаккха + undelete: Йухадаккха дӀадаккхар + update: + success: Профиль карлаяьккхина. + failure: Профиль карлаяккха аьтто ца баьлла. sessions: new: title: ЧугӀо tab_title: ЧугӀо - email or username: 'Эл. пошт йа декъашхочун цӀе:' - password: 'Пароль:' + login_to_authorize_html: OpenStreetMap чу вала, %{client_app_name} чу кхача. + email or username: Эл. пошт йа декъашхочун цӀе + password: Пароль remember: Дагалаца со lost password link: Йицйелла пароль? login_button: ЧугӀо register now: ДӀадазло + with external: йа кхи сайтан агӀонца чувала + or: йа + auth failure: Бехк ма билла, цу цIарца йе парольца чувала аьтто ца баьлла. destroy: title: Болх дӀаберзор heading: OpenStreetMap чуьра болх дӀаберзор logout_button: Болх дӀаберзор + suspended_flash: + suspended: Бехк ма билла, хьан аккаунт сацийна шеконе гӀуллакх дина бахьана + долуш. + contact_support_html: Дехар ду %{support_link} зӀене вала, нагахь хьайна хӀара + къасто лаахь. + support: гӀo дан + shared: + markdown_help: + heading_html: '%{kramdown_link} лелош анализ йина' + headings: Коьрта могlнаш + heading: Корта + subheading: Корталг + unordered: Низам боцу къепйоза + ordered: Низам болу къепйоза + first: Хьалхара элемент + second: ШолгIа элемент + link: Хьажорг + text: Текст + image: Сурт site: about: next: Кхин дӀа @@ -911,10 +2093,10 @@ ce: helper: block_duration: hours: - one: 1 сахьт - other: '%{count} сахьт' + one: '%{count} сахьт' + other: '%{count} сахьташ' show: - created: Кхоьллина + created: 'Кхоьллина:' status: 'Статус:' show: Гайта edit: Хийца @@ -946,7 +2128,7 @@ ce: open_title: 'Кечйина йоцу билгало #%{note_name}' closed_title: 'Кечйина билгало #%{note_name}' hidden_title: 'Къайлайаьккхина билгало #%{note_name}' - report: Хаамбе хӀокху билгалонах + report: хаамбе хӀокху билгалонах hide: Къайлайаккха resolve: Кечйан reactivate: Йуха йела diff --git a/config/locales/cs.yml b/config/locales/cs.yml index c0bb2048c..ded9ac467 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -2689,7 +2689,6 @@ cs: oauth2_authorizations: Autorizace OAuth 2 muted_users: Ztlumení uživatelé auth_providers: - openid_logo_alt: Přihlášení pomocí OpenID openid_login_button: Pokračovat openid: title: Přihlásit se pomocí OpenID diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 456f082c4..08de0e767 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -458,6 +458,9 @@ cy: introduction: Cliciwch ar y map i ddarganfod nodweddion gerllaw. nearby: Nodweddion gerllaw enclosing: Nodweddion amgáu + old_ways: + not_found: + sorry: 'Sori, ni ellir canfod fersiwn %{version} o lwybr #%{id}.' changesets: changeset_paging_nav: showing_page: Tudalen %{page} @@ -948,6 +951,7 @@ cy: fire_extinguisher: Diffoddwr Tân fire_water_pond: Pwll Dŵr Tân landing_site: Man Glanio Argyfwng + life_ring: Bwi Achub phone: Ffôn Argyfwng water_tank: Tanc Dŵr Argyfwng highway: @@ -1992,6 +1996,9 @@ cy: title: Sut i Helpu join_the_community: title: Ymunwch â'r gymuned + explanation_html: Os ydych chi wedi sylwi ar broblem gyda'n data, efallai + mae heol ar goll neu eich cyfeiriad chi, gallwch chi ymuno â chymuned + OpenStreetMap ac ychwanegu neu atgyweirio'r data eich hun. other_concerns: title: Gofidion eraill copyright: tudalen hawlfraint @@ -2286,7 +2293,6 @@ cy: oauth2_authorizations: Awdurdodiadau OAuth 2 muted_users: Defnyddwyr ag Anwybyddwyd auth_providers: - openid_logo_alt: Mewngofnodi gydag OpenID openid_login_button: Parhau openid: title: Mewngofnodi ag OpenID diff --git a/config/locales/da.yml b/config/locales/da.yml index 5742e1cfb..a7f5c85d9 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -294,8 +294,8 @@ da: retain_edits: Hvis du har foretaget redigeringer af kort-databasen, vil disse blive gemt. retain_traces: Hvis du har uploadet spor, vil disse blive gemt. - retain_diary_entries: Hvis du har dagbogskommentarer, vil disse fortsat blive - gemt. De vil dog ikke længere blive vist. + retain_diary_entries: Dine eventuelle blogindlæg og blogkommentarer vil fortsat + bevares, men vil dog ikke længere blive vist. retain_notes: Dine noter og kommentarer til kortet vil blive gemt, men vil ikke længere blive vist. retain_changeset_discussions: Hvis du har bidraget til diskussioner vedrørende @@ -428,9 +428,9 @@ da: way: vej relation: relation start_rjs: - feature_warning: Henter %{num_features} kortobjekter, dette kan gøre din browser - langsom eller fÃ¥ den til ikke at svare. Er du sikker pÃ¥ at du ønsker at fÃ¥ - vist disse data? + feature_warning: Indlæser %{num_features} kortobjekter, hvilket kan gøre din + browser langsom eller fÃ¥ den til ikke at svare. Er du sikker pÃ¥, at du ønsker + at fÃ¥ vist disse data? load_data: Indlæs data loading: Indlæser... tag_details: @@ -643,10 +643,10 @@ da: title: OpenStreetMap-blogindlæg description: Seneste blogindlæg fra brugere af OpenStreetMap subscribe: - heading: Abonner pÃ¥ følgende dagbogsindlægsdiskussion? + heading: Abonner pÃ¥ følgende blogindlægsdiskussion? button: Abonner pÃ¥ diskussion unsubscribe: - heading: Vil du afmelde følgende dagbogsindlægsdiskussion? + heading: Vil du afmelde følgende blogindlægsdiskussion? button: Afmeld diskussion diary_comments: index: @@ -659,6 +659,8 @@ da: comment: Kommentar newer_comments: Nyere kommentarer older_comments: Ældre kommentarer + new: + heading: Vil du tilføje en kommentar til følgende blogindlægsdiskussion? doorkeeper: errors: messages: @@ -1659,7 +1661,7 @@ da: more: Mere user_mailer: diary_comment_notification: - description: 'OpenStreetMap dagbogindlæg #%{id}' + description: 'OpenStreetMap blogindlæg #%{id}' subject: '[OpenStreetMap] %{user} kommenterede pÃ¥ et blogindlæg' hi: Hej %{to_user}, header: '%{from_user} har kommenteret pÃ¥ OpenStreetMap-blogindlægget med emnet @@ -1734,7 +1736,7 @@ da: click_the_link: Hvis dette er dig, sÃ¥ klik pÃ¥ linket nedenfor for at nulstille din adgangskode. note_comment_notification: - description: 'OpenStreetMap-note #%{id}' + description: 'OpenStreetMap-bemærkning #%{id}' anonymous: En anonym bruger greeting: Hej, commented: @@ -2615,7 +2617,7 @@ da: other: GPX fil med %{count} punkter fra %{user} description_without_count: GPX fil fra %{user} application: - basic_auth_disabled: 'Grundlæggende HTTP-godkendelse er deaktiveret: %{link}' + basic_auth_disabled: 'Basal HTTP-godkendelse (Basic Auth) er deaktiveret: %{link}' oauth_10a_disabled: 'OAuth 1.0 og 1.0a er deaktiveret: %{link}' permission_denied: Du har ikke rettigheder til at udføre den handling require_cookies: @@ -2638,7 +2640,7 @@ da: oauth2_authorizations: OAuth 2-autorisationer muted_users: Stillegjorte Brugere auth_providers: - openid_logo_alt: Log pÃ¥ med et OpenID + openid_url: OpenID-URL openid_login_button: Fortsæt openid: title: Log ind med OpenID @@ -2688,7 +2690,7 @@ da: scopes: openid: Log ind med OpenStreetMap read_prefs: Læse brugerpræferencer - write_prefs: Ændre brugeralternativer + write_prefs: Ændre brugerpræferencer write_diary: Udgiv brugerblogs, kommenter og fÃ¥ venner write_api: Ændre kortet read_gpx: Læse private GPS-spor @@ -3105,7 +3107,7 @@ da: blocks_on_me: Blokeringer af mig blocks_on_user: Blokeringer af %{user} blocks_by_me: Blokeringer udført af mig - blocks_by_user: Blokeringer af %{user} + blocks_by_user: Blokeringer udført af %{user} block: 'Blokering #%{id}' user_mutes: index: @@ -3166,7 +3168,7 @@ da: reactivate: Genaktiver comment_and_resolve: Kommentere pÃ¥ og løse comment: Kommenter - log_in_to_comment: Log ind for at kommentere pÃ¥ denne note + log_in_to_comment: Log ind for at kommentere pÃ¥ denne bemærkning report_link_html: Hvis denne bemærkning indeholder følsomme oplysninger, der skal fjernes, kan du %{link}. other_problems_resolve: For alle andre problemer med bemærkningen, bedes du @@ -3179,8 +3181,8 @@ da: intro: Opdaget en fejl eller noget der mangler? Lad andre kortlæggere vide det, sÃ¥ vi kan ordne det. Flyt markøren til den korrekte position, og skriv en bemærkning for at forklare problemet. - anonymous_warning_html: Du er ikke logget ind. %{log_in} eller %{sign_up}, hvis - du vil modtage opdateringer til din note. + anonymous_warning_html: Du er ikke logget ind. Venligst %{log_in} eller %{sign_up}, + hvis du vil modtage opdateringer til din bemærkning. anonymous_warning_log_in: Log ind anonymous_warning_sign_up: tilmeld dig advice: Dine oplysninger er offentlige og vil mÃ¥ske blive brugt til at opdatere diff --git a/config/locales/de.yml b/config/locales/de.yml index 593d73832..0ede99b49 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -97,6 +97,7 @@ # Author: Str4nd # Author: Suriyaa Kudo # Author: Sushi +# Author: TMg # Author: Tehabe # Author: The Evil IP address # Author: ThePiscin @@ -510,8 +511,9 @@ de: way: s Weges relation: r Relation start_rjs: - feature_warning: Laden von %{num_features} Funktionen kann deinen Browser langsamer - machen oder einfrieren. Sollen diese Daten wirklich angezeigt werden? + feature_warning: Lade %{num_features} Funktionen, was deinen Browser verlangsamen + oder nicht mehr reagieren lassen könnte. Bist du sicher, dass du diese Daten + anzeigen möchtest? load_data: Daten laden loading: Lade … tag_details: @@ -745,6 +747,8 @@ de: comment: Kommentar newer_comments: Neuere Kommentare older_comments: Ältere Kommentare + new: + heading: Füge einen Kommentar zur folgenden Tagebucheintragsdiskussion hinzu? doorkeeper: errors: messages: @@ -2776,7 +2780,7 @@ de: oauth2_authorizations: OAuth 2-Berechtigungen muted_users: Stummgeschaltete Benutzer auth_providers: - openid_logo_alt: Mit einer OpenID anmelden + openid_url: OpenID-URL openid_login_button: Fortfahren openid: title: Mit OpenID anmelden diff --git a/config/locales/diq.yml b/config/locales/diq.yml index d1f10a614..c49f30522 100644 --- a/config/locales/diq.yml +++ b/config/locales/diq.yml @@ -1007,9 +1007,6 @@ diq: public_traces: Pêron rê akerde rêçê GPS public_traces_from: '%{user} ra pêron rê akerde rêçê GPS' tagged_with: '%{tags} ya etiketyayo' - application: - auth_providers: - openid_logo_alt: OpenID ya dekewê de oauth_clients: show: edit: Teferuatan bıvurne diff --git a/config/locales/dsb.yml b/config/locales/dsb.yml index 8332cd24a..e7a1d3508 100644 --- a/config/locales/dsb.yml +++ b/config/locales/dsb.yml @@ -1432,8 +1432,6 @@ dsb: need_to_see_terms: Twój pśistup na API jo nachylu wusajźony. PÅ¡osym pśizjaw se k webpówjerchoju, aby se wužywarske wuměnjenja woglědał. NjetrjebaÅ¡ zwóliś do nich, musyÅ¡ se je jano woglědaś. - auth_providers: - openid_logo_alt: Z OpenID se pśizjawiś oauth: authorize: title: Pśistup na twójo konto awtorizěrowaś diff --git a/config/locales/el.yml b/config/locales/el.yml index 829fb7c74..ef3f2c0b2 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -19,6 +19,7 @@ # Author: KATRINE1992 # Author: KATRINE1993 # Author: Kiriakos +# Author: KonVog # Author: Kongr43gpen # Author: Logictheo # Author: Macofe @@ -60,7 +61,7 @@ el: issue_comment: create: Προσθήκη σχολίου message: - create: Στείλε + create: Αποστολή client_application: create: Εγγραφή update: Ενημέρωση @@ -538,7 +539,7 @@ el: hidden_comment_by_html: Κρυφό σχόλιο από %{user} %{time_ago} hide_comment: απόκρυψη unhide_comment: επανεμφάνιση - comment: Σχολιάζω + comment: Σχολιάστε changesetxml: Ομάδας αλλαγών XML osmchangexml: osmChange XML paging_nav: @@ -2653,7 +2654,6 @@ el: oauth2_authorizations: Εξουσιοδοτήσεις OAuth 2 muted_users: Χρήστες σε Σίγαση auth_providers: - openid_logo_alt: Σύνδεση με ένα OpenID openid_login_button: Συνέχεια openid: title: Σύνδεση με OpenID diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index c4e0b6199..9850467f2 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1697,7 +1697,6 @@ en-GB: to the web interface to view the Contributor Terms. You do not need to agree, but you must view them. auth_providers: - openid_logo_alt: Log in with an OpenID openid: title: Login with OpenID alt: Login with an OpenID URL diff --git a/config/locales/en.yml b/config/locales/en.yml index 92ca501b4..cffc13823 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -386,7 +386,7 @@ en: way: "way" relation: "relation" start_rjs: - feature_warning: "Loading %{num_features} features, which may make your browser slow or unresponsive. Are sure you want to display this data?" + feature_warning: "Loading %{num_features} features, which may make your browser slow or unresponsive. Are you sure you want to display this data?" load_data: "Load Data" loading: "Loading..." tag_details: @@ -609,6 +609,8 @@ en: comment: Comment newer_comments: "Newer Comments" older_comments: "Older Comments" + new: + heading: Add a comment to the following diary entry discussion? doorkeeper: errors: messages: @@ -2583,8 +2585,7 @@ en: oauth2_authorizations: OAuth 2 authorizations muted_users: Muted Users auth_providers: - openid_logo_alt: "Log in with an OpenID" - openid_html: "%{logo} OpenID" + openid_url: "OpenID URL" openid_login_button: "Continue" openid: title: Log in with OpenID diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 59d00241a..b300354ea 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -646,6 +646,8 @@ eo: comment: Komento newer_comments: Pli novaj komentoj older_comments: Pli malnovaj komentoj + new: + heading: Ĉu aldoni komenton al la diskuto pri tiu ĉi taglibra afiŝo? doorkeeper: errors: messages: @@ -2600,7 +2602,7 @@ eo: oauth2_authorizations: Rajtigoj OAuth 2 muted_users: Silentigitaj uzantoj auth_providers: - openid_logo_alt: Ensaluti per OpenID + openid_url: OpenID-retadreso openid_login_button: DaÅ­rigi openid: title: Ensaluti per OpenID diff --git a/config/locales/es.yml b/config/locales/es.yml index a94091843..5d29738cf 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -499,9 +499,9 @@ es: way: vía relation: relación start_rjs: - feature_warning: Cargando %{num_features} elementos, lo que puede hacer que - tu navegador se ralentice o no responda. ¿Estás seguro de que deseas mostrar - estos datos? + feature_warning: Cargando %{num_features} funciones, lo que puede hacer que + su navegador sea lento o no responda. ¿Está seguro de que desea mostrar estos + datos? load_data: Cargar datos loading: Cargando… tag_details: @@ -732,6 +732,9 @@ es: comment: Comentario newer_comments: Comentarios más recientes older_comments: Comentarios más antiguos + new: + heading: ¿Agregar un comentario a la siguiente discusión sobre la entrada del + diario? doorkeeper: errors: messages: @@ -2748,7 +2751,7 @@ es: oauth2_authorizations: Autorizaciones de OAuth 2 muted_users: Usuarios silenciados auth_providers: - openid_logo_alt: Inicia sesión con una OpenID + openid_url: URL de OpenID openid_login_button: Continuar openid: title: Inicia sesión con OpenID diff --git a/config/locales/et.yml b/config/locales/et.yml index 9fdf3ded1..36bfb88ec 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -2518,7 +2518,6 @@ et: oauth2_authorizations: OAuth 2 volitused muted_users: Vaigistatud kasutajad auth_providers: - openid_logo_alt: Logi sisse OpenID-ga openid: title: Logi sisse OpenID-ga alt: Logi sisse OpenID URL-iga diff --git a/config/locales/eu.yml b/config/locales/eu.yml index ecead5043..cbf41d0e0 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -2465,7 +2465,6 @@ eu: oauth2_applications: OAuth 2 aplikazioak oauth2_authorizations: OAuth 2 baimenak auth_providers: - openid_logo_alt: ID irekiarekin saioa hasi openid: title: ID irekiarekin saioa hasi alt: Hasi saioa ID irekia duen URL batekin diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 87f9b2ba0..cf92d804e 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -2230,7 +2230,6 @@ fa: oauth2_applications: برنامه‌های OAuth 2 oauth2_authorizations: مجوزهای OAuth 2 auth_providers: - openid_logo_alt: ورود با OpenID openid: title: ورود با OpenID alt: ورود با نشانی OpenID diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 2d6cf1245..ee10ca3b7 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -2402,7 +2402,6 @@ fi: oauth2_authorizations: OAuth 2 -käyttöoikeudet muted_users: Hiljennetyt käyttäjät auth_providers: - openid_logo_alt: Kirjaudu sisään OpenID-tunnuksella openid: title: Kirjaudu sisään OpenID:llä alt: Kirjaudu sisään OpenID-osoitteella diff --git a/config/locales/fit.yml b/config/locales/fit.yml index 74c5f889a..ac74c5873 100644 --- a/config/locales/fit.yml +++ b/config/locales/fit.yml @@ -832,7 +832,6 @@ fit: my_traces: Minun GPS-jäljet application: auth_providers: - openid_logo_alt: Lokkaa sisäle OpenID-konttulla openid: title: Lokkaa sisäle OpenID:llä alt: Lokkaa sisäle OpenID-atressilla diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 28177a432..1fd7c35fb 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -2806,7 +2806,6 @@ fr: oauth2_authorizations: Droits OAuth 2 muted_users: Utilisateurs silencieux auth_providers: - openid_logo_alt: Se connecter avec OpenID openid_login_button: Continuer openid: title: Connexion avec OpenID diff --git a/config/locales/fur.yml b/config/locales/fur.yml index 9e56f35c6..28822994e 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -1415,7 +1415,6 @@ fur: oauth2_applications: Aplicazions OAuth 2 oauth2_authorizations: Autorizazions OAuth 2 auth_providers: - openid_logo_alt: Jentre cuntun OpenID openid: title: Jentre cun OpenID alt: Jentre cuntun URL OpenID diff --git a/config/locales/fy.yml b/config/locales/fy.yml index d0341eeb3..a8a7d2022 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -2161,7 +2161,6 @@ fy: oauth2_applications: Applikaasjes OAuth 2 oauth2_authorizations: Autorisaasjes OAuth 2 auth_providers: - openid_logo_alt: Meld jo oan mei in openID openid: title: Oanmelde mei OpenID alt: Meld jo oan mei in OpenID-URL diff --git a/config/locales/ga.yml b/config/locales/ga.yml index fe3bcd1f3..7accdab5b 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1644,7 +1644,6 @@ ga: isteach ar an gcomhéadan gréasáin le hamharc ar Théarmaí na Rannchuiditheoirí. Ní gá duit aontú, ach ní mór duit amharc orthu. auth_providers: - openid_logo_alt: Logáil isteach le OpenID openid: title: Logáil isteach le OpenID alt: Logáil isteach le URL OpenID diff --git a/config/locales/gd.yml b/config/locales/gd.yml index b5abb6ef0..a60901e37 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1505,7 +1505,6 @@ gd: chom-pàirtiche a shealltainn. Cha leig thu leas aontachadh riutha, ach feumaidh tu an leughadh. auth_providers: - openid_logo_alt: Clàraich a-steach le OpenID openid: title: Clàraich a-steach le OpenID alt: Clàraich a-steach le URL OpenID diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 29c5d3cca..c68587eab 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -8,6 +8,7 @@ # Author: Elisardojm # Author: Fitoschido # Author: Gallaecio +# Author: Ignatgg # Author: Iváns # Author: MAGHOI # Author: Macofe @@ -416,8 +417,9 @@ gl: way: vía relation: relación start_rjs: - feature_warning: A carga de %{num_features} elementos pode facer que o teu navegador - vaia lento ou que non responda. Estás na certeza de querer amosar eses datos? + feature_warning: Cargando %{num_features} funcións, que poden facer que o teu + navegador sexa lento ou non responda. Estás seguro de que queres mostrar estes + datos? load_data: Cargar os datos loading: Estase a carregar... tag_details: @@ -652,6 +654,9 @@ gl: comment: Comentario newer_comments: Comentarios máis recentes older_comments: Comentarios máis vellos + new: + heading: Queres engadir un comentario á seguinte discusión sobre a entrada do + diario? doorkeeper: errors: messages: @@ -2665,26 +2670,26 @@ gl: oauth2_authorizations: Autorizacións OAuth 2 muted_users: Usuarios silenciados auth_providers: - openid_logo_alt: Acceder ó sistema cun OpenID + openid_url: URL de OpenID openid_login_button: Continuar openid: title: Acceder ó sistema co OpenID - alt: Acceder ó sistema cun URL do OpenID + alt: Logo do OpenID google: title: Acceder ó sistema con Google - alt: Acceder ó sistema cun OpenID de Google + alt: Logo de Google facebook: title: Acceder ó sistema co Facebook - alt: Acceder ó sistema cunha conta do Facebook + alt: Logo do Facebook microsoft: title: Acceder ó sistema con Microsoft - alt: Acceder ó sistema cunha conta de Microsoft + alt: Logo de Microsoft github: title: Acceder ó sistema co GitHub - alt: Acceder ó sistema cunha conta do GitHub + alt: Logo do GitHub wikipedia: title: Acceder ó sistema coa Wikipedia - alt: Acceder ó sistema cunha conta da Wikipedia + alt: Logo da Wikipedia oauth: authorize: title: Autorizar o acceso á túa conta diff --git a/config/locales/he.yml b/config/locales/he.yml index f67b06c7f..eb83043cf 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -2639,7 +2639,6 @@ he: oauth2_authorizations: אישורי OAuth 2 muted_users: משתמשים מושתקים auth_providers: - openid_logo_alt: כניסה עם OpenID openid_login_button: המשך openid: title: כניסה עם OpenID diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 33933b8ad..ef76c43a8 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -1532,7 +1532,6 @@ hr: blocked: Tvoj pristup API-u je blokiran. Prijavite se na web sučelje da saznate viÅ¡e. auth_providers: - openid_logo_alt: Prijavi se sa OpenID-om openid: title: Prijavi se sa OpenID-om alt: Prijavi se sa URL-om OpenID-a diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index bbfeab47a..9977b0942 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -2272,7 +2272,6 @@ hsb: oauth2_authorizations: Prawa OAUTH 2 muted_users: Zněmjeni wužiwarjo auth_providers: - openid_logo_alt: Z OpenID přizjewić openid: title: Přizjewjenje z OpenID alt: Přizjewjenje z OpenID-URL diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 422d03997..487a061ae 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -2567,7 +2567,6 @@ hu: oauth2_authorizations: OAuth 2 engedélyek muted_users: Elnémított felhasználók auth_providers: - openid_logo_alt: Bejelentkezés egy OpenID-vel openid: title: Bejelentkezés OpenID-vel alt: Bejelentkezés OpenID-URL-lel diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 7607b0ca7..2599f2a54 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -873,6 +873,7 @@ ia: college: Edificio de academia commercial: Edificio commercial construction: Edificio in construction + cowshed: Vaccheria detached: Casa individual dormitory: Dormitorio duplex: Casa duple @@ -902,6 +903,7 @@ ia: shed: Remissa stable: Stabulo static_caravan: Caravana + sty: Porcheria temple: Edificio de templo terrace: Casas in serie train_station: Edificio de station ferroviari @@ -2630,26 +2632,25 @@ ia: oauth2_authorizations: Autorisationes OAuth 2 muted_users: Usatores silentiate auth_providers: - openid_logo_alt: Aperir session con OpenID openid_login_button: Continuar openid: title: Aperir session con OpenID - alt: Aperir session con un URL de OpenID + alt: Logotypo de OpenID google: title: Aperir session con Google - alt: Aperir session con un OpenID de Google + alt: Logotypo de Google facebook: title: Aperir session con Facebook - alt: Aperir session con un conto de Facebook + alt: Logotypo de Facebook microsoft: title: Aperir session con Microsoft - alt: Aperir session con un conto Microsoft + alt: Logotypo de Microsoft github: title: Aperir session con GitHub - alt: Aperir session con un conto de GitHub + alt: Logotypo de GitHub wikipedia: title: Aperir session con Wikipedia - alt: Aperir session con un conto de Wikipedia + alt: Logotypo de Wikipedia oauth: authorize: title: Autorisar accesso a tu conto @@ -2818,6 +2819,9 @@ ia: continue: Crear conto terms accepted: Gratias pro acceptar le nove conditiones de contributor! email_help: + privacy_policy: politica de confidentialitate + privacy_policy_title: Politica de confidentialitate del OSMF con un section + sur adresses de e-mail html: Tu adresse non es monstrate publicamente. Consulta nostre %{privacy_policy_link} pro plus information. consider_pd_html: Io considera que mi contributiones es in le %{consider_pd_link}. diff --git a/config/locales/id.yml b/config/locales/id.yml index ab4f2b734..b69f47e04 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -25,6 +25,7 @@ # Author: Jagwar # Author: JakArtisan # Author: Kenrick95 +# Author: Leapofod # Author: Macofe # Author: Mbee-wiki # Author: Mnam23 @@ -2576,7 +2577,7 @@ id: oauth2_authorizations: Otorisasi OAuth 2 muted_users: Pengguna yang Dibisukan auth_providers: - openid_logo_alt: Login dengan OpenID + openid_url: URL OpenID openid: title: Masuk log dengan OpenID alt: Masuk log dengan URL OpenID diff --git a/config/locales/is.yml b/config/locales/is.yml index 200c46e30..4a899c9e3 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -2584,7 +2584,6 @@ is: oauth2_authorizations: OAuth 2 auðkenningar muted_users: Þaggaðir notendur auth_providers: - openid_logo_alt: Skrá inn með OpenID-aðgangi openid: title: Skrá inn með OpenID alt: Skrá inn með OpenID-slóð diff --git a/config/locales/it.yml b/config/locales/it.yml index 15afcd025..765a6eadb 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -2691,7 +2691,6 @@ it: oauth2_authorizations: Autorizzazioni OAuth 2 muted_users: Utenti silenziati auth_providers: - openid_logo_alt: Accedi con un OpenID openid_login_button: Continua openid: title: Accedi con OpenID diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 8eed2a1af..d29ac234e 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -2393,26 +2393,26 @@ ja: oauth2_authorizations: OAuth 2 認証 muted_users: ミュートした利用者 auth_providers: - openid_logo_alt: OpenID でログイン + openid_url: OpenID URL openid_login_button: 次へ openid: title: OpenID でログイン - alt: OpenID URLでログイン + alt: OpenID ロゴ google: title: Googleでログイン - alt: Google OpenIDでログイン + alt: Google ロゴ facebook: title: Facebookでログイン - alt: Facebook アカウントを使用してログイン + alt: Facebook ロゴ microsoft: title: Microsoftでログイン - alt: Microsoftアカウントでログイン + alt: Microsoft ロゴ github: title: GitHubでログイン - alt: GitHubのアカウントでログイン + alt: GitHub ロゴ wikipedia: title: ウィキペディアでログイン - alt: ウィキペディアのアカウントでログイン + alt: ウィキペディアロゴ oauth: authorize: title: あなたのアカウントへのアクセスの認証 @@ -2545,7 +2545,7 @@ ja: no_auto_account_create: 残念ながら、現在、自動ではアカウントを作成できません。 support: サポート about: - header: フリー、編集可能 + header: フリーで編集可能 paragraph_1: 他の地図とは異なり、OpenStreetMapは完全に皆さんのような人によって作成されおり、誰でも自由に修正・更新・ダウンロード・利用ができます。 paragraph_2: 投稿を通じて貢献するには、登録が必要です。 welcome: OpenStreetMap へようこそ。 @@ -2561,6 +2561,8 @@ ja: continue: 利用者登録 terms accepted: 新しい協力者規約を承諾していただき、ありがとうございます! email_help: + privacy_policy: プライバシー・ポリシー + privacy_policy_title: OSMFのプライバシーポリシー(メールアドレスに関するセクションを含む) html: あなたのアドレスは公開されません。詳細については、%{privacy_policy_link} をご覧ください。 consider_pd_html: 私の貢献は %{consider_pd_link} にあるとみなします。 consider_pd: パブリックドメイン diff --git a/config/locales/ka.yml b/config/locales/ka.yml index d9abfa136..1b1e22e13 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -972,9 +972,6 @@ ka: identifiable: იდენტიფიცირებადი private: პირადი trackable: კონტროლირებადი - application: - auth_providers: - openid_logo_alt: შესვლა OpenID-ის საშუალებით oauth: authorize: allow_write_api: რუკის შეცვლა. diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 5b402f458..5f50c7112 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -1146,7 +1146,6 @@ kab: send ad tizmireḍ ad teskelseḍ asnifel-ik. blocked: Anekcum-ik API yewḥel. Qqen ar ugrudem Web i ugar n isallen. auth_providers: - openid_logo_alt: Qqen s OpenID openid: title: Qqen s OpenID alt: Qqen s tensa URL OpenID diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 580222dfe..703afbbf0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -2398,7 +2398,6 @@ ko: oauth2_applications: OAuth 2 애플리케이션 oauth2_authorizations: OAuth 2 인가 auth_providers: - openid_logo_alt: OpenID로 로그인 openid_login_button: 계속 openid: title: OpenID로 로그인하기 diff --git a/config/locales/ku-Latn.yml b/config/locales/ku-Latn.yml index 082ab186a..3bfeae8d5 100644 --- a/config/locales/ku-Latn.yml +++ b/config/locales/ku-Latn.yml @@ -2257,7 +2257,6 @@ ku-Latn: oauth2_applications: Aplîkasyonên OAuth 2 oauth2_authorizations: Destûrdarkirinên OAuth 2 auth_providers: - openid_logo_alt: Têketina bi OpenID'yê openid: title: Bi OpenID'yê têkeve alt: Têketina bi URL'yek OpenID'yê diff --git a/config/locales/lb.yml b/config/locales/lb.yml index df729792d..89dce4108 100644 --- a/config/locales/lb.yml +++ b/config/locales/lb.yml @@ -2126,7 +2126,7 @@ lb: oauth2_applications: OAuth 2 Applikatiounen oauth2_authorizations: OAuth 2 Autorisatiounen auth_providers: - openid_logo_alt: Alogge mat enger OpenID + openid_url: OpenID-URL openid_login_button: Virufueren openid: title: Mat OpenID aloggen diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 7743d0fbd..bfbc4ba8b 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -2444,7 +2444,6 @@ lt: oauth2_applications: „OAuth 2“ programos oauth2_authorizations: „OAuth 2“ prieigos teisės auth_providers: - openid_logo_alt: Prisijunkite su OpenID openid: title: Prisijunkite su OpenID alt: Prisijunkite su OpenID URL diff --git a/config/locales/lv.yml b/config/locales/lv.yml index a8f071b85..9a24f0e61 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1839,7 +1839,6 @@ lv: mājaslapas interfeisā, lai apskatÄ«tu Veidotāju Noteikumus. Tev nevajag piekrist, bet tev tie ir jāapskata. auth_providers: - openid_logo_alt: Pieteikties ar OpenID openid: title: Pieslēgties ar OpenID alt: Pieslēgties ar OpenID saiti diff --git a/config/locales/mk.yml b/config/locales/mk.yml index c9426ca4b..68a208db8 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -627,6 +627,8 @@ mk: comment: Коментар newer_comments: Понови коментари older_comments: Постари коментари + new: + heading: Ставате коментар во следниов разговор за дневничка ставка? doorkeeper: errors: messages: @@ -2615,26 +2617,26 @@ mk: oauth2_authorizations: Овластувања за OAuth 2 muted_users: Замолкнати корисници auth_providers: - openid_logo_alt: Најава со OpenID + openid_url: URL на OpenID openid_login_button: Продолжи openid: title: Најава со OpenID - alt: Најава со URL за OpenID + alt: Лого на OpenID google: title: Најава со Google - alt: Најава со OpenID од Google + alt: Лого на Гугл facebook: title: Најава со Фејсбук - alt: Најава со профил на Фејсбук + alt: Лого на Фејсбук microsoft: title: Најава со Microsoft - alt: Најава со сметка на Microsoft + alt: Лого на Microsoft github: title: Најава со GitHub - alt: Најава со сметка на GitHub + alt: Лого на GitHub wikipedia: title: Најава со Википедија - alt: Најава со сметка на Википедија + alt: Лого на Википедија oauth: authorize: title: Овластете пристап до вашата сметка diff --git a/config/locales/mo.yml b/config/locales/mo.yml index cb123d32f..d37a94449 100644 --- a/config/locales/mo.yml +++ b/config/locales/mo.yml @@ -578,7 +578,6 @@ mo: title: Експортаре application: auth_providers: - openid_logo_alt: Ынтраря ку ажуторул OpenID openid: title: Ынтраря ку ажуторул OpenID alt: Ынтраря ку ажуторул OpenID URL diff --git a/config/locales/ms.yml b/config/locales/ms.yml index feea8ea25..aae77d325 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1840,7 +1840,6 @@ ms: account_settings: Tetapan Akaun muted_users: Pengguna yang Diredamkan auth_providers: - openid_logo_alt: Log masuk dengan OpenID openid: title: Log masuk dengan OpenID alt: Log masuk dengan OpenID URL diff --git a/config/locales/nb.yml b/config/locales/nb.yml index cc3144503..8af954036 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -2037,7 +2037,6 @@ nb: nettsiden for Ã¥ lese bidragsytervilkÃ¥rene. Du trenger ikke godta vilkÃ¥rene, men du mÃ¥ lese dem. auth_providers: - openid_logo_alt: Logg inn med en OpenID openid: title: Logg inn med OpenID alt: Logg inn med en OpenID-URL diff --git a/config/locales/ne.yml b/config/locales/ne.yml index 6f99e9267..ac6ff5e76 100644 --- a/config/locales/ne.yml +++ b/config/locales/ne.yml @@ -1467,6 +1467,8 @@ ne: by_signing_up: privacy_policy: गोपनीयता नीति continue: खाता खाेल्नुहाेस् + email_help: + privacy_policy: गोपनीयता नीति terms: title: सर्तहरू heading: सर्तहरू diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e52b1d942..0f2311ba4 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -933,6 +933,7 @@ nl: college: Schoolgebouw commercial: Commercieel gebouw construction: Gebouw in aanbouw + cowshed: Koeienstal detached: Alleenstaande woning dormitory: Studentenhuis duplex: Koppelwoning @@ -962,6 +963,7 @@ nl: shed: Schuurtje stable: Stal static_caravan: Stacaravan + sty: Varkensstal temple: Tempelgebouw terrace: Rijhuizen train_station: Spoorwegstationsgebouw @@ -1767,7 +1769,7 @@ nl: lost_password: subject: '[OpenStreetMap] Verzoek wachtwoord opnieuw instellen' greeting: Hallo, - hopefully_you: Iemand (mogelijk u) heeft aangevraagd om het wachtwoord opnieuw + hopefully_you: Iemand (mogelijk u) heeft gevraagd om het wachtwoord opnieuw in te laten stellen voor het account met dit e-mailadres op openstreetmap.org. click_the_link: Als u dit bent, klik dan op de onderstaande koppeling om uw wachtwoord opnieuw in te stellen. @@ -2706,26 +2708,26 @@ nl: oauth2_authorizations: OAuth 2 autorisaties muted_users: Gedempte gebruikers auth_providers: - openid_logo_alt: Aanmelden met een OpenID + openid_url: OpenID-URL openid_login_button: Doorgaan openid: title: Aanmelden met OpenID - alt: Aanmelden met een OpenID URL + alt: OpenID-logo google: title: Aanmelden met Google - alt: Aanmelden met een Google OpenID + alt: Google-logo facebook: title: Aanmelden met Facebook - alt: Aanmelden met een Facebookaccount + alt: Facebook-logo microsoft: title: Aanmelden met Microsoft - alt: Aanmelden met een Microsoft-account + alt: Microsoft-logo github: title: Aanmelden met GitHub - alt: Aanmelden met een GitHub-account + alt: GitHub-logo wikipedia: title: Aanmelden met Wikipedia - alt: Aanmelden met een Wikipedia-account + alt: Wikipedia-logo oauth: authorize: title: Geef toegang tot uw account @@ -2894,6 +2896,8 @@ nl: continue: Registreren terms accepted: Dank u wel voor het aanvaarden van de nieuwe bijdragersovereenkomst! email_help: + privacy_policy: privacybeleid + privacy_policy_title: OSMF-privacybeleid, met een sectie over e-mailadressen html: Uw adres wordt niet openbaar gemaakt, zie ons %{privacy_policy_link} voor meer informatie. consider_pd_html: Ik beschouw mijn bijdragen als onderdeel van het %{consider_pd_link}. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 27bf79177..ce8463ba0 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -2265,7 +2265,6 @@ nn: pÃ¥ nettsiden for Ã¥ lese bidragsytervilkÃ¥rene. Du treng ikkje godta vilkÃ¥ra, men du mÃ¥ lese dei. auth_providers: - openid_logo_alt: Logg inn med ein OpenID openid: title: Logg inn med OpenID alt: Logg inn med ein OpenID-URL diff --git a/config/locales/nqo.yml b/config/locales/nqo.yml index 4ff464876..46655160e 100644 --- a/config/locales/nqo.yml +++ b/config/locales/nqo.yml @@ -1598,7 +1598,6 @@ nqo: oauth2_applications: 0Auth 2 ߟߥߊ߬ߟߌ߬ߟߌ ߟߎ߬ oauth2_authorizations: 0Auth 2 ߖߡߊ߬ߙߌ߬ߦߊ߬ߟߌ auth_providers: - openid_logo_alt: ߌ ߜߊ߲߬ߞߎ߲߬ ߏߔߌ߲ ID ߟߊ߫ openid: title: ߌ ߜߊ߲߬ߞߎ߲߫ ߏߔߌ߲ ID ߘߌ߫ alt: ߌ ߜߊ߲߬ߞߎ߲߫ ߏߔߌ߲ ID URL ߟߊ߫ diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d77000a49..63393cdaf 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -2141,7 +2141,6 @@ oc: settings_menu: account_settings: Configuracion auth_providers: - openid_logo_alt: Se connectar amb un OpenID openid: title: Se connectar amb OpenID alt: Se connectar amb una URL OpenID diff --git a/config/locales/pl.yml b/config/locales/pl.yml index cdb58736e..895fbd9d0 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -37,6 +37,7 @@ # Author: Maro21 # Author: Mateon1 # Author: Mikini +# Author: Mkot # Author: Nemo bis # Author: Odie2 # Author: OrlPL @@ -555,8 +556,19 @@ pl: created: Utworzone closed: Zamknięte belongs_to: Autor + subscribe: + heading: Zasubskrybować następującą dyskusję dotyczącą zmian ? + button: Zasubskrybuj dyskusję + unsubscribe: + heading: Wypisać się z poniższej dyskusji na temat zestawu zmian? + button: Wypisz się z dyskusji heading: title: Zestaw zmian %{id} + created_by_html: Utworzony przez %{link_user} w %{created}. + no_such_entry: + title: Brak takiego zestawu zmian + body: Niestety nie odnaleziono zestawu zmian o identyfikatorze %{id}. Sprawdź + pisownię. Być może skorzystano z nieprawidłowego odnośnika. show: title: 'Zestaw zmian: %{id}' created: 'Utworzony: %{when}' @@ -648,6 +660,8 @@ pl: title: Dziennik użytkownika %{user} | %{title} user_title: Dziennik użytkownika %{user} discussion: Dyskusja + subscribe: Obserwuj + unsubscribe: Anuluj subskrypcję leave_a_comment: Zostaw komentarz login_to_leave_a_comment_html: '%{login_link}, aby dodać komentarz' login: Zaloguj się @@ -693,6 +707,11 @@ pl: all: title: Wpisy dzienników OpenStreetMap description: Ostatnie wpisy dzienników od użytkowników OpenStreetMap + subscribe: + heading: Zasubskrybować następującą dyskusję dotyczącą wpisu do pamiętnika? + unsubscribe: + heading: Wypisać się z poniższej dyskusji na temat wpisu dziennika? + button: Wypisz się z dyskusji diary_comments: index: title: Komentarze do dzienników dodane przez %{user} @@ -2585,7 +2604,6 @@ pl: oauth2_applications: Aplikacje OAuth 2 oauth2_authorizations: Autoryzacje OAuth 2 auth_providers: - openid_logo_alt: Zaloguj się przez OpenID openid_login_button: Kontynuuj openid: title: Zaloguj się przez OpenID @@ -3107,8 +3125,8 @@ pl: new: title: Nowa uwaga intro: Zauważyłeś błąd lub brak czegoś? Daj znać innym mapującym, aby mogli - to poprawić. Przesuń znacznik do właściwej pozycji i wpisz notatkę opisującą - problem. + to poprawić. Przesuń znacznik do właściwej pozycji i opisz problem. Jeśli + podasz źródła lub link do zdjęć, twoja uwaga będzie szybciej rozwiązana. anonymous_warning_html: Nie jesteś zalogowany. %{log_in} lub %{sign_up}, jeśli chcesz otrzymywać aktualizacje tej uwagi. anonymous_warning_log_in: Zaloguj się diff --git a/config/locales/pnb.yml b/config/locales/pnb.yml index 98203a90e..840ee6e00 100644 --- a/config/locales/pnb.yml +++ b/config/locales/pnb.yml @@ -1738,7 +1738,6 @@ pnb: oauth2_applications: آوتھ ورژن 2 اَیپ oauth2_authorizations: آوتھ ورژن 2 ورتݨ auth_providers: - openid_logo_alt: اوپن آئی ڈی ورتو openid: title: اوپن آئی‌ڈی نال لوگ‌این کرو alt: اوپن آئی ڈی یو آر ایل ورتو diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index e135ced19..81451108b 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -2656,7 +2656,6 @@ pt-PT: oauth2_authorizations: Autorizações OAuth 2 muted_users: Utilizadores Silenciados auth_providers: - openid_logo_alt: Iniciar sessão com um OpenID openid_login_button: Continuar openid: title: Iniciar sessão com OpenID diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 5745c2e8e..11b64b6a8 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -2661,7 +2661,6 @@ pt: oauth2_authorizations: Autorizações do OAuth 2 muted_users: Usuários silenciados auth_providers: - openid_logo_alt: Entrar com um OpenID openid_login_button: Continuar openid: title: Entrar com o OpenID diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 988e3de03..7ee0f7fcf 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -2577,7 +2577,6 @@ ro: oauth2_applications: Aplicații OAuth 2 oauth2_authorizations: Autorizări OAuth 2 auth_providers: - openid_logo_alt: Conectați-vă cu un OpenID openid: title: Login with OpenID alt: Conectați-vă cu un URL OpenID diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 18b1a9938..b31e04d0e 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -2621,7 +2621,6 @@ ru: oauth2_applications: OAuth 2 приложения oauth2_authorizations: OAuth 2 авторизации auth_providers: - openid_logo_alt: Войти с помощью OpenID openid_login_button: Продолжить openid: title: Войти с помощью OpenID diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 5fd9bee7b..2c21ee07e 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -2552,7 +2552,6 @@ sc: oauth2_applications: Aplicatziones OAuth 2 oauth2_authorizations: Autorizatziones OAuth 2 auth_providers: - openid_logo_alt: Intra cun un'OpenID openid: title: Intra cun OpenID alt: Intra cun un'URL de OpenID diff --git a/config/locales/scn.yml b/config/locales/scn.yml index b369fd85a..a3308824b 100644 --- a/config/locales/scn.yml +++ b/config/locales/scn.yml @@ -1633,7 +1633,6 @@ scn: account_settings: Mpustazzioni cuntu oauth1_settings: Mpustazzioni OAuth auth_providers: - openid_logo_alt: Trasi cu n'OpenID openid: title: Trasi cu n'OpenID alt: Trasi cu n'URL OpenID diff --git a/config/locales/sh.yml b/config/locales/sh.yml index 5cf829265..2b8fce199 100644 --- a/config/locales/sh.yml +++ b/config/locales/sh.yml @@ -766,7 +766,6 @@ sh: oauth2_applications: OAuth 2 prilozi oauth2_authorizations: OAuth 2 ovlaÅ¡tenja auth_providers: - openid_logo_alt: Prijavi se sa OpenID-om openid: title: Prijavi se sa OpenID-om alt: Prijavi se sa URL-om OpenID-a diff --git a/config/locales/sk.yml b/config/locales/sk.yml index c1859a509..5e8369c33 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1266,7 +1266,7 @@ sk: halt: Zastávka vlaku junction: Železničný uzol level_crossing: Železničný prejazd - light_rail: Ľahká železnica + light_rail: Ľahké metro miniature: Záhradná železnica monorail: Jednokoľajka narrow_gauge: Úzkokoľajná železnica @@ -2212,6 +2212,7 @@ sk: footway: Chodník pre peších rail: Železnica subway: Metro + light_rail: Ľahké metro cable_car: Lanovka chair_lift: Sedačková lanovka runway: Letisková dráha @@ -2220,6 +2221,7 @@ sk: admin: Administratívne hranice forest: Les (udržiavaný) wood: Les + bare_rock: Holá skala golf: Golfové ihrisko park: Park common: Pastvina @@ -2230,6 +2232,7 @@ sk: heathland: Vresovisko lake: Jazero reservoir: Nádrž + intermittent_water: Občasná vodná plocha farm: Farma brownfield: Zborenisko cemetery: Cintorín @@ -2245,7 +2248,7 @@ sk: summit: Vrchol peak: Vrchol tunnel: Čiarkovaný obrys = tunel - bridge: Čireny obrys = most + bridge: Čierny obrys = most private: Súkromný prístup destination: Prejazd zakázaný construction: Cesta vo výstavbe @@ -2428,7 +2431,6 @@ sk: oauth2_authorizations: Autorizácie OAuth 2 muted_users: Stlmení používatelia auth_providers: - openid_logo_alt: Prihlásenie pomocou OpenID openid_login_button: PokračovaÅ¥ openid: title: Prihlásenie sa pomocou OpenID @@ -2566,8 +2568,8 @@ sk: revoke: OdobraÅ¥ prístup users: new: - title: ZaregistrovaÅ¥ sa - tab_title: ZaregistrovaÅ¥ sa + title: Zaregistrujte sa + tab_title: Zaregistrujte sa signup_to_authorize_html: Zaregistrujte sa v OpenStreetMap a získajte prístup do %{client_app_name}. no_auto_account_create: Bohužiaľ teraz nie sme schopný vytvoriÅ¥ pre vás účet @@ -2586,7 +2588,7 @@ sk: privacy_policy_title: Pravidlá ochrany osobných údajov OSMF vrátane sekcie o e-mailových adresách external auth: 'Autentifikácia treÅ¥ou stranou:' - continue: ZaregistrovaÅ¥ sa + continue: Zaregistrujte sa terms accepted: Ďakujeme za odsúhlasenie nových podmienok prispievania! email_help: html: VaÅ¡a adresa sa nezobrazuje verejne, pre ďalÅ¡ie informácie venujte pozornosÅ¥ diff --git a/config/locales/skr-arab.yml b/config/locales/skr-arab.yml index f3613f656..4cadb8aa2 100644 --- a/config/locales/skr-arab.yml +++ b/config/locales/skr-arab.yml @@ -1260,7 +1260,6 @@ skr-arab: settings_menu: account_settings: کھاتہ ترتیباں auth_providers: - openid_logo_alt: اوپن آئی ڈی نال لاگ ان تھیوو openid_login_button: جاری رکھو openid: title: اوپن آئی ڈی نال لاگ ان تھیوو diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 932c80b10..1203d9d3f 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1299,7 +1299,7 @@ sl: region: Regija sea: Morje square: Trg - state: 'Zvezna država (ZDA):' + state: Zvezna država subdivision: Pododdelek suburb: Predmestje town: Mesto @@ -1785,7 +1785,7 @@ sl: commented_note_html: '%{commenter} je spet aktiviral_a opombo na zemljevidu, ki ste jo dodali. Opomba je v bližini %{place}.' details: Več podatkov o opombi lahko najdete na %{url}. - details_html: Več podatkov o opombi lahko najdete na %{url}. + details_html: Na opombo lahko odgovorite ali izveste več o njej na %{url}. changeset_comment_notification: description: Nabor sprememb OpenStreetMap Å¡t. %{id} hi: Pozdravljeni, %{to_user}, @@ -1806,8 +1806,8 @@ sl: partial_changeset_with_comment: s komentarjem »%{changeset_comment}« partial_changeset_with_comment_html: s komentarjem »%{changeset_comment}« partial_changeset_without_comment: brez komentarja - details: Več podrobnosti o tem naboru sprememb lahko najdete na %{url}. - details_html: Več podrobnosti o tem naboru sprememb lahko najdete na %{url}. + details: Na nabor sprememb lahko odgovorite ali izveste več o njem na %{url}. + details_html: Na nabor sprememb lahko odgovorite ali izveste več o njej na %{url}. unsubscribe: Od obveščanja o tem naboru sprememb se lahko odnaročite na %{url}. unsubscribe_html: Od obveščanja o tem naboru sprememb se lahko odnaročite na %{url}. @@ -2328,7 +2328,7 @@ sl: title: Vodnik za začetnike description: Vodnik za začetnike, ki ga vzdržuje skupnost. community: - title: Forum skupnosti + title: Pomoč in forum skupnosti description: Skupno mesto za pogovore o OpenStreetMap. mailing_lists: title: Dopisni seznami @@ -2665,7 +2665,7 @@ sl: oauth2_authorizations: Pooblastila OAuth 2 muted_users: UtiÅ¡ani uporabniki auth_providers: - openid_logo_alt: Prijavite se z OpenID + openid_url: URL OpenID openid_login_button: Nadaljuj openid: title: Prijava z OpenID @@ -2680,7 +2680,7 @@ sl: title: Prijava z Microsoftom alt: Logotip Microsoft github: - title: Vpis z GitHub-om + title: Prijava z GitHubom alt: Logotip GitHub wikipedia: title: Prijavi se z Wikipedijo @@ -2987,7 +2987,7 @@ sl: option_1: Če ste novi v OpenStreetMapu, prosimo, ustvarite nov račun z uporabo spodnjega obrazca. option_2: Če že imate račun, se lahko prijavite s svojim uporabniÅ¡kim imenom - in geslom in račun v nastavitvah povežete s svojim ID-jem. + in geslom ter račun v nastavitvah povežete s svojim ID-jem. user_role: filter: not_a_role: Besedilo `%{role}' ni pravilna vloga. diff --git a/config/locales/sq.yml b/config/locales/sq.yml index d8bff3a3c..352e4fed4 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1246,7 +1246,6 @@ sq: require_admin: not_an_admin: Ju duhet të jeni administrator për të kryer atë veprim. auth_providers: - openid_logo_alt: Identifikohu me ndonjë ID të hapur openid: title: Identifikohu me OpenID github: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 4cccc5391..c20241b01 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1124,8 +1124,6 @@ sr-Latn: need_to_see_terms: VaÅ¡ pristup API-ju je privremeno ukinut. Prijavite se da biste pogledali uslove uređivanja. Ne morate da ih prihvatite, već samo da ih vidite. - auth_providers: - openid_logo_alt: Prijavite se s OpenID-jem oauth: authorize: request_access_html: Program %{app_name} zahteva pristup vaÅ¡em nalogu, %{user}. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index cfe222f72..623cea7f3 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -2065,7 +2065,6 @@ sr: account_settings: Подешавња налога muted_users: Пригушени корисници auth_providers: - openid_logo_alt: Пријавите се с OpenID-јем openid_login_button: Настави openid: title: Пријавити се са OpenID diff --git a/config/locales/sv.yml b/config/locales/sv.yml index aa7bc91f8..0730a2fab 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -2644,7 +2644,6 @@ sv: oauth2_authorizations: OAuth 2-auktoriseringar muted_users: Tystade användare auth_providers: - openid_logo_alt: Logga in med ett OpenID openid_login_button: Fortsätt openid: title: Logga in med OpenID diff --git a/config/locales/te.yml b/config/locales/te.yml index ed2c4b6fb..cc11d5d45 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -2114,7 +2114,6 @@ te: oauth2_applications: OAuth 2 అనువర్తనాలు oauth2_authorizations: OAuth 2 ఆథరైజేషన్లు auth_providers: - openid_logo_alt: ఏదైనా OpenID తో లాగినవండి openid: title: OpenID తో లాగినవండి alt: ఏదైనా OpenID URL తో లాగినవండి diff --git a/config/locales/th.yml b/config/locales/th.yml index ac7e6a6df..7d8a2b485 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -2081,7 +2081,6 @@ th: setup_user_auth: blocked: คุณถูกระงับการเข้าถึง API, กรุณาเข้าระบบทางหน้าเว็บหลักหากต้องการทราบสาเหตุที่ถูกระงับในครั้งนี้ auth_providers: - openid_logo_alt: เข้าใช้งานด้วย OpenID openid: title: เข้าใช้งานด้วย OpenID alt: เข้าใช้งานด้วยลิงก์ OpenID diff --git a/config/locales/tl.yml b/config/locales/tl.yml index 8cfb2c84b..65aedc8a7 100644 --- a/config/locales/tl.yml +++ b/config/locales/tl.yml @@ -1788,7 +1788,6 @@ tl: account_settings: Mga Katakdaan ng Akawnt oauth2_authorizations: Mga pahintulot para sa OAuth 2 auth_providers: - openid_logo_alt: Lumagda sa pamamagitan ng isang OpenID openid: title: Lumagda gamit ang OpenID alt: Lumagda gamit ang isang OpenID URL diff --git a/config/locales/tr.yml b/config/locales/tr.yml index b7571c9c2..655bbd08a 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -2681,7 +2681,6 @@ tr: oauth2_authorizations: OAuth 2 yetkilendirmeleri muted_users: Sessize Alınan Kullanıcılar auth_providers: - openid_logo_alt: OpenID ile giriş openid_login_button: Devam et openid: title: OpenID ile giriş diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 6e53a7d20..580c25f90 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -2720,7 +2720,6 @@ uk: oauth2_authorizations: авторизації OAuth 2 muted_users: Стишені учасники auth_providers: - openid_logo_alt: Увійти з OpenID openid_login_button: Продовжити openid: title: Увійти за OpenID diff --git a/config/locales/vi.yml b/config/locales/vi.yml index d29bffb2b..53ffcbdff 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -64,6 +64,8 @@ vi: messages: invalid_email_address: hình nhÆ° không phải là địa chỉ thÆ° điện tá»­ hợp lệ email_address_not_routable: không thể gá»­i đến + display_name_is_user_n: không thể là user_n trừ khi n là số người dùng của + bạn models: user_mute: is_already_muted: đã bị tắt tiếng @@ -568,6 +570,8 @@ vi: title: Nhật ký của %{user} | %{title} user_title: Nhật ký của %{user} discussion: Thảo luận + subscribe: Theo dõi + unsubscribe: Ngừng theo dõi leave_a_comment: Để lại nhận xét login_to_leave_a_comment_html: '%{login_link} để nhận xét' login: Đăng nhập @@ -664,6 +668,10 @@ vi: contact_the_community_html: Xin vui lòng %{contact_link} cộng đồng OpenStreetMap nếu bạn gặp liên kết hỏng hoặc lỗi phần mềm. Hãy ghi nhớ địa chỉ URL chính xác của yêu cầu máy chủ. + bad_request: + title: Yêu cầu hỏng + description: Bạn đã yêu cầu tác vụ không hợp lệ trên máy chủ OpenStreetMap (HTTP + 400) forbidden: title: Cấm description: Tác vụ đuợc yêu cầu trên máy chủ OpenStreetMap chỉ khả dụng đối @@ -1644,8 +1652,8 @@ vi: chú gần %{place}.' commented_note_html: '%{commenter} đã mở lại một ghi chú mà bạn đã bình luận, ghi chú gần %{place}.' - details: Xem chi tiết về ghi chú tại %{url}. - details_html: Xem chi tiết về ghi chú tại %{url}. + details: Trả lời hoặc tìm hiểu thêm về ghi chú tại %{url}. + details_html: Trả lời hoặc tìm hiểu thêm về ghi chú tại %{url}. changeset_comment_notification: description: 'Bộ thay đổi OpenStreetMap #%{id}' hi: Chào %{to_user}, @@ -1666,8 +1674,8 @@ vi: partial_changeset_with_comment: với lời bình luận “%{changeset_comment}” partial_changeset_with_comment_html: với lời bình luận “%{changeset_comment}” partial_changeset_without_comment: không có lời bình luận - details: Xem chi tiết về bộ thay đổi tại %{url}. - details_html: Xem chi tiết về bộ thay đổi tại %{url}. + details: Trả lời hoặc tìm hiểu thêm về bộ thay đổi tại %{url}. + details_html: Trả lời hoặc tìm hiểu thêm về bộ thay đổi tại %{url}. unsubscribe: Bạn có thể ngừng nhận các thông báo về bộ thay đổi này tại %{url}. unsubscribe_html: Bạn có thể ngừng nhận các thông báo về bộ thay đổi này tại %{url}. @@ -1835,13 +1843,15 @@ vi: new: title: Đăng nhập tab_title: Đăng nhập + login_to_authorize_html: Đăng nhập vào OpenStreetMap để truy cập %{client_app_name}. email or username: Địa chỉ ThÆ° điện tá»­ hoặc Tên người dùng password: Mật khẩu remember: Nhớ tôi lost password link: Quên mất Mật khẩu? login_button: Đăng nhập register now: Mở tài khoản ngay - with external: 'Hoặc đăng nhập qua dịch vụ bên thứ ba:' + with external: hoặc đăng nhập qua dịch vụ bên thứ ba + or: hoặc auth failure: Rất tiếc, không thể đăng nhập với những chi tiết đó. destroy: title: Đăng xuất @@ -2011,6 +2021,8 @@ vi: contributors_fi_nlsfi_license: Giấy phép NLSFI contributors_fr_france: Pháp contributors_hr_croatia: Croatia + contributors_hr_dgu: CÆ¡ quan Quản lý Trắc địa Nhà nước Croatia + contributors_hr_open_data_portal: Cổng Dữ liệu Mở Quốc gia contributors_nl_credit_html: '%{netherlands}: Chứa dữ liệu © AND, 2007 (%{and_link})' contributors_nl_netherlands: Hà Lan @@ -2021,6 +2033,7 @@ vi: contributors_nz_linz_data_service: Dịch vụ Dữ liệu LINZ contributors_nz_cc_by: CC BY 4.0 contributors_rs_serbia: Serbia + contributors_rs_rgz: CÆ¡ quan Trắc địa Serbia contributors_rs_open_data_portal: Cổng Dữ liệu Mở Quốc gia contributors_si_slovenia: Slovenia contributors_es_spain: Tây Ban Nha @@ -2282,6 +2295,10 @@ vi: tag: Thẻ rules: title: Quy định! + para_1_html: OpenStreetMap có ít quy tắc chính thức nhÆ°ng yêu cầu mọi người + muốn tham gia phải cộng tác và liên lạc với cộng đồng. Nếu bạn đang tính + thá»±c hiện tác vụ nào không phải sá»­a đổi thủ công, xin vui lòng đọc và tuân + theo các hướng dẫn tại %{imports_link} và %{automated_edits_link}. imports: Nhập Dữ liệu automated_edits: Sá»­a đổi Tá»± động start_mapping: Bắt đầu Đóng góp @@ -2419,6 +2436,8 @@ vi: other: Tập tin GPX của %{user} có %{count} địa điểm description_without_count: Tập tin GPX của %{user} application: + basic_auth_disabled: 'Xác thá»±c CÆ¡ bản HTTP đã bị tắt: %{link}' + oauth_10a_disabled: 'OAuth 1.0 và 1.0a đã bị tắt: %{link}' permission_denied: Bạn không có quyền thá»±c hiện tác vụ này require_cookies: cookies_needed: Hình nhÆ° đã tắt cookie. Xin hãy bật lên chức năng cookie trong @@ -2440,25 +2459,25 @@ vi: oauth2_authorizations: Ủy quyền OAuth 2 muted_users: Người dùng bị Tắt tiếng auth_providers: - openid_logo_alt: Đăng nhập dùng OpenID + openid_login_button: Tiếp tục openid: title: Đăng nhập qua OpenID - alt: Đăng nhập dùng URL OpenID + alt: Biểu trÆ°ng OpenID google: title: Đăng nhập qua Google - alt: Đăng nhập dùng OpenID của Google + alt: Biểu trÆ°ng Google facebook: title: Đăng nhập qua Facebook - alt: Đăng nhập dùng tài khoản Facebook + alt: Biểu trÆ°ng Facebook microsoft: title: Đăng nhập qua Microsoft - alt: Đăng nhập dùng Tài khoản Microsoft + alt: Biểu trÆ°ng Microsoft github: title: Đăng nhập qua GitHub - alt: Đăng nhập dùng tài khoản GitHub + alt: Biểu trÆ°ng GitHub wikipedia: title: Đăng nhập qua Wikipedia - alt: Đăng nhập qua Tài khoản Wikipedia + alt: Biểu trÆ°ng Wikipedia oauth: authorize: title: Cho phép truy cập tài khoản của bạn @@ -2499,6 +2518,8 @@ vi: write_redactions: Ẩn dữ liệu bản đồ read_email: Đọc địa chỉ thÆ° điện tá»­ của người dùng skip_authorization: Tá»± động chấp nhận đơn xin + for_roles: + moderator: Chỉ có điều hành viên có quyền thá»±c hiện tác vụ này oauth_clients: new: title: Đăng ký chÆ°Æ¡ng trình mới @@ -2595,31 +2616,45 @@ vi: new: title: Mở tài khoản tab_title: Mở tài khoản + signup_to_authorize_html: Mở tài khoản OpenStreetMap để truy cập %{client_app_name}. no_auto_account_create: Rất tiếc, chúng ta hiện không có khả năng tạo ra tài khoản tá»± động cho bạn. please_contact_support_html: Vui lòng liên hệ với %{support_link} để yêu cầu tạo tài khoản – chúng tôi sẽ cố gắng giải quyết yêu cầu nhanh nhất có thể. support: hỗ trợ about: - header: Tá»± do sá»­ dụng và sá»­a đổi + header: Tá»± do sá»­ dụng và sá»­a đổi. paragraph_1: Không giống nhÆ° với các bản đồ kia, OpenStreetMap được xây dá»±ng hoàn toàn nhờ những người nhÆ° bạn, và mọi người có thể tá»± do sá»­a chữa, cập nhật, tải về, và sá»­ dụng miễn phí. - paragraph_2: Hãy mở tài khoản để bắt đầu đóng góp. Chúng tôi sẽ gá»­i thÆ° điện - tá»­ cho bạn để xác nhận tài khoản của bạn. + paragraph_2: Hãy mở tài khoản để bắt đầu đóng góp. + welcome: Chào mừng đến OpenStreetMap + duplicate_social_email: Nếu bạn đã có tài khoản OpenStreetMap và muốn sá»­ dụng + nhà cung cấp danh tính bên thứ ba, xin vui lòng đăng nhập dùng mật khẩu của + bạn và thay đổi tùy chọn tài khoản. display name description: Tên người dùng của bạn được hiển thị công khai. Bạn có thể thay đổi tên này về sau trong tùy chọn. by_signing_up: + html: Bằng cách mở tài khoản, bạn chấp nhận %{tou_link}, %{privacy_policy_link}, + và %{contributor_terms_link} của chúng tôi. privacy_policy: quy định về quyền riêng tÆ° privacy_policy_title: Quy định về quyền riêng tÆ° của OSMF, bao gồm phần về địa chỉ thÆ° điện tá»­ + contributor_terms: các điều kiện đóng góp + tou: các điều khoản sá»­ dụng external auth: 'Xác minh qua Dịch vụ Bên thứ ba:' continue: Mở tài khoản terms accepted: Cám Æ¡n bạn đã chấp nhận các điều khoản đóng góp mới! email_help: + privacy_policy: quy định về quyền riêng tÆ° + privacy_policy_title: Quy định về quyền riêng tÆ° của OSMF, bao gồm phần về + địa chỉ thÆ° điện tá»­ html: Địa chỉ thÆ° điện tá»­ không được hiển thị công khai, xem thêm thông tin trong %{privacy_policy_link} của chúng tôi. - use external auth: Hoặc đăng nhập qua dịch vụ bên thứ ba + consider_pd_html: Tôi coi những đóng góp của mình thuộc về %{consider_pd_link}. + consider_pd: phạm vi công cộng + or: hoặc + use external auth: hoặc mở tài khoản qua dịch vụ bên thứ ba terms: title: Điều khoản heading: Điều khoản @@ -2686,6 +2721,8 @@ vi: remove as friend: Hủy Kết Bạn add as friend: Kết Bạn mapper since: 'Tham gia:' + last map edit: 'Sá»­a đổi bản đồ cuối cùng:' + no activity yet: ChÆ°a có hoạt động nào uid: 'Số người dùng:' ct status: 'Điều khoản đóng góp:' ct undecided: ChÆ°a quyết định @@ -2886,6 +2923,7 @@ vi: blocks_on_user: Tác vụ Cấm %{user} blocks_by_me: Tác vụ Cấm bởi Tôi blocks_by_user: Tác vụ Cấm bởi %{user} + block: Tác vụ cấm số %{id} user_mutes: index: title: Người dùng bị Tắt tiếng @@ -2958,6 +2996,10 @@ vi: intro: Bản đồ có thiếu gì hay sai lầm không? Hãy báo cho chúng tôi để chúng tôi sá»­a chữa bản đồ. Chỉ việc kéo ghim vào vị trí đúng và viết lời giải thích vấn đề. + anonymous_warning_html: Bạn chÆ°a đăng nhập. Để nhận được các thông báo về lời + ghi chú của bạn, xin vui lòng %{log_in} hoặc %{sign_up}. + anonymous_warning_log_in: đăng nhập + anonymous_warning_sign_up: mở tài khoản advice: Ghi chú của bạn được hiển thị công khai và có thể được sá»­ dụng để cập nhật bản đồ. Xin đừng ghi thông tin cá nhân hoặc thông tin lấy từ bản đồ hay danh bạ có bản quyền. diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index e86f1ec57..ba56b9f24 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -25,6 +25,7 @@ # Author: GuoPC # Author: Hehua # Author: Hmgrmb +# Author: Huajing # Author: Hudafu # Author: Hydra # Author: Hzy980512 @@ -452,7 +453,7 @@ zh-CN: way: 路径 relation: 关系 start_rjs: - feature_warning: 正在加载 %{num_features} 个要素,这可能会使您的浏览器变慢或无响应。确定要显示此数据吗? + feature_warning: 正在加载 %{num_features} 个要素,这可能会使您的浏览器变慢或无响应。您确定要显示此数据吗? load_data: 加载数据 loading: 加载中… tag_details: @@ -674,6 +675,8 @@ zh-CN: comment: 评论 newer_comments: 较新评论 older_comments: 较旧评论 + new: + heading: 在以下日记条目的讨论中留言吗? doorkeeper: errors: messages: @@ -2467,26 +2470,26 @@ zh-CN: oauth2_authorizations: OAuth 2授权 muted_users: 已忽视用户 auth_providers: - openid_logo_alt: 使用 OpenID 登录 + openid_url: OpenID URL openid_login_button: 继续 openid: title: 使用OpenID登录 - alt: 使用OpenID URL登录 + alt: OpenID 标志 google: title: 使用Google登录 - alt: 使用Google OpenID登录 + alt: Google 标志 facebook: title: 使用Facebook登录 - alt: 使用Facebook账户登录 + alt: Facebook 标志 microsoft: title: 使用Microsoft登录 - alt: 使用Microsoft账户登录 + alt: Microsoft 标志 github: title: 使用GitHub登录 - alt: 通过GitHub账户登录 + alt: GitHub 标志 wikipedia: title: 使用维基百科登录 - alt: 使用维基百科账户登录 + alt: 维基百科标志 oauth: authorize: title: 授权访问您的账户 @@ -2637,6 +2640,8 @@ zh-CN: continue: 注册 terms accepted: 感谢您接受新的贡献条款! email_help: + privacy_policy: 隐私政策 + privacy_policy_title: OSM基金会隐私政策包括电子邮件地址部分 html: 您的地址不会公开显示,请参阅我们的%{privacy_policy_link}了解更多信息。 consider_pd_html: 我认为我的贡献应在 %{consider_pd_link} 中。 consider_pd: 公有领域 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 2b17ee686..aa2cdb135 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -629,6 +629,8 @@ zh-TW: comment: 評論 newer_comments: 較新的評論 older_comments: 較舊的評論 + new: + heading: 在以下日記項目討論添加評論? doorkeeper: errors: messages: @@ -2435,26 +2437,26 @@ zh-TW: oauth2_authorizations: OAuth 2 授權 muted_users: 已忽視使用者 auth_providers: - openid_logo_alt: 使用 OpenID 登入 + openid_url: OpenID URL openid_login_button: 繼續 openid: title: 使用 OpenID 登入 - alt: 使用 OpenID 網址登入 + alt: OpenID 標誌 google: title: 使用 Google 登入 - alt: 使用 Google OpenID 登入 + alt: Google 標誌 facebook: title: 使用臉書登入 - alt: 使用臉書帳號登入 + alt: 臉書標誌 microsoft: title: 使用 Microsoft 登入 - alt: 使用 Microsoft 帳號登入 + alt: 微軟標誌 github: title: 使用 GitHub 登入 - alt: 使用 GitHub 帳號登入 + alt: GitHub 標誌 wikipedia: title: 使用維基百科登入 - alt: 使用維基百科帳號登入 + alt: 維基百科標誌 oauth: authorize: title: 授權使用您的帳號 diff --git a/config/routes.rb b/config/routes.rb index 98c8ba15e..0d1df9678 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -237,7 +237,7 @@ OpenStreetMap::Application.routes.draw do scope "/user/:display_name" do resources :diary_entries, :path => "diary", :only => [:edit, :update, :show], :id => /\d+/ end - post "/user/:display_name/diary/:id/newcomment" => "diary_entries#comment", :id => /\d+/, :as => :comment_diary_entry + post "/user/:display_name/diary/:id/newcomment" => "diary_comments#create", :id => /\d+/, :as => :comment_diary_entry post "/user/:display_name/diary/:id/hide" => "diary_entries#hide", :id => /\d+/, :as => :hide_diary_entry post "/user/:display_name/diary/:id/unhide" => "diary_entries#unhide", :id => /\d+/, :as => :unhide_diary_entry post "/user/:display_name/diary/:id/hidecomment/:comment" => "diary_comments#hide", :id => /\d+/, :comment => /\d+/, :as => :hide_diary_comment diff --git a/lib/nominatim.rb b/lib/nominatim.rb index adb041da4..5e4a18b51 100644 --- a/lib/nominatim.rb +++ b/lib/nominatim.rb @@ -11,14 +11,16 @@ module Nominatim url = "#{Settings.nominatim_url}reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{language}" begin - response = Timeout.timeout(4) do - REXML::Document.new(Net::HTTP.get(URI.parse(url))) + response = OSM.http_client.get(URI.parse(url)) do |request| + request.options.timeout = 4 end + + results = REXML::Document.new(response.body) if response.success? rescue StandardError - response = nil + results = nil end - if response && result = response.get_text("reversegeocode/result") + if results && result = results.get_text("reversegeocode/result") result.value else "#{number_with_precision(lat, :precision => 3)}, #{number_with_precision(lon, :precision => 3)}" diff --git a/lib/osm.rb b/lib/osm.rb index dd273418e..46f37036f 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -535,7 +535,8 @@ module OSM # Return the HTTP client to use def self.http_client - @http_client ||= Faraday.new(:request => { :timeout => 15 }) + @http_client ||= Faraday.new(:request => { :timeout => 15 }, + :headers => { :user_agent => Settings.server_url }) end # Return the MaxMindDB database handle diff --git a/test/abilities/abilities_test.rb b/test/abilities/abilities_test.rb index 58ef2b514..cc981b792 100644 --- a/test/abilities/abilities_test.rb +++ b/test/abilities/abilities_test.rb @@ -25,11 +25,11 @@ class GuestAbilityTest < AbilityTest assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments" end - [:create, :edit, :comment, :subscribe, :unsubscribe, :hide, :unhide].each do |action| + [:create, :edit, :subscribe, :unsubscribe, :hide, :unhide].each do |action| assert ability.cannot?(action, DiaryEntry), "should not be able to #{action} DiaryEntries" end - [:hide, :unhide].each do |action| + [:create, :hide, :unhide].each do |action| assert ability.cannot?(action, DiaryComment), "should not be able to #{action} DiaryComments" end end @@ -55,11 +55,11 @@ class UserAbilityTest < AbilityTest test "Diary permissions" do ability = Ability.new create(:user) - [:index, :rss, :show, :create, :edit, :comment, :subscribe, :unsubscribe].each do |action| + [:index, :rss, :show, :create, :edit, :subscribe, :unsubscribe].each do |action| assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries" end - [:index].each do |action| + [:index, :create].each do |action| assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments" end @@ -100,11 +100,11 @@ end class AdministratorAbilityTest < AbilityTest test "Diary for an administrator" do ability = Ability.new create(:administrator_user) - [:index, :rss, :show, :create, :edit, :comment, :subscribe, :unsubscribe, :hide, :unhide].each do |action| + [:index, :rss, :show, :create, :edit, :subscribe, :unsubscribe, :hide, :unhide].each do |action| assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries" end - [:index, :hide, :unhide].each do |action| + [:index, :create, :hide, :unhide].each do |action| assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments" end end diff --git a/test/controllers/api/changeset_comments_controller_test.rb b/test/controllers/api/changeset_comments_controller_test.rb index e25926c78..e7d8ca209 100644 --- a/test/controllers/api/changeset_comments_controller_test.rb +++ b/test/controllers/api/changeset_comments_controller_test.rb @@ -225,21 +225,21 @@ module Api comment = create(:changeset_comment) assert comment.visible - post changeset_comment_hide_path(:id => comment) + post changeset_comment_hide_path(comment) assert_response :unauthorized assert comment.reload.visible auth_header = basic_authorization_header create(:user).email, "test" # not a moderator - post changeset_comment_hide_path(:id => comment), :headers => auth_header + post changeset_comment_hide_path(comment), :headers => auth_header assert_response :forbidden assert comment.reload.visible auth_header = basic_authorization_header create(:moderator_user).email, "test" # bad comment id - post changeset_comment_hide_path(:id => 999111), :headers => auth_header + post changeset_comment_hide_path(999111), :headers => auth_header assert_response :not_found assert comment.reload.visible end @@ -252,7 +252,7 @@ module Api auth_header = basic_authorization_header create(:moderator_user).email, "test" - post changeset_comment_hide_path(:id => comment), :headers => auth_header + post changeset_comment_hide_path(comment), :headers => auth_header assert_response :success assert_not comment.reload.visible end @@ -264,21 +264,21 @@ module Api comment = create(:changeset_comment, :visible => false) assert_not comment.visible - post changeset_comment_unhide_path(:id => comment) + post changeset_comment_unhide_path(comment) assert_response :unauthorized assert_not comment.reload.visible auth_header = basic_authorization_header create(:user).email, "test" # not a moderator - post changeset_comment_unhide_path(:id => comment), :headers => auth_header + post changeset_comment_unhide_path(comment), :headers => auth_header assert_response :forbidden assert_not comment.reload.visible auth_header = basic_authorization_header create(:moderator_user).email, "test" # bad comment id - post changeset_comment_unhide_path(:id => 999111), :headers => auth_header + post changeset_comment_unhide_path(999111), :headers => auth_header assert_response :not_found assert_not comment.reload.visible end @@ -291,7 +291,7 @@ module Api auth_header = basic_authorization_header create(:moderator_user).email, "test" - post changeset_comment_unhide_path(:id => comment), :headers => auth_header + post changeset_comment_unhide_path(comment), :headers => auth_header assert_response :success assert comment.reload.visible end diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb index 17a9ad9d3..8bb229294 100644 --- a/test/controllers/api/changesets_controller_test.rb +++ b/test/controllers/api/changesets_controller_test.rb @@ -2592,7 +2592,7 @@ module Api # bad changeset id assert_no_difference "changeset.subscribers.count" do - post api_changeset_subscribe_path(:id => 999111), :headers => auth_header + post api_changeset_subscribe_path(999111), :headers => auth_header end assert_response :not_found diff --git a/test/controllers/changeset_comments_controller_test.rb b/test/controllers/changeset_comments_controller_test.rb index 5d0f4b51f..b03640eab 100644 --- a/test/controllers/changeset_comments_controller_test.rb +++ b/test/controllers/changeset_comments_controller_test.rb @@ -41,25 +41,18 @@ class ChangesetCommentsControllerTest < ActionDispatch::IntegrationTest get changeset_comments_feed_path(:id => changeset.id, :format => "rss") assert_response :success assert_equal "application/rss+xml", @response.media_type - assert_select "rss", :count => 1 do - assert_select "channel", :count => 1 do - assert_select "item", :count => 3 - end - end - # Rails::Dom::Testing.html_document_fragment.parse(icons) - # Gets comment Ids from HTML and checks that they are in descending order - last_comment_id = -1 assert_select "rss", :count => 1 do - assert_select "description", :count => 3 do |descriptions| - descriptions.children.each do |description| - changeset_dom = Rails::Dom::Testing.html_document_fragment.parse(description.content) - comment = changeset_dom.at_css(".changeset-comment-text") - next unless comment - - id = comment.content.split[-1].to_i - assert_operator id, "<", last_comment_id if last_comment_id != -1 - last_comment_id = id + assert_select "channel", :count => 1 do + assert_select "item", :count => 3 do |items| + items.each do |item| + assert_select item, "link", :count => 1 do |link| + match = assert_match(/^#{changeset_url changeset}#c(\d+)$/, link.text) + comment_id = match[1].to_i + assert_operator comment_id, "<", last_comment_id if last_comment_id != -1 + last_comment_id = comment_id + end + end end end end diff --git a/test/controllers/diary_comments_controller_test.rb b/test/controllers/diary_comments_controller_test.rb index e2ad4c91b..2ebf52d16 100644 --- a/test/controllers/diary_comments_controller_test.rb +++ b/test/controllers/diary_comments_controller_test.rb @@ -12,6 +12,10 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest { :path => "/user/username/diary/comments", :method => :get }, { :controller => "diary_comments", :action => "index", :display_name => "username" } ) + assert_routing( + { :path => "/user/username/diary/1/newcomment", :method => :post }, + { :controller => "diary_comments", :action => "create", :display_name => "username", :id => "1" } + ) assert_routing( { :path => "/user/username/diary/1/hidecomment/2", :method => :post }, { :controller => "diary_comments", :action => "hide", :display_name => "username", :id => "1", :comment => "2" } @@ -69,6 +73,113 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest end end + def test_create + user = create(:user) + other_user = create(:user) + entry = create(:diary_entry, :user => user) + create(:diary_entry_subscription, :diary_entry => entry, :user => user) + + # Make sure that you are denied when you are not logged in + post comment_diary_entry_path(entry.user, entry) + assert_response :forbidden + + session_for(other_user) + + # Verify that you get a not found error, when you pass a bogus id + post comment_diary_entry_path(entry.user, :id => 9999) + assert_response :not_found + assert_select "div.content-heading", :count => 1 do + assert_select "h1", :text => "No entry with the id: 9999", :count => 1 + end + + # Now try an invalid comment with an empty body + assert_no_difference "ActionMailer::Base.deliveries.size" do + assert_no_difference "DiaryComment.count" do + assert_no_difference "entry.subscribers.count" do + perform_enqueued_jobs do + post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "" }) + end + end + end + end + assert_response :success + assert_template :new + + # Now try again with the right id + assert_difference "ActionMailer::Base.deliveries.size", entry.subscribers.count do + assert_difference "DiaryComment.count", 1 do + assert_difference "entry.subscribers.count", 1 do + perform_enqueued_jobs do + post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "New comment" }) + end + end + end + end + assert_redirected_to diary_entry_path(entry.user, entry) + email = ActionMailer::Base.deliveries.first + assert_equal [user.email], email.to + assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject + assert_match(/New comment/, email.text_part.decoded) + assert_match(/New comment/, email.html_part.decoded) + ActionMailer::Base.deliveries.clear + comment = DiaryComment.order(:id).last + assert_equal entry.id, comment.diary_entry_id + assert_equal other_user.id, comment.user_id + assert_equal "New comment", comment.body + + # Now show the diary entry, and check the new comment is present + get diary_entry_path(entry.user, entry) + assert_response :success + assert_select ".diary-comment", :count => 1 do + assert_select "#comment#{comment.id}", :count => 1 do + assert_select "a[href='/user/#{ERB::Util.u(other_user.display_name)}']", :text => other_user.display_name, :count => 1 + end + assert_select ".richtext", :text => /New comment/, :count => 1 + end + end + + def test_create_spammy + user = create(:user) + other_user = create(:user) + entry = create(:diary_entry, :user => user) + create(:diary_entry_subscription, :diary_entry => entry, :user => user) + + session_for(other_user) + + # Generate some spammy content + spammy_text = 1.upto(50).map { |n| "http://example.com/spam#{n}" }.join(" ") + + # Try creating a spammy comment + assert_difference "ActionMailer::Base.deliveries.size", 1 do + assert_difference "DiaryComment.count", 1 do + perform_enqueued_jobs do + post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => spammy_text }) + end + end + end + assert_redirected_to diary_entry_path(entry.user, entry) + email = ActionMailer::Base.deliveries.first + assert_equal [user.email], email.to + assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject + assert_match %r{http://example.com/spam}, email.text_part.decoded + assert_match %r{http://example.com/spam}, email.html_part.decoded + ActionMailer::Base.deliveries.clear + comment = DiaryComment.order(:id).last + assert_equal entry.id, comment.diary_entry_id + assert_equal other_user.id, comment.user_id + assert_equal spammy_text, comment.body + assert_equal "suspended", User.find(other_user.id).status + + # Follow the redirect + get diary_entries_path(:display_name => user.display_name) + assert_redirected_to :controller => :users, :action => :suspended + + # Now show the diary entry, and check the new comment is not present + get diary_entry_path(entry.user, entry) + assert_response :success + assert_select ".diary-comment", :count => 0 + end + def test_hide user = create(:user) diary_entry = create(:diary_entry, :user => user) diff --git a/test/controllers/diary_entries_controller_test.rb b/test/controllers/diary_entries_controller_test.rb index d0453bf08..9acd72c67 100644 --- a/test/controllers/diary_entries_controller_test.rb +++ b/test/controllers/diary_entries_controller_test.rb @@ -69,10 +69,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest { :path => "/user/username/diary/1", :method => :put }, { :controller => "diary_entries", :action => "update", :display_name => "username", :id => "1" } ) - assert_routing( - { :path => "/user/username/diary/1/newcomment", :method => :post }, - { :controller => "diary_entries", :action => "comment", :display_name => "username", :id => "1" } - ) assert_routing( { :path => "/user/username/diary/1/hide", :method => :post }, { :controller => "diary_entries", :action => "hide", :display_name => "username", :id => "1" } @@ -340,113 +336,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest assert_select "span[class=translation_missing]", false, "Missing translation in edit diary entry" end - def test_comment - user = create(:user) - other_user = create(:user) - entry = create(:diary_entry, :user => user) - create(:diary_entry_subscription, :diary_entry => entry, :user => user) - - # Make sure that you are denied when you are not logged in - post comment_diary_entry_path(entry.user, entry) - assert_response :forbidden - - session_for(other_user) - - # Verify that you get a not found error, when you pass a bogus id - post comment_diary_entry_path(entry.user, :id => 9999) - assert_response :not_found - assert_select "div.content-heading", :count => 1 do - assert_select "h1", :text => "No entry with the id: 9999", :count => 1 - end - - # Now try an invalid comment with an empty body - assert_no_difference "ActionMailer::Base.deliveries.size" do - assert_no_difference "DiaryComment.count" do - assert_no_difference "entry.subscribers.count" do - perform_enqueued_jobs do - post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "" }) - end - end - end - end - assert_response :success - assert_template :show - - # Now try again with the right id - assert_difference "ActionMailer::Base.deliveries.size", entry.subscribers.count do - assert_difference "DiaryComment.count", 1 do - assert_difference "entry.subscribers.count", 1 do - perform_enqueued_jobs do - post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "New comment" }) - end - end - end - end - assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id - email = ActionMailer::Base.deliveries.first - assert_equal [user.email], email.to - assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject - assert_match(/New comment/, email.text_part.decoded) - assert_match(/New comment/, email.html_part.decoded) - ActionMailer::Base.deliveries.clear - comment = DiaryComment.order(:id).last - assert_equal entry.id, comment.diary_entry_id - assert_equal other_user.id, comment.user_id - assert_equal "New comment", comment.body - - # Now show the diary entry, and check the new comment is present - get diary_entry_path(entry.user, entry) - assert_response :success - assert_select ".diary-comment", :count => 1 do - assert_select "#comment#{comment.id}", :count => 1 do - assert_select "a[href='/user/#{ERB::Util.u(other_user.display_name)}']", :text => other_user.display_name, :count => 1 - end - assert_select ".richtext", :text => /New comment/, :count => 1 - end - end - - def test_comment_spammy - user = create(:user) - other_user = create(:user) - entry = create(:diary_entry, :user => user) - create(:diary_entry_subscription, :diary_entry => entry, :user => user) - - session_for(other_user) - - # Generate some spammy content - spammy_text = 1.upto(50).map { |n| "http://example.com/spam#{n}" }.join(" ") - - # Try creating a spammy comment - assert_difference "ActionMailer::Base.deliveries.size", 1 do - assert_difference "DiaryComment.count", 1 do - perform_enqueued_jobs do - post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => spammy_text }) - end - end - end - assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id - email = ActionMailer::Base.deliveries.first - assert_equal [user.email], email.to - assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject - assert_match %r{http://example.com/spam}, email.text_part.decoded - assert_match %r{http://example.com/spam}, email.html_part.decoded - ActionMailer::Base.deliveries.clear - comment = DiaryComment.order(:id).last - assert_equal entry.id, comment.diary_entry_id - assert_equal other_user.id, comment.user_id - assert_equal spammy_text, comment.body - assert_equal "suspended", User.find(other_user.id).status - - # Follow the redirect - get diary_entries_path(:display_name => user.display_name) - assert_redirected_to :controller => :users, :action => :suspended - - # Now show the diary entry, and check the new comment is not present - get diary_entry_path(entry.user, entry) - assert_response :success - assert_select ".diary-comment", :count => 0 - end - def test_index_all diary_entry = create(:diary_entry) geo_entry = create(:diary_entry, :latitude => 51.50763, :longitude => -0.10781) diff --git a/test/controllers/geocoder_controller_test.rb b/test/controllers/geocoder_controller_test.rb index d32521c3b..ac9905589 100644 --- a/test/controllers/geocoder_controller_test.rb +++ b/test/controllers/geocoder_controller_test.rb @@ -60,6 +60,19 @@ class GeocoderControllerTest < ActionDispatch::IntegrationTest end end + ## + # Test identification of integer lat/lon pairs using N/E with degrees + def test_identify_latlon_ne_d_int_deg + [ + "N50 E14", + "N50° E14°", + "50N 14E", + "50°N 14°E" + ].each do |code| + latlon_check code, 50, 14 + end + end + ## # Test identification of lat/lon pairs using N/W with degrees def test_identify_latlon_nw_d @@ -223,6 +236,54 @@ class GeocoderControllerTest < ActionDispatch::IntegrationTest end end + ## + # Test identification of lat/lon pairs with missing fractions + def test_no_identify_latlon_ne_missing_fraction_part + [ + "N50. E14.", + "N50.° E14.°", + "50.N 14.E", + "50.°N 14.°E", + "N50 1.' E14 2.'", + "N50° 1.' E14° 2.'", + "50N 1.' 14 2.'E", + "50° 1.'N 14° 2.'E", + "N50 1' 3,\" E14 2' 4.\"", + "N50° 1' 3.\" E14° 2' 4.\"", + "50N 1' 3.\" 14 2' 4.\"E", + "50° 1' 3.\"N 14° 2' 4.\"E" + ].each do |code| + get search_path(:query => code) + assert_response :success + assert_template :search + assert_template :layout => "map" + assert_equal %w[osm_nominatim], assigns(:sources).pluck(:name) + end + end + + # + # Test identification of lat/lon pairs with mixed precision + def test_identify_latlon_ne_mixed_precision + latlon_check "N1 5 E15", 1.083333, 15 + latlon_check "N1 5 9 E15", 1.085833, 15 + latlon_check "N1 5 9 E1 5", 1.085833, 1.083333 + latlon_check "N15 E1 5", 15, 1.083333 + latlon_check "N15 E1 5 9", 15, 1.085833 + latlon_check "N1 5 E1 5 9", 1.083333, 1.085833 + end + + # + # Test identification of lat/lon pairs with values close to zero + def test_identify_latlon_close_to_zero + [ + "0.0000123 -0.0000456", + "+0.0000123 -0.0000456", + "N 0° 0' 0.4428\", W 0° 0' 1.6416\"" + ].each do |code| + latlon_check code, 0.0000123, -0.0000456 + end + end + ## # Test identification of US zipcodes def test_identify_us_postcode @@ -368,8 +429,10 @@ class GeocoderControllerTest < ActionDispatch::IntegrationTest assert_template :layout => "map" assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources).pluck(:name) assert_nil @controller.params[:query] - assert_in_delta lat, @controller.params[:lat] - assert_in_delta lon, @controller.params[:lon] + assert_match(/^[+-]?\d+(?:\.\d+)?$/, @controller.params[:lat]) + assert_match(/^[+-]?\d+(?:\.\d+)?$/, @controller.params[:lon]) + assert_in_delta lat, @controller.params[:lat].to_f + assert_in_delta lon, @controller.params[:lon].to_f get search_path(:query => query), :xhr => true assert_response :success @@ -377,8 +440,10 @@ class GeocoderControllerTest < ActionDispatch::IntegrationTest assert_template :layout => "xhr" assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources).pluck(:name) assert_nil @controller.params[:query] - assert_in_delta lat, @controller.params[:lat] - assert_in_delta lon, @controller.params[:lon] + assert_match(/^[+-]?\d+(?:\.\d+)?$/, @controller.params[:lat]) + assert_match(/^[+-]?\d+(?:\.\d+)?$/, @controller.params[:lon]) + assert_in_delta lat, @controller.params[:lat].to_f + assert_in_delta lon, @controller.params[:lon].to_f end def search_check(query, sources) diff --git a/test/helpers/user_helper_test.rb b/test/helpers/user_helper_test.rb index a415bd029..c4020dd7f 100644 --- a/test/helpers/user_helper_test.rb +++ b/test/helpers/user_helper_test.rb @@ -109,15 +109,10 @@ class UserHelperTest < ActionView::TestCase assert_match %r{^$}, thumbnail end - def test_openid_logo - logo = openid_logo - assert_match %r{^$}, logo - end - def test_auth_button - button = auth_button("google", "google") + button = auth_button("google") img_tag = "\"Google" - assert_equal("#{img_tag}", button) + assert_equal("#{img_tag}", button) end private diff --git a/test/lib/nominatim_test.rb b/test/lib/nominatim_test.rb new file mode 100644 index 000000000..1ac775a88 --- /dev/null +++ b/test/lib/nominatim_test.rb @@ -0,0 +1,29 @@ +require "test_helper" + +class NominatimTest < ActiveSupport::TestCase + def test_describe_location + stub_request(:get, %r{^https://nominatim\.example\.com/reverse\?}) + .to_return(:body => "Target location") + + with_settings(:nominatim_url => "https://nominatim.example.com/") do + location = Nominatim.describe_location(60, 30, 10, "en") + assert_equal "Target location", location + end + + assert_requested :get, "https://nominatim.example.com/reverse?lat=60&lon=30&zoom=10&accept-language=en", + :headers => { "User-Agent" => Settings.server_url } + end + + def test_describe_location_no_result + stub_request(:get, %r{^https://nominatim\.example\.com/reverse\?}) + .to_return(:body => "Unable to geocode") + + with_settings(:nominatim_url => "https://nominatim.example.com/") do + location = Nominatim.describe_location(1, 2, 14, "en") + assert_equal "1.000, 2.000", location + end + + assert_requested :get, "https://nominatim.example.com/reverse?lat=1&lon=2&zoom=14&accept-language=en", + :headers => { "User-Agent" => Settings.server_url } + end +end diff --git a/test/system/user_signup_test.rb b/test/system/user_signup_test.rb index 0835df741..0e02b904f 100644 --- a/test/system/user_signup_test.rb +++ b/test/system/user_signup_test.rb @@ -8,4 +8,16 @@ class UserSignupTest < ApplicationSystemTestCase assert_content "Confirm Password" end + + test "Show OpenID form when OpenID provider button is clicked" do + visit login_path + + assert_no_field "OpenID URL" + assert_no_button "Continue" + + click_on "Log in with OpenID" + + assert_field "OpenID URL" + assert_button "Continue" + end end diff --git a/yarn.lock b/yarn.lock index fe77c07e3..a241e9c98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,10 +14,10 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.6.1": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== +"@eslint-community/regexpp@^4.11.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/config-array@^0.17.0": version "0.17.0" @@ -43,10 +43,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.6.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.6.0.tgz#5b0cb058cc13d9c92d4e561d3538807fa5127c95" - integrity sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A== +"@eslint/js@9.7.0": + version "9.7.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.7.0.tgz#b712d802582f02b11cfdf83a85040a296afec3f0" + integrity sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -227,10 +227,10 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc" - integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og== +eslint-scope@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94" + integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -246,15 +246,15 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.0.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.6.0.tgz#9f54373afa15e1ba356656a8d96233182027fb49" - integrity sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w== + version "9.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.7.0.tgz#bedb48e1cdc2362a0caaa106a4c6ed943e8b09e4" + integrity sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" + "@eslint-community/regexpp" "^4.11.0" "@eslint/config-array" "^0.17.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.6.0" + "@eslint/js" "9.7.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -263,7 +263,7 @@ eslint@^9.0.0: cross-spawn "^7.0.2" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.0.1" + eslint-scope "^8.0.2" eslint-visitor-keys "^4.0.0" espree "^10.1.0" esquery "^1.5.0" @@ -624,9 +624,9 @@ punycode@^2.1.0: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@^6.9.4: - version "6.12.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.2.tgz#5443b587f3bf73ac68968de491e5b25bafe04478" - integrity sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg== + version "6.12.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754" + integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ== dependencies: side-channel "^1.0.6"