From: Tom Hughes Date: Wed, 1 Apr 2020 10:56:27 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/2577' X-Git-Tag: live~3288 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e47c11c644c3e73e8dcc95d3ee9c133e050360f0?hp=055a9760511f270e17ab200b6caa0a6301866328 Merge remote-tracking branch 'upstream/pull/2577' --- diff --git a/Gemfile.lock b/Gemfile.lock index cb4031730..3fff579d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -67,15 +67,15 @@ GEM zeitwerk (~> 2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - annotate (3.1.0) + annotate (3.1.1) activerecord (>= 3.2, < 7.0) rake (>= 10.4, < 14.0) ast (2.4.0) - autoprefixer-rails (9.7.4) + autoprefixer-rails (9.7.5) execjs aws-eventstream (1.0.3) - aws-partitions (1.285.0) - aws-sdk-core (3.91.1) + aws-partitions (1.291.0) + aws-sdk-core (3.92.0) aws-eventstream (~> 1.0, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -117,7 +117,7 @@ GEM cancancan (3.1.0) canonical-rails (0.2.8) rails (>= 4.1, < 6.1) - capybara (3.31.0) + capybara (3.32.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -152,7 +152,7 @@ GEM activerecord (>= 3.0, < 6.1) delayed_job (>= 3.0, < 5) docile (1.3.2) - dry-configurable (0.11.4) + dry-configurable (0.11.5) concurrent-ruby (~> 1.0) dry-core (~> 0.4, >= 0.4.7) dry-equalizer (~> 0.2) @@ -201,12 +201,12 @@ GEM erubi (1.9.0) execjs (2.7.0) exifr (1.3.6) - factory_bot (5.1.1) + factory_bot (5.1.2) activesupport (>= 4.2.0) factory_bot_rails (5.1.1) factory_bot (~> 5.1.0) railties (>= 4.2.0) - faraday (1.0.0) + faraday (1.0.1) multipart-post (>= 1.2, < 3) ffi (1.12.2) ffi-libarchive (1.0.0) @@ -322,7 +322,7 @@ GEM omniauth-oauth2 (~> 1.4) openstreetmap-deadlock_retry (1.3.0) parallel (1.19.1) - parser (2.7.0.4) + parser (2.7.0.5) ast (~> 2.4.0) pg (1.2.3) poltergeist (1.18.1) @@ -400,7 +400,8 @@ GEM unicode-display_width (>= 1.4.0, < 1.7) rubocop-performance (1.5.2) rubocop (>= 0.71.0) - rubocop-rails (2.4.2) + rubocop-rails (2.5.0) + activesupport rack (>= 1.1) rubocop (>= 0.72.0) ruby-openid (2.9.2) diff --git a/Vendorfile b/Vendorfile index 1d41ad348..36716646e 100644 --- a/Vendorfile +++ b/Vendorfile @@ -11,16 +11,16 @@ folder 'vendor/assets' do end folder 'leaflet' do - file 'leaflet.js', 'https://unpkg.com/leaflet@1.5.1/dist/leaflet-src.js' - file 'leaflet.css', 'https://unpkg.com/leaflet@1.5.1/dist/leaflet.css' + file 'leaflet.js', 'https://unpkg.com/leaflet@1.6.0/dist/leaflet-src.js' + file 'leaflet.css', 'https://unpkg.com/leaflet@1.6.0/dist/leaflet.css' [ 'layers.png', 'layers-2x.png', 'marker-icon.png', 'marker-icon-2x.png', 'marker-shadow.png' ].each do |image| - file "images/#{image}", "https://unpkg.com/leaflet@1.5.1/dist/images/#{image}" + file "images/#{image}", "https://unpkg.com/leaflet@1.6.0/dist/images/#{image}" end - from 'git://github.com/aratcliffe/Leaflet.contextmenu.git', :tag => 'v1.5.0' do + from 'git://github.com/aratcliffe/Leaflet.contextmenu.git', :tag => 'v1.5.1' do file 'leaflet.contextmenu.js', 'dist/leaflet.contextmenu.js' file 'leaflet.contextmenu.css', 'dist/leaflet.contextmenu.css' end @@ -31,7 +31,7 @@ folder 'vendor/assets' do folder 'img', 'src/img' end - from 'git://github.com/domoritz/leaflet-locatecontrol.git', :tag => 'v0.66.0' do + from 'git://github.com/domoritz/leaflet-locatecontrol.git', :tag => 'v0.71.0' do file 'leaflet.locate.js', 'src/L.Control.Locate.js' end @@ -39,7 +39,7 @@ folder 'vendor/assets' do file 'leaflet.osm.js', 'leaflet-osm.js' end - from 'git://github.com/jieter/Leaflet.encoded.git', :tag => '0.0.8' do + from 'git://github.com/jieter/Leaflet.encoded.git', :tag => '0.0.9' do file 'leaflet.polyline.js', 'Polyline.encoded.js' end end diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index e99a8f351..e455f297b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -18,7 +18,7 @@ //= require querystring /* - * Called as the user scrolls/zooms around to maniplate hrefs of the + * Called as the user scrolls/zooms around to manipulate hrefs of the * view tab and various other links */ window.updateLinks = function (loc, zoom, layers, object) { diff --git a/app/controllers/api/user_preferences_controller.rb b/app/controllers/api/user_preferences_controller.rb index 83e28bc4e..ddc5d7f43 100644 --- a/app/controllers/api/user_preferences_controller.rb +++ b/app/controllers/api/user_preferences_controller.rb @@ -25,9 +25,7 @@ module Api # update the entire set of preferences def update_all - old_preferences = current_user.preferences.each_with_object({}) do |preference, preferences| - preferences[preference.k] = preference - end + old_preferences = current_user.preferences.index_by(&:k) new_preferences = {} diff --git a/config/locales/ar.yml b/config/locales/ar.yml index ad0cf9802..21452efc6 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -79,6 +79,7 @@ ar: diary_comment: تعليق يومية diary_entry: مدخلة يومية friend: صديق + issue: قضية language: اللغة message: الرسالة node: عقدة @@ -95,6 +96,7 @@ ar: relation: علاقة relation_member: عضو علاقة relation_tag: وسم علاقة + report: تقرير session: جلسة trace: أثر tracepoint: نقطة أثر @@ -196,6 +198,12 @@ ar: description: تحكم عن بعد (JOSM أو Merkaartor) auth: providers: + none: لا شيء + openid: هوية مفتوحة + google: جوجل + facebook: فيسبوك + windowslive: ويندوز لايف + github: جيت هب wikipedia: ويكيبيديا api: notes: @@ -2591,6 +2599,20 @@ ar: out: بَعِّدْ locate: title: أظهر موقعي + metersPopup: + zero: أنت على بعد %{count} متر من هذه النقطة + one: أنت على بعد متر واحد من هذه النقطة + two: أنت على بعد %{count} متر من هذه النقطة + few: أنت على بعد %{count} متر من هذه النقطة + many: أنت على بعد %{count} متر من هذه النقطة + other: أنت على بعد %{count} متر من هذه النقطة + feetPopup: + zero: أنت على بعد %{count} قدم من هذه النقطة + one: أنت على بعد قدم واحد من هذه النقطة + two: أنت على بعد %{count} قدم من هذه النقطة + few: أنت على بعد %{count} قدم من هذه النقطة + many: أنت على بعد %{count} قدم من هذه النقطة + other: أنت على بعد %{count} قدم من هذه النقطة base: standard: قياسي cycle_map: خريطة الدراجات @@ -2606,6 +2628,11 @@ ar: copyright: © مساهمو خريطة الشارع المفتوحة donate_link_text: terms: مصطلحات الموقع و API + thunderforest: البلاط من Andy + Allan + hotosm: نمط البلاط بواسطة Humanitarian + OpenStreetMap Team المستضاف بواسطة OpenStreetMap + France site: edit_tooltip: عدّل الخريطة edit_disabled_tooltip: قم بالتكبير لتحرير الخريطة diff --git a/config/locales/ce.yml b/config/locales/ce.yml index 7acd2c80a..9d2c1caeb 100644 --- a/config/locales/ce.yml +++ b/config/locales/ce.yml @@ -740,7 +740,7 @@ ce: one: 1 хаам other: '%{count} хаам' resolve: Кечъян - ignore: Игнор ян + ignore: Тергал ца дан reopen: Юху схьаелла reports: new: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index a0021b096..18fd40ad6 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -34,6 +34,7 @@ # Author: Spotter # Author: StenSoft # Author: Tchoř +# Author: Tomasokol # Author: Urbanecm # Author: Veritaslibero # Author: Walter Klosse @@ -81,6 +82,7 @@ cs: diary_comment: Komentář k deníku diary_entry: Deníkový záznam friend: Přítel + issue: Problém language: Jazyk message: Zpráva node: Uzel @@ -155,6 +157,30 @@ cs: one: skoro před rokem other: skoro před %{count} roky half_a_minute: před půl minutou + less_than_x_seconds: + one: před méně než vteřinou + other: před méně než %{count} vteřinami + less_than_x_minutes: + one: před méně než minutou + other: před méně než %{count} minutami + over_x_years: + one: více než před rokem + other: před více než %{count} lety + x_seconds: + one: před vteřinou + other: před %{count} vteřinami + x_minutes: + one: před minutou + other: před %{count} minutami + x_days: + one: den nazpět + other: před %{count} dny + x_months: + one: před měsícem + other: před %{count} měsíci + x_years: + one: před rokem + other: před %{count} lety editor: default: Výchozí (aktuálně %{name}) potlatch: @@ -169,6 +195,14 @@ cs: remote: name: Dálkové ovládání description: Dálkové ovládání (JOSM nebo Merkaartor) + auth: + providers: + openid: OpenID + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipedie api: notes: comment: @@ -305,13 +339,12 @@ cs: commented_by_anonymous: %{when} okomentoval anonym closed_by: VyřeÅ¡eno od %{user} %{when} - closed_by_anonymous: VyřeÅ¡il před %{when} - anonym - reopened_by: Reaktivoval před %{when} uživatel + closed_by_anonymous: VyřeÅ¡il anonym %{when} + reopened_by: Znovu aktivoval %{when} uživatel %{user} - reopened_by_anonymous: Reaktivoval před %{when} + reopened_by_anonymous: Znovu aktivoval %{when} anonym - hidden_by: Skryl před %{when} uživatel %{user} + hidden_by: Skryl %{when} uživatel %{user} report: Nahlásit tuto poznámku query: title: Průzkum prvků @@ -1294,10 +1327,10 @@ cs: změn' subject_other: '[OpenStreetMap] %{commenter} okomentoval jednu ze sad změn, která vás zajímá' - your_changeset: '%{commenter} zanechal komentář na jedné z vaÅ¡ich sad změn, - vytvořené %{time}.' - commented_changeset: '%{commenter} zanechal komentář na sadě změn, kterou - %{time} vytvořil %{changeset_author} a kterou sledujete.' + your_changeset: '%{commenter} zanechal %{time} komentář na jedné z vaÅ¡ich + sad změn.' + commented_changeset: '%{commenter} zanechal %{time} komentář na Vámi sledované + sadě změn, kterou vytvořil %{changeset_author}.' partial_changeset_with_comment: s komentářem „%{changeset_comment}“ partial_changeset_without_comment: bez komentáře details: Více informací o této sadě změn lze nalézt na %{url}. @@ -1880,7 +1913,9 @@ cs: newer: Novější stopy trace: pending: ZPRACOVÁVÁ SE - count_points: '%{count} bodů' + count_points: + one: 1 bod + other: '%{count} bodů' more: více trace_details: Zobrazit podrobnosti stopy view_map: Zobrazit mapu @@ -1997,6 +2032,7 @@ cs: no_apps_html: Máte nějakou aplikaci používající standard %{oauth}, která by s námi měla spolupracovat? Aplikaci je potřeba nejdříve zaregistrovat, až poté k nám bude moci posílat OAuth požadavky. + oauth: OAuth registered_apps: 'Máte zaregistrovány následující klientské aplikace:' register_new: Zaregistrovat aplikaci form: @@ -2460,6 +2496,18 @@ cs: hours: one: 1 hodina other: '%{count} hodiny' + days: + one: 1 den + other: '%{count} dnů' + weeks: + one: 1 týden + other: '%{count} týdnů' + months: + one: 1 měsíc + other: '%{count} měsíců' + years: + one: 1 rok + other: '%{count} let' blocks_on: title: Zablokování uživatele %{name} heading_html: Seznam zablokování uživatele %{name} @@ -2539,6 +2587,12 @@ cs: out: Oddálit locate: title: Ukázat moji polohu + metersPopup: + one: Od tohoto bodu jste vzdáleni metr + other: Od tohoto bodu jste vzdáleni %{count} metrů + feetPopup: + one: Od tohoto bodu jste vzdáleni jednu stopu + other: Od tohoto bodu jste vzdáleni %{count} stop base: standard: Standardní cycle_map: Cyklomapa diff --git a/config/locales/de.yml b/config/locales/de.yml index 3e1b7049d..7e632b571 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -221,6 +221,15 @@ de: remote: name: Fernsteuerung description: externem Editor (JOSM oder Merkaartor) + auth: + providers: + none: Keine + openid: OpenID + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipedia api: notes: comment: diff --git a/config/locales/fit.yml b/config/locales/fit.yml index fe714a162..b9df62bb1 100644 --- a/config/locales/fit.yml +++ b/config/locales/fit.yml @@ -44,6 +44,7 @@ fit: diary_comment: Päiväkirjakommentti diary_entry: Päiväkirjamerkintä friend: Ystävä + issue: Ilmiannot language: Kieli message: Viesti node: Piste @@ -156,6 +157,9 @@ fit: remote: name: Kauko-ohjaus description: Kauko-ohjaus (JOSM eli Merkaartor) + auth: + providers: + wikipedia: Wikipeetia api: notes: comment: @@ -444,7 +448,28 @@ fit: gondola: Gondolihissi platter: Hiihtohissi pylon: Pylväs + station: Ilmarata-asema + t-bar: Ankkurihissi + aeroway: + aerodrome: Lentokenttä + airstrip: Kiitorata + apron: Asemataso + gate: Portti + hangar: Hangaari + helipad: Helikopterikenttä + holding_position: Odotuspaikka + parking_position: Parkkialue + runway: Kiitorata + taxiway: Rullaustie + terminal: Terminaali amenity: + animal_shelter: Eläinsuoja + arts_centre: Taidekeskus + atm: Pankkoauttomaatti + bank: Pankko + bar: Baari + bbq: Grillauskatos + bench: Penkki cafe: Kahvila hospital: Siukhuusi library: Pipluteekki @@ -501,7 +526,7 @@ fit: last_updated_time_user_html: käyttäjä %{user} %{time} link_to_reports: Näytä ilmiannot reports_count: - one: 1 ilmoitus + one: 1 ilmotus other: '%{count} ilmiantoa' states: open: Avvaa @@ -529,11 +554,11 @@ fit: no_other_issues: Ei muita tähän käyttäjään kohistuvia ilmiantoja. comments_on_this_issue: Tapauksen kommentit resolve: - resolved: Tapaus on markeerattu ratkaistuksi + resolved: Tapaus oon markeerattu ratkaistuksi ignore: - ignored: Tapaus on markeerattu aiheettomaksi + ignored: Tapaus oon markeerattu aiheettomaksi reopen: - reopened: Tapaus on markeerattu käsittelyssä olevaksi + reopened: Tapaus oon markeerattu käsittelyssä olevaksi comments: reassign_param: Haluatko määrittää tapauksen tilan uuesti? reports: @@ -771,8 +796,8 @@ fit: href="https://opendatacommons.org/licenses/odbl/">Open Data Commons Open Database -lisensillä (ODbL). intro_2_html: "OpenStreetMapin karttoja ja tietoja voi kopioida, levittää, välittää ja mukauttaa, \nkunhan OpenStreetMap ja sen tekijät mainitaan. - Jos karttoja tai tietoja muutethaan tai kehitethään, niitä saa levittää - vain samalla lisensillä.\nLakitekstissä + Jos karttoja tai tietoja muutethaan tai kehitethään, niitä saa levithää + vain samalla lisensilä.\nLakitekstissä mainitaan levittäjän oikeudet ja velvollisuudet." intro_3_html: |- Kartta-aineisto ja dokumentaatio oon lisensoitu Creative @@ -781,11 +806,11 @@ fit: credit_1_html: OpenStreetMapin sisältöä levitettäessä oon mainittava teksti "© OpenStreetMapin tekijät" tai sen engelskankielinen vastine "© OpenStreetMap contributors". - credit_2_html: "Levittäjän tulee tehdä selväksi, että aineisto on saatavilla - Open Database -lisenssillä\nja kartta-aineisto CC-BY-SA-lisenssillä. Tämä - voidaan tehdä sijoittamalla sivulle linkki\ntälle - tekijänoikeussivulle. \nJos linkkien käyttö ei ole mahdollista (esimerkiksi - paperille tulostettu aineisto),\nsuosittelemme ohjaamaan lukijat osoitteisiin + credit_2_html: "Levittäjän tulee tehdä selväksi, ette aineisto oon saatavilla + Open Database -lisensillä\nja kartta-aineisto CC-BY-SA-lisensillä. Tämä + voidaan tehdä sijoittamalla sivule länkki\ntälle + tekijänoikeussivule. \nJos länkkien käyttö ei ole mahollista (esimerkiksi + paperille printattu aineisto),\nsuosittelemme ohjaamaan lukijat atresseihin www.openstreetmap.org, opendatacommons.org ja tarvittaessa myös creativecommons.org." credit_3_html: 'Sivustolle upotetun interaktiivisen karttaikkunan tulee sisältää tekijän nimi kartan alaosassa:' @@ -1016,7 +1041,7 @@ fit: button: Lissää ystäväksi success: '%{name} oon nyt sinun ystävä!' failed: Käyttäjää %{name} ei voitu lisätä sinun ystävälistaan. - already_a_friend: '%{name} on jo sinun ystävä.' + already_a_friend: '%{name} oon jo sinun ystävä.' remove_friend: heading: Poistetaanko ystävä %{user}? button: Ota poies ystävä diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 5a73bbd64..59e41138b 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -5,6 +5,7 @@ # Author: Alem # Author: Amsideg # Author: Belkacem77 +# Author: K Messaoudi # Author: Marzuquccen # Author: Mastanabal # Author: Mhenni @@ -123,12 +124,20 @@ kab: remote: name: Amaẓrag azÉ£aray description: Amaẓrag azÉ£aray (JOSM neÉ£ Merkaartor) + auth: + providers: + none: Ulac + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipidya api: notes: comment: opened_at_html: Yattwarna %{when} opened_at_by_html: Yettwarna %{when} sÉ£ur %{user} - commented_at_html: Yettwalqem %{when} aya + commented_at_html: Yettwalqem %{when} commented_at_by_html: Yettwalqem %{when} aya sÉ£ur %{user} closed_at_html: Yefra %{when} aya closed_at_by_html: Yefra %{when} aya sÉ£ur %{user} @@ -136,6 +145,8 @@ kab: reopened_at_by_html: Yettwarmed %{when} aya sÉ£ur %{user} rss: title: Tizmilin n OpenStreetMap + description_area: Tabdert n tezmilin yettwamlen, yettwawennten neÉ£ imedlen + deg temnaḍt-ik[(%{min_lat}|%{min_lon})--(%{max_lat}|%{max_lon})] opened: tazmilt tamaynut (qrib ar %{place}) commented: awennit amawut (qrib ar %{place}) closed: tazmilt temdel (qrib ar %{place}) @@ -247,7 +258,9 @@ kab: tag: Aglam n imyerr %{key}=%{value} É£ef uwiki wikidata_link: Aferdis %{page} di Wikidata wikipedia_link: Amagrad %{page}di Wikipedia + wikimedia_commons_link: Aferdis %{page} deg Wikimedia Commons telephone_link: Siwel ar %{phone_number} + colour_preview: Taskant n yini %{colour_value} note: title: 'Tazmilt: %{id}' new_note: Tazmilt tamaynut @@ -308,9 +321,14 @@ kab: comment: comment: Awennit amaynut deg ugraw n usnifel uá¹­á¹­ %{changeset_id} par %{author} commented_at_by_html: Yettwalqem %{when} aya sÉ£ur %{user} + comments: + comment: Awennit amaynut deg ugraw n usnifel wis %{changeset_id} sÉ£ur %{author} index: title_all: Asqerdec deg ugraw n usnifel OpenStreetMap - title_particular: Asqerdec deg ugraw n usnifel OpenStreetMap uá¹­á¹­ %{changeset_id} + title_particular: Asqerdec deg ugraw n usnifel OpenStreetMap wis %{changeset_id} + timeout: + sorry: Suref-aÉ£, tabdart n iygrawen n usnifel i d-tessutreḍ tettawi ddeqs n + wakud akken ad d-tali. diary_entries: new: title: Anekcam amaynut n uÉ£mis @@ -358,6 +376,7 @@ kab: other: '%{count} n iwenniten' edit_link: Ẓreg anekcam-agi hide_link: Ffer anekcam-agi + unhide_link: Sken anekcum-a confirm: Sentem report: Sillef anekcum agi diary_comment: @@ -365,7 +384,7 @@ kab: hide_link: Ffer awennit-agi unhide_link: Sken-d awennit-a confirm: Sentem - report: Sillef awennit agi + report: Mel awennit-a location: location: 'Adig:' view: Sken @@ -543,6 +562,7 @@ kab: landing_site: Annar n trusi n utrab phone: TiliÉ£ri n utrab water_tank: Tanutfi n waman utrib + "yes": Tuɛjilin highway: abandoned: Abrid agejdan yettwattun bridleway: AÉ£aras n yimnayen @@ -560,6 +580,7 @@ kab: primary_link: Abrid agejdan proposed: Asenfaṛ n ubrid raceway: Amnenniḍ + residential: Abrid n tnezduÉ£in rest_area: Amḍiq n ustaεfu road: Abrid secondary: Abrid asnawan diff --git a/config/locales/ko.yml b/config/locales/ko.yml index fbaa3e9c4..cbd957bbf 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -173,6 +173,7 @@ ko: openid: OpenID google: 구글 facebook: 페이스북 + windowslive: Windows Live github: 깃허브 wikipedia: 위키백과 api: @@ -296,7 +297,9 @@ ko: tag: '%{key}=%{value} 태그에 대한 위키 설명 문서' wikidata_link: 위키데이터 %{page} 항목 wikipedia_link: 위키백과 %{page} 문서 + wikimedia_commons_link: 위키미디어 공용에서의 %{page} 항목 telephone_link: '%{phone_number}(으)로 전화 걸기' + colour_preview: '%{colour_value}색 미리 보기' note: title: '참고: %{id}' new_note: 새로운 참고 @@ -1089,6 +1092,7 @@ ko: reopen: reopened: 이슈 상태가 '열림'으로 설정되었습니다 comments: + comment_from_html: '%{comment_created_at}에 %{user_link}님의 댓글' reassign_param: 이슈를 다시 할당하시겠습니까? reports: reported_by_html: '%{updated_at}에 %{user}님이 %{category} 분류로 보고함' @@ -1269,9 +1273,9 @@ ko: commented: subject_own: '[오픈스트리트맵] %{commenter}님이 내 바뀜집합에 덧글을 남겼습니다' subject_other: '[오픈스트리트맵] %{commenter}님이 내가 관심을 가진 바뀜집합에 뎟글을 남겼습니다' - your_changeset: '%{commenter}님이 내가 %{time}에 만든 바뀜집합에 덧글을 달았습니다' + your_changeset: '%{commenter}님이 %{time}에 내가 바뀜집합에 댓글을 달았습니다' commented_changeset: '%{commenter}님이 %{time}에 %{changeset_author}님이 만든 내가 - 주시중인 지도 바뀜집합에 덧글을 남겼습니다' + 주시중인 바뀜집합에 댓글을 남겼습니다' partial_changeset_with_comment: ‘%{changeset_comment}’ 덧글로 partial_changeset_without_comment: 의견 없이 details: 바뀜집합에 대한 자세한 사항은 %{url}에서 찾을 수 있습니다. @@ -1368,13 +1372,11 @@ ko: ê·¸ 결과물을 배포할 수 있습니다. 자세한 내용은 저작권 및 라이선스 문서에서 확인하세요.' legal_title: 법률 - legal_1_html: |- - 이 사이트 및 많은 다른 관련된 부문은 공동체를 대표하여 OpenStreetMap 재단에서 정식적으로 운영합니다. OpenStreetMap 재단이 운영하는 부문의 이용은 이용 약관, - 허용할 수 있는 이용 정책 및 개인정보 정책 ì¡°ê±´ 하에서 이루어집니다. -
- 만일 이용허락 또는 저작권 및 다른 법률적인 질문이 있다면, OpenStreetMap 재단에 연락하십시오. -
- OpenStreetMap, 돋보기 로고와 State of the Map은 OpenStreetMap 재단의 등록상표입니다. + legal_1_html: 이 사이트 및 많은 다른 관련된 부문은 공동체를 대표하여 OpenStreetMap + 재단에서 정식적으로 운영합니다. OpenStreetMap 재단이 운영하는 부문의 이용은 이용 + 약관, 허용할 + 수 있는 이용 정책 및 개인정보처리방침 + ì¡°ê±´ 하에서 이루어집니다. partners_title: 파트너 copyright: foreign: @@ -1503,7 +1505,7 @@ ko: shortlink: 짧은링크 createnote: 참고 추가 license: - copyright: 저작권 OpenStreetMapê³¼ 기여자, 오픈 라이선스로 배포 + copyright: 저작권 OpenStreetMap 및 기여자, 오픈 라이선스로 배포 remote_failed: 편집을 실패했습니다 - JOSM이나 Merkaartor를 불러왔고 원격 제어 설정이 활성화되어 있는지 확인하세요 edit: not_public: 공개할 편집을 설정하지 않았습니다. @@ -1839,7 +1841,9 @@ ko: newer: 다음 궤적 trace: pending: 보류 중 - count_points: 점 %{count}개 + count_points: + one: 점 1개 + other: 점 %{count}개 more: 더 보기 trace_details: 궤적 상세보기 view_map: 지도 보기 @@ -1924,7 +1928,7 @@ ko: edit: title: 내 애플리케이션 편집 show: - title: '%{app_name}에 데한 OAuth 자세한 정보' + title: '%{app_name}에 대한 OAuth 자세한 정보' key: '컨슈머 키:' secret: '컨슈머 비밀 값:' url: '요청 토큰 URL:' @@ -2064,8 +2068,7 @@ ko: email address: '이메일 주소:' confirm email address: '이메일 주소 확인:' not_displayed_publicly_html: 당신의 주소는 공개되지 않습니다. 자세한 내용은 개인정보 정책을 - 참조하시기 바랍니다. + title="이메일 주소 절을 포함한 OSMF 개인정보처리방침">개인정보처리방침을 참조하시기 바랍니다. display name: '표시 이름:' display name description: 공개적으로 표시되는 사용자 이름입니다. 나중에 환경 설정에서 바꿀 수 있습니다. external auth: '제3자 인증:' @@ -2481,7 +2484,7 @@ ko: gps: 공개 GPS 궤적 overlays: 지도 문제를 해결하기 위해 오버레이를 활성화 title: 레이어 - copyright: © 오픈스트리트맵 기여자 + copyright: © OpenStreetMap 기여자 donate_link_text: terms: 웹 사이트 및 API 약관 site: @@ -2504,7 +2507,7 @@ ko: new: intro: 실수했거나 없는 무언가를 발견했나요? 다른 매퍼에게 알려주어 ê³ ì¹  수 있게 해주세요. 마커를 올바른 위치로 이동하고, 참고를 남겨 문제를 설명해주세요. - advice: 노트는 공개되어 지도 업데이트에 쓰일 수 있으므로 개인 정보 또는 저작권이 있는 지도나 디렉터리 리스팅의 정보를 입력하지 + advice: 노트는 공개되어 지도 업데이트에 쓰일 수 있으므로 개인정보 또는 저작권이 있는 지도나 디렉터리 리스팅의 정보를 입력하지 마십시오. add: 참고 추가 show: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 00f64c6a3..f7c9a4ed4 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -171,6 +171,9 @@ lt: remote: name: nuotoliniu valdymu description: nuotolinį valdymą (JOSM arba Merkaartor) + auth: + providers: + google: Google api: notes: comment: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 840be976d..961892823 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -228,6 +228,15 @@ pl: remote: name: Zewnętrzny edytor description: zewnętrznym edytorze (JOSM lub Merkaartor) + auth: + providers: + none: Brak + openid: OpenID + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipedia api: notes: comment: @@ -524,7 +533,7 @@ pl: apron: Płyta postojowa gate: Bramka hangar: Hangar - helipad: Helipad + helipad: Lądowisko dla helikopterów holding_position: Punkt oczekiwania parking_position: Miejsce parkingowe runway: Pas startowy @@ -570,7 +579,7 @@ pl: food_court: Współdzielone miejsce do spożywania posiłków fountain: Fontanna fuel: Stacja paliw - gambling: Hazard + gambling: Salon pachinko/bingo grave_yard: Cmentarz przykościelny grit_bin: Pojemnik na piasek hospital: Szpital @@ -653,10 +662,10 @@ pl: defibrillator: Defibrylator landing_site: Miejsce awaryjnego lądowania phone: Telefon alarmowy - water_tank: Awaryjny Zbiornik Wody - "yes": Awaryjny + water_tank: Awaryjny zbiornik wody + "yes": Ratownictwo highway: - abandoned: Porzucona droga + abandoned: Zaniedbana droga bridleway: Droga dla koni bus_guideway: Droga dla autobusów bus_stop: Przystanek autobusowy @@ -738,7 +747,7 @@ pl: brownfield: Grunty poprzemysłowe cemetery: Cmentarz commercial: Obszar handlowo-usługowy - conservation: Ochrona środowiska + conservation: Rezerwat construction: Teren budowy farm: Farma farmland: Grunty rolne @@ -759,7 +768,7 @@ pl: reservoir: Sztuczny zbiornik wodny reservoir_watershed: Zbiornik wodny residential: Zabudowa mieszkalna - retail: Handel detaliczny + retail: Teren handlu detalicznego road: Obszar drogowy village_green: Nawsie vineyard: Winnica @@ -826,14 +835,14 @@ pl: water_tower: Wieża ciśnień water_well: Studnia water_works: Wodociągi - windmill: Młyn wiatrowy + windmill: Wiatrak works: Fabryka "yes": Konstrukcja military: airfield: Lotnisko wojskowe barracks: Koszary bunker: Bunkier - "yes": Wojskowy + "yes": Obiekt wojskowy mountain_pass: "yes": Przełęcz natural: @@ -863,7 +872,7 @@ pl: ridge: Grzbiet rock: Skała saddle: Przełęcz - sand: Piasek + sand: Piaski scree: Piarg scrub: Zarośla spring: Źródło wodne @@ -888,7 +897,7 @@ pl: insurance: Biuro ubezpieczeń it: Biuro firmy informatycznej lawyer: Prawnik - ngo: Biuro organizacji pozarządowych + ngo: Biuro organizacji pozarządowej telecommunication: Urząd telekomunikacji travel_agent: Biuro podróży "yes": Biuro @@ -897,7 +906,7 @@ pl: city: Miasto city_block: Kwartał country: Kraj - county: Powiat + county: Hrabstwo farm: Farma hamlet: Osada house: Dom @@ -928,12 +937,12 @@ pl: halt: Przystanek kolejowy junction: Węzeł kolejowy level_crossing: Przejazd kolejowy - light_rail: Lekka kolej - miniature: Mini kolej - monorail: Kolej jednoszynowa - narrow_gauge: Kolej wąskotorowa + light_rail: Tor kolei miejskiej + miniature: Tor minikolejki + monorail: Tor kolei jednoszynowej + narrow_gauge: Tor kolei wąskotorowej platform: Peron - preserved: Kolej zabytkowa + preserved: Tor kolei zabytkowej proposed: Planowana linia kolejowa spur: Bocznica kolejowa station: Stacja kolejowa @@ -941,7 +950,7 @@ pl: subway: Metro subway_entrance: Wejście na stację metra switch: Zwrotnica - tram: Tory tramwajowe + tram: Tor tramwajowy tram_stop: Przystanek tramwajowy shop: alcohol: Sklep monopolowy @@ -957,7 +966,7 @@ pl: butcher: Sklep mięsny car: Sklep samochodowy car_parts: Sklep z częściami samochodowymi - car_repair: Naprawa samochodów + car_repair: Warsztat samochodowy carpet: Sklep z dywanami charity: Sklep charytatywny chemist: Drogeria @@ -983,12 +992,12 @@ pl: furniture: Sklep meblowy gallery: Galeria garden_centre: Centrum ogrodnicze - general: Sklep ogólny + general: Sklep wielobranżowy gift: Sklep z pamiątkami greengrocer: Warzywniak grocery: Sklep spożywczy hairdresser: Fryzjer - hardware: Sklep ze sprzętem + hardware: Sklep z narzędziami hifi: Sklep ze sprzętem hi-fi houseware: Sklep z artykułami gospodarstwa domowego interior_decoration: Sklep z dekoracją wnętrz @@ -1003,7 +1012,7 @@ pl: mobile_phone: Sklep z telefonami komórkowymi motorcycle: Sklep z motocyklami music: Sklep muzyczny - newsagent: Kiosk + newsagent: Sklep z prasą optician: Optyk organic: Sklep z produktami organicznymi outdoor: Sklep turystyczny @@ -1012,8 +1021,8 @@ pl: pet: Sklep zoologiczny pharmacy: Apteka photo: Sklep fotograficzny - seafood: Owoce morza - second_hand: Lumpeks + seafood: Sklep z owocami morza + second_hand: Sklep z rzeczami używanymi shoes: Sklep obuwniczy sports: Sklep sportowy stationery: Sklep papierniczy @@ -1063,8 +1072,8 @@ pl: ditch: Rów dock: Basen portowy drain: Rów odpływowy - lock: Zastawka - lock_gate: Śluza + lock: Śluza + lock_gate: Wrota śluzy mooring: Kotwicowisko rapids: Katarakty river: Rzeka @@ -1072,7 +1081,7 @@ pl: wadi: Starorzecze waterfall: Wodospad weir: Jaz - "yes": Szlak wodny + "yes": Ciek admin_levels: level2: Granica kraju level4: Granica @@ -1768,10 +1777,10 @@ pl: cycleway_regional: Droga rowerowa znaczenia regionalnego cycleway_local: Droga rowerowa znaczenia lokalnego footway: Droga dla pieszych - rail: Tory kolejowe + rail: Tor kolejowy subway: Metro tram: - - Lekka kolej + - Kolej miejska - tramwaj cable: - Kolej linowa @@ -2657,6 +2666,16 @@ pl: out: Oddal locate: title: Wyświetl dla mojego aktualnego położenia + metersPopup: + one: Jesteś w promieniu 1 metra od tego punktu + few: Jesteś w promieniu %{count} metrów od tego punktu + many: Jesteś w promieniu %{count} metrów od tego punktu + other: Jesteś w promieniu %{count} metra od tego punktu + feetPopup: + one: Jesteś w promieniu 1 stopy od tego punktu + few: Jesteś w promieniu %{count} stóp od tego punktu + many: Jesteś w promieniu %{count} stóp od tego punktu + other: Jesteś w promieniu %{count} stopy od tego punktu base: standard: Podstawowa cycle_map: Rowerowa @@ -2672,6 +2691,11 @@ pl: copyright: © autorzy OpenStreetMap donate_link_text: terms: Warunki użytkowania + thunderforest: Kafelki dzięki uprzejmości Andy'ego + Allana + hotosm: 'Styl kafelków: Humanitarian + OpenStreetMap Team. Hosting: OpenStreetMap + France' site: edit_tooltip: Edytuje mapę edit_disabled_tooltip: Przybliż mapę, aby ją edytować diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 25158b2fe..16c21588e 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -89,6 +89,7 @@ pt-BR: diary_comment: Comentário do diário diary_entry: Publicação do diário friend: Amigo + issue: Problema language: Idioma message: Mensagem node: Nó @@ -105,6 +106,7 @@ pt-BR: relation: Relação relation_member: Membros da relação relation_tag: Etiqueta de relação + report: Relatório session: Sessão trace: Trilha tracepoint: Ponto de trilha @@ -204,6 +206,15 @@ pt-BR: remote: name: Controle Rrmoto description: Controle remoto (JOSM ou Merkaartor) + auth: + providers: + none: Nenhum + openid: OpenID + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipédia api: notes: comment: @@ -2642,6 +2653,12 @@ pt-BR: out: Afastar locate: title: Exibir Minha Localização + metersPopup: + one: Você está dentro de um metro deste ponto + other: Você está dentro %{count} metros deste ponto + feetPopup: + one: Você está dentro de um pé deste ponto + other: Você está dentro %{count} pés deste ponto base: standard: Padrão cycle_map: Ciclístico @@ -2657,6 +2674,11 @@ pt-BR: copyright: © contribuidores do OpenStreetMap donate_link_text: terms: Termos do site e da API + thunderforest: Mosaicos cortesia de Andy + Allan + hotosm: Estilo de ladrilhos por Equipe + de Humanitarian OpenStreetMap hospedado por OpenStreetMap França site: edit_tooltip: Edite o mapa edit_disabled_tooltip: Aproxime para editar o mapa diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 7c2f014a8..c9b473c0f 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1381,9 +1381,9 @@ pt-PT: em contacto com algumas %{people_mapping_nearby_link}? people_mapping_nearby: pessoas que mapeiam perto de ti reply: - wrong_user: Está autenticado como o utilizador `%{user}' mas a mensagem que - pediu para responder não foi enviada para esse utilizador. Por favor entre - na conta de utilizador correta para responder. + wrong_user: Estás autenticado como `%{user}', mas a mensagem a que pretendes + responder não foi enviada para esse utilizador. Por favor, entra na conta + correta para poderes responder. show: title: Ler mensagem from: De @@ -1394,9 +1394,9 @@ pt-PT: destroy_button: Eliminar back: Voltar to: Para - wrong_user: Está autenticado com a conta `%{user}', mas a mensagem que pediu - para ler não foi enviada por, ou para, essa conta de utilizador. Por favor, - entre na conta de utilizador correta para ler a mensagem. + wrong_user: Estás autenticado como `%{user}', mas a mensagem que pediste para + ler não foi enviada por ou para esse utilizador. Por favor, entra na conta + correta para poderes ler a mensagem. sent_message_summary: destroy_button: Eliminar mark: @@ -1408,73 +1408,71 @@ pt-PT: about: next: Seguinte copyright_html: ©Colaboradores
do OpenStreetMap - used_by_html: O %{name} fornece dados a milhares de sítios na internet, aplicações + used_by_html: O %{name} fornece dados a milhares de sítios na Internet, aplicações de telemóveis e outros dispositivos - lede_text: O OpenStreetMap é desenvolvido por uma comunidade voluntária de mapeadores + lede_text: O OpenStreetMap é desenvolvido por uma comunidade de mapeadores voluntários que contribuem e mantêm atualizados os dados sobre estradas, trilhos, cafés, estações ferroviárias e muito mais por todo o mundo. local_knowledge_title: Conhecimento Local local_knowledge_html: O OpenStreetMap valoriza o conhecimento local. Os colaboradores - utilizam fotografias aéreas, dispositivos GPS, e mapas do terreno para verificar + utilizam fotografias aéreas, dispositivos de GPS e mapas do terreno para verificar que a informação no OpenStreetMap é rigorosa e atualizada. - community_driven_title: Dirigido pela Comunidade + community_driven_title: Desenvolvido pela Comunidade community_driven_html: |- - A comunidade do OpenStreetMap é diversa, apaixonada, e aumenta diariamente. - Entre os nossos colaboradores encontra-se cartógrafos entusiastas, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários a mapear áreas afetadas por grandes desastres, e muitos mais. - Para saber mais sobre a nossa comunidade, veja: + A comunidade do OpenStreetMap é diversa, apaixonada e cresce diariamente. + Entre os nossos colaboradores, encontram-se cartógrafos entusiásticos, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários que mapeiam áreas afetadas por grandes desastre, e muitos mais. + Para saber mais sobre a nossa comunidade, consulte: Blogue do OpenStreetMap, diários dos utilizadores, blogues da comunidade, e o sítio da Fundação OSM. open_data_title: Dados Abertos open_data_html: |- - O OpenStreetMap é constituído por dados abertos: qualquer - pessoa tem a liberdade de usar os dados para qualquer fim desde - credite a autoria do OpenStreetMap e os seus colaboradores. - Se você alterar os dados ou criar algo com os dados, pode distribuir - o produto resultante apenas sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. + O OpenStreetMap é constituído por dados abertos: qualquer pessoa tem a liberdade de usar os dados para qualquer fim desde que dê os devidos créditos ao OpenStreetMap e aos seus colaboradores. + Se alterar os dados ou criar algo com base nesses dados, só pode distribuir o produto resultante sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. legal_title: Termos legais - legal_1_html: "Este ''site'' e muitos outros serviços relacionados são formalmente - geridos pela \nFundação OpenStreetMap - (OSMF) \nem nome da comunidade. A utilização de todos os serviços operados - pela OSMF estão sujeitos\naos nossos Termos - de Utilização, Políticas - de Utilização Aceitáveis e a nossa Política - de Privacidade" + legal_1_html: Este sítio e muitos outros serviços relacionados são formalmente + geridos pela Fundação OpenStreetMap + (OSMF) em nome da comunidade. A utilização de todos os serviços operados pela + OSMF estão sujeitos aos nossos Termos + de Utilização, Políticas + de Utilização Aceitáveis e à nossa Política + de Privacidade. legal_2_html: |- - Se tiver perguntas sobre licenciamento, direitos de autor ou outras questões legais contacte a OSMF, por favor. + Se tiver perguntas sobre o licenciamento, direitos de autor ou outras questões legais, por favor, contacte a OSMF.
O OpenStreetMap, o logótipo da lupa e o 'Estado do Mapa' são marcas registadas da OSMF. partners_title: Parceiros copyright: foreign: title: Sobre esta tradução - html: Caso haja um conflito entre esta página traduzida e %{english_original_link}, + html: Se houver um conflito entre esta página traduzida e %{english_original_link}, a página em inglês tem prevalência english_link: o original em inglês native: title: Sobre esta página - html: Está a ver a versão em Inglês da página de direitos de autor. Pode voltar + html: Está a ver a versão em inglês da página de direitos de autor. Pode voltar à %{native_link} desta página ou, se preferir, %{mapping_link}. - native_link: Versão em português + native_link: Versão em português europeu mapping_link: começar a mapear legal_babble: - title_html: Licença e Direitos de autor + title_html: Licença e Direitos de Autor intro_1_html: |- O OpenStreetMap® é disponibilizado em dados abertos, sob a licença Open Data Commons Open Database License (ODbL) pela Fundação OpenStreetMap (OSMF). intro_2_html: Tem o direito de copiar, distribuir, transmitir e adaptar os - nossos dados, desde que atribua a autoria do OpenStreetMap e os seus contribuidores. - Se alterar ou adicionar conteúdo dos nossos dados, pode distribuir o resultado - apenas com a mesma licença. O texto + nossos dados, desde que atribua os devidos créditos ao OpenStreetMap e aos + seus contribuidores. Se alterar ou adicionar conteúdo dos nossos dados, + pode distribuir o resultado apenas com a mesma licença. O texto legal completo explica os seus direitos e responsabilidades. intro_3_html: A cartografia nas nossas telas de mapas (imagens dos mapas) e a nossa documentação são disponibilizadas sob a licença Creative Commons - Atribuição-CompartilhaIgual 2.0 (CC BY-SA). credit_title_html: Como creditar o OpenStreetMap - credit_1_html: É necessário indicar “© contribuidores do OpenStreetMap” - ou caso seja mais adequado em inglês “© OpenStreetMap contributors”. + credit_1_html: Pedimos que use os créditos “© contribuidores do + OpenStreetMap” ou, se for mais adequado, em inglês “© OpenStreetMap + contributors”. credit_2_html: Também tem de indicar claramente que os dados estão disponíveis sob a Open Database License (ODbL), e caso utilize as telas de mapas (imagens dos mapas), que a cartografia é disponibilizada sob a licença CC-BY-SA. diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 4d0f28d34..ff6e590b7 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -36,6 +36,7 @@ # Author: Sendelbach # Author: Sertion # Author: Shirayuki +# Author: Technic2 # Author: The real emj # Author: Tor.klingberg # Author: Ufred @@ -84,6 +85,7 @@ sv: diary_comment: Dagbokskommentar diary_entry: Dagboksinlägg friend: Vän + issue: Problem language: SprÃ¥k message: Meddelande node: Nod @@ -100,6 +102,7 @@ sv: relation: Relation relation_member: Relationsmedlem relation_tag: Relationstagg + report: Rapportera session: Session trace: SpÃ¥r tracepoint: SpÃ¥rpunkt @@ -198,6 +201,15 @@ sv: remote: name: Fjärrstyrning description: Fjärrstyrning (JOSM eller Merkaartor) + auth: + providers: + none: Ingen + openid: OpenID + google: Google + facebook: Facebook + windowslive: Windows Live + github: GitHub + wikipedia: Wikipedia api: notes: comment: @@ -2627,6 +2639,12 @@ sv: out: Zooma ut locate: title: Visa min position + metersPopup: + one: Du är inom en meter av denna punkt + other: Du är inom %{count} meter av denna punkt + feetPopup: + one: Du är inom en fot av denna punkt + other: Du är inom %{count} fot av denna punkt base: standard: Standard cycle_map: Cykelkarta @@ -2642,6 +2660,11 @@ sv: copyright: © OpenStreetMaps bidragsgivare donate_link_text: terms: Hemsidan och API-villkor + thunderforest: Rutor av Andy + Allan + hotosm: Rututseende av Humanitarian + OpenStreetMap Team som förvaltas av OpenStreetMap + Frankrike site: edit_tooltip: Redigera kartan edit_disabled_tooltip: Zooma in för att redigera kartan diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 3573b7cfe..9297d1f91 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1,6 +1,7 @@ # Messages for Simplified Chinese (中文(简体)‎) # Exported from translatewiki.net # Export driver: phpyaml +# Author: 500000000006城 # Author: A Chinese Wikipedian # Author: A Retired User # Author: Abijeet Patro @@ -92,6 +93,7 @@ zh-CN: diary_comment: 日记评论 diary_entry: 日记条目 friend: 朋友 + issue: 问题 language: 语言 message: 消息 node: 节点 @@ -211,6 +213,12 @@ zh-CN: auth: providers: none: 无 + openid: 开放式身份验证 + google: 谷歌 + facebook: 脸书 + windowslive: Windows Live + github: GitHub + wikipedia: 维基百科 api: notes: comment: diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb index 581297313..410fe578a 100644 --- a/test/application_system_test_case.rb +++ b/test/application_system_test_case.rb @@ -4,7 +4,7 @@ require "capybara/poltergeist" # Work around weird debian/ubuntu phantomjs # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=817277 # https://github.com/ariya/phantomjs/issues/14376 -ENV["QT_QPA_PLATFORM"] = "phantom" if IO.popen(["phantomjs", "--version"], :err => :close).read.empty? +ENV["QT_QPA_PLATFORM"] = "offscreen" if IO.popen(["phantomjs", "--version"], :err => :close).read.empty? ActiveSupport.on_load(:action_dispatch_system_test_case) do ActionDispatch::SystemTesting::Server.silence_puma = true diff --git a/vendor/assets/leaflet/leaflet.contextmenu.js b/vendor/assets/leaflet/leaflet.contextmenu.js index 58cd4d7bf..489da8755 100644 --- a/vendor/assets/leaflet/leaflet.contextmenu.js +++ b/vendor/assets/leaflet/leaflet.contextmenu.js @@ -29,14 +29,14 @@ L.Map.mergeOptions({ L.Map.ContextMenu = L.Handler.extend({ _touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart', - + statics: { BASE_CLS: 'leaflet-contextmenu' }, - + initialize: function (map) { L.Handler.prototype.initialize.call(this, map); - + this._items = []; this._visible = false; @@ -71,7 +71,6 @@ L.Map.ContextMenu = L.Handler.extend({ this._map.on({ contextmenu: this._show, mousedown: this._hide, - movestart: this._hide, zoomstart: this._hide }, this); }, @@ -90,7 +89,6 @@ L.Map.ContextMenu = L.Handler.extend({ this._map.off({ contextmenu: this._show, mousedown: this._hide, - movestart: this._hide, zoomstart: this._hide }, this); }, @@ -320,12 +318,24 @@ L.Map.ContextMenu = L.Handler.extend({ return; } + var map = me._map, + containerPoint = me._showLocation.containerPoint, + layerPoint = map.containerPointToLayerPoint(containerPoint), + latlng = map.layerPointToLatLng(layerPoint), + relatedTarget = me._showLocation.relatedTarget, + data = { + containerPoint: containerPoint, + layerPoint: layerPoint, + latlng: latlng, + relatedTarget: relatedTarget + }; + if (hideOnSelect) { me._hide(); } if (func) { - func.call(context || map, me._showLocation); + func.call(context || map, data); } me._map.fire('contextmenu.select', { @@ -361,13 +371,9 @@ L.Map.ContextMenu = L.Handler.extend({ _showAtPoint: function (pt, data) { if (this._items.length) { var map = this._map, - layerPoint = map.containerPointToLayerPoint(pt), - latlng = map.layerPointToLatLng(layerPoint), event = L.extend(data || {}, {contextmenu: this}); this._showLocation = { - latlng: latlng, - layerPoint: layerPoint, containerPoint: pt }; diff --git a/vendor/assets/leaflet/leaflet.js b/vendor/assets/leaflet/leaflet.js index a845eb6ae..ab74e48b4 100644 --- a/vendor/assets/leaflet/leaflet.js +++ b/vendor/assets/leaflet/leaflet.js @@ -1,6 +1,6 @@ /* @preserve - * Leaflet 1.5.1+build.2e3e0ff, a JS library for interactive maps. http://leafletjs.com - * (c) 2010-2018 Vladimir Agafonkin, (c) 2010-2011 CloudMade + * Leaflet 1.6.0, a JS library for interactive maps. http://leafletjs.com + * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade */ (function (global, factory) { @@ -9,7 +9,7 @@ (factory((global.L = {}))); }(this, (function (exports) { 'use strict'; -var version = "1.5.1+build.2e3e0ffb"; +var version = "1.6.0"; /* * @namespace Util @@ -127,8 +127,8 @@ function falseFn() { return false; } // @function formatNum(num: Number, digits?: Number): Number // Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default. function formatNum(num, digits) { - digits = (digits === undefined ? 6 : digits); - return +(Math.round(num + ('e+' + digits)) + ('e-' + digits)); + var pow = Math.pow(10, (digits === undefined ? 6 : digits)); + return Math.round(num * pow) / pow; } // @function trim(str: String): String @@ -1906,7 +1906,7 @@ var msPointer = !window.PointerEvent && window.MSPointerEvent; // @property pointer: Boolean // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx). -var pointer = !!(window.PointerEvent || msPointer); +var pointer = !webkit && !!(window.PointerEvent || msPointer); // @property touch: Boolean // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events). @@ -1927,6 +1927,23 @@ var mobileGecko = mobile && gecko; // `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%. var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1; +// @property passiveEvents: Boolean +// `true` for browsers that support passive events. +var passiveEvents = (function () { + var supportsPassiveOption = false; + try { + var opts = Object.defineProperty({}, 'passive', { + get: function () { + supportsPassiveOption = true; + } + }); + window.addEventListener('testPassiveEventSupport', falseFn, opts); + window.removeEventListener('testPassiveEventSupport', falseFn, opts); + } catch (e) { + // Errors can safely be ignored since this is only a browser support test. + } + return supportsPassiveOption; +}); // @property canvas: Boolean // `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API). @@ -1989,6 +2006,7 @@ var Browser = (Object.freeze || Object)({ mobileOpera: mobileOpera, mobileGecko: mobileGecko, retina: retina, + passiveEvents: passiveEvents, canvas: canvas, svg: svg, vml: vml @@ -2183,8 +2201,8 @@ function addDoubleTapListener(obj, handler, id) { obj[_pre + _touchend + id] = onTouchEnd; obj[_pre + 'dblclick' + id] = handler; - obj.addEventListener(_touchstart, onTouchStart, false); - obj.addEventListener(_touchend, onTouchEnd, false); + obj.addEventListener(_touchstart, onTouchStart, passiveEvents ? {passive: false} : false); + obj.addEventListener(_touchend, onTouchEnd, passiveEvents ? {passive: false} : false); // On some platforms (notably, chrome<55 on win10 + touchscreen + mouse), // the browser doesn't fire touchend/pointerup events but does fire @@ -2200,8 +2218,8 @@ function removeDoubleTapListener(obj, id) { touchend = obj[_pre + _touchend + id], dblclick = obj[_pre + 'dblclick' + id]; - obj.removeEventListener(_touchstart, touchstart, false); - obj.removeEventListener(_touchend, touchend, false); + obj.removeEventListener(_touchstart, touchstart, passiveEvents ? {passive: false} : false); + obj.removeEventListener(_touchend, touchend, passiveEvents ? {passive: false} : false); if (!edge) { obj.removeEventListener('dblclick', dblclick, false); } @@ -2676,7 +2694,7 @@ function addOne(obj, type, fn, context) { } else if ('addEventListener' in obj) { if (type === 'mousewheel') { - obj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, false); + obj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, passiveEvents ? {passive: false} : false); } else if ((type === 'mouseenter') || (type === 'mouseleave')) { handler = function (e) { @@ -2721,7 +2739,7 @@ function removeOne(obj, type, fn, context) { } else if ('removeEventListener' in obj) { if (type === 'mousewheel') { - obj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, false); + obj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, passiveEvents ? {passive: false} : false); } else { obj.removeEventListener( @@ -4611,20 +4629,23 @@ var Map = Evented.extend({ } }, this); - this.on('load moveend', function () { - var c = this.getCenter(), - z = this.getZoom(); - setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1)); - }, this); + this.on('load moveend', this._animMoveEnd, this); this._on('unload', this._destroyAnimProxy, this); }, _destroyAnimProxy: function () { remove(this._proxy); + this.off('load moveend', this._animMoveEnd, this); delete this._proxy; }, + _animMoveEnd: function () { + var c = this.getCenter(), + z = this.getZoom(); + setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1)); + }, + _catchTransitionEnd: function (e) { if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) { this._onZoomTransitionEnd(); @@ -4674,6 +4695,7 @@ var Map = Evented.extend({ addClass(this._mapPane, 'leaflet-zoom-anim'); } + // @section Other Events // @event zoomanim: ZoomAnimEvent // Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom. this.fire('zoomanim', { @@ -5307,7 +5329,7 @@ var Layers = Control.extend({ // @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options) -// Creates an attribution control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation. +// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation. var layers = function (baseLayers, overlays, options) { return new Layers(baseLayers, overlays, options); }; @@ -7653,7 +7675,10 @@ var Marker = Layer.extend({ }, _setPos: function (pos) { - setPosition(this._icon, pos); + + if (this._icon) { + setPosition(this._icon, pos); + } if (this._shadow) { setPosition(this._shadow, pos); @@ -7665,7 +7690,9 @@ var Marker = Layer.extend({ }, _updateZIndex: function (offset) { - this._icon.style.zIndex = this._zIndex + offset; + if (this._icon) { + this._icon.style.zIndex = this._zIndex + offset; + } }, _animateZoom: function (opt) { @@ -7850,7 +7877,7 @@ var Path = Layer.extend({ setOptions(this, style); if (this._renderer) { this._renderer._updateStyle(this); - if (this.options.stroke && style.hasOwnProperty('weight')) { + if (this.options.stroke && style && style.hasOwnProperty('weight')) { this._updateBounds(); } } @@ -7920,9 +7947,13 @@ var CircleMarker = Path.extend({ // @method setLatLng(latLng: LatLng): this // Sets the position of a circle marker to a new location. setLatLng: function (latlng) { + var oldLatLng = this._latlng; this._latlng = toLatLng(latlng); this.redraw(); - return this.fire('move', {latlng: this._latlng}); + + // @event move: Event + // Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`. + return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng}); }, // @method getLatLng(): LatLng @@ -8669,6 +8700,9 @@ var GeoJSON = FeatureGroup.extend({ * @option coordsToLatLng: Function = * * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s. * The default is the `coordsToLatLng` static method. + * + * @option markersInheritOptions: Boolean = false + * Whether default Markers for "Point" type Features inherit from group options. */ initialize: function (geojson, options) { @@ -8718,9 +8752,13 @@ var GeoJSON = FeatureGroup.extend({ return this.addLayer(layer); }, - // @method resetStyle( layer ): this + // @method resetStyle( layer? ): this // Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events. + // If `layer` is omitted, the style of all features in the current layer is reset. resetStyle: function (layer) { + if (layer === undefined) { + return this.eachLayer(this.resetStyle, this); + } // reset any custom styles layer.options = extend({}, layer.defaultOptions); this._setLayerStyle(layer, this.options.style); @@ -8768,12 +8806,12 @@ function geometryToLayer(geojson, options) { switch (geometry.type) { case 'Point': latlng = _coordsToLatLng(coords); - return pointToLayer ? pointToLayer(geojson, latlng) : new Marker(latlng); + return _pointToLayer(pointToLayer, geojson, latlng, options); case 'MultiPoint': for (i = 0, len = coords.length; i < len; i++) { latlng = _coordsToLatLng(coords[i]); - layers.push(pointToLayer ? pointToLayer(geojson, latlng) : new Marker(latlng)); + layers.push(_pointToLayer(pointToLayer, geojson, latlng, options)); } return new FeatureGroup(layers); @@ -8806,6 +8844,12 @@ function geometryToLayer(geojson, options) { } } +function _pointToLayer(pointToLayerFn, geojson, latlng, options) { + return pointToLayerFn ? + pointToLayerFn(geojson, latlng) : + new Marker(latlng, options && options.markersInheritOptions && options); +} + // @function coordsToLatLng(coords: Array): LatLng // Creates a `LatLng` object from an array of 2 numbers (longitude, latitude) // or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points. @@ -8889,6 +8933,7 @@ var PointToGeoJSON = { }; // @namespace Marker +// @section Other methods // @method toGeoJSON(precision?: Number): Object // `precision` is the number of decimal places for coordinates. // The default value is 6 places. @@ -9322,6 +9367,7 @@ var VideoOverlay = ImageOverlay.extend({ addClass(vid, 'leaflet-image-layer'); if (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); } + if (this.options.className) { addClass(vid, this.options.className); } vid.onselectstart = falseFn; vid.onmousemove = falseFn; @@ -9379,9 +9425,12 @@ function videoOverlay(video, bounds, options) { * @example * * ```js - * var element = '', - * elementBounds = [ [ 32, -130 ], [ 13, -100 ] ]; - * L.svgOverlay(element, elementBounds).addTo(map); + * var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + * svgElement.setAttribute('xmlns', "http://www.w3.org/2000/svg"); + * svgElement.setAttribute('viewBox', "0 0 200 200"); + * svgElement.innerHTML = ''; + * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ]; + * L.svgOverlay(svgElement, svgElementBounds).addTo(map); * ``` */ @@ -9391,6 +9440,7 @@ var SVGOverlay = ImageOverlay.extend({ addClass(el, 'leaflet-image-layer'); if (this._zoomAnimated) { addClass(el, 'leaflet-zoom-animated'); } + if (this.options.className) { addClass(el, this.options.className); } el.onselectstart = falseFn; el.onmousemove = falseFn; @@ -12112,7 +12162,7 @@ var Canvas = Renderer.extend({ _initContainer: function () { var container = this._container = document.createElement('canvas'); - on(container, 'mousemove', throttle(this._onMouseMove, 32, this), this); + on(container, 'mousemove', this._onMouseMove, this); on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this); on(container, 'mouseout', this._handleMouseOut, this); @@ -12422,10 +12472,15 @@ var Canvas = Renderer.extend({ removeClass(this._container, 'leaflet-interactive'); this._fireEvent([layer], e, 'mouseout'); this._hoveredLayer = null; + this._mouseHoverThrottled = false; } }, _handleMouseHover: function (e, point) { + if (this._mouseHoverThrottled) { + return; + } + var layer, candidateHoveredLayer; for (var order = this._drawFirst; order; order = order.next) { @@ -12448,6 +12503,11 @@ var Canvas = Renderer.extend({ if (this._hoveredLayer) { this._fireEvent([this._hoveredLayer], e); } + + this._mouseHoverThrottled = true; + setTimeout(L.bind(function () { + this._mouseHoverThrottled = false; + }, this), 32); }, _fireEvent: function (layers, e, type) { diff --git a/vendor/assets/leaflet/leaflet.locate.js b/vendor/assets/leaflet/leaflet.locate.js index 615b4654b..99aa34337 100644 --- a/vendor/assets/leaflet/leaflet.locate.js +++ b/vendor/assets/leaflet/leaflet.locate.js @@ -133,7 +133,7 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol ''+ ''; return { - className: 'leafet-control-locate-heading', + className: 'leaflet-control-locate-heading', svg: svg, w: w, h: h @@ -168,6 +168,8 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol setView: 'untilPanOrZoom', /** Keep the current map zoom level when setting the view and only pan. */ keepCurrentZoomLevel: false, + /** After activating the plugin by clicking on the icon, zoom to the selected zoom level, even when keepCurrentZoomLevel is true. Set to 'false' to disable this feature. */ + initialZoomLevel: false, /** * This callback can be used to override the viewport tracking * This function should return a LatLngBounds object. @@ -467,10 +469,21 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol this._map.on('zoomstart', this._onZoom, this); this._map.on('zoomend', this._onZoomEnd, this); if (this.options.showCompass) { - if ('ondeviceorientationabsolute' in window) { - L.DomEvent.on(window, 'deviceorientationabsolute', this._onDeviceOrientation, this); - } else if ('ondeviceorientation' in window) { - L.DomEvent.on(window, 'deviceorientation', this._onDeviceOrientation, this); + var oriAbs = 'ondeviceorientationabsolute' in window; + if (oriAbs || ('ondeviceorientation' in window)) { + var _this = this; + var deviceorientation = function () { + L.DomEvent.on(window, oriAbs ? 'deviceorientationabsolute' : 'deviceorientation', _this._onDeviceOrientation, _this); + }; + if (DeviceOrientationEvent && typeof DeviceOrientationEvent.requestPermission === 'function') { + DeviceOrientationEvent.requestPermission().then(function (permissionState) { + if (permissionState === 'granted') { + deviceorientation(); + } + }) + } else { + deviceorientation(); + } } } } @@ -514,6 +527,10 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol this._event = undefined; // clear the current location so we can get back into the bounds this.options.onLocationOutsideMapBounds(this); } else { + if (this._justClicked && this.options.initialZoomLevel !== false) { + var f = this.options.flyTo ? this._map.flyTo : this._map.setView; + f.bind(this._map)([this._event.latitude, this._event.longitude], this.options.initialZoomLevel); + } else if (this.options.keepCurrentZoomLevel) { var f = this.options.flyTo ? this._map.flyTo : this._map.panTo; f.bind(this._map)([this._event.latitude, this._event.longitude]); @@ -538,6 +555,10 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol * */ _drawCompass: function() { + if (!this._event) { + return; + } + var latlng = this._event.latlng; if (this.options.showCompass && latlng && this._compassHeading !== null) { @@ -610,14 +631,23 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol this._drawCompass(); var t = this.options.strings.popup; + function getPopupText() { + if (typeof t === 'string') { + return L.Util.template(t, {distance: distance, unit: unit}); + } else if (typeof t === 'function') { + return t({distance: distance, unit: unit}); + } else { + return t; + } + } if (this.options.showPopup && t && this._marker) { this._marker - .bindPopup(L.Util.template(t, {distance: distance, unit: unit})) + .bindPopup(getPopupText()) ._popup.setLatLng(latlng); } if (this.options.showPopup && t && this._compass) { this._compass - .bindPopup(L.Util.template(t, {distance: distance, unit: unit})) + .bindPopup(getPopupText()) ._popup.setLatLng(latlng); } }, @@ -774,7 +804,7 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol if (this._event && !this._ignoreEvent) { // If we have zoomed in and out and ended up sideways treat it as a pan - if (!this._map.getBounds().pad(-.3).contains(this._marker.getLatLng())) { + if (this._marker && !this._map.getBounds().pad(-.3).contains(this._marker.getLatLng())) { this._userPanned = true; this._updateContainerStyle(); this._drawMarker(); diff --git a/vendor/assets/leaflet/leaflet.polyline.js b/vendor/assets/leaflet/leaflet.polyline.js index 772e7ebc6..957f6cbda 100644 --- a/vendor/assets/leaflet/leaflet.polyline.js +++ b/vendor/assets/leaflet/leaflet.polyline.js @@ -78,7 +78,7 @@ for (var i = 0, len = numbers.length; i < len;) { for (var d = 0; d < options.dimension; ++d, ++i) { - var num = numbers[i]; + var num = numbers[i].toFixed(options.precision); var delta = num - (lastNumbers[d] || 0); lastNumbers[d] = num;