* https://www.ruby-lang.org/ - The homepage of Ruby which has more links and some great tutorials.
-* http://rubyonrails.org/ - The homepage of Rails, also has links and tutorials
+* https://rubyonrails.org/ - The homepage of Rails, also has links and tutorials.
## Coding style
gem "openstreetmap-deadlock_retry", ">= 1.3.1", :require => "deadlock_retry"
gem "rack-cors"
gem "rails-i18n", "~> 7.0.0"
+gem "rails_param"
gem "rinku", ">= 2.0.6", :require => "rails_rinku"
gem "strong_migrations"
gem "validates_email_format_of", ">= 1.5.1"
gem "dalli"
gem "kgio"
-# Load secure_headers for Content-Security-Policy support
-gem "secure_headers"
-
# Load canonical-rails to generate canonical URLs
gem "canonical-rails"
# Used to validate widths
gem "unicode-display_width"
+# Keep ruby 3.0 compatibility
+gem "multi_xml", "~> 0.6.0"
+
# Gems useful for development
group :development do
gem "better_errors"
specs:
aasm (5.5.0)
concurrent-ruby (~> 1.0)
- actioncable (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actioncable (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionmailbox (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ activejob (= 7.1.3.4)
+ activerecord (= 7.1.3.4)
+ activestorage (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
- actionmailer (7.1.3.2)
- actionpack (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionmailer (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ actionview (= 7.1.3.4)
+ activejob (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
- actionpack (7.1.3.2)
- actionview (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionpack (7.1.3.4)
+ actionview (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
rails-html-sanitizer (~> 1.6)
actionpack-page_caching (1.2.4)
actionpack (>= 4.0.0)
- actiontext (7.1.3.2)
- actionpack (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actiontext (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ activerecord (= 7.1.3.4)
+ activestorage (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionview (7.1.3.4)
+ activesupport (= 7.1.3.4)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
active_record_union (1.3.0)
activerecord (>= 4.0)
- activejob (7.1.3.2)
- activesupport (= 7.1.3.2)
+ activejob (7.1.3.4)
+ activesupport (= 7.1.3.4)
globalid (>= 0.3.6)
- activemodel (7.1.3.2)
- activesupport (= 7.1.3.2)
- activerecord (7.1.3.2)
- activemodel (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activemodel (7.1.3.4)
+ activesupport (= 7.1.3.4)
+ activerecord (7.1.3.4)
+ activemodel (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
timeout (>= 0.4.0)
- activerecord-import (1.6.0)
+ activerecord-import (1.7.0)
activerecord (>= 4.2)
- activestorage (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activestorage (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ activejob (= 7.1.3.4)
+ activerecord (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
marcel (~> 1.0)
- activesupport (7.1.3.2)
+ activesupport (7.1.3.4)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.3.0)
- aws-partitions (1.925.0)
- aws-sdk-core (3.194.1)
+ aws-partitions (1.938.0)
+ aws-sdk-core (3.196.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.80.0)
+ aws-sdk-kms (1.82.0)
aws-sdk-core (~> 3, >= 3.193.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.149.1)
+ aws-sdk-s3 (1.151.0)
aws-sdk-core (~> 3, >= 3.194.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
builder (3.2.4)
bzip2-ffi (1.1.1)
ffi (~> 1.0)
- cancancan (3.5.0)
+ cancancan (3.6.1)
canonical-rails (0.2.15)
actionview (>= 4.1, <= 7.2)
capybara (3.40.0)
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
- concurrent-ruby (1.2.3)
- config (5.4.0)
+ concurrent-ruby (1.3.1)
+ config (5.5.1)
deep_merge (~> 1.2, >= 1.2.1)
connection_pool (2.4.1)
crack (1.0.0)
concurrent-ruby (~> 1.0)
dry-core (~> 1.0, < 2)
zeitwerk (~> 2.6)
- dry-schema (1.13.3)
+ dry-schema (1.13.4)
concurrent-ruby (~> 1.0)
dry-configurable (~> 1.0, >= 1.0.1)
dry-core (~> 1.0, < 2)
faraday-net_http (>= 2.0, < 3.2)
faraday-net_http (3.1.0)
net-http
- ffi (1.16.3)
+ ffi (1.17.0)
ffi-compiler (1.3.2)
ffi (>= 1.15.5)
rake
concurrent-ruby (~> 1.0)
i18n-js (3.9.2)
i18n (>= 0.6.6)
- i18n-tasks (1.0.13)
+ i18n-tasks (1.0.14)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
- better_html (>= 1.0, < 3.0)
erubi
highline (>= 2.0.0)
i18n
maxminddb (0.1.22)
mini_magick (4.12.0)
mini_mime (1.1.5)
- mini_portile2 (2.8.6)
+ mini_portile2 (2.8.7)
mini_racer (0.9.0)
libv8-node (~> 18.19.0.0)
- minitest (5.22.3)
+ minitest (5.23.1)
minitest-focus (1.4.0)
minitest (>= 4, < 6)
msgpack (1.7.2)
mutex_m (0.2.0)
net-http (0.4.1)
uri
- net-imap (0.4.10)
+ net-imap (0.4.12)
date
net-protocol
net-pop (0.1.2)
timeout
net-smtp (0.5.0)
net-protocol
- nio4r (2.7.2)
- nokogiri (1.16.4)
+ nio4r (2.7.3)
+ nokogiri (1.16.5)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oauth (0.4.7)
hashie (>= 3.4.6)
rack (>= 1.6.2, < 3)
rack-protection
- omniauth-facebook (9.0.0)
- omniauth-oauth2 (~> 1.2)
+ omniauth-facebook (10.0.0)
+ bigdecimal
+ omniauth-oauth2 (>= 1.2, < 3)
omniauth-github (2.0.1)
omniauth (~> 2.0)
omniauth-oauth2 (~> 1.8)
omniauth-mediawiki (0.0.4)
jwt (~> 2.0)
omniauth-oauth (~> 1.0)
- omniauth-microsoft_graph (2.0.0)
+ omniauth-microsoft_graph (2.0.1)
jwt (~> 2.0)
omniauth (~> 2.0)
omniauth-oauth2 (~> 1.8.0)
omniauth-openid (2.0.1)
omniauth (>= 1.0, < 3.0)
rack-openid (~> 1.4.0)
- omniauth-rails_csrf_protection (1.0.1)
+ omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
omniauth (~> 2.0)
openstreetmap-deadlock_retry (1.3.1)
parallel (1.24.0)
- parser (3.3.1.0)
+ parser (3.3.2.0)
ast (~> 2.4.1)
racc
pg (1.5.6)
puma (5.6.8)
nio4r (~> 2.0)
quad_tile (1.0.1)
- racc (1.7.3)
+ racc (1.8.0)
rack (2.2.9)
rack-cors (2.0.2)
rack (>= 2.0.0)
rackup (1.0.0)
rack (< 3)
webrick
- rails (7.1.3.2)
- actioncable (= 7.1.3.2)
- actionmailbox (= 7.1.3.2)
- actionmailer (= 7.1.3.2)
- actionpack (= 7.1.3.2)
- actiontext (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activemodel (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ rails (7.1.3.4)
+ actioncable (= 7.1.3.4)
+ actionmailbox (= 7.1.3.4)
+ actionmailer (= 7.1.3.4)
+ actionpack (= 7.1.3.4)
+ actiontext (= 7.1.3.4)
+ actionview (= 7.1.3.4)
+ activejob (= 7.1.3.4)
+ activemodel (= 7.1.3.4)
+ activerecord (= 7.1.3.4)
+ activestorage (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
bundler (>= 1.15.0)
- railties (= 7.1.3.2)
+ railties (= 7.1.3.4)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
rails-i18n (7.0.9)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ rails_param (1.3.1)
+ actionpack (>= 3.2.0)
+ activesupport (>= 3.2.0)
+ railties (7.1.3.4)
+ actionpack (= 7.1.3.4)
+ activesupport (= 7.1.3.4)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
rainbow (3.1.1)
rake (13.2.1)
rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
+ rb-inotify (0.11.1)
ffi (~> 1.0)
- rdoc (6.6.3.1)
+ rdoc (6.7.0)
psych (>= 4.0.0)
- regexp_parser (2.9.0)
- reline (0.5.5)
+ regexp_parser (2.9.2)
+ reline (0.5.8)
io-console (~> 0.5)
request_store (1.7.0)
rack (>= 1.4)
- rexml (3.2.6)
+ rexml (3.2.8)
+ strscan (>= 3.0.9)
rinku (2.0.6)
rotp (6.3.0)
rouge (4.2.1)
rtlcss (0.2.1)
mini_racer (>= 0.6.3)
- rubocop (1.63.4)
+ rubocop (1.64.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
rubocop-performance (1.21.0)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
- rubocop-rails (2.24.1)
+ rubocop-rails (2.25.0)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
sass-embedded (1.64.2)
google-protobuf (~> 3.23)
rake (>= 13.0.0)
- secure_headers (6.5.0)
- selenium-webdriver (4.20.1)
+ selenium-webdriver (4.21.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
simplecov-html (0.12.3)
simplecov-lcov (0.8.0)
simplecov_json_formatter (0.1.4)
- simpleidn (0.2.2)
- unf (~> 0.1.4)
+ simpleidn (0.2.3)
smart_properties (1.17.0)
snaky_hash (2.0.1)
hashie
stringio (3.1.0)
strong_migrations (1.8.0)
activerecord (>= 5.2)
+ strscan (3.1.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
terser (1.2.2)
railties (>= 6.0.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.9.1)
unicode-display_width (2.5.0)
uri (0.13.0)
validates_email_format_of (1.8.2)
simpleidn
vendorer (0.2.0)
version_gem (1.1.4)
- webmock (3.23.0)
+ webmock (3.23.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.6.13)
+ zeitwerk (2.6.15)
PLATFORMS
ruby
mini_racer (~> 0.9.0)
minitest (~> 5.1)
minitest-focus
+ multi_xml (~> 0.6.0)
oauth-plugin (>= 0.5.1)
omniauth (~> 2.0.2)
omniauth-facebook
rails (~> 7.1.0)
rails-controller-testing
rails-i18n (~> 7.0.0)
+ rails_param
rinku (>= 2.0.6)
rotp
rtlcss
rubocop-rake
sanitize
sass-embedded (~> 1.64.0)
- secure_headers
selenium-webdriver
simplecov
simplecov-lcov
## Ruby gems
-We use [Bundler](http://gembundler.com/) to manage the rubygems required for the project.
+We use [Bundler](https://bundler.io/) to manage the rubygems required for the project.
```
cd openstreetmap-website
[![Tests](https://github.com/openstreetmap/openstreetmap-website/workflows/Tests/badge.svg?branch=master&event=push)](https://github.com/openstreetmap/openstreetmap-website/actions?query=workflow%3ATests%20branch%3Amaster%20event%3Apush)
[![Coverage Status](https://coveralls.io/repos/openstreetmap/openstreetmap-website/badge.svg?branch=master)](https://coveralls.io/r/openstreetmap/openstreetmap-website?branch=master)
-This is `openstreetmap-website`, the [Ruby on Rails](http://rubyonrails.org/)
+This is `openstreetmap-website`, the [Ruby on Rails](https://rubyonrails.org/)
application that powers the [OpenStreetMap](https://www.openstreetmap.org) website and API.
This repository consists of:
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="320"
- height="200"
- id="svg2"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- inkscape:export-filename="./sprite@2x.png"
- inkscape:export-xdpi="180"
- inkscape:export-ydpi="180"
- sodipodi:docname="sprite.svg">
- <defs
- id="defs4">
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4253">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 445.5,-52.21875 c -8.23506,3.941544 -15.68019,9.273939 -22.0625,15.65625 l 113.125,113.125 C 542.94481,70.18019 548.27721,62.73506 552.21875,54.5 L 445.5,-52.21875 z"
- id="path4255"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4257">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 407.78125,-14.5 c -4.39728,9.187219 -7.07096,19.3435 -7.65625,30.0625 l 84.3125,84.3125 c 10.719,-0.58529 20.87528,-3.25897 30.0625,-7.65625 L 407.78125,-14.5 z"
- id="path4259"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4261">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 423.4375,-36.5625 c -6.38231,6.382311 -11.71471,13.827444 -15.65625,22.0625 L 514.5,92.21875 c 8.23506,-3.94154 15.68019,-9.27394 22.0625,-15.65625 l -113.125,-113.125 z"
- id="path4263"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4265">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 400.125,15.5625 C 400.04489,17.02967 400,18.51283 400,20 c 0,22.09139 8.96035,42.08535 23.4375,56.5625 C 437.91465,91.03965 457.90861,100 480,100 c 1.48717,0 2.97033,-0.04489 4.4375,-0.125 L 400.125,15.5625 z"
- id="path4267"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4280">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 475.5625,-59.875 c -10.719,0.585293 -20.87528,3.258972 -30.0625,7.65625 L 552.21875,54.5 c 4.39728,-9.18722 7.07096,-19.3435 7.65625,-30.0625 L 475.5625,-59.875 z"
- id="path4282"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4295">
- <path
- style="color:#000000;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 480,-60 c -1.48717,0 -2.97033,0.04489 -4.4375,0.125 L 559.875,24.4375 C 559.95511,22.97033 560,21.48717 560,20 560,-2.09139 551.03965,-22.085347 536.5625,-36.5625 522.08535,-51.039653 502.09139,-60 480,-60 z"
- id="path4297"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4864">
- <rect
- style="color:#000000;fill:#202020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect4866"
- width="420"
- height="160"
- x="110"
- y="812.36218" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5076">
- <rect
- y="785.52893"
- x="39.999992"
- height="213.3333"
- width="559.99988"
- id="rect5078"
- style="color:#000000;fill:#202020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath3009">
- <rect
- y="732.86218"
- x="0"
- height="320"
- width="640"
- id="rect3011"
- style="color:#000000;fill:#222b30;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5092">
- <rect
- style="color:#000000;fill:#202020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect5094"
- width="420"
- height="160"
- x="30"
- y="852.36218" />
- </clipPath>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.8177596"
- inkscape:cx="119.20742"
- inkscape:cy="107.0188"
- inkscape:document-units="px"
- inkscape:current-layer="svg2"
- showgrid="true"
- showguides="false"
- inkscape:guide-bbox="true"
- showborder="true"
- width="4212.99px"
- inkscape:window-width="1242"
- inkscape:window-height="760"
- inkscape:window-x="51"
- inkscape:window-y="189"
- inkscape:window-maximized="0"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0">
- <inkscape:grid
- type="xygrid"
- id="grid2985"
- empspacing="5"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="gray"
- style="display:inline"
- transform="translate(0,20)" />
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="sprite"
- style="display:inline"
- transform="translate(0,20)">
- <path
- sodipodi:type="arc"
- style="opacity:0.98000004;color:#000000;fill:#7ec95c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4499"
- sodipodi:cx="220"
- sodipodi:cy="20"
- sodipodi:rx="15"
- sodipodi:ry="15"
- d="m 235,20 c 0,8.284271 -6.71573,15 -15,15 -8.28427,0 -15,-6.715729 -15,-15 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z"
- transform="translate(0,-20)" />
- <path
- style="opacity:0.98000004;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 215.5,-6 214,-4.5 218.5,0 214,4.5 215.5,6 220,1.5 224.5,6 226,4.5 221.5,0 226,-4.5 224.5,-6 220,-1.5 215.5,-6 z"
- id="path3965"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.98000004;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 303,-6 -1,1 0,3 -6,0 -1,1 0,2 1,1 6,0 0,3 1,1 5,-6 z"
- id="path3921"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccc" />
- <g
- transform="translate(-260,-1042.3622)"
- id="g7110">
- <path
- transform="matrix(0.86666662,0,0,0.86666662,54.000012,588.69555)"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- sodipodi:ry="15"
- sodipodi:rx="15"
- sodipodi:cy="610"
- sodipodi:cx="255"
- id="path15441"
- style="color:#000000;fill:none;stroke:#c0c0c0;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="125%"
- id="text15443"
- y="1123.7971"
- x="281.65521"
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:end;text-decoration:none;line-height:125%;letter-spacing:0px;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:end;baseline-shift:baseline;color:#000000;fill:#c0c0c0;fill-opacity:1;fill-rule:nonzero;stroke:#c0c0c0;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Helvetica Neue;-inkscape-font-specification:Helvetica Neue Bold"
- xml:space="preserve"><tspan
- y="1123.7971"
- x="281.65521"
- id="tspan15445"
- sodipodi:role="line">C</tspan></text>
- </g>
- <g
- transform="translate(-260,-1722.3623)"
- id="g7115">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:none;stroke:#c0c0c0;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path15563"
- sodipodi:cx="255"
- sodipodi:cy="610"
- sodipodi:rx="15"
- sodipodi:ry="15"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- transform="matrix(0.86666662,0,0,0.86666662,54.000012,1308.6956)" />
- <rect
- ry="2"
- rx="2"
- transform="matrix(0,-1,1,0,0,0)"
- style="color:#000000;fill:#c0c0c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect11874-2"
- width="12"
- height="4"
- x="-1843.3622"
- y="273" />
- <rect
- y="1835.3622"
- x="269.00009"
- height="4.0002432"
- width="12"
- id="rect15609"
- style="color:#000000;fill:#c0c0c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- rx="2.0001216"
- ry="2.0001216" />
- </g>
- <g
- transform="translate(-260,-2012.3623)"
- id="g7120">
- <path
- transform="matrix(0.86666662,0,0,0.86666662,54.000012,1638.6956)"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- sodipodi:ry="15"
- sodipodi:rx="15"
- sodipodi:cy="610"
- sodipodi:cx="255"
- id="path15611"
- style="color:#000000;fill:none;stroke:#c55151;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <rect
- y="1725.0107"
- x="-1344.1022"
- height="4"
- width="12"
- id="rect15631"
- style="color:#000000;fill:#c55151;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
- rx="2"
- ry="2" />
- <rect
- transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
- ry="2.0001216"
- rx="2.0001216"
- style="color:#000000;fill:#c55151;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect15633"
- width="12"
- height="4.0002432"
- x="1721.0109"
- y="1336.1022" />
- </g>
- <g
- transform="translate(-260,-772.36218)"
- id="g6944">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:none;stroke:#c0c0c0;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path6661"
- sodipodi:cx="255"
- sodipodi:cy="610"
- sodipodi:rx="15"
- sodipodi:ry="15"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- transform="matrix(0.86666662,0,0,0.86666662,54.000012,238.69555)" />
- <path
- sodipodi:nodetypes="csssc"
- inkscape:connector-curvature="0"
- id="path6667"
- d="m 275,774.36218 c 0,0 5,-4.5199 5,-8 0,-3 -2,-5 -5,-5 -3,0 -5,2 -5,5 0,3.4801 5,8 5,8 z"
- style="color:#000000;fill:#c0c0c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
- <g
- transform="translate(-260,-872.36219)"
- id="g6940">
- <path
- transform="matrix(0.86666662,0,0,0.86666662,54.000012,378.69555)"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- sodipodi:ry="15"
- sodipodi:rx="15"
- sodipodi:cy="610"
- sodipodi:cx="255"
- id="path6737"
- style="color:#000000;fill:none;stroke:#c0c0c0;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path6753"
- d="m 275,899.36218 -6,6 0,7 4,0 0,-4 4,0 0,4 4,0 0,-7 z"
- style="color:#000000;fill:#c0c0c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
- <image
- y="-9"
- x="250"
- id="image9767"
- xlink:href="data:image/png;base64,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 "
- height="20"
- width="20" />
- <path
- style="opacity:0.50000000000000000;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 178,-13 0,5.375 1.6563,0.625 1.2812,0 c 0.256,0 0.51,-0.0297 0.75,-0.0937 0.2453,-0.064 0.4762,-0.13926 0.6563,-0.28125 0.5478,-0.43174 0.6562,-1.05881 0.6562,-1.53128 0,-0.45113 -0.1365,-0.74932 -0.3125,-1.00002 -0.1707,-0.256 -0.4291,-0.39865 -0.7813,-0.49995 0.2563,-0.1227 0.4658,-0.27675 0.5938,-0.46875 0.1333,-0.192 0.1875,-0.43075 0.1875,-0.71875 0,-0.2667 -0.034,-0.5062 -0.125,-0.6875 -0.085,-0.1814 -0.215,-0.29955 -0.375,-0.40625 -0.16,-0.112 -0.3699,-0.202 -0.5937,-0.25 -0.2243,-0.048 -0.4504,-0.0625 -0.7188,-0.0625 z m 5.6563,0 2.0937,3.78125 0,2.1875 L 187,-7.5 l 0,-1.6875 2.125,-3.8125 -1.4062,0 -1.3125,2.5625 L 185.0626,-13 z m -4.4063,0.96875 1.3438,0 c 0.1116,0 0.2424,0.0102 0.3437,0.0312 0.1067,0.016 0.2011,0.0457 0.2813,0.0937 0.08,0.048 0.1394,0.1022 0.1874,0.1875 0.049,0.085 0.063,0.21035 0.063,0.34375 0,0.24 -0.075,0.3933 -0.2188,0.5 -0.144,0.1066 -0.3387,0.17777 -0.5625,0.1875 l -1.4375,0 z m 0,2.32924 1.5625,0 c 0.272,0 0.4907,0.059 0.6563,0.1875 0.165,0.1227 0.2187,0.3317 0.2187,0.625 0,0.1494 -0.011,0.44976 -0.062,0.54576 -0.048,0.096 -0.1022,0.16005 -0.1875,0.21875 -0.085,0.053 -0.2005,0.098 -0.3125,0.125 -0.112,0.021 -0.2209,0.0312 -0.3438,0.0312 l -1.5312,0 z M 174.5,-8 168.4062,-5.40625 167,-4 167,9 168.5625,10.5625 174.5,8 l 8,3 7.0938,-2.59375 L 191,7 191,-6 189.4375,-7.5625 182.5,-5 z m -2.3126,5.84375 c 0.4982,0 0.9222,0.076 1.3126,0.25 0.3896,0.174 0.7296,0.41275 1,0.71875 0.2696,0.306 0.4806,0.67975 0.625,1.09375 0.1436,0.408 0.2187,0.8325 0.2187,1.3125 0,0.468 -0.075,0.9045 -0.2187,1.3125 -0.1442,0.402 -0.3552,0.7625 -0.625,1.0625 -0.2704,0.3 -0.6103,0.54475 -1,0.71875 -0.3904,0.168 -0.8144,0.25 -1.3126,0.25 -0.4918,0 -0.9477,-0.082 -1.3437,-0.25 -0.39,-0.174 -0.73,-0.41875 -1,-0.71875 -0.27,-0.3 -0.481,-0.6605 -0.625,-1.0625 C 169.0747,2.12325 169,1.68675 169,1.21875 c 0,-0.48 0.075,-0.9045 0.2187,-1.3125 0.144,-0.414 0.355,-0.78775 0.625,-1.09375 0.27,-0.306 0.61,-0.54475 1,-0.71875 0.396,-0.174 0.8519,-0.25 1.3437,-0.25 z m 6.2189,0 c 0.3358,0 0.6627,0.047 0.9687,0.125 0.312,0.072 0.5725,0.17575 0.8125,0.34375 0.24,0.168 0.4554,0.39225 0.5938,0.65625 0.1438,0.258 0.2187,0.5655 0.2187,0.9375 l -1.375,0 c -0.012,-0.192 -0.053,-0.34275 -0.125,-0.46875 -0.066,-0.126 -0.1669,-0.2405 -0.2813,-0.3125 -0.1139,-0.072 -0.2562,-0.12625 -0.4062,-0.15625 -0.144,-0.03 -0.2946,-0.0312 -0.4688,-0.0312 -0.1139,0 -0.2297,0.0102 -0.3437,0.0312 -0.114,0.024 -0.2165,0.065 -0.3125,0.125 -0.09,0.06 -0.1586,0.12875 -0.2188,0.21875 -0.06,0.09 -0.094,0.20575 -0.094,0.34375 0,0.126 0.014,0.2345 0.062,0.3125 0.048,0.078 0.1435,0.15275 0.2812,0.21875 0.1442,0.066 0.3478,0.1215 0.5938,0.1875 0.252,0.066 0.5666,0.148 0.9688,0.25 0.1196,0.024 0.2896,0.0901 0.5,0.15625 0.2156,0.06 0.4462,0.14325 0.6562,0.28125 0.21,0.138 0.3815,0.3285 0.5312,0.5625 0.1562,0.228 0.2188,0.515 0.2188,0.875 0,0.294 -0.042,0.59175 -0.1562,0.84375 -0.1144,0.252 -0.2722,0.47025 -0.5,0.65625 -0.2223,0.18 -0.5078,0.30425 -0.8438,0.40625 -0.33,0.102 -0.7186,0.15625 -1.1562,0.15625 -0.3544,0 -0.6953,-0.035 -1.0313,-0.125 -0.33,-0.084 -0.617,-0.22025 -0.875,-0.40625 -0.252,-0.186 -0.475,-0.43075 -0.625,-0.71875 -0.15,-0.288 -0.225,-0.63525 -0.2187,-1.03125 l 1.375,0 c 0,0.216 0.047,0.4125 0.125,0.5625 0.078,0.15 0.1865,0.24775 0.3124,0.34375 0.1323,0.09 0.2634,0.17075 0.4376,0.21875 0.1739,0.042 0.3767,0.0625 0.5624,0.0625 0.1262,0 0.2623,-0.0133 0.4063,-0.0312 0.144,-0.024 0.2799,-0.065 0.4063,-0.125 0.1259,-0.06 0.2285,-0.148 0.3124,-0.25 0.084,-0.108 0.125,-0.24425 0.125,-0.40625 0,-0.174 -0.073,-0.29825 -0.1874,-0.40625 -0.1082,-0.108 -0.2574,-0.20925 -0.4376,-0.28125 -0.1798,-0.072 -0.3657,-0.1335 -0.5937,-0.1875 -0.228,-0.054 -0.4535,-0.1215 -0.6875,-0.1875 -0.24,-0.06 -0.4905,-0.1035 -0.7188,-0.1875 -0.2278,-0.09 -0.4137,-0.20575 -0.5937,-0.34375 -0.18,-0.138 -0.3549,-0.32725 -0.4687,-0.53125 -0.1082,-0.21 -0.1563,-0.456 -0.1563,-0.75 0,-0.33 0.081,-0.60375 0.2187,-0.84375 0.1442,-0.246 0.3342,-0.463 0.5626,-0.625 0.2277,-0.162 0.4617,-0.26575 0.75,-0.34375 0.288,-0.078 0.5873,-0.10702 0.875,-0.125 z M 181.9997,-2 l 2,0 1.5157,4.40625 1.5158,-4.40625 2,0 0,6.40625 -1.3437,0 0,-4.53125 -1.6878,4.53125 -1.0938,0 -1.5625,-4.5 -0.031,4.5 -1.3124,0 z m -9.8123,1.03125 c -0.3179,0 -0.5909,0.061 -0.8124,0.1875 -0.2223,0.12 -0.4242,0.29 -0.5626,0.5 -0.1375,0.204 -0.2152,0.4235 -0.2812,0.6875 -0.06,0.264 -0.094,0.5305 -0.094,0.8125 0,0.27 0.034,0.5545 0.094,0.8125 0.066,0.252 0.1436,0.4835 0.2812,0.6875 0.1383,0.204 0.3403,0.34275 0.5626,0.46875 0.2219,0.12 0.4949,0.1875 0.8124,0.1875 0.3182,0 0.5593,-0.067 0.7813,-0.1875 0.222,-0.126 0.4245,-0.26475 0.5625,-0.46875 0.138,-0.204 0.2216,-0.4355 0.2812,-0.6875 0.066,-0.258 0.094,-0.5425 0.094,-0.8125 0,-0.282 -0.027,-0.5485 -0.094,-0.8125 -0.06,-0.264 -0.1432,-0.4835 -0.2812,-0.6875 -0.138,-0.21 -0.3405,-0.38 -0.5625,-0.5 -0.222,-0.126 -0.4629,-0.1875 -0.7813,-0.1875 z"
- id="path3323-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccscsscccscccsccccccccccccscccscscccscscccscccccccccccccccscccscccscscscscsccsccccccscccssccccscscccsccscccccscccsccsccscscccscsccccccccccccssccscccscscscccss" />
- <path
- style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 74.875,-16 0,10.57817 L 78.66654,-4 80.75,-4 c 0.512,0 1.02,-0.0595 1.5,-0.1875 0.4906,-0.128 0.9523,-0.27852 1.3125,-0.5625 1.0956,-0.86348 1.3125,-2.11756 1.3125,-3.0625 0,-0.90226 -0.273,-1.4986 -0.625,-2 -0.3414,-0.512 -0.8581,-0.7974 -1.5625,-1 0.5126,-0.2454 0.9315,-0.5535 1.1875,-0.9375 0.2666,-0.384 0.375,-0.8615 0.375,-1.4375 0,-0.5334 -0.068,-1.0124 -0.25,-1.375 -0.17,-0.3628 -0.43,-0.5991 -0.75,-0.8125 -0.32,-0.224 -0.7399,-0.404 -1.1875,-0.5 C 81.6139,-15.971 81.1618,-16 80.625,-16 z m 11.3125,0 4.1875,7.5625 0,4.16076 2.5,-0.89286 0,-3.2054 4.25,-7.625 -2.8125,0 -2.625,5.125 L 89,-16 z m -8.8125,1.9375 2.6875,0 c 0.2232,0 0.4849,0.0205 0.6875,0.0625 0.2134,0.032 0.4021,0.0915 0.5625,0.1875 0.16,0.096 0.279,0.2044 0.375,0.375 0.098,0.17 0.125,0.4207 0.125,0.6875 0,0.48 -0.1499,0.7866 -0.4375,1 -0.288,0.2132 -0.6774,0.35554 -1.125,0.375 l -2.875,0 z m 0,4.65625 3.125,0 c 0.544,0 0.9813,0.118 1.3125,0.375 0.33,0.2454 0.4375,0.6634 0.4375,1.25 0,0.2988 -0.023,0.90175 -0.125,1.09375 -0.096,0.192 -0.2044,0.3201 -0.375,0.4375 -0.17,0.106 -0.401,0.196 -0.625,0.25 -0.224,0.042 -0.4417,0.0625 -0.6875,0.0625 l -3.0625,0 z M 68,-6 55.8125,-0.8125 C 54.59258,-0.29327 53,0.30925 53,2 l 0,26 c 0,2.50005 0,4.52175 3.5,3 L 68,26 84,32 98.1875,26.8125 C 99.43265,26.35722 101,25.30925 101,24 l 0,-26 c 0,-3.49995 -0.19997,-4 -3,-3 L 84,0 z M 63.25,5.6875 c 0.9964,0 1.8442,0.152 2.625,0.5 0.7792,0.348 1.4592,0.8255 2,1.4375 0.5392,0.612 0.9612,1.3595 1.25,2.1875 0.2872,0.816 0.4375,1.665 0.4375,2.625 0,0.936 -0.1501,1.809 -0.4375,2.625 -0.2884,0.804 -0.7104,1.525 -1.25,2.125 -0.5408,0.6 -1.2206,1.0895 -2,1.4375 -0.7808,0.336 -1.6286,0.5 -2.625,0.5 -0.9836,0 -1.8955,-0.164 -2.6875,-0.5 -0.78,-0.348 -1.46,-0.8375 -2,-1.4375 -0.54,-0.6 -0.962,-1.321 -1.25,-2.125 -0.288,-0.816 -0.4375,-1.689 -0.4375,-2.625 0,-0.96 0.1501,-1.809 0.4375,-2.625 0.288,-0.828 0.71,-1.5755 1.25,-2.1875 0.54,-0.612 1.22,-1.0895 2,-1.4375 0.792,-0.348 1.7039,-0.5 2.6875,-0.5 z m 12.4375,0 c 0.6716,0 1.3255,0.094 1.9375,0.25 0.624,0.144 1.145,0.3515 1.625,0.6875 0.48,0.336 0.9107,0.7845 1.1875,1.3125 0.2876,0.516 0.4375,1.131 0.4375,1.875 l -2.75,0 C 78.101,9.4285 78.019,9.127 77.875,8.875 77.743,8.623 77.5413,8.394 77.3125,8.25 77.0847,8.106 76.8,7.9975 76.5,7.9375 76.212,7.8775 75.9109,7.875 75.5625,7.875 c -0.2278,0 -0.4595,0.0205 -0.6875,0.0625 -0.228,0.048 -0.433,0.13 -0.625,0.25 -0.18,0.12 -0.3171,0.2575 -0.4375,0.4375 -0.12,0.18 -0.1875,0.4115 -0.1875,0.6875 0,0.252 0.029,0.469 0.125,0.625 0.096,0.156 0.2871,0.3055 0.5625,0.4375 0.2884,0.132 0.6955,0.243 1.1875,0.375 0.504,0.132 1.1331,0.296 1.9375,0.5 0.2392,0.048 0.5792,0.1802 1,0.3125 0.4312,0.12 0.8925,0.2865 1.3125,0.5625 0.42,0.276 0.7631,0.657 1.0625,1.125 0.3124,0.456 0.4375,1.03 0.4375,1.75 0,0.588 -0.0841,1.1835 -0.3125,1.6875 -0.2288,0.504 -0.5444,0.9405 -1,1.3125 -0.4446,0.36 -1.0155,0.6085 -1.6875,0.8125 -0.66,0.204 -1.4373,0.3125 -2.3125,0.3125 -0.7088,0 -1.3905,-0.07 -2.0625,-0.25 -0.66,-0.168 -1.234,-0.4405 -1.75,-0.8125 -0.504,-0.372 -0.95,-0.8615 -1.25,-1.4375 -0.3,-0.576 -0.4501,-1.2705 -0.4375,-2.0625 l 2.75,0 c 0,0.432 0.094,0.825 0.25,1.125 0.156,0.3 0.3732,0.4955 0.625,0.6875 0.2646,0.18 0.5266,0.3415 0.875,0.4375 0.3478,0.084 0.7536,0.125 1.125,0.125 0.2524,0 0.5245,-0.0267 0.8125,-0.0625 0.288,-0.048 0.5597,-0.13 0.8125,-0.25 0.2518,-0.12 0.4572,-0.296 0.625,-0.5 0.168,-0.216 0.25,-0.4885 0.25,-0.8125 0,-0.348 -0.1462,-0.5965 -0.375,-0.8125 -0.2164,-0.216 -0.5146,-0.4185 -0.875,-0.5625 -0.3596,-0.144 -0.7315,-0.267 -1.1875,-0.375 -0.456,-0.108 -0.907,-0.243 -1.375,-0.375 -0.48,-0.12 -0.9809,-0.207 -1.4375,-0.375 -0.4556,-0.18 -0.8275,-0.4115 -1.1875,-0.6875 -0.36,-0.276 -0.7099,-0.6545 -0.9375,-1.0625 -0.2164,-0.42 -0.3125,-0.912 -0.3125,-1.5 0,-0.66 0.1621,-1.2075 0.4375,-1.6875 0.2884,-0.492 0.6682,-0.926 1.125,-1.25 0.4554,-0.324 0.9234,-0.5315 1.5,-0.6875 0.576,-0.156 1.1746,-0.21404 1.75,-0.25 z M 82.875,6 l 4,0 3.03125,8.8125 L 92.9375,6 l 4,0 0,12.8125 -2.6875,0 0,-9.0625 -3.375,9.0625 -2.1875,0 -3.125,-9 -0.0625,9 -2.625,0 z M 63.25,8.0625 c -0.6358,0 -1.182,0.122 -1.625,0.375 -0.4446,0.24 -0.8482,0.58 -1.125,1 -0.275,0.408 -0.4305,0.847 -0.5625,1.375 -0.12,0.528 -0.1875,1.061 -0.1875,1.625 0,0.54 0.0675,1.109 0.1875,1.625 0.132,0.504 0.2873,0.967 0.5625,1.375 0.2766,0.408 0.6804,0.6855 1.125,0.9375 0.4438,0.24 0.99,0.375 1.625,0.375 0.6364,0 1.1185,-0.134 1.5625,-0.375 0.444,-0.252 0.849,-0.5295 1.125,-0.9375 0.276,-0.408 0.4433,-0.871 0.5625,-1.375 0.132,-0.516 0.1875,-1.085 0.1875,-1.625 0,-0.564 -0.0535,-1.097 -0.1875,-1.625 -0.12,-0.528 -0.2865,-0.967 -0.5625,-1.375 -0.276,-0.42 -0.681,-0.76 -1.125,-1 -0.444,-0.252 -0.9257,-0.375 -1.5625,-0.375 z"
- id="path7865"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccsccscccscccsccccccccccccscccscccccscscccsccccsssccssssccscccscccscscscscsccsccccccscccssccccscscccsccsccsccscccsccsccscsccccccccccccccccccscccscccscscscccs" />
- </g>
- <path
- style="color:#000000;fill:#ffffff;fill-opacity:0.75294118;fill-rule:nonzero;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 143,14 -1,1 0,2 -3.5,0 c -2.493,0 -4.5,2.007 -4.5,4.5 0,2.493 2.007,4.5 4.5,4.5 l 3.5,0 c 0,-1.656854 -1.34315,-3 -3,-3 l -0.5,0 c -0.831,0 -1.5,-0.669 -1.5,-1.5 0,-0.831 0.669,-1.5 1.5,-1.5 l 3.5,0 0,2 1,1 4,-4.5 z"
- id="rect3834"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccssscssssccccc" />
- <g
- transform="translate(0.0630273,180.06303)"
- style="display:inline"
- id="g4031"
- inkscape:export-filename="C:\Users\simon\Downloads\sprite.png"
- inkscape:export-xdpi="599.83337"
- inkscape:export-ydpi="599.83337">
- <g
- transform="translate(4.5101293,-0.563766)"
- style="font-size:16px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#c0c0c0;fill-opacity:1;stroke:#c0c0c0;stroke-width:0.40000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;font-family:Sans;-inkscape-font-specification:Sans Bold"
- id="g4014">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:none;stroke:#c0c0c0;stroke-width:4.61538458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path3031"
- sodipodi:cx="255"
- sodipodi:cy="610"
- sodipodi:rx="15"
- sodipodi:ry="15"
- d="m 270,610 c 0,8.28427 -6.71573,15 -15,15 -8.28427,0 -15,-6.71573 -15,-15 0,-8.28427 6.71573,-15 15,-15 8.28427,0 15,6.71573 15,15 z"
- transform="matrix(0.86666662,0,0,0.86666662,-165.6154,-533.41911)" />
- </g>
- <path
- d="m 63.142047,-10.043787 -2.148438,0.226562 c -0.02084,-0.385407 -0.13412,-0.679678 -0.339843,-0.882812 -0.205734,-0.203115 -0.49089,-0.304678 -0.855469,-0.304688 -0.338546,1e-5 -0.596358,0.07423 -0.773438,0.222656 -0.177086,0.148447 -0.265628,0.316416 -0.265625,0.503907 -3e-6,0.255217 0.119789,0.500008 0.359375,0.734375 0.161455,0.156258 0.695309,0.526049 1.601563,1.109375 0.906244,0.58334 1.505202,1.000006 1.796875,1.25 0.453117,0.380214 0.777336,0.756515 0.972656,1.128906 0.195305,0.3724 0.292961,0.78516 0.292969,1.238281 -8e-6,0.484378 -0.118498,0.930993 -0.355469,1.339844 -0.236987,0.408856 -0.592455,0.779949 -1.066406,1.113281 0.317701,0.291668 0.55468,0.602865 0.710937,0.933594 0.156243,0.330729 0.234368,0.680989 0.234375,1.050781 -7e-6,0.770832 -0.28907,1.416665 -0.867187,1.9375 -0.578131,0.52083 -1.40886,0.781247 -2.492188,0.78125 -1.04167,-3e-6 -1.875002,-0.257815 -2.5,-0.773437 -0.625001,-0.515627 -0.994792,-1.203127 -1.109375,-2.0625 l 2.140625,-0.257813 c 0.09375,0.468749 0.272133,0.821614 0.535157,1.058594 0.263017,0.236977 0.595048,0.355467 0.996093,0.355469 0.343746,-2e-6 0.617183,-0.08985 0.820313,-0.269532 0.203119,-0.179688 0.304682,-0.397136 0.304687,-0.652343 -5e-6,-0.244793 -0.09636,-0.463542 -0.289062,-0.65625 -0.197922,-0.192709 -0.891932,-0.667969 -2.082031,-1.425782 -1.190107,-0.75781 -1.964845,-1.386716 -2.324219,-1.886718 -0.359376,-0.499997 -0.539063,-1.059892 -0.539063,-1.679688 0,-0.510411 0.117187,-0.984369 0.351563,-1.421875 0.234374,-0.437493 0.598957,-0.796868 1.09375,-1.078125 -0.260418,-0.281242 -0.457033,-0.5677 -0.589844,-0.859375 -0.132813,-0.291658 -0.19922,-0.588533 -0.199219,-0.890625 -10e-7,-0.703115 0.274739,-1.298167 0.824219,-1.785156 0.549477,-0.486968 1.321612,-0.730457 2.316406,-0.730469 1.020829,1.2e-5 1.824213,0.243501 2.410157,0.730469 0.58593,0.486989 0.930982,1.121103 1.035156,1.902344 z m -1.960938,6.726562 c 0.229161,-0.208331 0.399734,-0.407549 0.511719,-0.597656 0.111973,-0.190101 0.167963,-0.373695 0.167969,-0.550781 -6e-6,-0.171872 -0.0599,-0.348955 -0.179688,-0.53125 -0.119797,-0.182288 -0.447922,-0.468746 -0.984375,-0.859375 l -2.132812,-1.546875 c -0.177086,0.104173 -0.333336,0.25261 -0.46875,0.445312 -0.135419,0.192714 -0.203127,0.398443 -0.203125,0.617188 -2e-6,0.526046 0.35156,1.026046 1.054687,1.5 z"
- style="font-size:16px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#c0c0c0;fill-opacity:1;stroke:#c0c0c0;stroke-width:0.30000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
- id="path4012"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" height="40.226" width="25.1">
+ <defs>
+ <linearGradient id="A" x1="106.764" gradientUnits="userSpaceOnUse" y1="59.373" x2="106.764" y2="21.809">
+ <stop stop-color="#7cb928" offset="0"/>
+ <stop stop-color="#a2c857" offset="1"/>
+ </linearGradient>
+ <linearGradient id="B" x1="106.76" gradientUnits="userSpaceOnUse" y1="40.861" x2="106.76" y2="21.809">
+ <stop stop-color="#74963a" offset="0"/>
+ <stop stop-color="#89b63e" offset="1"/>
+ </linearGradient>
+ </defs>
+ <linearGradient x1="66.61" gradientUnits="userSpaceOnUse" y1="59.373" x2="66.61" y2="21.809">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="66.609" gradientUnits="userSpaceOnUse" y1="40.861" x2="66.609" y2="21.809">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="160.144" gradientUnits="userSpaceOnUse" y1="59.373" x2="160.144" y2="21.809">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="160.146" gradientUnits="userSpaceOnUse" y1="40.861" x2="160.146" y2="21.809">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <path fill-rule="evenodd" fill="#fff" d="M4.123 4.656h16.838v17.462H4.123z"/>
+ <g transform="translate(-94.205 -21.438)">
+ <linearGradient x1="106.764" gradientUnits="userSpaceOnUse" y1="59.373" x2="106.764" y2="21.809">
+ <stop stop-color="#7cb928" offset="0"/>
+ <stop stop-color="#a2c857" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="106.76" gradientUnits="userSpaceOnUse" y1="40.861" x2="106.76" y2="21.809">
+ <stop stop-color="#74963a" offset="0"/>
+ <stop stop-color="#89b63e" offset="1"/>
+ </linearGradient>
+ <g stroke-width="1.1">
+ <path d="m 106.8,21.988 c -6.572,0 -12.045,5.691 -12.045,11.865 0,2.777 1.564,6.309 2.693,8.747 l 9.307,17.871 9.262,-17.871 c 1.131,-2.438 2.738,-5.792 2.738,-8.747 0,-6.174 -5.38,-11.865 -11.96,-11.865 z m -1.18,20.069 c -0.521,0 -1.025,-0.215 -1.389,-0.604 -0.025,-0.027 -2.609,-2.793 -3.945,-3.996 -0.779,-0.703 -0.841,-1.904 -0.139,-2.684 0.703,-0.781 1.904,-0.842 2.684,-0.139 0.64,0.576 1.501,1.438 2.275,2.232 1.244,-2.398 3.327,-6 5.765,-8.545 0.726,-0.758 1.929,-0.783 2.687,-0.057 0.758,0.725 0.783,1.928 0.058,2.686 -3.412,3.562 -6.228,9.906 -6.255,9.971 -0.258,0.584 -0.792,1 -1.422,1.108 -0.11,0.018 -0.22,0.028 -0.32,0.028 z" fill-rule="evenodd" stroke="url(#B)" fill="url(#A)"/>
+ <path d="M106.79 23.093c-5.943 0-10.938 5.221-10.938 10.75 0 2.359 1.443 5.832 2.562 8.25.006.012.025.021.031.031l8.312 15.969 8.25-15.969c.006-.012.025-.02.031-.031 1.135-2.448 2.625-5.706 2.625-8.25.01-5.537-4.93-10.75-10.87-10.75zm5.45 3.543a3.01 3.01 0 0 0-2.166.926c-2.09 2.18-3.914 5.074-5.236 7.471-.502-.498-.928-.904-1.273-1.217-.553-.498-1.266-.771-2.009-.771a3 3 0 0 0-2.228.992c-1.107 1.227-1.01 3.129.219 4.236 1.288 1.16 3.85 3.901 3.874 3.926.569.609 1.368.957 2.196.957a3.08 3.08 0 0 0 .498-.041c1.002-.172 1.841-.824 2.248-1.75.029-.064 2.805-6.271 6.043-9.652a2.98 2.98 0 0 0 .834-2.141c-.018-.801-.346-1.547-.925-2.102a3.01 3.01 0 0 0-2.08-.834z" stroke-opacity=".122" stroke="#fff" fill="none"/>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 15.875 15.875" stroke="#fff" stroke-width=".794"><rect width="10.933" height="2.295" x="2.45" y="3.029" rx="1" paint-order="stroke fill markers"/><rect width="10.933" height="2.295" x="2.45" y="6.79" rx="1" paint-order="stroke fill markers"/><rect width="10.933" height="2.295" x="2.471" y="10.531" rx="1" paint-order="stroke fill markers"/></svg>
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" height="40.226" width="25.099">
+ <linearGradient x1="66.61" gradientUnits="userSpaceOnUse" y1="59.373" x2="66.61" y2="21.809">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="66.609" gradientUnits="userSpaceOnUse" y1="40.861" x2="66.609" y2="21.809">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <linearGradient id="A" x1="12.548" gradientUnits="userSpaceOnUse" y1="37.935" x2="12.548" y2=".371">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient id="B" x1="12.55" gradientUnits="userSpaceOnUse" y1="19.423" x2="12.55" y2=".371">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <g fill-rule="evenodd">
+ <path fill="#fff" d="M2.063 13.585L12.069 2.251l11.124 12.602-10.006 11.335z"/>
+ <path fill="url(#A)" d="M 12.594,0.55000001 C 6.022,0.55000001 0.55000001,6.241 0.55000001,12.415 c 0,2.777 1.56299999,6.309 2.69299999,8.747 l 9.307,17.871 9.262,-17.871 c 1.13,-2.438 2.737001,-5.792 2.737001,-8.747 C 24.539001,6.241 19.159,0.55000001 12.589,0.55000001 v 0 z M 14.644,11.411 V 6.595 c 0,-1.105 -0.895,-2 -2,-2 -1.104,0 -2.001,0.897 -2,2 V 11.41 H 5.829 c -1.104,-10e-4 -2,0.896 -2,2 0,1.104 0.895,2 2,2 h 4.815 v 4.815 c -10e-4,1.104 0.896,2 2,2 0.552,0 1.052,-0.224 1.414,-0.586 0.361,-0.361 0.586,-0.861 0.586,-1.414 V 15.41 h 4.815 c 0.551,0 1.052,-0.224 1.414,-0.586 0.361,-0.362 0.585,-0.862 0.586,-1.415 0.001,-1.104 -0.896,-2.001 -2,-2 -0.008,0.0044 -4.815,0.002 -4.815,0.002 z" stroke="url(#B)" stroke-width="1.1"/>
+ </g>
+ <path fill="none" stroke-opacity=".122" stroke="#fff" stroke-width="1.1" d="M12.584 1.655c-5.944 0-10.938 5.221-10.938 10.75 0 2.359 1.442 5.832 2.562 8.25.005.012.025.021.03.031l8.313 15.969 8.25-15.969c.005-.012.025-.02.03-.031 1.136-2.448 2.625-5.706 2.625-8.25.01-5.537-4.92-10.75-10.86-10.75h0zm-2.13 2.757a3.08 3.08 0 0 0-.908 2.194l.001 3.714-3.716-.001a3.08 3.08 0 0 0-2.192.908 3.07 3.07 0 0 0-.906 2.193 3.07 3.07 0 0 0 .906 2.191c.586.585 1.365.908 2.193.908l3.714-.001.001 3.716c-.001.826.321 1.605.907 2.191s1.365.908 2.191.907 1.606-.322 2.191-.907a3.08 3.08 0 0 0 .909-2.193l.001-3.713 3.714-.001a3.08 3.08 0 0 0 2.191-.908c.586-.586.909-1.365.908-2.192a3.07 3.07 0 0 0-.907-2.191 3.07 3.07 0 0 0-2.191-.907h-3.717l.002-3.715a3.08 3.08 0 0 0-.908-2.192c-.586-.585-1.364-.908-2.193-.908-.8-.002-1.58.321-2.17.907h0z"/>
+</svg>
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" height="40.226" width="25.099">
+ <defs>
+ <linearGradient id="A" x1="27.311" gradientUnits="userSpaceOnUse" y1="59.373" x2="27.311" y2="21.809">
+ <stop stop-color="#c72118" offset="0"/>
+ <stop stop-color="#d2534f" offset="1"/>
+ </linearGradient>
+ <linearGradient id="B" x1="27.31" gradientUnits="userSpaceOnUse" y1="40.861" x2="27.31" y2="21.809">
+ <stop stop-color="#983a38" offset="0"/>
+ <stop stop-color="#b83d3b" offset="1"/>
+ </linearGradient>
+ </defs>
+ <linearGradient x1="66.61" gradientUnits="userSpaceOnUse" y1="59.373" x2="66.61" y2="21.809">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="66.609" gradientUnits="userSpaceOnUse" y1="40.861" x2="66.609" y2="21.809">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="160.144" gradientUnits="userSpaceOnUse" y1="59.373" x2="160.144" y2="21.809">
+ <stop stop-color="#286eb5" offset="0"/>
+ <stop stop-color="#4d9cd1" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="160.146" gradientUnits="userSpaceOnUse" y1="40.861" x2="160.146" y2="21.809">
+ <stop stop-color="#306d98" offset="0"/>
+ <stop stop-color="#3984b8" offset="1"/>
+ </linearGradient>
+ <path d="M2.805 9.333l5.717-6.132 9.459.208 4.47 7.068-2.806 11.33-8.835.728-5.405-1.455-2.391-6.444z" fill="#fff"/>
+ <g transform="translate(-14.761 -21.438)">
+ <linearGradient x1="27.311" gradientUnits="userSpaceOnUse" y1="59.373" x2="27.311" y2="21.809">
+ <stop stop-color="#c72118" offset="0"/>
+ <stop stop-color="#d2534f" offset="1"/>
+ </linearGradient>
+ <linearGradient x1="27.31" gradientUnits="userSpaceOnUse" y1="40.861" x2="27.31" y2="21.809">
+ <stop stop-color="#983a38" offset="0"/>
+ <stop stop-color="#b83d3b" offset="1"/>
+ </linearGradient>
+ <g stroke-width="1.1">
+ <path d="m 27.355,21.988 c -6.572,0 -12.044,5.691 -12.044,11.865 0,2.777 1.563,6.309 2.693,8.747 L 27.311,60.471 36.573,42.6 c 1.13,-2.438 2.737,-5.792 2.737,-8.747 10e-4,-6.174 -5.382,-11.865 -11.955,-11.865 z m 2.875,12.86 3.547,-3.547 c 0.781,-0.781 0.781,-2.047 0,-2.828 -0.782,-0.781 -2.049,-0.781 -2.829,0 l -3.547,3.547 -3.547,-3.547 c -0.779,-0.781 -2.047,-0.781 -2.828,0 -0.781,0.781 -0.781,2.047 0,2.828 l 3.547,3.547 -3.547,3.546 c -0.781,0.78 -0.781,2.048 0,2.828 0.391,0.391 0.902,0.586 1.414,0.586 0.512,0 1.024,-0.195 1.414,-0.586 l 3.547,-3.546 3.547,3.546 c 0.39,0.391 0.902,0.586 1.414,0.586 0.512,0 1.023,-0.195 1.415,-0.586 0.781,-0.78 0.781,-2.048 0,-2.828 z" fill-rule="evenodd" stroke="url(#B)" fill="url(#A)"/>
+ <path d="M27.343 23.093c-5.944 0-10.938 5.221-10.938 10.75 0 2.359 1.442 5.832 2.562 8.25.005.012.025.021.03.031l8.313 15.969 8.25-15.969c.005-.012.025-.02.03-.031 1.136-2.448 2.625-5.706 2.625-8.25.002-5.537-4.929-10.75-10.872-10.75zm5.02 3.706a3.08 3.08 0 0 0-2.193.909l-2.768 2.769-2.769-2.77a3.08 3.08 0 0 0-2.192-.908c-.828 0-1.607.323-2.191.909s-.908 1.363-.908 2.191a3.08 3.08 0 0 0 .908 2.192l2.769 2.768-2.769 2.77c-.586.584-.908 1.363-.908 2.191s.322 1.607.908 2.191 1.363.908 2.191.908a3.08 3.08 0 0 0 2.193-.908l2.768-2.767 2.769 2.767c.585.586 1.363.908 2.192.908s1.607-.322 2.191-.908a3.07 3.07 0 0 0 .908-2.191c0-.828-.322-1.607-.908-2.191l-2.769-2.77 2.769-2.768a3.08 3.08 0 0 0 0-4.384 3.08 3.08 0 0 0-2.191-.908z" stroke-opacity=".122" stroke="#fff" fill="none"/>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px">
+ <path fill="#9E9E9E" d="M44,27l-1-9l-2.9,1.9c-2.7-1.7-6.1-2.9-9.9-3.5c0,0-1.9-0.4-4.4-0.4s-4.8,0.3-4.8,0.3C11.3,17.5,4,23,4,29.6C4,36.4,11.5,42,23,43v-3.9c-7.9-1.1-12.9-4.8-12.9-9.5c0-4.4,4.6-8.1,10.9-9.3c0,0,4.9-1.1,9.2,0.2c2.1,0.5,4,1.2,5.6,2.2L32,25L44,27z"/>
+ <path d="M23 8L23 43 29 40 29 5z"/>
+ <path fill="#FF9800" d="M23 8L23 43 29 40 29 5z"/>
+</svg>
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="520"
- height="20"
- viewBox="0 0 520.00001 20"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="routing-sprite.svg"
- inkscape:export-filename="/home/patrick/Code/openstreetmap-website/app/assets/images/routing-sprite.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="5.6568542"
- inkscape:cx="131.24519"
- inkscape:cy="13.736603"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:showpageshadow="false"
- inkscape:window-width="1920"
- inkscape:window-height="1080"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="0"
- showguides="false"
- inkscape:guide-bbox="true"
- units="px">
- <inkscape:grid
- type="xygrid"
- id="grid4224" />
- <sodipodi:guide
- position="20.000001,31"
- orientation="1,0"
- id="guide4226" />
- <sodipodi:guide
- position="40.000001,19"
- orientation="1,0"
- id="guide4245" />
- <sodipodi:guide
- position="60.000002,29"
- orientation="1,0"
- id="guide4299" />
- <sodipodi:guide
- position="80.000002,35"
- orientation="1,0"
- id="guide4388" />
- <sodipodi:guide
- position="71.000002,10"
- orientation="-0.7193398,-0.69465837"
- id="guide4432"
- inkscape:label=""
- inkscape:color="rgb(0,0,255)" />
- <sodipodi:guide
- position="100,15"
- orientation="1,0"
- id="guide4499" />
- <sodipodi:guide
- position="120,15"
- orientation="1,0"
- id="guide4578" />
- <sodipodi:guide
- position="140,16"
- orientation="1,0"
- id="guide4580" />
- <sodipodi:guide
- position="160,21"
- orientation="1,0"
- id="guide4582" />
- <sodipodi:guide
- position="180,15"
- orientation="1,0"
- id="guide4729" />
- <sodipodi:guide
- position="200.00001,15"
- orientation="1,0"
- id="guide4731" />
- <sodipodi:guide
- position="220.00001,11"
- orientation="1,0"
- id="guide4747" />
- <sodipodi:guide
- position="78.000002,12"
- orientation="-0.70710678,0.70710678"
- id="guide4212"
- inkscape:label=""
- inkscape:color="rgb(0,0,255)" />
- <sodipodi:guide
- position="240.00001,19"
- orientation="1,0"
- id="guide4264" />
- <sodipodi:guide
- position="260.00001,19"
- orientation="1,0"
- id="guide4266" />
- <sodipodi:guide
- position="280.00001,5"
- orientation="1,0"
- id="guide4280" />
- <sodipodi:guide
- position="300.00001,10"
- orientation="1,0"
- id="guide4297" />
- <sodipodi:guide
- position="320.00001,24"
- orientation="1,0"
- id="guide4305" />
- <sodipodi:guide
- position="340.00001,28"
- orientation="1,0"
- id="guide4335" />
- <sodipodi:guide
- position="360.00001,30"
- orientation="1,0"
- id="guide4337" />
- <sodipodi:guide
- position="380.00001,19"
- orientation="1,0"
- id="guide4376" />
- <sodipodi:guide
- position="400.00001,19"
- orientation="1,0"
- id="guide4382" />
- <sodipodi:guide
- position="420.00001,36"
- orientation="1,0"
- id="guide4394" />
- <sodipodi:guide
- position="440.00001,20"
- orientation="1,0"
- id="guide4449" />
- <sodipodi:guide
- position="460.00001,22"
- orientation="1,0"
- id="guide4451" />
- <sodipodi:guide
- position="480.00001,20"
- orientation="1,0"
- id="guide4485" />
- <sodipodi:guide
- position="500.00001,40"
- orientation="1,0"
- id="guide4487" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1032.3622)">
- <image
- y="1002.3622"
- x="1.7763568e-15"
- id="image4217"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWgAAAAUCAMAAACXrFfpAAABOFBMVEUAAAB/f39/f39/f39/f396 enoAAAB7e3t7e3t4eHh5eXl5eXl6enp3d3d4eHgAAAB3d3d1dXVzc3MAAABwcHBvb29ubm4AAABt bW1sbGxsbGxsbGxra2tra2toaGhoaGhqamoAAABmZmZoaGgAAABnZ2dkZGQAAABiYmJXV1dXV1cA AAAAAABMTEwAAAAAAABDQ0MAAAA1NTU1NTUxMTEAAAAxMTEAAAAAAAAmJiYlJSUkJCQjIyMiIiIA AAAcHBwAAAAAAAAAAAAAAAAUFBQAAAAAAAAQEBAPDw8AAAAPDw8AAAAAAAANDQ0MDAwAAAAAAAAM DAwKCgoAAAAAAAAICAgICAgAAAAHBwcAAAAHBwcGBgYAAAAAAAAAAAAAAAADAwMAAAAAAAAAAAAA AAAAAAAAAAAAAABULW3yAAAAZ3RSTlMAAQIGCw4QEBIUFhcZGh0gICItMDQ5PEBAQUJERUZHSEhK SkxMTU9QUFZXWGBgZGZpcHl6f4CAiJCRk5SXmaCmrLC1uLzAxMXIyMrM0NDT09TU29zg4OLk5ebm 6fDx8/T09vf4+/z9ttm2NwAABH9JREFUeF7tV+9zFTUUzQOMFZUAiwZbkB9bXYEU3UI0FVhcNQVx rQpbsBopFuX8//+BMy/vvd3k7mRnio8PHc/HOyc35545yWbZkYOQtKYSvDeOgg/Xs4JR8OI/kDnc Q6jX02wqqtZlKR7tN47MWtNfOMRZOZ/n+fmVuNwMD6hRhDmQSlcNXCCpJAKVtbYiRnIViAVspQsp w9Wo0+OmNXMHQWeoUjzabxwSsP1mNDMn1/KHAB7ma+9EK9uhfi1CPdxgijJMggtjnzWeZViSVnmW jqaF0yyBtGYNVNRTiEEe7Xc4oxXtxS78Co+fVoO6BSTpZgEgKt78GyCCHGxvFN5iBh12a6kD+OsK C2EBtCqR6pRm8SdI0QCwMQ8AsvF+FGLA6HkcpV64cOwz5B7Iw3B492gsXVgtp0XVXRFTPANQyX5S jSya/iyyBvDMs1WfCFeQrNGqrOFqyRjRTL0CGh7SDnAANcQb7Uf3FS01ugRQe+kL6uRT5Jfu/nb3 UmR04++DENmTOAu8jszXmKMbUMxa8WZxPHmDHnSQK8AQo1+uswDKExUb0VyUN4B1VQSBLixspnnI W/c82m9k3woqMtofTMjI6E9waxfA7i3kE5IiQcYLjc5aAO0VmCGj3fzclPOsyO48CO0GjGa1KxyA RgRG/wPU8UH3EGxM8w3gJovQ4BdvM+Wl+9F9BdDGRvvwtbxv9MnVTcyxufruwkBX/Qh8VTfkCq2t DZ4JQM1ZkwXfFCnlE7guMvUiFw5YULl2aKSUVd9oVTHRRPeTdp8DCEMJdNlPajYziXE6XMEor2Is 3Y/ua19iX4dGq9YAKJuqb/SFB+jwYG2RmNmHQPDoUeA4r8NLrAzf/3pqm0AtyDeFfF2EhfArupKc jdM3WjILOHKjzo5XUrMGtrcBE8Zl77s9H0rKS/aj+4pCY12FRgvGpgOIvtFn76HDvbPpL64F1HQ9 edPERpeK0ValySywrqquQ1lGRnuERnN/ZAeNrkdeCQ5qKrNnVjk91DUqwisATvsl9/VeclNIwApT BAPw5gd8Y33L41efYo6nV48nRJNSyujhdRYHwD6K0RUA0pUSM5RpgZk/CE2/rOGPuiUPZs8j/ZL7 +tAW2Aeew0ZyZe+ZdeY25rh9hi3XaOH8RXhYo+nDvB1JIPcZbUOjDWNMBcqF/7N1yGi/9L7eaP/9 cyKWa7tpJznmyCdLNdp7CscPazR90zfZiEDWoBa8ggtFl0y68DC0nteO9aP7ash5hjSRK3tfgouP XuHF9y/w6tFFtmyjufNqDmd0iELrgrFRYzBFwKww8BPT8Ui/9L7KZrMpHKdyy0WgT63lG1vX8+tb G/naqcmSjWYajr+e0RRpzdm3wM9RUe/hueGUt50cOA3uoFNyz23uPL6zcf+P+xt3Hu9snluC0ZEc zZZvdKxRUp5lKR7tNw7jeEpujp3Z1YHd35Ev22hmxFE1Wpik3MubH324sXXtg2tff7H68ZeX2dFD Zm1G0mdNgrcUrLw/YW+dPsFOnH6bHXtvhb0p/I9/AQmEF7Y+Eo3CAAAAAElFTkSuQmCC "
- preserveAspectRatio="none"
- height="20.000017"
- width="360" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 9,1039.3309 3.6e-5,10.0313 1.999964,0 -3.5e-5,-10.0313 z"
- id="path4446"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path4448"
- d="m 15,1039.3466 -5,-4.9844 -5,5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 87.125,4.984375 87.125,5 86,5 86,12.005859 82,12 l 5,5 5,-4.984375 -4,-0.0059 0,-5.025391 7,0 L 95,17 l 2,0 0,-12 -0.46875,0 0,-0.015625 -9.40625,0 z"
- transform="translate(0,1032.3622)"
- id="path4509"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 28,3.9882812 2.814453,2.8203126 -4.777344,4.7460942 0,0.04297 -0.03711,0 L 26,17 28,17 28,12.423828 32.228516,8.2226562 35,11 35,4 28,3.9882812 Z"
- transform="translate(0,1032.3622)"
- id="path4450"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 53,4 0.0059,3.984375 -6.005859,0 0,2 L 47,17 l 2,0 0,-7.015625 4.009766,0 L 53.015625,14 58,9 53,4 Z"
- transform="translate(0,1032.3622)"
- id="path4208"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 67.025391,4.4101562 67.003906,17 l 2,0 0,-7.5527344 3.685547,3.8710934 -2.683114,2.694508 6.989812,0.05505 0.01101,-7.0846724 -2.854816,2.9210504 z"
- transform="translate(0,1032.3622)"
- id="path4424"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccc" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 170,1035.3622 -4,5 3,0 0,5 2,0 0,-5 3,0 z"
- id="path4735"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <g
- id="g4237">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 189,1039.3309 4e-5,10.0313 1.99996,0 -3e-5,-10.0313 z"
- id="path4233"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path4235"
- d="m 195,1039.3466 -5,-4.9844 -5,5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <path
- id="path4221"
- d="m 112.00001,1036.3505 -2.81445,2.8203 4.77734,4.7461 0,0.043 0.0371,0 0,5.4023 -2,0 0,-4.5762 -4.22852,-4.2011 -2.77148,2.7773 0,-7 7,-0.012 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- id="path4223"
- d="m 128.00028,1036.3622 -0.006,3.9844 6.00586,0 0,2 0,7.0156 -2,0 0,-7.0156 -4.00977,0 -0.006,4.0156 -4.98437,-5 5,-5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path4225"
- d="m 153.98575,1036.7724 0.0215,12.5898 -2,0 0,-7.5527 -3.68555,3.8711 2.68312,2.6945 -6.98982,0.055 -0.011,-7.0847 2.85482,2.9211 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <g
- id="g4254"
- transform="translate(-2.0000461,0)">
- <circle
- r="3"
- transform="scale(1,-1)"
- cy="-1044.3622"
- cx="210.04105"
- id="path4231"
- style="opacity:1;fill:none;fill-opacity:0.43824702;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4247"
- transform="translate(0,1032.3622)"
- d="m 211,3.9882812 2.81445,2.8203126 -1.76562,1.7539062 c 0.58436,0.3442274 1.07073,0.8277607 1.41797,1.4101562 l 1.76172,-1.75 L 218,11 218,4 211,3.9882812 Z M 209,15.84375 209,17 l 2,0 0,-1.130859 C 210.69097,15.946541 210.3729,16 210.04102,16 209.67912,16 209.3342,15.935262 209,15.84375 Z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="translate(17.999954,0)"
- id="g4258">
- <circle
- style="opacity:1;fill:none;fill-opacity:0.43824702;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="circle4260"
- cx="210.04105"
- cy="-1044.3622"
- transform="scale(1,-1)"
- r="3" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 211,3.9882812 2.81445,2.8203126 -1.76562,1.7539062 c 0.58436,0.3442274 1.07073,0.8277607 1.41797,1.4101562 l 1.76172,-1.75 L 218,11 218,4 211,3.9882812 Z M 209,15.84375 209,17 l 2,0 0,-1.130859 C 210.69097,15.946541 210.3729,16 210.04102,16 209.67912,16 209.3342,15.935262 209,15.84375 Z"
- transform="translate(0,1032.3622)"
- id="path4262" />
- </g>
- <g
- id="g4268"
- transform="translate(37.999954,0)">
- <circle
- r="3"
- transform="scale(1,-1)"
- cy="-1044.3622"
- cx="210.04105"
- id="circle4270"
- style="opacity:1;fill:none;fill-opacity:0.43824702;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4272"
- transform="translate(0,1032.3622)"
- d="m 211,3.9882812 2.81445,2.8203126 -1.76562,1.7539062 c 0.58436,0.3442274 1.07073,0.8277607 1.41797,1.4101562 l 1.76172,-1.75 L 218,11 218,4 211,3.9882812 Z M 209,15.84375 209,17 l 2,0 0,-1.130859 C 210.69097,15.946541 210.3729,16 210.04102,16 209.67912,16 209.3342,15.935262 209,15.84375 Z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="g4274"
- transform="translate(80,0)">
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4276"
- d="m 189,1039.3309 4e-5,10.0313 1.99996,0 -3e-5,-10.0313 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 195,1039.3466 -5,-4.9844 -5,5 z"
- id="path4278"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
- <path
- id="path4295"
- d="m 290,1035.3622 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m 0,4 -4,5 3,0 0,5 2,0 0,-5 3,0 -4,-5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <g
- id="g4313">
- <g
- id="g4299"
- transform="translate(115.01146,2)">
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4301"
- d="m 189,1037.3422 4e-5,7.9763 1.99996,0 -3e-5,-7.9763 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 192.99451,1037.3474 190,1034.3622 l -3.01146,3.0115 z"
- id="path4303"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
- <g
- transform="matrix(1,0,0,-1,123.01146,2083.7244)"
- id="g4307">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 189,1039.3309 4e-5,10.0313 1.99996,0 -3e-5,-10.0313 z"
- id="path4309"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path4311"
- d="m 195,1039.3466 -5,-4.9844 -5,5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <g
- id="g4321"
- transform="matrix(-1,0,0,-1,640.01146,2083.7244)">
- <g
- transform="translate(115.01146,2)"
- id="g4323">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 189,1037.3422 4e-5,7.9763 1.99996,0 -3e-5,-7.9763 z"
- id="path4325"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path4327"
- d="M 192.99451,1037.3474 190,1034.3622 l -3.01146,3.0115 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <g
- id="g4329"
- transform="matrix(1,0,0,-1,123.01146,2083.7244)">
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4331"
- d="m 189,1039.3309 4e-5,10.0313 1.99996,0 -3e-5,-10.0313 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 195,1039.3466 -5,-4.9844 -5,5 z"
- id="path4333"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
- </g>
- <path
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 349,3 0,1 -3,0 0,5.2265625 L 343.95508,10 347,13 l 0,0.904297 1.61133,1.425781 1.88867,-1.671875 1.89062,1.671875 L 354,13.90625 354,13 357.04492,10.044922 355,9.2617188 355,4 l -3,0 0,-1 -3,0 z m -2,2 7,0 0,3.8769531 L 350.48633,7.53125 347,8.8496094 347,5 Z m -0.2793,9.992188 -2.2207,1.966796 0.66211,0.748047 1.55859,-1.378906 L 348.61133,18 350.5,16.328125 352.39062,18 l 1.88868,-1.671875 1.55859,1.378906 0.66211,-0.748047 -2.2207,-1.966796 -1.88868,1.673828 -1.89062,-1.673828 -1.88867,1.673828 -1.89063,-1.673828 z"
- transform="translate(0,1032.3622)"
- id="path4341"
- inkscape:connector-curvature="0" />
- <g
- id="g4384">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 370,1036.3505 2.81445,2.8203 -4.77734,4.7461 0,0.043 -0.0371,0 0,5.4023 2,0 0,-4.5762 4.22852,-4.2011 2.77148,2.7773 0,-7 -7,-0.012 z"
- id="path4374"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0"
- id="path4378"
- d="m 365.18556,1039.1708 4.77734,4.7461 0,0.043 0.0371,0 0,5.4023 -2,0 0,-4.5762 -4.22852,-4.2011 z"
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <g
- id="g4388"
- transform="matrix(-1,0,0,1,760.00001,0)">
- <path
- inkscape:connector-curvature="0"
- id="path4390"
- d="m 370,1036.3505 2.81445,2.8203 -4.77734,4.7461 0,0.043 -0.0371,0 0,5.4023 2,0 0,-4.5762 4.22852,-4.2011 2.77148,2.7773 0,-7 -7,-0.012 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 365.18556,1039.1708 4.77734,4.7461 0,0.043 0.0371,0 0,5.4023 -2,0 0,-4.5762 -4.22852,-4.2011 z"
- id="path4392"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc" />
- </g>
- <g
- id="g4438">
- <path
- id="path4421"
- transform="translate(0,1032.3622)"
- d="m 407.0293,3.9882812 0,5.4023438 0.0371,0 0,0.042969 1.95117,1.9375 0,5.638672 2.8164,-2.820313 2.72657,2.796875 1.44531,-1.382812 -2.76758,-2.837891 0.0195,-0.02148 2.75977,-2.7460939 -5.5293,0.00977 -1.45898,-1.4433584 0,-4.5761719 -2,0 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0"
- id="path4423"
- d="m 404.21408,1046.5416 4.77734,-4.7461 0,-0.043 0.0371,0 0,-5.4023 -2,0 0,4.5762 -4.22852,4.2011 z"
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <g
- id="g4442"
- transform="matrix(-1,0,0,1,840.01754,0)">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 407.0293,3.9882812 0,5.4023438 0.0371,0 0,0.042969 1.95117,1.9375 0,5.638672 2.8164,-2.820313 2.72657,2.796875 1.44531,-1.382812 -2.76758,-2.837891 0.0195,-0.02148 2.75977,-2.7460939 -5.5293,0.00977 -1.45898,-1.4433557 0,-4.5761719 -2,0 z"
- transform="translate(0,1032.3622)"
- id="path4444"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 404.21408,1046.5416 4.77734,-4.7461 0,-0.043 0.0371,0 0,-5.4023 -2,0 0,4.5762 -4.22852,4.2011 z"
- id="path4447"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc" />
- </g>
- <g
- id="g4465"
- transform="translate(-0.99975,0)">
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4455"
- d="m 449,1041.3622 4e-5,8 1.99996,0 -3e-5,-8 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 454.0156,1045.3622 4.9844,-5 -5,-5 z"
- id="path4457"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 455,1039.3466 -6,0 0,2 6,-10e-5 z"
- id="path4461"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4463"
- d="m 451.01565,1039.3466 -7.9629,0 0,2 7.9629,-10e-5 z"
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4473"
- d="m 472.053,1041.3622 -4e-5,8 -1.99996,0 3e-5,-8 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 467.0374,1045.3622 -4.9844,-5 5,-5 z"
- id="path4475"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 466.053,1039.3466 6,0 0,2 -6,-10e-5 z"
- id="path4477"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4479"
- d="m 470.03735,1039.3466 7.9629,0 0,2 -7.9629,-10e-5 z"
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 490,1036.3505 2.81445,2.8203 -4.77734,4.7461 0,0.043 -0.0371,0 0,5.4023 2,0 0,-4.5762 4.22852,-4.2011 2.77148,2.7773 0,-7 -7,-0.012 z"
- id="path4491"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:0.50980392;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 490,1038.3622 -4e-5,11 -1.99996,0 3e-5,-11 z"
- id="path4505"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- inkscape:connector-curvature="0"
- id="path4510"
- d="m 490,1036.3505 2.81445,2.8203 -4.77734,4.7461 0,0.043 -0.0371,0 0,5.4023 2,0 0,-4.5762 4.22852,-4.2011 2.77148,2.7773 0,-7 -7,-0.012 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path4514"
- d="m 510.00001,1036.3505 -2.81445,2.8203 4.77734,4.7461 0,0.043 0.0371,0 0,5.4023 -2,0 0,-4.5762 -4.22852,-4.2011 -2.77148,2.7773 0,-7 7,-0.012 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4516"
- d="m 510.00001,1038.3622 4e-5,11 1.99996,0 -3e-5,-11 z"
- style="fill:#000000;fill-opacity:0.5098038;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 510.00001,1036.3505 -2.81445,2.8203 4.77734,4.7461 0,0.043 0.0371,0 0,5.4023 -2,0 0,-4.5762 -4.22852,-4.2011 -2.77148,2.7773 0,-7 7,-0.012 z"
- id="path4518"
- inkscape:connector-curvature="0" />
- <text
- xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:125%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="7.5"
- y="1065.3622"
- id="text4238"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan4240"
- x="7.5"
- y="1065.3622">0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25</tspan></text>
- <path
- inkscape:connector-curvature="0"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 170,1045.3622 c -1.10457,0 -2,0.8954 -2,2 0,1.1046 0.89543,2 2,2 1.10457,0 2,-0.8954 2,-2 0,-1.1046 -0.89543,-2 -2,-2 z"
- id="path3440"
- sodipodi:nodetypes="sssss" />
- </g>
+<svg xmlns="http://www.w3.org/2000/svg" width="520" height="20">
+ <style><![CDATA[.C{fill-opacity:.51}.D{stroke-width:2}]]></style>
+ <path d="M9 6.969V17h2V6.969z"/>
+ <path d="M15 6.985L10 2 5 7zm72.125-2.001V5H86v7.006L82 12l5 5 5-4.984-4-.006V6.984h7V17h2V5h-.469v-.016h-9.406zM28 3.988l2.814 2.82-4.777 4.746v.043H26V17h2v-4.576l4.229-4.201L35 11V4l-7-.012zM53 4l.006 3.984H47v2V17h2V9.984h4.01L53.016 14 58 9l-5-5zm14.025.41L67.004 17h2V9.447l3.686 3.871-2.683 2.695 6.99.055.011-7.085-2.855 2.921zM170 3l-4 5h3v5h2V8h3zm19 3.969V17h2V6.969z"/>
+ <path d="M195 6.985L190 2l-5 5zm-83-2.997l-2.814 2.82 4.777 4.746v.043H114V17h-2v-4.576l-4.229-4.201L105 11V4l7-.012zM128 4l-.006 3.984H134v2V17h-2V9.985h-4.01L127.984 14 123 9l5-5zm25.986.41l.022 12.59h-2V9.447l-3.686 3.871 2.683 2.695-6.99.055-.011-7.085 2.855 2.921z"/>
+ <circle r="3" cy="12" cx="208" fill="none" stroke="#000" class="D"/>
+ <path d="M209 3.988l2.814 2.82-1.766 1.754a4.03 4.03 0 0 1 1.418 1.41l1.762-1.75L216 11V4l-7-.012zm-2 11.855V17h2v-1.131c-.309.077-.627.131-.959.131-.362 0-.707-.065-1.041-.156z"/>
+ <circle cx="228" cy="12" r="3" fill="none" stroke="#000" class="D"/>
+ <path d="M229 3.988l2.814 2.82-1.766 1.754a4.03 4.03 0 0 1 1.418 1.41l1.762-1.75L236 11V4l-7-.012zm-2 11.855V17h2v-1.131c-.309.077-.627.131-.959.131-.362 0-.707-.065-1.041-.156z"/>
+ <circle r="3" cy="12" cx="248" fill="none" stroke="#000" class="D"/>
+ <path d="M249 3.988l2.814 2.82-1.766 1.754a4.03 4.03 0 0 1 1.418 1.41l1.762-1.75L256 11V4l-7-.012zm-2 11.855V17h2v-1.131c-.309.077-.627.131-.959.131a3.94 3.94 0 0 1-1.041-.156zm22-8.874V17h2V6.969z"/>
+ <path d="M275 6.985L270 2l-5 5zM290 3a2 2 0 1 0 0 4 2 2 0 1 0 0-4zm0 4l-4 5h3v5h2v-5h3l-4-5zm14.011-.02v7.976h2V6.98z"/>
+ <path d="M308.006 6.985L305.011 4 302 7.012zm4.005 5.047V2h2v10.031z"/>
+ <path d="M318.011 12.016l-5 4.984-5-5z"/>
+ <path d="M336 12.02v-7.976h-2v7.976z"/>
+ <path d="M332.005 12.015l2.995 2.985 3.011-3.012z m-4.005-5.047v10.031h-2v-10.031z"/>
+ <path d="M322 6.984l5-4.984 5 5z"/>
+ <path d="M349 3v1h-3v5.227l-2.045.773L347 13v.904l1.611 1.426 1.889-1.672 1.891 1.672L354 13.906V13l3.045-2.955L355 9.262V4h-3V3h-3zm-2 2h7v3.877l-3.514-1.346L347 8.85V5zm-.279 9.992l-2.221 1.967.662.748 1.559-1.379 1.89 1.672 1.889-1.672L352.391 18l1.889-1.672 1.559 1.379.662-.748-2.221-1.967-1.889 1.674-1.891-1.674-1.889 1.674-1.891-1.674zM370 3.988l2.814 2.82-4.777 4.746v.043H368V17h2v-4.576l4.229-4.201L377 11V4l-7-.012z"/>
+ <path d="M365.186 6.809l4.777 4.746v.043H370V17h-2v-4.576l-4.229-4.201z" class="C"/>
+ <path d="M390 3.989l-2.814 2.82 4.777 4.746v0.043H392v5.402h-2v-4.576l-4.229-4.201-2.771 2.777v-7l7-0.012z"/>
+ <path d="M394.814 6.809l-4.777 4.746v0.043H390v5.402h2v-4.576l4.229-4.201z" class="C"/>
+ <path d="M407.029 3.988v5.402h.037v.043l1.951 1.938v5.639l2.816-2.82 2.727 2.797 1.445-1.383-2.768-2.838.019-.021 2.76-2.746-5.529.01-1.459-1.443V3.988h-2z"/>
+ <path d="M404.214 14.18l4.777-4.746V9.39h.037V3.988h-2v4.576l-4.229 4.201z" class="C"/>
+ <path d="M432.989 3.988v5.402h-0.037v0.043l-1.951 1.938v5.639l-2.816-2.82-2.727 2.797-1.445-1.383 2.768-2.838-0.019-0.021-2.76-2.746 5.529 0.01 1.459-1.443v-4.576h2z"/>
+ <path d="M435.804 14.18l-4.777-4.746v-0.043h-0.037v-5.402h2v4.576l4.229 4.201z" class="C"/>
+ <path d="M448 9v8h2V9zm5.016 4L458 8l-5-5z"/>
+ <path d="M454 6.985h-6v2h6z"/>
+ <path d="M450.016 6.985h-7.963v2h7.963z" class="C"/>
+ <path d="M472.053 9v8h-2V9zm-5.016 4l-4.984-5 5-5z"/>
+ <path d="M466.053 6.985h6v2h-6z"/>
+ <path d="M470.037 6.985H478v2h-7.963z" class="C"/>
+ <path d="M490 3.988l2.814 2.82-4.777 4.746v.043H488V17h2v-4.576l4.229-4.201L497 11V4l-7-.012z"/>
+ <path d="M490 6v11h-2V6z" class="C"/>
+ <path d="M490 3.988l2.814 2.82-4.777 4.746v.043H488V17h2v-4.576l4.229-4.201L497 11V4l-7-.012zm20 0l-2.814 2.82 4.777 4.746v.043H512V17h-2v-4.576l-4.229-4.201L503 11V4l7-.012z"/>
+ <path d="M510 6v11h2V6z" class="C"/>
+ <path d="M510 3.988l-2.814 2.82 4.777 4.746v.043H512V17h-2v-4.576l-4.229-4.201L503 11V4l7-.012z"/>
</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1000"
- height="500"
- id="svg2"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="welcome-sprite.svg"
- inkscape:export-filename="C:\Users\simon\Downloads\welcome-sprite.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="372.09193"
- inkscape:cy="435.3413"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1369"
- inkscape:window-height="1036"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="0"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:snap-bbox="false"
- inkscape:snap-nodes="true"
- inkscape:object-paths="true"
- inkscape:object-nodes="true"
- inkscape:snap-grids="true"
- inkscape:snap-global="false">
- <inkscape:grid
- type="xygrid"
- id="grid2985"
- empspacing="5"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true" />
- <sodipodi:guide
- orientation="1,0"
- position="100,530"
- id="guide11961" />
- <sodipodi:guide
- orientation="1,0"
- position="200,540"
- id="guide11963" />
- <sodipodi:guide
- orientation="1,0"
- position="300,550"
- id="guide11977" />
- <sodipodi:guide
- orientation="1,0"
- position="400,600"
- id="guide11979" />
- <sodipodi:guide
- orientation="1,0"
- position="500,580"
- id="guide11981" />
- <sodipodi:guide
- orientation="1,0"
- position="600,500"
- id="guide11983" />
- <sodipodi:guide
- orientation="1,0"
- position="700,500"
- id="guide11985" />
- <sodipodi:guide
- orientation="-0.79335322,-0.60876159"
- position="575.00001,439.99998"
- id="guide12971" />
- <sodipodi:guide
- orientation="0,1"
- position="420,400"
- id="guide3038" />
- <sodipodi:guide
- orientation="1,0"
- position="799,715"
- id="guide3196" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-552.36218)">
- <g
- id="g11955"
- transform="translate(0,-3)" />
- <path
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="/Users/saman/work_repos/osm-redesign/renders/share-1.png"
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0"
- id="path6918-2"
- d="m -153,412.86218 0,-2.00001 10,-3.99999 2,10e-6 0,1.99998 -4,10 -2,1e-5 0,-6 z"
- style="color:#000000;fill:#70cd8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6591-2);enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#70cd8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path2987"
- sodipodi:cx="42.5"
- sodipodi:cy="42.5"
- sodipodi:rx="42.5"
- sodipodi:ry="42.5"
- d="M 85,42.5 C 85,65.972102 65.972102,85 42.5,85 19.027898,85 0,65.972102 0,42.5 0,19.027898 19.027898,0 42.5,0 65.972102,0 85,19.027898 85,42.5 z"
- transform="matrix(1.0588235,0,0,1.0588235,5,557.36218)" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#cd7070;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path2987-7"
- sodipodi:cx="42.5"
- sodipodi:cy="42.5"
- sodipodi:rx="42.5"
- sodipodi:ry="42.5"
- d="M 85,42.5 C 85,65.972102 65.972102,85 42.5,85 19.027898,85 0,65.972102 0,42.5 0,19.027898 19.027898,0 42.5,0 65.972102,0 85,19.027898 85,42.5 z"
- transform="matrix(1.0588235,0,0,1.0588235,105,557.36218)" />
- <path
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 135,582.36218 -2,0 -3,3 0,2 15,15 -15,15 0,2 3,3 2,0 15,-15 15,15 2,0 3,-3 0,-2 -15,-15 15,-15 0,-2 -3,-3 -2,0 -15,15 z"
- id="rect3761-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccccc" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path2987-7-7-1"
- sodipodi:cx="42.5"
- sodipodi:cy="42.5"
- sodipodi:rx="42.5"
- sodipodi:ry="42.5"
- d="M 85,42.5 C 85,65.972102 65.972102,85 42.5,85 19.027898,85 0,65.972102 0,42.5 0,19.027898 19.027898,0 42.5,0 65.972102,0 85,19.027898 85,42.5 z"
- transform="matrix(0.3529412,0,0,0.3529412,235,587.36218)" />
- <path
- style="opacity:0.5;color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.05882347;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 519.72811,582.91357 19.83383,-15.21904 40.43807,49.66766 -19.83383,15.21904 z"
- id="rect4144"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 510.59669,571.01327 19.83383,-15.21904 6.08761,7.93353 -19.83383,15.21904 z"
- id="rect4174"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 563.20997,636.54797 19.83384,-15.21903 1.19788,17.98791 -3.96676,3.04381 z"
- id="path4182"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path2987-7-7-2"
- sodipodi:cx="42.5"
- sodipodi:cy="42.5"
- sodipodi:rx="42.5"
- sodipodi:ry="42.5"
- d="M 85,42.5 C 85,65.972102 65.972102,85 42.5,85 19.027898,85 0,65.972102 0,42.5 0,19.027898 19.027898,0 42.5,0 65.972102,0 85,19.027898 85,42.5 z"
- transform="matrix(1.0588235,0,0,1.0588235,605,557.36218)" />
- <path
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 425.00002,639.36218 -20.00002,-20 0,-29 20.00003,-20.00001 67.99997,10e-6 2,2 0,65 -1.99998,2 z"
- id="rect11998"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc" />
- <path
- inkscape:connector-curvature="0"
- d="m 379.30233,557.36218 c -8.6696,0 -15.69768,7.02808 -15.69768,15.69767 0,1.58143 0.28446,3.07359 0.71948,4.51309 l -39.11337,39.11337 c -1.4395,-0.43502 -2.93166,-0.71948 -4.51309,-0.71948 -8.66959,0 -15.69767,7.02808 -15.69767,15.69768 0,8.66959 7.02808,15.69767 15.69767,15.69767 8.6696,0 15.69768,-7.02808 15.69768,-15.69767 0,-1.58143 -0.28446,-3.07359 -0.71948,-4.51309 l 39.11337,-39.11337 c 1.4395,0.43502 2.93166,0.71948 4.51309,0.71948 8.66959,0 15.69767,-7.02808 15.69767,-15.69768 0,-8.66959 -7.02808,-15.69767 -15.69767,-15.69767 z m 0,9.4186 c 3.46782,0 6.27907,2.81125 6.27907,6.27907 0,3.46783 -2.81125,6.27907 -6.27907,6.27907 -3.46783,0 -6.27907,-2.81124 -6.27907,-6.27907 0,-3.46782 2.81124,-6.27907 6.27907,-6.27907 z m -58.60466,58.60466 c 3.46783,0 6.27907,2.81124 6.27907,6.27907 0,3.46782 -2.81124,6.27907 -6.27907,6.27907 -3.46782,0 -6.27907,-2.81125 -6.27907,-6.27907 0,-3.46783 2.81125,-6.27907 6.27907,-6.27907 z"
- id="path5387-6-5"
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- d="m 250,557.36218 c -20.7105,0 -37.5,16.78935 -37.5,37.5 0,20.71072 37.5,52.5 37.5,52.5 0,0 37.5,-31.78928 37.5,-52.5 0,-20.71065 -16.7895,-37.5 -37.5,-37.5 z m 1.1715,22.5 c 8.2845,0 15,6.71572 15,15 0,8.28427 -6.7155,15 -15,15 -8.28375,0 -15,-6.71573 -15,-15 0,-8.28428 6.71625,-15 15,-15 z"
- id="path8139-4-6-3-5"
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:nodetypes="ccccccccccccc"
- inkscape:connector-curvature="0"
- id="path12963"
- d="m 31,598.36218 -2,0 -3,3 0,2 14,14 5,5 5,-5 25,-25 0,-2 -3,-3 -2,0 -25,25 z"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <g
- id="g12979">
- <path
- transform="matrix(1.0666649,0,0,1.0666649,-20.332779,546.02902)"
- d="m 335,80 c 0,8.284271 -6.71573,15 -15,15 -8.28427,0 -15,-6.715729 -15,-15 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z"
- sodipodi:ry="15"
- sodipodi:rx="15"
- sodipodi:cy="80"
- sodipodi:cx="320"
- id="path12975"
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path12977"
- sodipodi:cx="320"
- sodipodi:cy="80"
- sodipodi:rx="15"
- sodipodi:ry="15"
- d="m 335,80 c 0,8.284271 -6.71573,15 -15,15 -8.28427,0 -15,-6.715729 -15,-15 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z"
- transform="matrix(0.46666693,0,0,0.46666693,171.66658,594.02886)" />
- </g>
- <path
- transform="matrix(1.0588235,0,0,1.0588235,605,557.36218)"
- d="M 85,42.5 C 85,65.972102 65.972102,85 42.5,85 19.027898,85 0,65.972102 0,42.5 0,19.027898 19.027898,0 42.5,0 65.972102,0 85,19.027898 85,42.5 z"
- sodipodi:ry="42.5"
- sodipodi:rx="42.5"
- sodipodi:cy="42.5"
- sodipodi:cx="42.5"
- id="path16825"
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <text
- xml:space="preserve"
- style="font-size:60px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Helvetica Neue;-inkscape-font-specification:Helvetica Neue Bold"
- x="633.32001"
- y="624.29218"
- id="text16827"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan16829"
- x="633.32001"
- y="624.29218">?</tspan></text>
- <rect
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3053"
- width="10"
- height="15.000005"
- x="415"
- y="597.36218"
- rx="3"
- ry="2.2500007" />
- <path
- transform="matrix(1.0588235,0,0,1.0588235,705,557.36218)"
- d="m 85,42.5 a 42.5,42.5 0 1 1 -85,0 42.5,42.5 0 1 1 85,0 z"
- sodipodi:ry="42.5"
- sodipodi:rx="42.5"
- sodipodi:cy="42.5"
- sodipodi:cx="42.5"
- id="path16825-7"
- style="color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <text
- xml:space="preserve"
- style="font-size:48px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#ffffff;font-family:Sans;stroke-opacity:1"
- x="736.80469"
- y="614.78406"
- id="text3795"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan3797"
- x="736.80469"
- y="614.78406"
- style="font-weight:normal;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1">§</tspan></text>
- </g>
-</svg>
$("body").removeClass("compact-nav");
$("header").removeClass("text-nowrap");
+ $("header nav.secondary > ul").removeClass("flex-nowrap");
updateHeader();
.click(cancel))),
$("<p class='alert alert-warning'>")
.text(I18n.t("browse.start_rjs.feature_warning", { num_features: count, max_features: limit })),
- $("<input type='submit' class='btn btn-primary'>")
+ $("<input type='submit' class='btn btn-primary d-block mx-auto'>")
.val(I18n.t("browse.start_rjs.load_data"))
.click(add)));
}
var row = $("<tr class='turn'/>");
row.append("<td class='border-0'><div class='direction i" + direction + "'/></td> ");
row.append("<td>" + instruction);
- row.append("<td class='distance text-muted text-end'>" + dist);
+ row.append("<td class='distance text-body-secondary text-end'>" + dist);
row.on("click", function () {
popup
getRoute(true, true);
});
- $(".routing_marker").on("dragstart", function (e) {
+ $(".routing_marker_column img").on("dragstart", function (e) {
var dt = e.originalEvent.dataTransfer;
dt.effectAllowed = "move";
var dragData = { type: $(this).data("type") };
};
function initialize(path, id, callback) {
- content.find("input[type=submit]").on("click", function (e) {
+ content.find("button[type=submit]").on("click", function (e) {
e.preventDefault();
var data = $(e.target).data();
var form = e.target.form;
- $(form).find("input[type=submit]").prop("disabled", true);
+ $(form).find("button[type=submit]").prop("disabled", true);
$.ajax({
url: data.url,
}
function updateButtons(form) {
- $(form).find("input[type=submit]").prop("disabled", false);
+ $(form).find("button[type=submit]").prop("disabled", false);
if ($(form.text).val() === "") {
- $(form.close).val($(form.close).data("defaultActionText"));
+ $(form.close).text($(form.close).data("defaultActionText"));
$(form.comment).prop("disabled", true);
} else {
- $(form.close).val($(form.close).data("commentActionText"));
+ $(form.close).text($(form.close).data("commentActionText"));
$(form.comment).prop("disabled", false);
}
}
}
});
- $(".search_form a.button.switch_link").on("click", function (e) {
+ $(".search_form a.btn.switch_link").on("click", function (e) {
e.preventDefault();
- var query = $(e.target).parent().parent().find("input[name=query]").val();
+ var query = $(this).closest("form").find("input[name=query]").val();
if (query) {
OSM.router.route("/directions?from=" + encodeURIComponent(query) + OSM.formatHash(map));
} else {
$("<p>")
.text(I18n.t("javascripts.map.layers.overlays"))
- .attr("class", "text-muted")
+ .attr("class", "text-body-secondary small mb-2")
.appendTo(overlaySection);
var overlays = $("<ul class='list-unstyled form-check'>")
.on("click", select))
.append(
$("<p>")
- .attr("class", "text-muted")
+ .attr("class", "text-body-secondary")
.text(I18n.t("javascripts.share.paste_html")));
// Geo URI
$("<div>")
.attr("id", "export-warning")
- .attr("class", "text-muted")
+ .attr("class", "text-body-secondary")
.text(I18n.t("javascripts.share.only_standard_layer"))
.appendTo($imageSection);
};
$("<p>")
- .attr("class", "text-muted")
+ .attr("class", "text-body-secondary")
.html(I18n.t("javascripts.share.image_dimensions", args))
.appendTo($form);
MARKER_ICON_2X: <%= image_path("leaflet/dist/images/marker-icon-2x.png").to_json %>,
MARKER_SHADOW: <%= image_path("leaflet/dist/images/marker-shadow.png").to_json %>,
- NEW_NOTE_MARKER: <%= image_path("new_note_marker.png").to_json %>,
- OPEN_NOTE_MARKER: <%= image_path("open_note_marker.png").to_json %>,
- CLOSED_NOTE_MARKER: <%= image_path("closed_note_marker.png").to_json %>,
+ NEW_NOTE_MARKER: <%= image_path("new_note_marker.svg").to_json %>,
+ OPEN_NOTE_MARKER: <%= image_path("open_note_marker.svg").to_json %>,
+ CLOSED_NOTE_MARKER: <%= image_path("closed_note_marker.svg").to_json %>,
apiUrl: function (object) {
var apiType = object.type === "note" ? "notes" : object.type;
text-decoration: underline dotted;
}
-#container { position: relative; }
-
/* Rules for icons */
.icon {
/* Utility for de-emphasizing content */
-.text-muted a {
+.text-body-secondary a {
color: $blue;
}
position: absolute;
top: 0;
right: 0;
- background: image-url("menu-icon.png") no-repeat;
+ background: image-url("menu-icon.svg") no-repeat;
background-size: 30px 30px;
width: 30px;
height: 30px;
position: relative;
font-size: 14px;
- h1, nav, nav > ul, nav > ul > li {
- display: inline-block;
- }
-
> * {
- height: 100%;
padding: $lineheight * 0.5;
}
- img.logo {
- margin-top: -2px;
- }
-
h1 {
+ height: $headerHeight;
font-size: 18px;
- line-height: 1.2;
- padding-top: 15px;
}
.btn {
nav.primary {
margin-right: auto;
}
+
+ .username {
+ max-width: 12em;
+ }
}
nav.primary {
nav.secondary {
.nav-link {
- padding: 0.2rem;
+ padding: 0.3rem;
}
}
min-height: $headerHeight;
&.closed nav {
- display: none;
+ display: none !important;
}
.search_forms {
}
nav.secondary {
+ flex-direction: column;
+
.user-menu, .login-menu {
width: 100%;
}
}
.overlay-layers {
- p {
- font-size: 13px;
- margin-bottom: 8px;
- }
li.disabled { color: $darkgrey; }
}
}
.donate-attr { color: darken($green, 10%) !important; }
-/* Rules for the sidebar */
-
-#browse_status {
- input {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
-}
-
/* Temporary label size override until we remove site-wide font customisation */
form {
/* Rules for routing */
div.direction {
- background-image: image-url('routing-sprite.png');
+ background-image: image-url('routing-sprite.svg');
width: 20px;
height: 20px;
background-repeat: no-repeat;
cursor: pointer;
}
-.routing_marker { width: 15px; cursor: move; }
+.routing_marker_column {
+ width: 15px;
-.browse_status {
- display: none;
+ img {
+ cursor: move;
+ }
}
/* Rules for the history sidebar */
}
}
- .note-description {
- overflow: hidden;
- margin: 0 0 10px 10px;
- }
-
.query-results {
display: none;
}
}
-/* Bootstrap buttons don't have any vertical margin, so
- they touch when adjacent buttons wrap onto a new line
- e.g. wide form buttons on a narrow sidebar */
-
-.btn-wrapper {
- > .btn {
- margin-bottom: $spacer * 0.25;
- }
-}
-
/* Force LTR/RTL alignment for placeholder text */
.form-control::placeholder {
}
}
-/* Rules for the "Welcome" page */
-.site-welcome, .site-fixthemap {
- .sprite {
- background-image: image-url("welcome-sprite.png");
- background-size: 500px 250px;
- display: block;
- }
-
- .sprite.small {
- width: 50px;
- height: 50px;
- }
-
- .sprite.x {
- /*rtl:ignore*/ background-position: -50px 0;
- }
-
- .sprite.term {
- margin-right: 10px;
- vertical-align: middle;
- }
-
- .sprite.node {
- /*rtl:ignore*/ background-position: -100px 0;
- }
-
- .sprite.way {
- /*rtl:ignore*/ background-position: -150px 0;
- }
-
- .sprite.tag {
- /*rtl:ignore*/ background-position: -200px 0;
- }
-
- .sprite.editor {
- /*rtl:ignore*/ background-position: -250px 0;
- }
-
- .sprite.question {
- /*rtl:ignore*/ background-position: -300px 0;
- }
-
- .sprite.rules {
- /*rtl:ignore*/ background-position: -350px 0;
- }
-}
+/* Rules for the "About" page */
.site-about #content {
.content-inner {
margin-left: -1em;
}
}
-
- .icon {
- width: 30px;
- height: 30px;
- background: 40px 40px image-url('about/sprite.png') no-repeat;
-
- &.local {
- /*rtl:ignore*/
- background-position: 0px 0px;
- }
- &.community {
- /*rtl:ignore*/
- background-position: 0px -40px;
- }
- &.open {
- /*rtl:ignore*/
- background-position: 0px -80px;
- }
- &.partners {
- /*rtl:ignore*/
- background-position: 0px -120px;
- }
- &.infringement {
- /*rtl:ignore*/
- background-position: 0px -160px;
- }
- &.legal {
- /*rtl:ignore*/
- background-position: -45px -160px;
- }
- }
}
.auth-container {
before_action :check_database_readable
before_action :check_database_writable, :only => [:update]
- before_action :allow_thirdparty_images, :only => [:edit, :update]
+
+ allow_thirdparty_images :only => [:edit, :update]
+ allow_social_login :only => [:edit, :update]
def edit
@tokens = current_user.oauth_tokens.authorized
- append_content_security_policy_directives(
- :form_action => %w[accounts.google.com *.facebook.com login.microsoftonline.com github.com meta.wikimedia.org]
- )
-
if errors = session.delete(:user_errors)
errors.each do |attribute, error|
current_user.errors.add(attribute, error)
def update
@tokens = current_user.oauth_tokens.authorized
- append_content_security_policy_directives(
- :form_action => %w[accounts.google.com *.facebook.com login.microsoftonline.com github.com meta.wikimedia.org]
- )
-
user_params = params.require(:user).permit(:display_name, :new_email, :pass_crypt, :pass_crypt_confirmation, :auth_provider)
if params[:user][:auth_provider].blank? ||
module Api
class CapabilitiesController < ApiController
+ skip_before_action :check_api_readable
+
authorize_resource :class => false
before_action :set_request_formats
module Api
class ChangesetCommentsController < ApiController
before_action :check_api_writable
- before_action :check_api_readable, :except => [:create]
before_action :authorize
authorize_resource
##
# Check if the current user has exceed the rate limit for comments
def rate_limit_exceeded?
- recent_comments = current_user.changeset_comments.where("created_at >= ?", Time.now.utc - 1.hour).count
+ recent_comments = current_user.changeset_comments.where(:created_at => Time.now.utc - 1.hour..).count
recent_comments >= current_user.max_changeset_comments_per_hour
end
module Api
class ChangesetsController < ApiController
before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
- before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe]
before_action :setup_user_auth, :only => [:show]
before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
changesets.where("closed_at >= ? and created_at <= ?", from, to)
else
# if there is no comma, assume its a lower limit on time
- changesets.where("closed_at >= ?", Time.parse(time).utc)
+ changesets.where(:closed_at => Time.parse(time).utc..)
end
# stupid Time seems to throw both of these for bad parsing, so
# we have to catch both and ensure the correct code path is taken.
module Api
class MapController < ApiController
- before_action :check_api_readable
-
authorize_resource :class => false
around_action :api_call_handle_error, :api_call_timeout
module Api
class NodesController < ApiController
before_action :check_api_writable, :only => [:create, :update, :delete]
- before_action :check_api_readable, :except => [:create, :update, :delete]
before_action :authorize, :only => [:create, :update, :delete]
authorize_resource
module Api
class NotesController < ApiController
- before_action :check_api_readable
before_action :check_api_writable, :only => [:create, :comment, :close, :reopen, :destroy]
before_action :setup_user_auth, :only => [:create, :show]
before_action :authorize, :only => [:close, :reopen, :destroy, :comment]
# nodes, ways and relations are basically identical.
module Api
class OldElementsController < ApiController
- before_action :check_api_readable
before_action :check_api_writable, :only => [:redact]
before_action :setup_user_auth, :only => [:history, :show]
before_action :authorize, :only => [:redact]
module Api
class PermissionsController < ApiController
- before_action :check_api_readable
-
authorize_resource :class => false
before_action :setup_user_auth
module Api
class RelationsController < ApiController
before_action :check_api_writable, :only => [:create, :update, :delete]
- before_action :check_api_readable, :except => [:create, :update, :delete]
before_action :authorize, :only => [:create, :update, :delete]
authorize_resource
module Api
class TracepointsController < ApiController
- before_action :check_api_readable
-
authorize_resource
around_action :api_call_handle_error, :api_call_timeout
module Api
class TracesController < ApiController
- before_action :check_database_readable, :except => [:show, :data]
- before_action :check_database_writable, :only => [:create, :update, :destroy]
+ before_action :check_api_writable, :only => [:create, :update, :destroy]
before_action :set_locale
before_action :authorize
authorize_resource
- before_action :check_api_readable, :only => [:show, :data]
- before_action :check_api_writable, :only => [:create, :update, :destroy]
before_action :offline_error, :only => [:create, :destroy, :data]
around_action :api_call_handle_error
module Api
class UserBlocksController < ApiController
- before_action :check_api_readable
-
authorize_resource
around_action :api_call_handle_error, :api_call_timeout
# Update and read user preferences, which are arbitrary key/val pairs
module Api
class UserPreferencesController < ApiController
+ before_action :check_api_writable, :only => [:update_all, :update, :destroy]
before_action :authorize
authorize_resource
pref.k = params[:preference_key]
end
- pref.v = request.raw_post.chomp
+ pref.v = request.raw_post.chomp.force_encoding("UTF-8")
pref.save!
render :plain => ""
module Api
class UsersController < ApiController
- before_action :check_api_readable
before_action :disable_terms_redirect, :only => [:details]
before_action :setup_user_auth, :only => [:show, :index]
before_action :authorize, :only => [:details, :gpx_files]
module Api
class VersionsController < ApiController
+ skip_before_action :check_api_readable
authorize_resource :class => false
before_action :set_request_formats
module Api
class WaysController < ApiController
before_action :check_api_writable, :only => [:create, :update, :delete]
- before_action :check_api_readable, :except => [:create, :update, :delete]
before_action :authorize, :only => [:create, :update, :delete]
authorize_resource
class ApiController < ApplicationController
skip_before_action :verify_authenticity_token
+ before_action :check_api_readable
+
private
##
if doorkeeper_token&.accessible?
self.current_user = User.find(doorkeeper_token.resource_owner_id)
elsif Authenticator.new(self, [:token]).allow?
- # self.current_user setup by OAuth
- elsif Settings.basic_auth_support
+ if Settings.oauth_10a_support
+ # self.current_user setup by OAuth
+ else
+ report_error t("application.oauth_10a_disabled", :link => t("application.auth_disabled_link")), :forbidden
+ end
+ else
username, passwd = auth_data # parse from headers
# authenticate per-scheme
self.current_user = if username.nil?
else
User.authenticate(:username => username, :password => passwd) # basic auth
end
- # log if we have authenticated using basic auth
- logger.info "Authenticated as user #{current_user.id} using basic authentication" if current_user
+ if username && current_user
+ if Settings.basic_auth_support
+ # log if we have authenticated using basic auth
+ logger.info "Authenticated as user #{current_user.id} using basic authentication"
+ else
+ report_error t("application.basic_auth_disabled", :link => t("application.auth_disabled_link")), :forbidden
+ end
+ end
end
# have we identified the user?
rescue_from CanCan::AccessDenied, :with => :deny_access
check_authorization
+ rescue_from RailsParam::InvalidParameterError, :with => :invalid_parameter
+
before_action :fetch_body
- around_action :better_errors_allow_inline, :if => proc { Rails.env.development? }
attr_accessor :current_user, :oauth_token
helper_method :current_user
helper_method :oauth_token
+ def self.allow_thirdparty_images(**options)
+ content_security_policy(options) do |policy|
+ policy.img_src("*")
+ end
+ end
+
+ def self.allow_social_login(**options)
+ content_security_policy(options) do |policy|
+ policy.form_action(*policy.form_action, "accounts.google.com", "*.facebook.com", "login.microsoftonline.com", "github.com", "meta.wikimedia.org")
+ end
+ end
+
+ def self.allow_all_form_action(**options)
+ content_security_policy(options) do |policy|
+ policy.form_action(nil)
+ end
+ end
+
private
def authorize_web
@oauth_token = current_user.oauth_token(Settings.oauth_application) if current_user && Settings.key?(:oauth_application)
end
+ def require_oauth_10a_support
+ report_error t("application.oauth_10a_disabled", :link => t("application.auth_disabled_link")), :forbidden unless Settings.oauth_10a_support
+ end
+
##
# require the user to have cookies enabled in their browser
def require_cookies
end
def map_layout
- append_content_security_policy_directives(
- :child_src => %w[http://127.0.0.1:8111 https://127.0.0.1:8112],
- :frame_src => %w[http://127.0.0.1:8111 https://127.0.0.1:8112],
- :connect_src => [Settings.nominatim_url, Settings.overpass_url, Settings.fossgis_osrm_url, Settings.graphhopper_url, Settings.fossgis_valhalla_url],
- :form_action => %w[render.openstreetmap.org],
- :style_src => %w['unsafe-inline']
- )
+ policy = request.content_security_policy.clone
+
+ policy.child_src(*policy.child_src, "http://127.0.0.1:8111", "https://127.0.0.1:8112")
+ policy.frame_src(*policy.frame_src, "http://127.0.0.1:8111", "https://127.0.0.1:8112")
+ policy.connect_src(*policy.connect_src, Settings.nominatim_url, Settings.overpass_url, Settings.fossgis_osrm_url, Settings.graphhopper_url, Settings.fossgis_valhalla_url)
+ policy.form_action(*policy.form_action, "render.openstreetmap.org")
+ policy.style_src(*policy.style_src, :unsafe_inline)
+
+ request.content_security_policy = policy
case Settings.status
when "database_offline", "api_offline"
request.xhr? ? "xhr" : "map"
end
- def allow_thirdparty_images
- append_content_security_policy_directives(:img_src => %w[*])
- end
-
def preferred_editor
if params[:editor]
params[:editor]
end
end
- def better_errors_allow_inline
- yield
- rescue StandardError
- append_content_security_policy_directives(
- :script_src => %w['unsafe-inline'],
- :style_src => %w['unsafe-inline']
- )
-
- raise
- end
-
def current_ability
Ability.new(current_user)
end
end
end
+ def invalid_parameter(_exception)
+ if request.get?
+ respond_to do |format|
+ format.html { redirect_to :controller => "/errors", :action => "bad_request" }
+ format.any { head :bad_request }
+ end
+ else
+ head :bad_request
+ end
+ end
+
# extract authorisation credentials from headers, returns user = nil if none
def auth_data
if request.env.key? "X-HTTP_AUTHORIZATION" # where mod_rewrite might have put it
##
# list non-empty changesets in reverse chronological order
def index
+ param! :max_id, Integer, :min => 1
+
@params = params.permit(:display_name, :bbox, :friends, :nearby, :max_id, :list)
if request.format == :atom && @params[:max_id]
changesets = changesets.where(:user => current_user.nearby)
end
- changesets = changesets.where("changesets.id <= ?", @params[:max_id]) if @params[:max_id]
+ changesets = changesets.where(:changesets => { :id => ..@params[:max_id] }) if @params[:max_id]
@changesets = changesets.order("changesets.id DESC").limit(20).preload(:user, :changeset_tags, :comments)
if @changeset.user.active? && @changeset.user.data_public?
changesets = conditions_nonempty(@changeset.user.changesets)
@next_by_user = changesets.where("id > ?", @changeset.id).reorder(:id => :asc).first
- @prev_by_user = changesets.where("id < ?", @changeset.id).reorder(:id => :desc).first
+ @prev_by_user = changesets.where(:id => ...@changeset.id).reorder(:id => :desc).first
end
render :layout => map_layout
rescue ActiveRecord::RecordNotFound
##
# limit selected items to one page, get ids of first item before/after the page
def get_page_items(items, includes: [], limit: 20)
+ param! :before, Integer, :min => 1
+ param! :after, Integer, :min => 1
+
id_column = "#{items.table_name}.id"
page_items = if params[:before]
items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
session[:fingerprint] = user.fingerprint
session_expires_after 28.days if session[:remember_me]
- target = referer || session[:referer] || url_for(:controller => :site, :action => :index)
+ target = referer || url_for(:controller => :site, :action => :index)
# The user is logged in, so decide where to send them:
#
end
session.delete(:remember_me)
- session.delete(:referer)
end
##
# process a failed login
- def failed_login(message, username = nil)
+ def failed_login(message, username, referer = nil)
flash[:error] = message
- redirect_to :controller => "sessions", :action => "new", :referer => session[:referer],
+ redirect_to :controller => "sessions", :action => "new", :referer => referer,
:username => username, :remember_me => session[:remember_me]
session.delete(:remember_me)
- session.delete(:referer)
end
##
#
- def unconfirmed_login(user)
+ def unconfirmed_login(user, referer = nil)
session[:pending_user] = user.id
redirect_to :controller => "confirmations", :action => "confirm",
- :display_name => user.display_name, :referer => session[:referer]
+ :display_name => user.display_name, :referer => referer
session.delete(:remember_me)
- session.delete(:referer)
end
##
before_action :lookup_user, :only => [:show, :comments]
before_action :check_database_writable, :only => [:new, :create, :edit, :update, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
- before_action :allow_thirdparty_images, :only => [:new, :create, :edit, :update, :index, :show, :comments]
+
+ allow_thirdparty_images :only => [:new, :create, :edit, :update, :index, :show, :comments]
def index
if params[:display_name]
@entry = entries.find_by(:id => params[:id])
if @entry
@title = t ".title", :user => params[:display_name], :title => @entry.title
+ @og_image = @entry.body.image
@comments = can?(:unhidecomment, DiaryEntry) ? @entry.comments : @entry.visible_comments
else
@title = t "diary_entries.no_such_entry.title", :id => params[:id]
before_action :set_locale
+ def bad_request
+ respond_to do |format|
+ format.html { render :status => :bad_request }
+ format.any { render :status => :bad_request, :plain => "" }
+ end
+ end
+
def forbidden
respond_to do |format|
format.html { render :status => :forbidden }
before_action :update_totp, :only => [:finish]
authorize_resource :class => false
+ content_security_policy(:only => :embed) do |policy|
+ policy.frame_ancestors("*")
+ end
+
caches_page :embed
# When the user clicks 'Export' we redirect to a URL which generates the export download
end
end
- def embed
- append_content_security_policy_directives(
- :frame_ancestors => %w[*]
- )
- end
+ def embed; end
end
friendship.befriendee = @friend
if current_user.friends_with?(@friend)
flash[:warning] = t ".already_a_friend", :name => @friend.display_name
- elsif current_user.friendships.where("created_at >= ?", Time.now.utc - 1.hour).count >= current_user.max_friends_per_hour
+ elsif current_user.friendships.where(:created_at => Time.now.utc - 1.hour..).count >= current_user.max_friends_per_hour
flash.now[:error] = t ".limit_exceeded"
elsif friendship.save
flash[:notice] = t ".success", :name => @friend.display_name
before_action :lookup_user, :only => [:new, :create]
before_action :check_database_readable
before_action :check_database_writable, :only => [:new, :create, :reply, :mark, :destroy]
- before_action :allow_thirdparty_images, :only => [:new, :create, :show]
+
+ allow_thirdparty_images :only => [:new, :create, :show]
# Show a message
def show
@message.sender = current_user
@message.sent_on = Time.now.utc
- if current_user.sent_messages.where("sent_on >= ?", Time.now.utc - 1.hour).count >= current_user.max_messages_per_hour
+ if current_user.sent_messages.where(:sent_on => Time.now.utc - 1.hour..).count >= current_user.max_messages_per_hour
flash.now[:error] = t ".limit_exceeded"
render :action => "new"
elsif @message.save
##
# Display a list of notes by a specified user
def index
+ param! :page, Integer, :min => 1
+
@params = params.permit(:display_name)
@title = t ".title", :user => @user.display_name
@page = (params[:page] || 1).to_i
prepend_before_action :authorize_web
before_action :set_locale
- before_action :allow_all_form_action, :only => [:new]
- authorize_resource :class => false
-
- private
+ allow_all_form_action :only => :new
- def allow_all_form_action
- override_content_security_policy_directives(:form_action => []) if Settings.csp_enforce || Settings.key?(:csp_report_url)
- end
+ authorize_resource :class => false
end
# a login, but we want to check authorization on every action.
authorize_resource :class => false
+ before_action :require_oauth_10a_support
+
layout "site"
+ allow_all_form_action :only => :oauth1_authorize
+
def revoke
@token = current_user.oauth_tokens.find_by :token => params[:token]
if @token
end
def oauth1_authorize
- override_content_security_policy_directives(:form_action => []) if Settings.csp_enforce || Settings.key?(:csp_report_url)
-
if @token.invalidated?
@message = t "oauth.authorize_failure.invalid"
render :action => "authorize_failure"
authorize_resource :class => false
- def new
- override_content_security_policy_directives(:form_action => []) if Settings.csp_enforce || Settings.key?(:csp_report_url)
+ allow_all_form_action :only => :new
- session[:referer] = safe_referer(params[:referer]) if params[:referer]
+ def new
+ referer = safe_referer(params[:referer]) if params[:referer]
- parse_oauth_referer session[:referer]
+ parse_oauth_referer referer
end
def create
session[:remember_me] ||= params[:remember_me]
- session[:referer] = safe_referer(params[:referer]) if params[:referer]
- password_authentication(params[:username].strip, params[:password])
+
+ referer = safe_referer(params[:referer]) if params[:referer]
+
+ password_authentication(params[:username].strip, params[:password], referer)
end
def destroy
##
# handle password authentication
- def password_authentication(username, password)
+ def password_authentication(username, password, referer = nil)
if (user = User.authenticate(:username => username, :password => password))
- successful_login(user)
+ successful_login(user, referer)
elsif (user = User.authenticate(:username => username, :password => password, :pending => true))
- unconfirmed_login(user)
+ unconfirmed_login(user, referer)
elsif User.authenticate(:username => username, :password => password, :suspended => true)
- failed_login({ :partial => "sessions/suspended_flash" }, username)
+ failed_login({ :partial => "sessions/suspended_flash" }, username, referer)
else
- failed_login t("sessions.new.auth failure"), username
+ failed_login(t("sessions.new.auth failure"), username, referer)
end
end
end
authorize_resource :class => false
+ content_security_policy(:only => :edit) do |policy|
+ policy.frame_src(*policy.frame_src, :blob)
+ end
+
+ content_security_policy(:only => :id) do |policy|
+ policy.connect_src("*")
+ policy.img_src(*policy.img_src, "*", :blob)
+ policy.script_src(*policy.script_src, :unsafe_eval)
+ policy.style_src(*policy.style_src, :unsafe_inline)
+ end
+
def index
session[:location] ||= OSM.ip_location(request.env["REMOTE_ADDR"]) unless Settings.status == "database_readonly" || Settings.status == "database_offline"
end
require_user
end
- if %w[id].include?(editor)
- append_content_security_policy_directives(
- :frame_src => %w[blob:]
- )
- end
-
begin
if params[:node]
bbox = Node.visible.find(params[:node]).bbox.to_unscaled
end
def id
- append_content_security_policy_directives(
- :connect_src => %w[*],
- :img_src => %w[* blob:],
- :script_src => %w[dev.virtualearth.net 'unsafe-eval'],
- :style_src => %w['unsafe-inline']
- )
-
render :layout => false
end
authorize_resource :trace
def show
- trace = Trace.visible.find(params[:trace_id])
+ trace = Trace.visible.imported.find(params[:trace_id])
- if trace.inserted?
- if trace.public? || (current_user && current_user == trace.user)
- if trace.icon.attached?
- redirect_to rails_blob_path(trace.icon, :disposition => "inline")
- else
- expires_in 7.days, :private => !trace.public?, :public => trace.public?
- send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => "image/gif", :disposition => "inline")
- end
- else
- head :forbidden
- end
+ if trace.public? || (current_user && current_user == trace.user)
+ redirect_to rails_blob_path(trace.icon, :disposition => "inline")
else
- head :not_found
+ head :forbidden
end
rescue ActiveRecord::RecordNotFound
head :not_found
authorize_resource :trace
def show
- trace = Trace.visible.find(params[:trace_id])
+ trace = Trace.visible.imported.find(params[:trace_id])
- if trace.inserted?
- if trace.public? || (current_user && current_user == trace.user)
- if trace.icon.attached?
- redirect_to rails_blob_path(trace.image, :disposition => "inline")
- else
- expires_in 7.days, :private => !trace.public?, :public => trace.public?
- send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => "image/gif", :disposition => "inline")
- end
- else
- head :forbidden
- end
+ if trace.public? || (current_user && current_user == trace.user)
+ redirect_to rails_blob_path(trace.image, :disposition => "inline")
else
- head :not_found
+ head :forbidden
end
rescue ActiveRecord::RecordNotFound
head :not_found
before_action :check_database_writable, :only => [:new, :go_public]
before_action :require_cookies, :only => [:new]
before_action :lookup_user_by_name, :only => [:set_status, :destroy]
- before_action :allow_thirdparty_images, :only => [:show]
+
+ allow_thirdparty_images :only => :show
+ allow_social_login :only => :new
##
# display a list of users matching specified criteria
def new
@title = t ".title"
- @referer = if params[:referer]
- safe_referer(params[:referer])
- else
- session[:referer]
- end
+ @referer = safe_referer(params[:referer])
parse_oauth_referer @referer
- append_content_security_policy_directives(
- :form_action => %w[accounts.google.com *.facebook.com login.microsoftonline.com github.com meta.wikimedia.org]
- )
-
if current_user
# The user is logged in already, so don't show them the signup
# page, instead send them to the home page
self.current_user = User.new(user_params)
if check_signup_allowed(current_user.email)
- session[:referer] = safe_referer(params[:referer]) if params[:referer]
-
- Rails.logger.info "create: #{session[:referer]}"
-
if current_user.auth_uid.present?
# We are creating an account with external authentication and
# no password was specified so create a random one
if current_user.invalid?
# Something is wrong with a new user, so rerender the form
render :action => "new"
- elsif current_user.auth_provider.present?
- # Verify external authenticator before moving on
- session[:new_user] = current_user.slice("email", "display_name", "pass_crypt", "pass_crypt_confirmation")
- redirect_to auth_url(current_user.auth_provider, current_user.auth_uid), :status => :temporary_redirect
else
# Save the user record
- session[:new_user] = current_user.slice("email", "display_name", "pass_crypt", "pass_crypt_confirmation")
- save_new_user params[:email_hmac]
+ save_new_user params[:email_hmac], params[:referer]
end
end
end
##
# omniauth success callback
def auth_success
+ referer = request.env["omniauth.params"]["referer"]
auth_info = request.env["omniauth.auth"]
provider = auth_info[:provider]
session[:user_errors] = current_user.errors.as_json
redirect_to edit_account_path
- elsif session[:new_user]
- session[:new_user]["auth_provider"] = provider
- session[:new_user]["auth_uid"] = uid
-
- email_hmac = UsersController.message_hmac(email) if email_verified && email
- save_new_user email_hmac
else
user = User.find_by(:auth_provider => provider, :auth_uid => uid)
if user
case user.status
when "pending"
- unconfirmed_login(user)
+ unconfirmed_login(user, referer)
when "active", "confirmed"
- successful_login(user, request.env["omniauth.params"]["referer"])
+ successful_login(user, referer)
when "suspended"
- failed_login({ :partial => "sessions/suspended_flash" })
+ failed_login({ :partial => "sessions/suspended_flash" }, user.display_name, referer)
else
- failed_login t("sessions.new.auth failure")
+ failed_login(t("sessions.new.auth failure"), user.display_name, referer)
end
else
email_hmac = UsersController.message_hmac(email) if email_verified && email
redirect_to :action => "new", :nickname => name, :email => email, :email_hmac => email_hmac,
- :auth_provider => provider, :auth_uid => uid
+ :auth_provider => provider, :auth_uid => uid, :referer => referer
end
end
end
private
- def save_new_user(email_hmac)
- new_user = session.delete(:new_user)
- self.current_user = User.new(new_user)
+ def save_new_user(email_hmac, referer = nil)
if check_signup_allowed(current_user.email)
current_user.data_public = true
current_user.description = "" if current_user.description.nil?
flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo)
- referer = welcome_path(welcome_options)
+ referer = welcome_path(welcome_options(referer))
if current_user.status == "active"
- session[:referer] = referer
- successful_login(current_user)
+ successful_login(current_user, referer)
else
session[:pending_user] = current_user.id
UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later
end
end
- def welcome_options
- uri = URI(session[:referer]) if session[:referer].present?
+ def welcome_options(referer = nil)
+ uri = URI(referer) if referer.present?
return { "oauth_return_url" => uri&.to_s } if uri&.path == oauth_authorization_path
case key
when "wikipedia", /^(#{SECONDARY_WIKI_PREFIXES}):wikipedia/o
- # This regex should match Wikipedia language codes, everything
- # from de to zh-classical
- lang = if value =~ /^([a-z-]{2,12}):(.+)$/i
- # Value is <lang>:<title> so split it up
- # Note that value is always left as-is, see: https://trac.openstreetmap.org/ticket/4315
- Regexp.last_match(1)
- else
- # Value is <title> so default to English Wikipedia
- "en"
- end
+ lang = "en"
when /^wikipedia:(\S+)$/
- # Language is in the key, so assume value is the title
lang = Regexp.last_match(1)
else
- # Not a wikipedia key!
return nil
end
- if value =~ /^([^#]*)#(.*)/
+ # This regex should match Wikipedia language codes, everything
+ # from de to zh-classical
+ if value =~ /^([a-z-]{2,12}):(.+)$/i
+ lang = Regexp.last_match(1)
+ title_section = Regexp.last_match(2)
+ else
+ title_section = value
+ end
+
+ if title_section =~ /^([^#]*)#(.*)/
# Contains a reference to a section of the wikipedia article
# Must break it up to correctly build the url
- value = Regexp.last_match(1)
- section = "##{Regexp.last_match(2)}"
+ title = Regexp.last_match(1)
encoded_section = "##{CGI.escape(Regexp.last_match(2).gsub(/ +/, '_'))}"
else
- section = ""
+ title = title_section
encoded_section = ""
end
{
- :url => "https://#{lang}.wikipedia.org/wiki/#{value}?uselang=#{I18n.locale}#{encoded_section}",
- :title => value + section
+ :url => "https://#{lang}.wikipedia.org/wiki/#{title}?uselang=#{I18n.locale}#{encoded_section}",
+ :title => value
}
end
module OpenGraphHelper
- def opengraph_tags(title = nil)
+ def opengraph_tags(title = nil, og_image = nil)
tags = {
"og:site_name" => t("layouts.project_name.title"),
"og:title" => [title, t("layouts.project_name.title")].compact.join(" | "),
"og:type" => "website",
- "og:image" => image_url("osm_logo_256.png", :protocol => "http"),
- "og:image:secure_url" => image_url("osm_logo_256.png", :protocol => "https"),
+ "og:image" => og_image ? URI.join(root_url, og_image) : image_url("osm_logo_256.png"),
"og:url" => url_for(:only_path => false),
"og:description" => t("layouts.intro_text")
}
# External authentication support
def openid_logo
- image_tag "openid_small.png", :alt => t("application.auth_providers.openid_logo_alt"), :class => "align-text-bottom"
+ image_tag "openid.svg", :size => "24", :alt => t("application.auth_providers.openid_logo_alt"), :class => "align-text-bottom"
end
def auth_button(name, provider, options = {})
:size => "24") + t("application.auth_providers.#{name}.title"),
auth_path(options.merge(:provider => provider)),
:method => :post,
- :class => "auth_button fs-6 border rounded text-muted text-decoration-none py-2 px-4 d-flex justify-content-center align-items-center",
+ :class => "auth_button fs-6 border rounded text-body-secondary text-decoration-none py-2 px-4 d-flex justify-content-center align-items-center",
:title => t("application.auth_providers.#{name}.title")
)
end
after_save :spam_check
def body
- RichText.new(self[:body_format], self[:body])
+ @body ||= RichText.new(self[:body_format], self[:body])
end
private
scope :visible_to, ->(user) { where(:assigned_role => user.roles.map(&:role)) }
def read_reports
- resolved_at.present? ? reports.where("updated_at < ?", resolved_at) : nil
+ resolved_at.present? ? reports.where(:updated_at => ...resolved_at) : nil
end
def unread_reports
- resolved_at.present? ? reports.where("updated_at >= ?", resolved_at) : reports
+ resolved_at.present? ? reports.where(:updated_at => resolved_at..) : reports
end
include AASM
scope :visible_to, ->(u) { visible.where(:visibility => %w[public identifiable]).or(visible.where(:user => u)) }
scope :visible_to_all, -> { where(:visibility => %w[public identifiable]) }
scope :tagged, ->(t) { joins(:tags).where(:gpx_file_tags => { :tag => t }) }
+ scope :imported, -> { where(:inserted => true) }
has_one_attached :file, :service => Settings.trace_file_storage
has_one_attached :image, :service => Settings.trace_image_storage
:content_type => content_type(attachable.path),
:identify => false)
else
- super(attachable)
+ super
end
end
def max_messages_per_hour
account_age_in_seconds = Time.now.utc - created_at
account_age_in_hours = account_age_in_seconds / 3600
- recent_messages = messages.where("sent_on >= ?", Time.now.utc - 3600).count
+ recent_messages = messages.where(:sent_on => Time.now.utc - 3600..).count
max_messages = account_age_in_hours.ceil + recent_messages - (active_reports * 10)
max_messages.clamp(0, Settings.max_messages_per_hour)
end
def max_friends_per_hour
account_age_in_seconds = Time.now.utc - created_at
account_age_in_hours = account_age_in_seconds / 3600
- recent_friends = Friendship.where(:befriendee => self).where("created_at >= ?", Time.now.utc - 3600).count
+ recent_friends = Friendship.where(:befriendee => self).where(:created_at => Time.now.utc - 3600..).count
max_friends = account_age_in_hours.ceil + recent_friends - (active_reports * 10)
max_friends.clamp(0, Settings.max_friends_per_hour)
end
<%= f.select(:auth_provider, Auth.providers, :hide_label => true, :wrapper => { :class => "col-auto mb-0" }) %>
<%= f.text_field(:auth_uid, :hide_label => true, :wrapper => { :class => "col mb-0" }) %>
</div>
- <small class="form-text text-muted">(<a href="<%= t ".openid.link" %>" target="_new"><%= t ".openid.link text" %></a>)</small>
+ <small class="form-text text-body-secondary">(<a href="<%= t ".openid.link" %>" target="_new"><%= t ".openid.link text" %></a>)</small>
</fieldset>
<div class="mb-3">
<label class="form-label"><%= t ".public editing.heading" %></label>
- <span class="form-text text-muted">
+ <span class="form-text text-body-secondary">
<% if current_user.data_public? %>
<%= t ".public editing.enabled" %>
(<a href="<%= t ".public editing.enabled link" %>" target="_new"><%= t ".public editing.enabled link text" %></a>)
<div class="mb-3">
<label class="form-label"><%= t ".contributor terms.heading" %></label>
- <span class="form-text text-muted">
+ <span class="form-text text-body-secondary">
<% if current_user.terms_agreed? %>
<%= t ".contributor terms.agreed" %>
(<a href="<%= t ".contributor terms.link" %>" target="_new"><%= t ".contributor terms.link text" %></a>)
</span>
</div>
- <div class="row justify-content-between">
- <div class="col-auto btn-wrapper">
+ <div class="row justify-content-between g-1">
+ <div class="col-auto">
<%= f.primary t(".save changes button") %>
</div>
- <div class="col-auto btn-wrapper">
+ <div class="col-auto">
<%= link_to t(".delete_account"), account_deletion_path, :class => "btn btn-outline-danger" %>
</div>
</div>
<div>
- <div class="list-inline justify-content-center d-flex align-items-center flex-wrap mb-3 gap-3" id="login_auth_buttons">
+ <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100 mb-3" id="login_auth_buttons">
+ <% 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 %>
- <div class="mx-2"><%= auth_button_preferred provider, provider %></div>
+ <% prefered_auth_button_available = true %>
<% end %>
<% end -%>
<% end -%>
- <div class="justify-content-center d-flex gap-1">
- <div>
- <%= link_to image_tag("openid.png",
- :alt => t("application.auth_providers.openid.title"),
- :size => "24"),
- "#",
- :id => "openid_open_url",
- :title => t("application.auth_providers.openid.title"),
- :class => "p-2 d-block" %>
+ <% if prefered_auth_button_available %>
+ <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+ <% %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 %>
+ <% end %>
+ <% end -%>
+ <% end -%>
</div>
+ <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+ <% else %>
+ <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100">
+ <% end %>
+
+ <%= link_to image_tag("openid.png",
+ :alt => t("application.auth_providers.openid.title"),
+ :size => "24"),
+ "#",
+ :id => "openid_open_url",
+ :title => t("application.auth_providers.openid.title"),
+ :class => "p-2 d-block" %>
<% %w[google facebook microsoft github wikipedia].each do |provider| %>
<% unless @preferred_auth_provider == provider %>
<% if Settings.key?("#{provider}_auth_id".to_sym) -%>
- <div><%= auth_button provider, provider %></div>
+ <%= auth_button provider, provider %>
<% end -%>
<% end %>
<% end -%>
<label for="openid_url" class="form-label"><%= t ".openid_html", :logo => openid_logo %></label>
<%= hidden_field_tag("referer", params[:referer], :autocomplete => "off") %>
<%= text_field_tag("openid_url", "", :tabindex => 20, :autocomplete => "on", :class => "openid_url form-control") %>
- <span class="form-text text-muted">(<a href="<%= t "accounts.edit.openid.link" %>" target="_new"><%= t "accounts.edit.openid.link text" %></a>)</span>
+ <span class="form-text text-body-secondary">(<a href="<%= t "accounts.edit.openid.link" %>" target="_new"><%= t "accounts.edit.openid.link text" %></a>)</span>
</div>
<%= submit_tag t(".openid_login_button"), :tabindex => 21, :id => "openid_login_button", :class => "btn btn-primary" %>
:id => node.redaction.id), node.redaction) %>
</div>
<% else %>
- <%= tag.div :class => ["browse-section", "browse-node", { "text-muted" => node.redacted? }] do %>
+ <%= tag.div :class => ["browse-section", "browse-node", { "text-body-secondary" => node.redacted? }] do %>
<%= render :partial => "browse/common_details", :object => node %>
<% unless node.ways.empty? and node.containing_relation_members.empty? %>
:id => relation.redaction.id), relation.redaction) %>
</div>
<% else %>
- <%= tag.div :class => ["browse-section", "browse-relation", { "text-muted" => relation.redacted? }] do %>
+ <%= tag.div :class => ["browse-section", "browse-relation", { "text-body-secondary" => relation.redacted? }] do %>
<%= render :partial => "browse/common_details", :object => relation %>
<% unless relation.containing_relation_members.empty? %>
:id => way.redaction.id), way.redaction) %>
</div>
<% else %>
- <%= tag.div :class => ["browse-section", "browse-way", { "text-muted" => way.redacted? }] do %>
+ <%= tag.div :class => ["browse-section", "browse-way", { "text-body-secondary" => way.redacted? }] do %>
<%= render :partial => "browse/common_details", :object => way %>
<% unless way.containing_relation_members.empty? %>
</div>
</div>
- <small class='text-muted'>
+ <small class='text-body-secondary'>
<%= t(".created_by_html", :link_user => link_to(changeset.user.display_name, changeset.user), :created => l(changeset.created_at, :format => :blog)) %>
</small>
</div>
<% if current_user %>
<div class="col-auto">
<% if @changeset.subscribers.exists?(current_user.id) %>
- <button class="btn btn-sm btn-primary" name="unsubscribe" data-method="POST" data-url="<%= api_changeset_unsubscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.unsubscribe") %></button>
+ <%= tag.button t(".unsubscribe"),
+ :class => "btn btn-sm btn-primary",
+ :name => "unsubscribe",
+ :data => { :method => "POST",
+ :url => api_changeset_unsubscribe_url(@changeset) } %>
<% else %>
- <button class="btn btn-sm btn-primary" name="subscribe" data-method="POST" data-url="<%= api_changeset_subscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.subscribe") %></button>
+ <%= tag.button t(".subscribe"),
+ :class => "btn btn-sm btn-primary",
+ :name => "subscribe",
+ :data => { :method => "POST",
+ :url => api_changeset_subscribe_url(@changeset) } %>
<% end %>
</div>
<% end %>
<% @comments.each do |comment| %>
<% next unless comment.visible || current_user&.moderator? %>
<li id="c<%= comment.id %>">
- <small class='text-muted'>
+ <small class='text-body-secondary'>
<%= t comment.visible ? ".comment_by_html" : ".hidden_comment_by_html",
:time_ago => friendly_date_ago(comment.created_at),
:user => link_to(comment.author.display_name, comment.author) %>
<% if current_user&.moderator? %>
—
- <%= tag.button t("javascripts.changesets.show.#{comment.visible ? 'hide' : 'unhide'}_comment"),
+ <%= tag.button t(".#{comment.visible ? 'hide' : 'unhide'}_comment"),
:class => "btn btn-sm small btn-link link-secondary p-0 align-baseline",
:data => { :method => "POST",
:url => comment.visible ? changeset_comment_hide_url(comment) : changeset_comment_unhide_url(comment) } %>
<div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
</div>
<div>
- <button name="comment" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled class="btn btn-sm btn-primary"><%= t("javascripts.changesets.show.comment") %></button>
+ <%= tag.button t(".comment"),
+ :class => "btn btn-primary",
+ :name => "comment",
+ :disabled => true,
+ :data => { :method => "POST",
+ :url => changeset_comment_url(@changeset) } %>
</div>
</form>
<% else %>
<% else %>
<h1>
<%= t ".introduction_1" %>
- <span class="text-muted">
+ <span class="text-body-secondary">
<%= t ".introduction_2" %>
</span>
</h1>
- <p class='text-muted'>
+ <p class='text-body-secondary'>
<%= t ".resend_html",
:reconfirm_link => link_to(t(".click_here"), url_for(:action => "confirm_resend")) %>
</p>
<%= user_thumbnail contact %>
</div>
<div class="col">
- <p class='text-muted mb-0'>
+ <p class='text-body-secondary mb-0'>
<%= link_to contact.display_name, contact %>
<% if @user.home_location? and contact.home_location? %>
<% distance = @user.distance(contact) %>
</p>
<nav class='secondary-actions'>
- <ul class='clearfix text-muted'>
+ <ul class='clearfix text-body-secondary'>
<li><%= link_to t("users.show.send message"), new_message_path(contact) %></li>
<li>
<% if current_user.friends_with?(contact) %>
-<div class="row diary-comment border-bottom py-3<%= " text-muted bg-danger bg-opacity-10" unless diary_comment.visible? %>">
+<div class="row diary-comment border-bottom py-3<%= " text-body-secondary bg-danger bg-opacity-10" unless diary_comment.visible? %>">
<div class="col-auto pe-0 text-center">
<%= user_thumbnail diary_comment.user %>
</div>
<div class="col">
- <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, diary_comment.user), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
+ <p class="text-body-secondary m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, diary_comment.user), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
<% if current_user and diary_comment.user.id != current_user.id %>
| <%= report_link(t(".report"), diary_comment) %>
<% end %>
-<article class='diary_post border-top border-secondary-subtle py-3<%= " text-muted px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
+<article class='diary_post border-top border-secondary-subtle py-3<%= " text-body-secondary px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
<%= render :partial => "diary_entry_heading", :object => diary_entry, :as => "diary_entry" %>
<div class="richtext text-break" xml:lang="<%= diary_entry.language_code %>" lang="<%= diary_entry.language_code %>">
</div>
<% end %>
- <small class='text-muted'>
+ <small class='text-body-secondary'>
<%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, diary_entry.user), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
<% if (l(diary_entry.updated_at, :format => :blog) != l(diary_entry.created_at, :format => :blog)) %>
<%= t("diary_entries.diary_entry.updated_at_html", :updated => l(diary_entry.updated_at, :format => :blog)) %>
</thead>
<% @comments.each do |comment| -%>
<tr>
- <td width="25%" class="<%= "text-muted" unless comment.visible? %>"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
- <td width="25%" class="<%= "text-muted" unless comment.visible? %>">
+ <td width="25%" class="<%= "text-body-secondary" unless comment.visible? %>"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
+ <td width="25%" class="<%= "text-body-secondary" unless comment.visible? %>">
<%= friendly_date_ago(comment.created_at) %>
</td>
- <td width="50%" class="richtext text-break<%= " text-muted" unless comment.visible? %>"><%= comment.body.to_html %></td>
+ <td width="50%" class="richtext text-break<%= " text-body-secondary" unless comment.visible? %>"><%= comment.body.to_html %></td>
</tr>
<% end -%>
</table>
<% if current_user %>
<div class="col-auto">
<% if @entry.subscribers.exists?(current_user.id) %>
- <%= link_to t("javascripts.changesets.show.unsubscribe"), diary_entry_unsubscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %>
+ <%= link_to t(".unsubscribe"), diary_entry_unsubscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %>
<% else %>
- <%= link_to t("javascripts.changesets.show.subscribe"), diary_entry_subscribe_path(@entry.user, @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
+ <%= link_to t(".subscribe"), diary_entry_subscribe_path(@entry.user, @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
<% end %>
</div>
<% end %>
--- /dev/null
+<h1><%= t ".title" %></h1>
+<p><%= t ".description" %></p>
+<%= render :partial => "contact" %>
<%= link_to user_thumbnail(comment.user), comment.user %>
</div>
<div class="col">
- <p class="text-muted">
+ <p class="text-body-secondary">
<%= t ".comment_from_html", :user_link => link_to(comment.user.display_name, comment.user),
:comment_created_at => tag.time(l(comment.created_at.to_datetime, :format => :friendly),
:datetime => comment.created_at.xmlschema) %>
<%= link_to user_thumbnail(report.user), report.user %>
</div>
<div class="col">
- <p class="text-muted">
+ <p class="text-body-secondary">
<%= t ".reported_by_html", :category => report.category,
:user => link_to(report.user.display_name, report.user),
:updated_at => tag.time(l(report.updated_at.to_datetime, :format => :friendly),
<% content_for :heading do %>
<h1><%= t ".title", :status => @issue.status.humanize, :issue_id => @issue.id %></h1>
<p><%= @issue.reportable.model_name.human %> : <%= link_to reportable_title(@issue.reportable), reportable_url(@issue.reportable) %></p>
-<p class="text-muted">
+<p class="text-body-secondary">
<small>
<%= @issue.assigned_role %>
<% if @issue.reports.count > 0 %>
<h3><%= t ".reports_of_this_issue" %></h3>
<% if @read_reports.present? %>
- <div class="bg-body-tertiary text-muted">
+ <div class="bg-body-tertiary text-body-secondary">
<h4><%= t ".read_reports" %></h4>
<%= render "reports", :reports => @read_reports %>
</div>
<%= yield :head %>
<%= yield :auto_discovery_link_tag %>
<%= csrf_meta_tag %>
- <meta name="csp-nonce" content="<%= content_security_policy_style_nonce %>" />
+ <%= csp_meta_tag %>
<title><%= "#{@title} | " if @title %><%= t "layouts.project_name.title" %></title>
<% end %>
<header class="d-flex bg-body text-nowrap closed z-3">
- <h1 class="m-0 fw-semibold">
- <a href="<%= root_path %>" class="text-body-emphasis text-decoration-none geolink">
- <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :width => 30, :height => 30, :class => "logo" %>
+ <h1 class="d-flex m-0 fw-semibold">
+ <a href="<%= root_path %>" class="icon-link gap-1 text-body-emphasis text-decoration-none geolink">
+ <%= image_tag "osm_logo.png", :srcset => image_path("osm_logo.svg"), :alt => t("layouts.logo.alt_text"), :size => 30 %>
<%= t "layouts.project_name.h1" %>
</a>
</h1>
<%= link_to t("layouts.export"), export_path, :class => "btn btn-outline-primary geolink", :id => "export_tab" %>
</div>
</nav>
- <nav class='secondary'>
- <ul class='mx-1 px-0'>
+ <nav class='secondary d-flex gap-2 align-items-center'>
+ <ul class='nav flex-nowrap'>
<% if Settings.status != "database_offline" && can?(:index, Issue) %>
<li class="compact-hide nav-item">
<%= link_to issues_path(:status => "open"), :class => header_nav_link_class(issues_path) do %>
</ul>
<% if current_user && current_user.id %>
<div class='d-inline-flex dropdown user-menu logged-in'>
- <button class='dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
+ <button class='d-flex gap-1 align-items-center justify-content-center dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
<%= user_thumbnail_tiny(current_user, :width => 25, :height => 25, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
- <%= render :partial => "layouts/inbox" %>
- <span class="user-button">
- <span class='username'>
- <%= current_user.display_name %>
- </span>
+ <% if current_user.new_messages.size > 0 %>
+ <span class="badge count-number position-static m-1"><%= current_user.new_messages.size %></span>
+ <% end %>
+ <span class='username align-middle text-truncate'>
+ <%= current_user.display_name %>
</span>
</button>
<div class='dropdown-menu dropdown-menu-end'>
<%= link_to t("layouts.logout"), logout_path(:referer => request.fullpath), :method => "post", :class => "geolink dropdown-item" %>
</div>
</div>
- <% elsif (controller_name != "users" and controller_name != "sessions") || action_name != "new" %>
+ <% else %>
<div class="d-inline-flex btn-group login-menu" role="">
<%= link_to t("layouts.log_in"), login_path(:referer => request.fullpath), :class => "geolink btn btn-outline-secondary" %>
<%= link_to t("layouts.sign_up"), user_new_path, :class => "btn btn-outline-secondary" %>
+++ /dev/null
-<% if current_user.new_messages.size > 0 %>
-<span id="inboxanchor" class="badge count-number m-1"><%= current_user.new_messages.size %></span>
-<% end %>
<% end -%>
<%= tag.link :rel => "search", :type => "application/opensearchdescription+xml", :title => "OpenStreetMap Search", :href => asset_path("osm.xml") %>
<%= tag.meta :name => "description", :content => "OpenStreetMap is the free wiki world map." %>
-<%= opengraph_tags(@title) %>
+<%= opengraph_tags(@title, @og_image) %>
<% if flash[:matomo_goal] -%>
<%= tag.meta :name => "matomo-goal", :content => flash[:matomo_goal] %>
<% end -%>
<div class="row gx-2 mx-0">
<div class="col">
<div class="input-group flex-nowrap">
- <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control form-control-sm z-0", :dir => "auto" %>
+ <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control z-0 py-1 px-2", :dir => "auto" %>
<div class="input-group-text border-start-0 p-0 position-relative">
- <%= button_tag t("site.search.where_am_i"), :type => "button", :class => "describe_location position-absolute end-0 me-1 btn btn-sm btn-outline-primary border-0 bg-transparent text-primary link-body-emphasis link-opacity-100-hover", :title => t("site.search.where_am_i_title") %>
+ <%= button_tag t("site.search.where_am_i"), :type => "button", :class => "describe_location position-absolute end-0 top-0 bottom-0 m-1 btn btn-outline-primary border-0 p-1 bg-transparent text-primary link-body-emphasis link-opacity-100-hover", :title => t("site.search.where_am_i_title") %>
</div>
- <%= submit_tag t("site.search.submit_text"), :class => "btn btn-sm btn-primary", :data => { :disable_with => false } %>
+ <%= button_tag :class => "btn btn-primary p-1", :title => t("site.search.submit_text") do %>
+ <svg width="24" height="20">
+ <circle cx="13" cy="7" r="6.5" fill="#fff8" stroke="#fff" />
+ <path d="M9.75 12.629 A6.5 6.5 0 0 1 7.371 10.25" fill="none" stroke="#fff" stroke-width="1.5" />
+ <line x1="1" y1="19" x2="1.5" y2="18.5" stroke="#fff8" stroke-width="2" />
+ <line x1="1.5" y1="18.5" x2="6" y2="14" stroke="#fff" stroke-width="2.5" />
+ <line x1="6" y1="14" x2="6.5" y2="13.5" stroke="#fff8" stroke-width="2" />
+ <line x1="6.5" y1="13.5" x2="8.5" y2="11.5" stroke="#fff" stroke-width="1.5" />
+ </svg>
+ <% end %>
</div>
</div>
<div class="col-auto">
- <%= link_to image_tag("directions.png", :width => "20", :height => "20", :class => "align-bottom"), directions_path, :class => "btn btn-sm btn-primary switch_link", :title => t("site.search.get_directions_title") %>
+ <%= link_to directions_path, :class => "btn btn-primary p-1 switch_link", :title => t("site.search.get_directions_title") do %>
+ <svg width="28" height="24" viewBox="0 -2 28 24" class="align-bottom">
+ <path d="M11.5 9.5 v-3h3v-1l-5 -5l-5 5v1h3v6" fill="none" stroke="#fff8" />
+ <path d="M7.5 19.5h4v-5a1 1 0 0 1 1 -1h5v3h1l5 -5l-5 -5h-1v3h-6a4 4 0 0 0 -4 4z" fill="#fff8" stroke="#fff" />
+ </svg>
+ <% end %>
</div>
</div>
</form>
- <form method="GET" action="<%= directions_path %>" class="directions_form bg-body-secondary pb-3">
+ <form method="GET" action="<%= directions_path %>" class="directions_form bg-body-secondary pb-2">
<div class="d-flex flex-row-reverse px-3 py-3"><button type="button" class="btn-close" aria-label="<%= t("javascripts.close") %>"></button></div>
- <div class="row gx-2 m-1">
- <div class="col-1">
- <%= image_tag "marker-green.png", :class => "routing_marker mx-auto d-block", :data => { :type => "from" }, :draggable => "true" %>
- </div>
- <div class="col">
- <%= text_field_tag "route_from", params[:from], :placeholder => t("site.search.from"), :autocomplete => "on", :class => "form-control form-control-sm", :dir => "auto" %>
- </div>
- </div>
- <div class="row gx-2 m-1">
- <div class="col-1">
- <%= image_tag "marker-red.png", :class => "routing_marker mx-auto d-block", :data => { :type => "to" }, :draggable => "true" %>
- </div>
- <div class="col">
- <%= text_field_tag "route_to", params[:to], :placeholder => t("site.search.to"), :autocomplete => "on", :class => "form-control form-control-sm", :dir => "auto" %>
+ <div class="d-flex flex-column mx-2 gap-1">
+ <div class="d-flex gap-2 align-items-center">
+ <div class="routing_marker_column flex-shrink-0">
+ <%= image_tag "marker-green.png", :class => "img-fluid", :data => { :type => "from" }, :draggable => "true" %>
+ </div>
+ <%= text_field_tag "route_from", params[:from], :placeholder => t("site.search.from"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %>
</div>
- </div>
- <div class="row gx-2 m-1">
- <div class="col offset-1">
- <select class="routing_engines form-select form-select-sm" name="routing_engines"></select>
+ <div class="d-flex gap-2 align-items-center">
+ <div class="routing_marker_column flex-shrink-0">
+ <%= image_tag "marker-red.png", :class => "img-fluid", :data => { :type => "to" }, :draggable => "true" %>
+ </div>
+ <%= text_field_tag "route_to", params[:to], :placeholder => t("site.search.to"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %>
</div>
- <div class="col-auto">
- <%= submit_tag t("site.search.submit_text"), :class => "routing_go btn btn-sm btn-primary", :data => { :disable_with => false } %>
+ <div class="d-flex gap-2 align-items-center">
+ <div class="routing_marker_column flex-shrink-0"></div>
+ <select class="routing_engines form-select py-1 px-2" name="routing_engines"></select>
+ <%= submit_tag t("site.search.submit_text"), :class => "routing_go btn btn-primary py-1 px-2", :data => { :disable_with => false } %>
</div>
- </div>
- <div class="row gx-2 m-1">
- <div class="col offset-1">
- <button class="btn btn-sm btn-link reverse_directions"><%= t("site.search.reverse_directions_text") %></button>
+ <div class="d-flex gap-2 align-items-center">
+ <div class="routing_marker_column flex-shrink-0"></div>
+ <button class="btn btn-link py-1 px-2 reverse_directions"><%= t("site.search.reverse_directions_text") %></button>
</div>
</div>
<tr<% if note.author == @user %> class="table-primary"<% end %>>
<td>
<% if note.closed? %>
- <%= image_tag("closed_note_marker.png", :alt => "closed", :size => "25x40") %>
+ <%= image_tag("closed_note_marker.svg", :alt => "closed", :width => 25, :height => 40) %>
<% else %>
- <%= image_tag("open_note_marker.png", :alt => "open", :size => "25x40") %>
+ <%= image_tag("open_note_marker.svg", :alt => "open", :width => 25, :height => 40) %>
<% end %>
</td>
<td><%= link_to note.id, note %></td>
<div class="mb-3">
<textarea class="form-control" name="text" cols="40" rows="10" maxlength="2000" placeholder="<%= t(".advice") %>"></textarea>
</div>
- <div class="btn-wrapper">
+ <div>
<input type="submit" name="add" value="<%= t(".add") %>" disabled="1" class="btn btn-primary">
</div>
</form>
<div>
<h4><%= t(".description") %></h4>
- <div class="note-description">
+ <div class="overflow-hidden ms-2">
<%= h(@note_comments.first.body.to_html) %>
</div>
<ul class="list-unstyled">
<% @note_comments.drop(1).each do |comment| %>
<li id="c<%= comment.id %>">
- <small class='text-muted'><%= note_event(comment.event, comment.created_at, comment.author) %></small>
+ <small class='text-body-secondary'><%= note_event(comment.event, comment.created_at, comment.author) %></small>
<div class="mx-2">
<%= comment.body.to_html %>
</div>
</div>
<div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
</div>
- <div class="btn-wrapper">
+ <div class="d-flex flex-wrap gap-1">
<% if current_user.moderator? -%>
- <%= submit_tag t(".hide"), :name => "hide", :class => "btn btn-light",
+ <%= button_tag t(".hide"), :name => "hide", :class => "btn btn-light",
:data => { :method => "DELETE",
:url => api_note_url(@note, "json") } %>
<% end -%>
- <%= submit_tag t(".resolve"), :name => "close", :class => "btn btn-primary",
+ <%= button_tag t(".resolve"), :name => "close", :class => "btn btn-primary",
:data => { :method => "POST",
:url => close_api_note_url(@note, "json"),
:default_action_text => t(".resolve"),
:comment_action_text => t(".comment_and_resolve") } %>
- <%= submit_tag t(".comment"), :name => "comment", :class => "btn btn-primary", :disabled => true,
+ <%= button_tag t(".comment"), :name => "comment", :class => "btn btn-primary", :disabled => true,
:data => { :method => "POST",
:url => comment_api_note_url(@note, "json") } %>
</div>
<input type="hidden" name="text" value="" autocomplete="off">
<div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
</div>
- <div class="btn-wrapper">
+ <div class="d-flex flex-wrap gap-1">
<% if @note.status != "hidden" and current_user and current_user.moderator? -%>
- <input type="submit" name="hide" value="<%= t(".hide") %>" class="btn btn-light" data-method="DELETE" data-url="<%= api_note_url(@note, "json") %>">
+ <%= button_tag t(".hide"), :name => "hide", :class => "btn btn-light",
+ :data => { :method => "DELETE",
+ :url => api_note_url(@note, "json") } %>
<% end -%>
<% if current_user -%>
- <input type="submit" name="reopen" value="<%= t(".reactivate") %>" class="btn btn-primary" data-method="POST" data-url="<%= reopen_api_note_url(@note, "json") %>">
+ <%= button_tag t(".reactivate"), :name => "reopen", :class => "btn btn-primary",
+ :data => { :method => "POST",
+ :url => reopen_api_note_url(@note, "json") } %>
<% end -%>
</div>
</form>
<% if current_user && current_user != @note.author %>
<p>
- <small class="text-muted">
+ <small class="text-body-secondary">
<%= t ".report_link_html", :link => report_link(t(".report"), @note) %>
<% if @note.status == "open" %>
<%= t ".other_problems_resolve", :link => report_link(t(".report"), @note) %>
<% end %>
<% if @note.freshly_closed? %>
- <small class="text-muted">
+ <small class="text-body-secondary">
<%= t ".disappear_date_html", :disappear_in => friendly_date(@note.freshly_closed_until) %>
</small>
<% end %>
<ul class="list-unstyled mb-0">
<li><%= link_to application.name, oauth_application_path(application) %></li>
<% application.redirect_uri.split.each do |uri| -%>
- <li class="text-muted"><%= uri %></li>
+ <li class="text-body-secondary"><%= uri %></li>
<% end -%>
</ul>
</td>
<td class="align-middle">
<ul class="list-unstyled mb-0">
<% application.scopes.each do |scope| -%>
- <li><%= authorization_scope(scope) %> <code class="text-muted">(<%= scope %>)</code></li>
+ <li><%= authorization_scope(scope) %> <code class="text-body-secondary">(<%= scope %>)</code></li>
<% end -%>
</ul>
</td>
<td>
<ul class="list-unstyled mb-0">
<% @application.scopes.each do |scope| -%>
- <li><%= t "oauth.scopes.#{scope}" %> <code class="text-muted">(<%= scope %>)</code></li>
+ <li><%= t "oauth.scopes.#{scope}" %> <code class="text-body-secondary">(<%= scope %>)</code></li>
<% end -%>
</ul>
</td>
<fieldset>
<legend><%= t ".home location" -%></legend>
- <p id="home_message" class="text-muted m-0<% if current_user.home_location? %> invisible<% end %>"><%= t ".no home location" %></p>
+ <p id="home_message" class="text-body-secondary m-0<% if current_user.home_location? %> invisible<% end %>"><%= t ".no home location" %></p>
<div class="row">
<%= f.text_field :home_lat, :wrapper_class => "col-sm-4 d-flex flex-column", :class => "mt-auto", :id => "home_lat" %>
<%= f.text_field :home_lon, :wrapper_class => "col-sm-4 d-flex flex-column", :class => "mt-auto", :id => "home_lon" %>
<% content_for :heading do %>
<% if @client_app_name %>
- <p class="text-center text-muted fs-6 py-2 mb-0 bg-body"><%= t(".login_to_authorize_html", :client_app_name => @client_app_name) %></p>
+ <p class="text-center text-body-secondary fs-6 py-2 mb-0 bg-body"><%= t(".login_to_authorize_html", :client_app_name => @client_app_name) %></p>
<% end %>
<div class="header-illustration new-user-main auth-container mx-auto">
- <ul class="nav nav-tabs position-absolute bottom-0 px-3 fs-6 w-100">
+ <ul class="nav nav-tabs position-absolute bottom-0 fs-6 w-100">
<li class="nav-item">
<%= link_to t("sessions.new.tab_title"), "#", :class => "nav-link active" %>
</li>
<li class="nav-item">
- <%= link_to t("users.new.tab_title"), url_for(:action => :new, :controller => :users), :class => "nav-link" %>
+ <%= link_to t("users.new.tab_title"), url_for(:action => :new, :controller => :users, :referer => params[:referer]), :class => "nav-link" %>
</li>
</ul>
</div>
<div id="login_login" class="auth-container mx-auto my-0">
<% if @preferred_auth_provider %>
<%= render :partial => "auth_providers" %>
- <div class="d-flex justify-content-center align-items-center">
+ <div class="d-flex justify-content-center align-items-center mb-2">
<div class="border-bottom border-1 flex-grow-1"></div>
<div class="text-secondary mx-3"><%= t ".or" %></div>
<div class="border-bottom border-1 flex-grow-1"></div>
<%= 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"), :tabindex => 1, :value => params[:username] %>
+ <%= f.text_field :username, :label => t(".email or username"), :autofocus => true, :tabindex => 1, :value => params[:username] %>
<div class="row">
<div class="col">
- <%= f.label :password, :class => "form-label" %>
+ <%= f.label :password, t(".password"), :class => "form-label" %>
</div>
<div class="col text-end">
<small><%= link_to(t(".lost password link"), user_forgot_password_path) %></small>
</div>
</div>
- <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="off" />
+ <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="on" />
<%= f.form_group do %>
<%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %>
+++ /dev/null
-<%= tag.section :id => local_assigns[:id] do %>
- <div class='d-flex align-items-center gap-2 mb-2'>
- <div class='flex-shrink-0 icon <%= icon %>'></div>
- <h2 class='flex-grow-1 mb-0'><%= t "site.about.#{title}_title" %></h2>
- </div>
- <%= yield %>
-<% end %>
- <h2><%= t ".title" %></h2>
- <span class='sprite small term question float-start'></span>
+<h2><%= t ".title" %></h2>
+<div class='d-flex align-items-center gap-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <circle cx="50" cy="50" r="45" fill="#7092ff" />
+ <path d="M44.42 54.95q0-3 1.26-5.04 1.26-2.04 4.32-4.26 2.7-1.92 3.84-3.3 1.2-1.44 1.2-3.36 0-1.92-1.44-2.88-1.38-1.02-3.9-1.02-2.52 0-4.98.78-2.46.78-5.04 2.1l-3.18-6.42q2.94-1.62 6.36-2.64 3.42-1.02 7.5-1.02 6.24 0 9.66 3 3.48 3 3.48 7.62 0 2.46-.78 4.26-.78 1.8-2.34 3.36-1.56 1.5-3.9 3.24-1.74 1.26-2.7 2.16-.96.9-1.32 1.74-.3.84-.3 2.1v1.74h-7.74zm-.96 12.18q0-2.76 1.5-3.84 1.5-1.14 3.66-1.14 2.1 0 3.6 1.14 1.5 1.08 1.5 3.84 0 2.64-1.5 3.84-1.5 1.14-3.6 1.14-2.16 0-3.66-1.14-1.5-1.2-1.5-3.84z" fill="#fff" />
+ </svg>
<p><%= t ".paragraph_1_html", :help_link => link_to(t(".get_help_here"), help_path),
:welcome_mat_link => link_to(t(".welcome_mat"), t(".welcome_mat_url")) %></p>
+</div>
<div class='bg-body px-5 py-4'>
<p class="lead"><%= t ".lede_text" %></p>
- <%= render :layout => "about_section", :locals => { :icon => "local", :title => "local_knowledge" } do %>
+ <section>
+ <div class="d-flex align-items-center gap-2 mb-2">
+ <svg width="30" height="30" class="flex-shrink-0">
+ <circle cx="15" cy="15" r="13" fill="none" stroke="#c0c0c0" stroke-width="4" />
+ <path d="m 15,22 c 0,0 5,-4.5199 5,-8 0,-3 -2,-5 -5,-5 -3,0 -5,2 -5,5 0,3.4801 5,8 5,8 z" fill="#c0c0c0" />
+ </svg>
+ <h2 class="flex-grow-1 mb-0"><%= t "site.about.local_knowledge_title" %></h2>
+ </div>
<p><%= t "site.about.local_knowledge_html" %></p>
- <% end %>
+ </section>
- <%= render :layout => "about_section", :locals => { :icon => "community", :title => "community_driven" } do %>
+ <section>
+ <div class="d-flex align-items-center gap-2 mb-2">
+ <svg width="30" height="30" class="flex-shrink-0">
+ <circle cx="15" cy="15" r="13" fill="none" stroke="#c0c0c0" stroke-width="4" />
+ <path d="m 15,7 -6,6 0,7 4,0 0,-4 4,0 0,4 4,0 0,-7 z" fill="#c0c0c0" />
+ </svg>
+ <h2 class="flex-grow-1 mb-0"><%= t "site.about.community_driven_title" %></h2>
+ </div>
<p>
<%= t "site.about.community_driven_1_html", :osm_blog_link => link_to(t("site.about.community_driven_osm_blog"),
t("site.about.community_driven_osm_blog_url")),
:osm_foundation_link => link_to(t("site.about.community_driven_osm_foundation"),
t("site.about.community_driven_osm_foundation_url")) %>
</p>
- <% end %>
+ </section>
- <%= render :layout => "about_section", :locals => { :id => "open-data", :icon => "open", :title => "open_data" } do %>
+ <section id="open-data">
+ <div class="d-flex align-items-center gap-2 mb-2">
+ <svg width="30" height="30" class="flex-shrink-0">
+ <circle cx="15" cy="15" r="13" fill="none" stroke="#c0c0c0" stroke-width="4" />
+ <path d="M20.196 18 a6 6 0 1 1 0 -6" fill="none" stroke="#c0c0c0" stroke-width="3" />
+ </svg>
+ <h2 class="flex-grow-1 mb-0"><%= t "site.about.open_data_title" %></h2>
+ </div>
<p>
<%= t "site.about.open_data_1_html", :open_data => tag.i(t("site.about.open_data_open_data")),
:copyright_license_link => link_to(t("site.about.open_data_copyright_license"),
copyright_path) %></p>
- <% end %>
+ </section>
- <%= render :layout => "about_section", :locals => { :id => "legal", :icon => "legal", :title => "legal" } do %>
+ <section id="legal">
+ <div class="d-flex align-items-center gap-2 mb-2">
+ <svg width="30" height="30" class="flex-shrink-0">
+ <circle cx="15" cy="15" r="13" fill="none" stroke="#c0c0c0" stroke-width="4" />
+ <g fill="none" stroke="#c0c0c0" stroke-width="1.125" stroke-linecap="round">
+ <path transform="translate(15 15) scale(2.2 1.75) rotate(45)"
+ d="M.5 1 a1 1 0 0 0 0 -2 h-2.5 a1 1 0 0 1 0 -2 h.5" />
+ <path transform="translate(15 15) scale(-2.2 -1.75) rotate(45)"
+ d="M.5 1 a1 1 0 0 0 0 -2 h-2.5 a1 1 0 0 1 0 -2 h.5" />
+ </g>
+ </svg>
+ <h2 class="flex-grow-1 mb-0"><%= t "site.about.legal_title" %></h2>
+ </div>
<p>
<%= t "site.about.legal_1_1_html", :openstreetmap_foundation_link => link_to(t("site.about.legal_1_1_openstreetmap_foundation"),
t("site.about.legal_1_1_openstreetmap_foundation_url")),
<%= t "site.about.legal_2_2_html", :registered_trademarks_link => link_to(t("site.about.legal_2_2_registered_trademarks"),
t("site.about.legal_2_2_registered_trademarks_url")) %>
</p>
- <% end %>
+ </section>
- <%= render :layout => "about_section", :locals => { :id => "partners", :icon => "partners", :title => "partners" } do %>
+ <section id="partners">
+ <div class="d-flex align-items-center gap-2 mb-2">
+ <svg width="30" height="30" class="flex-shrink-0">
+ <circle cx="15" cy="15" r="13" fill="none" stroke="#c0c0c0" stroke-width="4" />
+ <g stroke="#c0c0c0" stroke-width="4" stroke-linecap="round">
+ <line x1="11" y1="15" x2="19" y2="15" />
+ <line x1="15" y1="11" x2="15" y2="19" />
+ </g>
+ </svg>
+ <h2 class="flex-grow-1 mb-0"><%= t "site.about.partners_title" %></h2>
+ </div>
<p><%= t "layouts.hosting_partners_2024_html", :fastly => link_to(t("layouts.partners_fastly"), "https://www.fastly.com/"),
:corpmembers => link_to(t("layouts.partners_corpmembers"), "https://osmfoundation.org/wiki/Corporate_Members"),
:partners => link_to(t("layouts.partners_partners"), "https://hardware.openstreetmap.org/thanks/") %>
</p>
- <% end %>
+ </section>
</div>
<% end %>
<% end %>
<div class='row'>
<div class='col-sm'>
- <h5><%= t ".how_to_help.join_the_community.title" %></h5>
+ <h3 class='fs-5'><%= t ".how_to_help.join_the_community.title" %></h3>
<p><%= t ".how_to_help.join_the_community.explanation_html" %></p>
<p class='text-center'>
<a class="btn btn-primary" href="<%= user_new_path %>"><%= t("layouts.start_mapping") %></a>
</p>
</div>
<div class='col-sm'>
- <h5><%= t "site.welcome.add_a_note.title" %></h5>
+ <h3 class='fs-5'><%= t "site.welcome.add_a_note.title" %></h3>
<p><%= t "site.welcome.add_a_note.para_1" %></p>
<p><%= t ".how_to_help.add_a_note.instructions_1_html", :note_icon => tag.a(:class => "icon note bg-dark rounded-1") %></p>
</div>
<h2><%= t ".whats_on_the_map.title" %></h2>
<div class='row'>
- <div class='col'>
- <div>
- <span class='sprite small check mx-auto'></span>
- </div>
+ <div class='col-sm'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='d-block mx-auto'>
+ <circle cx="50" cy="50" r="45" fill="#70cd8f" />
+ <path d="M31 46h-2l-3 3v2l14 14 5 5 5-5 25-25v-2l-3-3h-2l-25 25z" fill="#fff" />
+ </svg>
<p><%= t ".whats_on_the_map.on_the_map_html", :real_and_current => tag.em(t(".whats_on_the_map.real_and_current")) %></p>
</div>
- <div class='col'>
- <div class='center'>
- <span class='sprite small x mx-auto'></span>
- </div>
+ <div class='col-sm'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='d-block mx-auto'>
+ <circle cx="50" cy="50" r="45" fill="#cd7070" />
+ <path d="M35 30h-2l-3 3v2l15 15-15 15v2l3 3h2l15-15 15 15h2l3-3v-2l-15-15 15-15v-2l-3-3h-2l-15 15z" fill="#fff" />
+ </svg>
<p><%= t ".whats_on_the_map.off_the_map_html", :doesnt => tag.em(t(".whats_on_the_map.doesnt")) %></p>
</div>
</div>
<p><%= t ".basic_terms.paragraph_1" %></p>
-<div class='clearfix'>
- <div class='clearfix'>
- <span class='sprite small term editor float-start'></span>
- <p><%= t ".basic_terms.an_editor_html", :editor => tag.strong(t(".basic_terms.editor")) %></p>
- </div>
- <div class='clearfix'>
- <span class='sprite small term node float-start'></span>
- <p><%= t ".basic_terms.a_node_html", :node => tag.strong(t(".basic_terms.node")) %></p>
- </div>
- <div class='clearfix'>
- <span class='sprite small term way float-start'></span>
- <p><%= t ".basic_terms.a_way_html", :way => tag.strong(t(".basic_terms.way")) %></p>
- </div>
- <div class='clearfix'>
- <span class='sprite small term tag float-start'></span>
- <p><%= t ".basic_terms.a_tag_html", :tag => tag.strong(t(".basic_terms.tag")) %></p>
- </div>
-</div>
+<ul class='list-unstyled'>
+ <li class='d-flex align-items-center gap-2 mb-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <path d="M19.728 30.552l19.834-15.219L80 65l-19.834 15.219z" fill="#7092ff" opacity=".5" />
+ <path d="M10.597 18.651l19.834-15.219 6.088 7.934-19.834 15.219zm52.613 65.535l19.834-15.219 1.198 17.988-3.967 3.044z" fill="#7092ff" />
+ </svg>
+ <span><%= t ".basic_terms.an_editor_html", :editor => tag.strong(t(".basic_terms.editor")) %></span>
+ </li>
+ <li class='d-flex align-items-center gap-2 mb-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <path d="M50 5c-20.71 0-37.5 16.789-37.5 37.5s37.5 52.5 37.5 52.5 37.5-31.789 37.5-52.5-16.789-37.5-37.5-37.5z" fill="#7092ff" />
+ <circle cx="50" cy="42.5" r="15" fill="#fff" />
+ </svg>
+ <span><%= t ".basic_terms.a_node_html", :node => tag.strong(t(".basic_terms.node")) %></span>
+ </li>
+ <li class='d-flex align-items-center gap-2 mb-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <line x1="20" y1="80" x2="80" y2="20" stroke="#7092ff" stroke-width="15" />
+ <circle cx="20" cy="80" r="15" fill="#7092ff" />
+ <circle cx="80" cy="20" r="15" fill="#7092ff" />
+ <circle cx="20" cy="80" r="7" fill="#fff" />
+ <circle cx="80" cy="20" r="7" fill="#fff" />
+ </svg>
+ <span><%= t ".basic_terms.a_way_html", :way => tag.strong(t(".basic_terms.way")) %></span>
+ </li>
+ <li class='d-flex align-items-center gap-2 mb-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <path d="M25 87l-20-20v-29l20-20h68l2 2v65l-2 2z" fill="#7092ff" />
+ <rect width="10" height="15" x="15" y="45" rx="3" ry="2.25" fill="#fff" />
+ </svg>
+ <span><%= t ".basic_terms.a_tag_html", :tag => tag.strong(t(".basic_terms.tag")) %></span>
+ </li>
+</ul>
-<div class='clearfix'>
- <h2><%= t ".rules.title" %></h2>
- <span class='sprite small term rules float-start'></span>
+<h2><%= t ".rules.title" %></h2>
+<div class='d-flex align-items-center gap-2'>
+ <svg width='50' height='50' viewBox='0 0 100 100' class='flex-shrink-0 align-self-start'>
+ <circle cx="50" cy="50" r="45" fill="#7092ff" />
+ <path d="M41.072 49.28q0-2.4 1.152-3.84 1.152-1.488 2.64-2.208-1.728-.96-2.688-2.256-.96-1.344-.96-3.264 0-2.88 2.448-4.512 2.448-1.68 7.008-1.68 2.688 0 4.56.48 1.872.432 3.648 1.152l-1.296 3.216q-1.632-.672-3.264-1.104-1.632-.48-3.936-.48-2.88 0-4.08.768-1.152.72-1.152 2.064 0 1.344 1.344 2.304 1.344.912 4.992 2.256 3.696 1.344 5.76 3.072 2.064 1.728 2.064 4.608 0 2.448-1.104 4.032-1.104 1.536-2.496 2.352 1.68.912 2.592 2.208.96 1.248.96 3.072 0 3.312-2.784 5.136-2.736 1.824-7.68 1.824-2.64 0-4.608-.384-1.968-.432-3.504-1.2v-3.6q1.536.72 3.792 1.344 2.256.624 4.512.624 3.552 0 4.896-1.008 1.344-1.056 1.344-2.4 0-.912-.48-1.584-.432-.672-1.776-1.392-1.296-.768-3.936-1.728-2.496-.96-4.32-1.968-1.776-1.008-2.736-2.4-.912-1.392-.912-3.504zm3.6-.48q0 1.776 1.488 3.024 1.536 1.2 5.376 2.64l1.056.384q1.104-.672 2.064-1.68 1.008-1.056 1.008-2.688 0-1.2-.672-2.16-.624-.96-2.256-1.824-1.632-.912-4.608-1.824-1.344.336-2.4 1.44-1.056 1.104-1.056 2.688z" fill="#fff" stroke="#fff" />
+ </svg>
<p><%= t ".rules.para_1_html", :imports_link => link_to(t(".rules.imports"), t(".rules.imports_url")),
:automated_edits_link => link_to(t(".rules.automated_edits"), t(".rules.automated_edits_url")) %></p>
</div>
-<div class='clearfix'>
- <%= render "any_questions" %>
-</div>
+<%= render "any_questions" %>
-<div class='clearfix text-center'>
- <p class="display-5">
+<div class='text-center mb-3'>
<% if params[:oauth_return_url] %>
<a class="btn btn-primary" href="<%= params[:oauth_return_url] %>"><%= t ".continue_authorization" %></a>
<% else %>
- <a class="button btn btn-primary start-mapping" href="<%= edit_path %>"><%= t ".start_mapping" %></a>
+ <a class="btn btn-primary start-mapping" href="<%= edit_path %>"><%= t ".start_mapping" %></a>
<% end %>
- </p>
</div>
<div class='alert alert-primary'>
<span class="badge bg-<%= badge_class %> text-white"><%= t(".#{trace.visibility}") %></span>
</li>
</ul>
- <p class="text-muted mb-0">
+ <p class="text-body-secondary mb-0">
<% if trace.tags.empty? %>
<%= t ".details_without_tags_html", :time_ago => friendly_date_ago(trace.timestamp),
:user => link_to(trace.user.display_name, trace.user) %>
<% content_for :heading do %>
<% if @client_app_name %>
- <p class="text-center text-muted fs-6 py-2 mb-0 bg-body"><%= t(".signup_to_authorize_html", :client_app_name => @client_app_name) %></p>
+ <p class="text-center text-body-secondary fs-6 py-2 mb-0 bg-body"><%= t(".signup_to_authorize_html", :client_app_name => @client_app_name) %></p>
<% end %>
<div class="header-illustration new-user-main auth-container mx-auto">
- <ul class="nav nav-tabs position-absolute bottom-0 px-3 fs-6 w-100">
+ <ul class="nav nav-tabs position-absolute bottom-0 fs-6 w-100">
<li class="nav-item">
- <%= link_to t("sessions.new.tab_title"), url_for(:action => :new, :controller => :sessions), :class => "nav-link" %>
+ <%= link_to t("sessions.new.tab_title"), url_for(:action => :new, :controller => :sessions, :referer => @referer), :class => "nav-link" %>
</li>
<li class="nav-item">
<%= link_to t("users.new.tab_title"), "#", :class => "nav-link active" %>
<div class="auth-container mx-auto my-0">
<% if current_user.auth_uid.nil? %>
- <div class="text-muted fs-6">
+ <div class="text-body-secondary fs-6">
<p><strong><%= t ".about.header" %></strong> <%= t ".about.paragraph_1" %></p>
<p><%= t ".about.paragraph_2" %></p>
</div>
<% unless @preferred_auth_provider.nil? %>
<%= render :partial => "auth_providers" %>
- <div class="d-flex justify-content-center align-items-center">
+ <div class="d-flex justify-content-center align-items-center mb-2">
<div class="border-bottom border-1 flex-grow-1"></div>
<div class="text-secondary mx-3"><%= t ".or" %></div>
<div class="border-bottom border-1 flex-grow-1"></div>
t(".privacy_policy_url"),
:title => t(".privacy_policy_title"),
:target => :new)),
+ :autofocus => true,
:tabindex => 1 %>
<% else %>
<%= f.hidden_field :email %>
</div>
<% end %>
- <p class="mb-3 text-muted fs-6"><%= 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(".privacy_policy"),
- t(".privacy_policy_url"),
- :title => t(".privacy_policy_title"),
- :target => :new),
- :contributor_terms_link => link_to(t(".contributor_terms"),
- t(".contributor_terms_url"),
- :target => :new)) %></p>
+ <p class="mb-3 text-body-secondary fs-6"><%= 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(".privacy_policy"),
+ t(".privacy_policy_url"),
+ :title => t(".privacy_policy_title"),
+ :target => :new),
+ :contributor_terms_link => link_to(t(".contributor_terms"),
+ t(".contributor_terms_url"),
+ :target => :new)) %></p>
<%= f.form_group do %>
<%= f.check_box :consider_pd,
:tabindex => 5,
</nav>
<% end %>
- <div class='text-muted'>
+ <div class='text-body-secondary'>
<small>
<dl class="list-inline">
<dt class="list-inline-item m-0"><%= t ".mapper since" %></dt>
<dd class="list-inline-item"><%= l @user.created_at.to_date, :format => :long %></dd>
+ <dt class="list-inline-item m-0"><%= t ".last map edit" %></dt>
+ <dd class="list-inline-item"><%= l @user.changesets.first&.created_at&.to_date, :format => :long, :default => t(".no activity yet") %></dd>
<% unless @user.terms_agreed %>
<dt class="list-inline-item m-0"><%= t ".ct status" %></dt>
<dd class="list-inline-item">
<% end %>
<% if current_user and current_user.administrator? -%>
- <div class='text-muted'>
+ <div class='text-body-secondary'>
<small>
<dl class="list-inline">
<dt class="list-inline-item m-0"><%= t ".email address" %></dt>
<%= form_tag({ :action => "save" }) do %>
<!-- legale is <%= @legale %> -->
- <p class="text-muted"><%= t ".read and accept with tou" %></p>
+ <p class="text-body-secondary"><%= t ".read and accept with tou" %></p>
<h4>
<%= t ".heading_ct" %>
</h4>
- <p class="text-muted"><%= t ".contributor_terms_explain" %></p>
+ <p class="text-body-secondary"><%= t ".contributor_terms_explain" %></p>
<label class="form-label">
<%= t ".legale_select" %>
</label>
</div>
<div>
- <p id="contributorGuidance" class="text-muted">
+ <p id="contributorGuidance" class="text-body-secondary">
<%= t ".guidance_info_html",
:readable_summary_link => link_to(t(".readable_summary"),
"https://www.osmfoundation.org/wiki/License/Contributor_Terms_Summary"),
<h4>
<%= t "layouts.tou" %>
</h4>
- <p class="text-muted"><%= t ".tou_explain_html", :tou_link => link_to(t("layouts.tou"), "https://wiki.osmfoundation.org/wiki/Terms_of_Use", :target => :new) %></p>
+ <p class="text-body-secondary"><%= t ".tou_explain_html", :tou_link => link_to(t("layouts.tou"), "https://wiki.osmfoundation.org/wiki/Terms_of_Use", :target => :new) %></p>
<div class="mb-3">
<div class="form-check">
--- /dev/null
+{
+ "ignored_warnings": [
+ {
+ "warning_type": "HTTP Verb Confusion",
+ "warning_code": 118,
+ "fingerprint": "9567bbac855c6ec5552572700ec809d7c1d77f59953e6725aeca54fee5091674",
+ "check_name": "VerbConfusion",
+ "message": "Potential HTTP verb confusion. `HEAD` is routed like `GET` but `request.get?` will return `false`",
+ "file": "app/controllers/application_controller.rb",
+ "line": 312,
+ "link": "https://brakemanscanner.org/docs/warning_types/http_verb_confusion/",
+ "code": "if request.get? then\n respond_to do\n format.html do\n redirect_to(:controller => \"/errors\", :action => \"bad_request\")\n end\n format.any do\n head(:bad_request)\n end\n end\nelse\n head(:bad_request)\nend",
+ "render_path": null,
+ "location": {
+ "type": "method",
+ "class": "ApplicationController",
+ "method": "invalid_parameter"
+ },
+ "user_input": "request.get?",
+ "confidence": "Weak",
+ "cwe_id": [
+ 352
+ ],
+ "note": ""
+ }
+ ],
+ "updated": "2024-04-11 10:07:03 +0100",
+ "brakeman_version": "6.1.2"
+}
if e.is_a?(Timeout::Error) || e.is_a?(OSM::APITimeoutError)
e
else
- super(e, sql)
+ super
end
end
end
# See the Securing Rails Applications Guide for more information:
# https://guides.rubyonrails.org/security.html#content-security-policy-header
-# Rails.application.configure do
-# config.content_security_policy do |policy|
-# policy.default_src :self, :https
-# policy.font_src :self, :https, :data
-# policy.img_src :self, :https, :data
-# policy.object_src :none
-# policy.script_src :self, :https
-# policy.style_src :self, :https
-# # Specify URI for violation reports
-# # policy.report_uri "/csp-violation-report-endpoint"
-# end
-#
-# # Generate session nonces for permitted importmap, inline scripts, and inline styles.
-# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
-# config.content_security_policy_nonce_directives = %w(script-src style-src)
-#
-# # Report violations without enforcing the policy.
-# # config.content_security_policy_report_only = true
-# end
+Rails.application.configure do
+ connect_src = [:self]
+ img_src = [:self, :data, "www.gravatar.com", "*.wp.com", "tile.openstreetmap.org", "gps.tile.openstreetmap.org", "*.tile.thunderforest.com", "tile.tracestrack.com", "*.openstreetmap.fr"]
+ script_src = [:self]
+
+ connect_src << Settings.matomo["location"] if defined?(Settings.matomo)
+ img_src << Settings.matomo["location"] if defined?(Settings.matomo)
+ script_src << Settings.matomo["location"] if defined?(Settings.matomo)
+
+ img_src << Settings.avatar_storage_url if Settings.key?(:avatar_storage_url)
+ img_src << Settings.trace_image_storage_url if Settings.key?(:trace_image_storage_url)
+
+ config.content_security_policy do |policy|
+ policy.default_src :self
+ policy.child_src(:self)
+ policy.connect_src(*connect_src)
+ policy.font_src(:none)
+ policy.form_action(:self)
+ policy.frame_ancestors(:self)
+ policy.frame_src(:self)
+ policy.img_src(*img_src)
+ policy.manifest_src(:self)
+ policy.media_src(:none)
+ policy.object_src(:self)
+ policy.plugin_types
+ policy.script_src(*script_src)
+ policy.style_src(:self)
+ policy.worker_src(:none)
+ policy.manifest_src(:self)
+ policy.report_uri(Settings.csp_report_url) if Settings.key?(:csp_report_url)
+ end
+
+ # Generate session nonces for permitted importmap and inline scripts
+ config.content_security_policy_nonce_generator = ->(_request) { SecureRandom.base64(24) }
+ config.content_security_policy_nonce_directives = %w[style-src]
+
+ # Report violations without enforcing the policy.
+ config.content_security_policy_report_only = true unless Settings.csp_enforce
+end
module OpenStreetMap
class Cors < Rack::Cors
def call(env)
- status, headers, body = super(env)
+ status, headers, body = super
headers["Cache-Control"] = "no-cache" if headers["Access-Control-Allow-Origin"]
[status, headers, body]
end
def store_translations(locale, data, options = {})
locale = ::I18n::Locale::Tag::Rfc4646.tag(locale).to_s
- super(locale, data, options)
+ super
end
end
def perform(mailer, mail_method, delivery_method, *args, **kwargs)
kwargs = args.pop if kwargs.empty? && args.last.is_a?(Hash)
- super(mailer, mail_method, delivery_method, *args, **kwargs)
+ super
end
end
end
status = options.delete(:status) || :ok
head status, options
else
- super(options)
+ super
end
end
end
end
- super(controller)
+ super
end
end
end
module Router
module ForceEncoding
def normalize_path(path)
- super(path).force_encoding("UTF-8")
+ super.force_encoding("UTF-8")
end
end
end
class RtlcssSCSSProcessor < SassC::Rails::ScssTemplate
def self.call(input)
- output = super(input)
+ output = super
data = Rtlcss.flip_css(output[:data])
output.delete(:map)
output.merge(:data => data)
+++ /dev/null
-csp_policy = {
- :preserve_schemes => true,
- :default_src => %w['self'],
- :child_src => %w['self'],
- :connect_src => %w['self'],
- :font_src => %w['none'],
- :form_action => %w['self'],
- :frame_ancestors => %w['self'],
- :frame_src => %w['self'],
- :img_src => %w['self' data: www.gravatar.com *.wp.com tile.openstreetmap.org *.tile.openstreetmap.org *.tile.thunderforest.com tile.tracestrack.com *.openstreetmap.fr],
- :manifest_src => %w['self'],
- :media_src => %w['none'],
- :object_src => %w['self'],
- :plugin_types => %w[],
- :script_src => %w['self'],
- :style_src => %w['self'],
- :worker_src => %w['none'],
- :report_uri => []
-}
-
-csp_policy[:connect_src] << Settings.matomo["location"] if defined?(Settings.matomo)
-csp_policy[:img_src] << Settings.matomo["location"] if defined?(Settings.matomo)
-csp_policy[:script_src] << Settings.matomo["location"] if defined?(Settings.matomo)
-
-csp_policy[:img_src] << Settings.avatar_storage_url if Settings.key?(:avatar_storage_url)
-csp_policy[:img_src] << Settings.trace_image_storage_url if Settings.key?(:trace_image_storage_url)
-
-csp_policy[:report_uri] << Settings.csp_report_url if Settings.key?(:csp_report_url)
-
-cookie_policy = {
- :httponly => { :only => %w[_osm_session _osm_totp_token] }
-}
-
-SecureHeaders::Configuration.default do |config|
- config.hsts = SecureHeaders::OPT_OUT
- config.referrer_policy = "strict-origin-when-cross-origin"
-
- if Settings.csp_enforce
- config.csp = csp_policy
- config.csp_report_only = SecureHeaders::OPT_OUT
- elsif Settings.key?(:csp_report_url)
- config.csp = SecureHeaders::OPT_OUT
- config.csp_report_only = csp_policy
- else
- config.csp = SecureHeaders::OPT_OUT
- config.csp_report_only = SecureHeaders::OPT_OUT
- end
-
- config.cookies = cookie_policy
-end
# Be sure to restart your server when you modify this file.
if Settings.key?(:memcache_servers)
- Rails.application.config.session_store :mem_cache_store, :memcache_server => Settings.memcache_servers, :namespace => "rails:session", :key => "_osm_session"
+ Rails.application.config.session_store :mem_cache_store, :memcache_server => Settings.memcache_servers, :namespace => "rails:session", :key => "_osm_session", :same_site => :lax
else
- Rails.application.config.session_store :cache_store, :key => "_osm_session", :cache => ActiveSupport::Cache::MemoryStore.new
+ Rails.application.config.session_store :cache_store, :key => "_osm_session", :cache => ActiveSupport::Cache::MemoryStore.new, :same_site => :lax
end
valid (we'll makes sure that they won't cause the site to not work).
There is more information about translating the website on the wiki at
-http://wiki.openstreetmap.org/wiki/Website_Internationalization.
+https://wiki.openstreetmap.org/wiki/Website_internationalization.
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Alex73
+# Author: Andoti
# Author: Artsiom91
# Author: Chadyka
# Author: Goshaproject
messages:
invalid_email_address: не падобны на карэктны адрас электроннай пошты
email_address_not_routable: немагчыма пракласці маршрут
+ models:
+ user_mute:
+ is_already_muted: ужо заглушаны
models:
acl: Спіс правоў доступу
changeset: Пакет правак
delete_account: Выдаліць уліковы запіс...
go_public:
heading: Публічнае рэдагаванне
+ find_out_why: даведацца, чаму
+ email_not_revealed: Ваш адрас электроннай пошты не будзе раскрыты, калі стане
+ публічным.
make_edits_public_button: Зрабіць усе мае змены публічнымі
update:
success_confirm_needed: Звесткі аб карыстальніку паспяхова абноўленыя. Праверце
comment: Каментар
newer_comments: Навейшыя каментары
older_comments: Старэйшыя каментары
+ doorkeeper:
+ scopes:
+ phone: Праглядзець ваш нумар тэлефона
+ profile: Праглядзець інфармацыю вашага профілю
+ errors:
+ contact:
+ contact_url_title: Тлумачэнне розных каналаў сувязі
+ contact: звяртацца
+ contact_the_community_html: Не саромейцеся %{contact_link} да супольнасці OpenStreetMap,
+ калі вы знайшлі непрацуючую спасылку / памылку. Запішыце дакладны URL вашага
+ запыту.
+ bad_request:
+ title: Памылковы запыт
+ description: Запытаная вамі аперацыя на серверы OpenStreetMap несапраўдная
+ (HTTP 400)
+ forbidden:
+ title: Доступ забаронены
+ description: Запытаная вамі аперацыя на серверы OpenStreetMap даступная толькі
+ адміністратарам (HTTP 403)
+ internal_server_error:
+ title: Памылка праграмы
+ description: Сервер OpenStreetMap сутыкнуўся з нечаканай сітуацыяй, якая перашкодзіла
+ яму выканаць запыт (HTTP 500)
+ not_found:
+ title: Файл не знойдзены
friendships:
make_friend:
heading: Пасябраваць з %{user}?
hospital: Бальніца
hunting_stand: Паляўнічая вежа
ice_cream: Марозіва
+ internet_cafe: Інтэрнэт-кафэ
kindergarten: Дзіцячы садок
+ language_school: Моўная школа
library: Бібліятэка
+ love_hotel: Гатэль кахання
marketplace: Рыначная плошча
monastery: Кляштар
+ money_transfer: Перавод грошай
motorcycle_parking: Паркоўка для матацыклаў
+ music_school: Музычная школа
nightclub: Начны клуб
nursing_home: Прыватная лякарня
parking: Паркоўка
parking_entrance: Заезд на паркоўку
parking_space: Паркоўка
+ payment_terminal: Плацежны тэрмінал
pharmacy: Аптэка
place_of_worship: Культавы будынак
police: Паліцыя
post_office: Паштовае аддзяленне
prison: Турма
pub: Паб
+ public_bath: Лазня
+ public_bookcase: Кніжны абмен
public_building: Грамадскі будынак
+ ranger_station: Станцыя рэйнджараў
recycling: Пункт перапрацоўкі
restaurant: Рэстаран
school: Школа
village_hall: Вясковая зала
waste_basket: Кош для смецця
waste_disposal: Смеццевы бак
+ waste_dump_site: Нелегальная звалка
+ watering_place: Вадапой для жывёл
water_point: Вада
+ weighbridge: Грузавыя вагі
+ "yes": Зручнасць
boundary:
+ aboriginal_lands: Тэрыторыі тубыльцаў
administrative: Адміністрацыйная мяжа
census: Межы перапісу
national_park: Нацыянальны парк
+ political: Электаральная мяжа
protected_area: Абаронены раён
+ "yes": Мяжа
bridge:
aqueduct: Акведук
boardwalk: Тратуар
viaduct: Віядук
"yes": Мост
building:
+ apartment: Кватэра
+ apartments: Кватэры
+ barn: Свіран
+ bungalow: Бунгала
+ cabin: Хаціна
+ chapel: Капліца
+ church: Будынак царквы
+ civic: Грамадзянскі будынак
+ college: Будынак каледжа
+ commercial: Камерцыйны будынак
+ construction: Будынак будуецца
+ hangar: Ангар
+ hospital: Будынак бальніцы
+ hotel: Будынак гасцініцы
+ house: Дом
+ houseboat: Плывучы дом
+ hut: Хата
+ industrial: Прамысловы будынак
+ kindergarten: Дзіцячы сад
+ manufacture: Вытворчы будынак
+ office: Офисны будынак
+ public: Грамадскі будынак
+ residential: Жылы будынак
+ retail: Гандлёвы будынак
+ roof: Дах
+ ruins: Рэшткі будынку
+ school: Школа
+ static_caravan: Мабільны дом
+ temple: Храм
+ terrace: Тэраса
+ train_station: Чыгуначны вакзал
+ university: Универсітэт
+ warehouse: Склад
"yes": Будынак
craft:
brewery: Бровар
more_title_html: Открийте повече
contributors_title_html: Нашите сътрудници
infringement_title_html: Нарушаване на авторските права
+ infringement_1_html: Напомняме на сътрудниците на OSM никога да не добавят
+ данни от източници, защитени с авторски права (например Google Maps или
+ печатни карти), без изрично разрешение от притежателите на авторските права.
+ infringement_2_1_html: Ако смятате, че материал, защитен с авторско право,
+ е добавен по неправомерен начин в базата данни на OpenStreetMap или в този
+ сайт, моля, обърнете се към нашата %{takedown_procedure_link} или подайте
+ сигнал директно чрез нашата %{online_filing_page_link}.
+ infringement_2_1_takedown_procedure: процедура за сваляне
+ infringement_2_1_online_filing_page: онлайн страница за подаване на документи
+ trademarks_title: Търговски марки
+ trademarks_1_1_html: |-
+ OpenStreetMap, логото с лупата и State of the Map са регистрирани търговски марки на
+ OpenStreetMap Foundation. Ако имате въпроси относно използването на марките, моля вижте нашата
+ %{trademark_policy_link}.
+ trademarks_1_1_trademark_policy: политика за търговски марки
index:
js_2: OpenStreetMap използва JavaScript за своята статична карта.
permalink: Постоянна връзка
# Author: R4356th
# Author: R4bb1
# Author: Rasal Lia
+# Author: RiazACU
# Author: Sayma Jahan
# Author: Tahmid
# Author: Tauhid16
errors:
contact:
contact: darempred
+ bad_request:
+ title: Reked fall
forbidden:
title: Difennet
internal_server_error:
lost password link: Ankouaet ho ker-tremen ganeoc'h ?
login_button: Kevreañ
register now: En em enskrivañ bremañ
- with external: 'Mod all, implijit un tredeour evit kevreañ :'
+ with external: 'pe kevreit gant un tredeour:'
+ or: pe
auth failure: Ho tigarez, met n'eus ket bet gallet hoc'h anavezout gant an titouroù
pourchaset.
destroy:
close: Serriñ
search:
search: Klask
- get_directions: Kaout an tuioù
+ get_directions: Kaout an durc'hadurioù
get_directions_title: Kavit an hentoù etre an daou boent
from: Eus
to: Da
identifiable: ANAVEZADUS
private: PREVEZ
trackable: HEULIADUS
+ details_with_tags_html: '%{time_ago} gant %{user} e-barzh %{tags}'
details_without_tags_html: '%{time_ago} gant %{user}'
index:
public_traces: Roudoù GPS foran
muted_users: Implijerien kuzhet
auth_providers:
openid_logo_alt: Kevreañ gant un OpenID
+ openid_login_button: Kenderc'hel
openid:
title: Kevreañ gant OpenID
alt: Kevreañ gant un URL OpenID
users:
new:
title: Kevreañ
+ tab_title: En em enskrivañ
no_auto_account_create: Siwazh n'omp ket evit krouiñ ur gont evidoc'h ent emgefreek.
please_contact_support_html: Kit e darempred gant ar %{support_link}, mar plij,
evit ma krouo ur gont evidoc'h - klask a raimp plediñ gant ho koulenn kerkent
ha ma vo tu.
support: skor
about:
- header: Digoust hag aozadus
+ header: Digoust hag aozadus.
paragraph_1: E-skoaz ar c'hartennoù all eo savet OpenStreetMap penn-da-benn
gant tud eveldoc'h ha tu zo da bep hini reizhañ, hizivaat, pellgargañ hag
implijout e gartennoù.
- paragraph_2: Lakait hoc'h anv ha stagit da gemer perzh. Kaset a vo ur postel
- deoc'h a-benn kadarnaat ho kont.
+ paragraph_2: Lakait hoc'h anv ha stagit da gemer perzh.
+ welcome: Degemer mat en OpenStreetMap
display name description: Emañ hoc'h anv implijer a-wel d'an holl. Se a c'hallit
cheñch diwezhatoc'h en ho penndibaboù.
+ tou: Termenoù implijout
+ contributor_terms: reolennoù ar genlabourerien
external auth: 'Dilesadur trede :'
continue: En em enskrivañ
terms accepted: Trugarez deoc'h evit bezañ asantet da ziferadennoù nevez ar
email_help_html: Ho chomlec'h ne vo ket hewel d'an holl, sellit ouzh %{privacy_policy_link}
evit gouzout hiroc'h.
privacy_policy: reolennoù prevezded
- use external auth: 'Mod all, implijit un tredeour evit kevreañ :'
+ consider_pd: domani foran
+ or: pe
+ use external auth: 'pe kevreit gant un tredeour:'
terms:
title: Termenoù
heading: Termenoù
reactivate: Adweredekaat
comment_and_resolve: Addisplegañ & Diskoulmañ
comment: Evezhiadenn
+ log_in_to_comment: Kevreit evit skrivañ war an notenn-mañ
other_problems_resolved: Evit an holl gudennoù all ez eo a-walc'h d'o diskoulmañ.
new:
title: Notenn nevez
intro: Gwelet ho peus ur fazi pe un dra a vank ? Roit an dra-se da c'houzout
d'ar gartennaouerien all evit ma vo renket. Lakait ar merker el lec'h mat
ha skrivit un notenn da zisplegañ ar gudenn.
+ anonymous_warning_log_in: kevreañ
+ anonymous_warning_sign_up: en em enskrivañ
advice: Foran eo ho notenn ha ne c'hall ket bezañ implijet evit hizivaat ar
gartenn. Setu perak eo arabat ebarzhiñ titouroù personel pe titouroù o tont
eus kartennoù gwarezet na endalc'hioù rolloù.
standard: Standard
cycle_map: Kelc'hiad kartenn
transport_map: Kartenn treuzdougen
+ tracestracktop_topo: Tracestrack Topo
hot: Denegour
layers:
header: Gwiskadoù kartenn
fossgis_valhalla_car: Karr (Valhalla)
fossgis_valhalla_foot: War droad (Valhalla)
descend: Diskenn
- directions: Tuioù
+ directions: Durc'hadurioù
distance: Hed
distance_m: '%{distance}m'
distance_km: '%{distance}km'
# Export driver: phpyaml
# Author: McDutchie
# Author: Sasan700
+# Author: Исмаил Садуев
# Author: Умар
---
ce:
revoker: 'БлокдӀайаьккхинарг:'
block:
show: Гайта
- edit: Ð\9dиÑ\81йе
+ edit: Ð\9dиÑ\81йан
revoke: ДӀайаккхаблок!
blocks:
display_name: Блоктоьхна декъашхо
messages:
invalid_email_address: není platná e-mailová adresa
email_address_not_routable: není routovatelná
+ display_name_is_user_n: nemůže být user_n, pokud n není vaše ID uživatele
models:
user_mute:
is_already_muted: již je ztlumen
odkaz.
lost_password:
subject: '[OpenStreetMap] Žádost o nové heslo'
- greeting: Dobrý den,
+ greeting: Ahoj,
hopefully_you: Někdo (patrně vy) požádal o vygenerování nového hesla pro uživatele
serveru openstreetmap.org s touto e-mailovou adresou.
click_the_link: Pokud jste to byli Vy, kliknutím na níže uvedený odkaz získáte
new:
title: Přihlásit se
tab_title: Přihlášení
+ login_to_authorize_html: Pro přístup k %{client_app_name} se přihlaste do OpenStreetMap.
email or username: E-mailová adresa nebo uživatelské jméno
password: Heslo
remember: Zapamatuj si mě
login_button: Přihlásit se
register now: Zaregistrujte se
with external: nebo se přihlaste prostřednictvím třetí strany
+ or: nebo
auth failure: Je mi líto, ale s uvedenými údaji se nemůžete přihlásit.
destroy:
title: Odhlásit se
identifiable: IDENTIFIKOVATELNÁ
private: SOUKROMÁ
trackable: STOPOVATELNÁ
+ details_with_tags_html: '%{time_ago} uživatelem %{user} v %{tags}'
+ details_without_tags_html: '%{time_ago} uživatelem %{user}'
index:
public_traces: Veřejné GPS stopy
my_gps_traces: Moje GPS stopy
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
alt: Přihlásit se pomocí OpenID URL
write_redactions: Upravte mapová data
read_email: Přečíst e-mailovou adresu uživatele
skip_authorization: Automaticky schválit aplikaci
+ for_roles:
+ moderator: Toto oprávnění je pro akce dostupné pouze moderátorům
oauth_clients:
new:
title: Registrace nové aplikace
users:
new:
title: Zaregistrovat se
+ tab_title: Registrace
+ signup_to_authorize_html: Zaregistrujte se pomocí OpenStreetMap pro přístup
+ k %{client_app_name}.
no_auto_account_create: Bohužel za vás momentálně nejsme schopni vytvořit účet
automaticky.
please_contact_support_html: Kontaktujte prosím %{support_link} a domluvte se
na vytvoření účtu – pokusíme se žádost vyřídit co nejrychleji.
support: podporu
about:
- header: Svobodná a editovatelná
+ header: Svobodná a editovatelná.
paragraph_1: Na rozdíl od jiných map je OpenStreetMap kompletně vytvořena
lidmi jako jste vy a kdokoli ji může zdarma opravit, aktualizovat, stáhnout
a používat.
- paragraph_2: Zaregistrujte se a začněte přispívat. Zašleme vám e-mail pro
- potvrzení vašeho účtu.
+ paragraph_2: Zaregistrujte se a začněte přispívat.
+ welcome: Vítejte v OpenStreetMap
+ duplicate_social_email: Pokud již máte účet OpenStreetMap a chcete používat
+ poskytovatele identity třetí strany, přihlaste se pomocí svého hesla a upravte
+ nastavení svého účtu.
display name description: Vaše veřejně zobrazované uživatelské jméno. Můžete
si ho později změnit ve svém nastavení.
+ by_signing_up_html: Registrací souhlasíte s našimi %{tou_link}, %{privacy_policy_link}
+ a %{contributor_terms_link}.
+ tou: podmínkami užití
+ contributor_terms: podmínkami pro přispěvatele
external auth: 'Autentizace třetí stranou:'
continue: Zaregistrovat se
terms accepted: Děkujeme za odsouhlasení nových podmínek pro přispěvatele!
email_help_html: Vaše adresa se nezobrazuje veřejně, více informací získáte
- v našich %{privacy_policy_link}.
- privacy_policy: pravidlech ochrany osobních údajů
+ na stránce s našimi %{privacy_policy_link}.
+ privacy_policy: pravidly ochrany osobních údajů
privacy_policy_title: Pravidla ochrany osobních údajů OSMF, včetně části o e-mailových
adresách
- use external auth: Případně se přihlaste prostřednictvím třetí strany
+ consider_pd_html: Své příspěvky považuji za %{consider_pd_link}.
+ consider_pd: volné dílo
+ or: nebo
+ use external auth: nebo se přihlaste prostřednictvím třetí strany
terms:
title: Podmínky
heading: Podmínky
# Author: MarkusHD
# Author: McDutchie
# Author: Mcandri13
+# Author: Mcliquid
# Author: Metalhead64
# Author: Michi
# Author: Milet
contact_the_community_html: Bitte nimm %{contact_link} mit der OpenStreetMap-Community
auf, wenn du einen defekten Link / Fehler gefunden hast. Notiere dir die genaue
URL deiner Anfrage.
+ bad_request:
+ title: Ungültige Anfrage
+ description: Die angeforderte Operation auf dem OpenStreetMap-Server ist ungültig
+ (HTTP 400).
forbidden:
title: Verboten
description: Die von dir angeforderte Aktion auf dem OpenStreetMap-Server ist
den du kommentiert hattest, reaktivert.'
commented_note_html: '%{commenter} hat einen Hinweis in der Nähe von %{place},
den du kommentiert hattest, reaktivert.'
- details: Weitere Details über den Hinweis findest du unter %{url}.
- details_html: Weitere Details über den Hinweis findest du unter %{url}.
+ details: Antworte oder erfahre mehr über die Notiz unter %{url}.
+ details_html: Antworte oder erfahre mehr über die Notiz unter %{url}.
changeset_comment_notification:
description: 'OpenStreetMap-Änderungssatz #%{id}'
hi: Hallo %{to_user},
partial_changeset_with_comment: mit der Bemerkung „%{changeset_comment}“
partial_changeset_with_comment_html: mit der Bemerkung „%{changeset_comment}“
partial_changeset_without_comment: ohne Kommentar
- details: Weitere Details über den Änderungssatz können gefunden werden unter
- %{url}.
- details_html: Weitere Details über den Änderungssatz findest Du unter %{url}.
+ details: Antworte oder erfahre mehr über den Änderungssatz unter %{url}.
+ details_html: Antworte oder erfahre mehr über den Änderungssatz unter %{url}.
unsubscribe: Du kannst dich auf %{url} von den Benachrichtigungen dieses Änderungssatzes
abmelden.
unsubscribe_html: Du kannst dich auf %{url} von den Benachrichtigungen dieses
new:
title: Anmelden
tab_title: Anmelden
+ login_to_authorize_html: Melde dich bei OpenStreetMap an, um auf %{client_app_name}
+ zuzugreifen.
email or username: E-Mail-Adresse oder Benutzername
password: Passwort
remember: Anmeldedaten merken
other: GPX-Datei mit %{count} Punkten von %{user}
description_without_count: GPX-Datei von %{user}
application:
+ basic_auth_disabled: 'Die HTTP-Basisauthentifizierung ist deaktiviert: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 und 1.0a sind deaktiviert: %{link}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/DE:2024_authentication_update
permission_denied: Du hast keine Berechtigung, um auf diese Aktion zuzugreifen.
require_cookies:
cookies_needed: Es scheint als hättest du Cookies ausgeschaltet. Bitte aktiviere
write_redactions: Kartendaten redigieren
read_email: Lesen der Benutzer-E-Mail-Adresse
skip_authorization: Antrag automatisch genehmigen
+ for_roles:
+ moderator: Diese Berechtigung gilt nur für Aktionen, die nur Moderatoren zur
+ Verfügung stehen.
oauth_clients:
new:
title: Eine neue Anwendung registrieren
erstellen zu lassen - wir werden die Anfrage möglichst schnell bearbeiten.
support: Support
about:
- header: Frei und editierbar
+ header: Frei und editierbar.
paragraph_1: Im Gegensatz zu anderen Karten wird OpenStreetMap vollständig
von Leuten wie dir erstellt und kann von jedem kostenlos repariert, aktualisiert,
heruntergeladen und verwendet werden.
- paragraph_2: Melde dich an, um mit der Mitarbeit zu beginnen. Wir senden dir
- eine E-Mail zur Bestätigung deines Kontos.
+ paragraph_2: Registriere dich, um mit deinem Beitrag zu beginnen.
welcome: Willkommen bei OpenStreetMap
+ duplicate_social_email: Wenn du bereits ein OpenStreetMap-Konto hast und einen
+ Identitätsanbieter eines Drittanbieters verwenden möchtest, melde dich bitte
+ mit deinem Passwort an und ändere die Einstellungen deines Kontos.
display name description: Dein öffentlich angezeigter Benutzername. Er kann
später in den Einstellungen geändert werden.
by_signing_up_html: Mit Ihrer Anmeldung stimmen Sie unseren %{tou_link}, %{privacy_policy_link}
und %{contributor_terms_link} zu.
tou: Nutzungsbedingungen
+ contributor_terms: Bedingungen für Mitwirkende
external auth: 'Drittparteiauthentifikation:'
continue: Registrieren
terms accepted: Vielen Dank, dass du den neuen Bedingungen für Mitwirkende zugestimmt
privacy_policy: Datenschutzrichtlinie
privacy_policy_title: OSMF-Datenschutzrichtlinie einschließlich Abschnitt zu
E-Mail-Adressen
+ consider_pd_html: Ich betrachte meine Beiträge als %{consider_pd_link}.
+ consider_pd: gemeinfrei
or: oder
use external auth: oder melde dich über einen Drittanbieter an
terms:
intro: Fehlt etwas oder hast du einen Fehler gefunden? Bitte verschiebe den
Marker auf die exakte Position und gib genaue Hinweise/Informationen an bzw.
beschreibe den Fehler in der Karte möglichst präzise.
+ anonymous_warning_html: Du bist nicht eingeloggt. Bitte %{log_in} oder %{sign_up},
+ wenn du Updates für deine Notiz erhalten möchtest.
+ anonymous_warning_log_in: Anmelden
+ anonymous_warning_sign_up: Registrieren
advice: Deine Meldung ist öffentlich und kann zur Aktualisierung der Karte verwendet
werden. Gib deshalb keine persönlichen oder urheberrechtlich geschützten Informationen
von anderen Karten oder Verzeichnislisten an.
new_email: E-postay adresiyo neweh
active: Aktiv
display_name: Nameyo ke Aseno
- description: Şınasiya weci
+ description: Şınasiya Profili
home_lat: 'Verıniye:'
home_lon: Derganiye
languages: Zıwanê tercihi
contact_the_community_html: Μη διστάσετε να %{contact_link} με την κοινότητα
του OpenStreetMap εάν έχετε βρει έναν κατεστραμμένο σύνδεσμο / σφάλμα. Σημειώστε
την ακριβή διεύθυνση URL του αιτήματός σας.
+ bad_request:
+ title: Κακό αίτημα
forbidden:
title: Απαγορευμένο
description: Η λειτουργία που ζητήσατε στο διακομιστή OpenStreetMap είναι διαθέσιμη
boardwalk: Πεζοδρόμιο
suspension: Κρεμαστή γέφυρα
swing: Αιωρούμενη γέφυρα
- viaduct: Î\9aοιλαδογέφυρα
+ viaduct: Î\9fδογέφυρα
"yes": Γέφυρα
building:
apartment: Διαμέρισμα
peninsula: Χερσόνησος
point: Σημείο
reef: Ύφαλος
- ridge: ΣκÏ\8cÏ\80ελοÏ\82
+ ridge: Î\9aοÏ\81Ï\85Ï\86ογÏ\81αμμή
rock: Βράχος
saddle: Σέλα
sand: Άμμος
lost password link: Ξεχάσατε το συνθηματικό σας;
login_button: Σύνδεση
register now: Εγγραφείτε τώρα
- with external: 'Εναλλακτικά, χρησιμοποιήστε τρίτη υπηρεσία για σύνδεση:'
+ with external: ή συνδεθείτε μέσω τρίτης υπηρεσίας
+ or: ή
auth failure: Λυπούμαστε, δεν μπορείτε να συνδεθείτε με αυτές τις λεπτομέρειες.
destroy:
title: Αποσύνδεση
muted_users: Χρήστες σε Σίγαση
auth_providers:
openid_logo_alt: Σύνδεση με ένα OpenID
+ openid_login_button: Συνέχεια
openid:
title: Σύνδεση με OpenID
alt: Σύνδεση με ένα OpenID URL
users:
new:
title: Εγγραφή
+ tab_title: Εγγραφή
+ signup_to_authorize_html: Εγγραφείτε με το OpenStreetMap για πρόσβαση στο %{client_app_name}.
no_auto_account_create: Δυστυχώς δεν μπορούμε να δημιουργήσουμε αυτόματα έναν
λογαριασμό για εσάς.
please_contact_support_html: Παρακαλώ επικοινωνήστε με %{support_link} για να
το αίτημα το συντομότερο δυνατό.
support: υποστήριξη
about:
- header: Ελεύθερος και επεξεργάσιμος
+ header: Ελεύθερος και επεξεργάσιμος.
paragraph_1: Σε αντίθεση με άλλους χάρτες, το OpenStreetMap δημιουργείται
εξ ολοκλήρου από ανθρώπους σαν εσάς και είναι δωρεάν για οποιονδήποτε να
το διορθώσει, να ενημερώσει, να το κατεβάσει και να το χρησιμοποιήσει.
- paragraph_2: Εγγραφείτε για να ξεκινήσετε να συνεισφέρετε. Θα σας στείλουμε
- ένα email για να επιβεβαιώσουμε τον λογαριασμό σας.
+ paragraph_2: Εγγραφείτε για να ξεκινήσετε να συνεισφέρετε.
+ welcome: Καλώς ήλθατε στο OpenStreetMap
display name description: Το δημόσια εμφανιζόμενο όνομα χρήστη. Μπορείτε να
το αλλάξετε αργότερα από τις προτιμήσεις.
+ tou: όροι χρήσης
external auth: 'Έλεγχος ταυτότητας από τρίτο μέρος:'
continue: Εγγραφή
terms accepted: Ευχαριστούμε για την αποδοχή των νέων όρων συνεισφοράς!
privacy_policy: πολιτική απορρήτου
privacy_policy_title: Πολιτική απορρήτου OSMF, συμπεριλαμβανομένης της ενότητας
για τις διευθύνσεις ηλεκτρονικού ταχυδρομείου
- use external auth: Εναλλακτικά, χρησιμοποιήστε τρίτη υπηρεσία για σύνδεση
+ or: ή
+ use external auth: ή συνδεθείτε μέσω τρίτης υπηρεσίας
terms:
title: Όροι
heading: Όροι
discussion: Discussion
join_discussion: "Log in to join the discussion"
still_open: "Changeset still open - discussion will open once the changeset is closed."
+ subscribe: "Subscribe"
+ unsubscribe: "Unsubscribe"
comment_by_html: "Comment from %{user} %{time_ago}"
hidden_comment_by_html: "Hidden comment from %{user} %{time_ago}"
+ hide_comment: "hide"
+ unhide_comment: "unhide"
+ comment: "Comment"
changesetxml: "Changeset XML"
osmchangexml: "osmChange XML"
paging_nav:
title: "%{user}'s Diary | %{title}"
user_title: "%{user}'s Diary"
discussion: "Discussion"
+ subscribe: "Subscribe"
+ unsubscribe: "Unsubscribe"
leave_a_comment: "Leave a comment"
login_to_leave_a_comment_html: "%{login_link} to leave a comment"
login: "Log in"
contact_url_title: Various contact channels explained
contact: contact
contact_the_community_html: Feel free to %{contact_link} the OpenStreetMap community if you have found a broken link / bug. Make a note of the exact URL of your request.
+ bad_request:
+ title: Bad request
+ description: The operation you requested on the OpenStreetMap server is not valid (HTTP 400)
forbidden:
title: Forbidden
description: The operation you requested on the OpenStreetMap server is only available to administrators (HTTP 403)
your_note_html: "%{commenter} has reactivated one of your map notes near %{place}."
commented_note: "%{commenter} has reactivated a map note you have commented on. The note is near %{place}."
commented_note_html: "%{commenter} has reactivated a map note you have commented on. The note is near %{place}."
- details: "More details about the note can be found at %{url}."
- details_html: "More details about the note can be found at %{url}."
+ details: "Reply or learn more about the note at %{url}."
+ details_html: "Reply or learn more about the note at %{url}."
changeset_comment_notification:
description: "OpenStreetMap Changeset #%{id}"
hi: "Hi %{to_user},"
partial_changeset_with_comment: "with comment '%{changeset_comment}'"
partial_changeset_with_comment_html: "with comment '%{changeset_comment}'"
partial_changeset_without_comment: "without comment"
- details: "More details about the changeset can be found at %{url}."
- details_html: "More details about the changeset can be found at %{url}."
+ details: "Reply or learn more about the changeset at %{url}."
+ details_html: "Reply or learn more about the changeset at %{url}."
unsubscribe: "You can unsubscribe from updates to this changeset at %{url}."
unsubscribe_html: "You can unsubscribe from updates to this changeset at %{url}."
confirmations:
other: "GPX file with %{count} points from %{user}"
description_without_count: "GPX file from %{user}"
application:
+ basic_auth_disabled: "HTTP Basic Authentication is disabled: %{link}"
+ oauth_10a_disabled: "OAuth 1.0 and 1.0a are disabled: %{link}"
+ auth_disabled_link: "https://wiki.openstreetmap.org/wiki/2024_authentication_update"
permission_denied: You do not have permission to access that action
require_cookies:
cookies_needed: "You appear to have cookies disabled - please enable cookies in your browser before continuing."
remove as friend: Unfriend
add as friend: Add Friend
mapper since: "Mapper since:"
+ last map edit: "Last map edit:"
+ no activity yet: "No activity yet"
uid: "User id:"
ct status: "Contributor terms:"
ct undecided: Undecided
queryfeature_tooltip: Query features
queryfeature_disabled_tooltip: Zoom in to query features
embed_html_disabled: HTML embedding is not available for this map layer
- changesets:
- show:
- comment: "Comment"
- subscribe: "Subscribe"
- unsubscribe: "Unsubscribe"
- hide_comment: "hide"
- unhide_comment: "unhide"
edit_help: Move the map and zoom in on a location you want to edit, then click here.
directions:
ascend: "Ascend"
contact_the_community_html: '%{contact_link} kun la OpenStreetMap-komunumo,
se vi trovis misligilon aŭ alian eraron. Skribu la detalan retadreson de via
peto.'
+ bad_request:
+ title: Malĝusta peto
+ description: La ago – pri kiu vi petis la servilon OpenStreetMap – ne estas
+ valida (HTTP 400)
forbidden:
title: Malpermesata
description: La ago, pri kiu vi petis la OpenStreetMap-servilon estas disponebla
La rimarko troviĝis ĉe %{place}.'
commented_note_html: '%{commenter} remalfermis rimarkon sur la mapo pri kiu
vi interesiĝis. La rimarko troviĝis ĉe %{place}.'
- details: Pli da detaloj pri la rimarko, vi povas trovi je %{url}.
- details_html: Pli da detaloj pri la noto troveblas ĉe %{url}.
+ details: Vi povas respondi aŭ sciiĝi pli pri la rimarko ĉe %{url}.
+ details_html: Vi povas respondi aŭ sciiĝi pli pri la rimarko ĉe %{url}.
changeset_comment_notification:
description: 'OpenStreetMap: ŝanĝaro %{id}'
hi: Saluton %{to_user},
partial_changeset_with_comment: kun komento '%{changeset_comment}'
partial_changeset_with_comment_html: kun komento '%{changeset_comment}'
partial_changeset_without_comment: sen komento
- details: Pli da detaloj pri la ŝanĝaro povas esti trovita ĉe %{url}.
- details_html: Pli da detaloj pri la ŝanĝaro povas esti trovita ĉe %{url}.
+ details: Vi povas respondi aŭ sciiĝi pli pri la ŝanĝaro ĉe %{url}.
+ details_html: Vi povas respondi aŭ sciiĝi pli pri la ŝanĝaro ĉe %{url}.
unsubscribe: Vi povas malaboni ĝisdatigojn pri tiu ĉi ŝanĝaro ĉe %{url}.
unsubscribe_html: Vi povas malaboni ĝisdatigojn pri tiu ĉi ŝanĝaro ĉe %{url}.
confirmations:
passwords:
new:
title: Perdita pasvorto
- heading: Forgesis vian pasvorton ?
+ heading: Ĉu vi forgesis pasvorton?
email address: Retpoŝta adreso
new password button: Nuligi pasvorton
help_text: Entajpu la retpoŝtan adreson kiun vi uzis por ensaluto, ni sendos
lost password link: Ĉu vi forgesis vian pasvorton?
login_button: Ensaluti
register now: Registriĝi
- with external: aŭ ensalutu uzante eksteran liveranton
+ with external: 'ensaluti per ekstera liveranto:'
or: aŭ
auth failure: Bedaŭrinde ne povas ensaluti kun ĉi tiuj informoj.
destroy:
other: GPX-dosiero kun %{count} punktoj de %{user}
description_without_count: GPX-dosiero de %{user}
application:
+ basic_auth_disabled: 'Baza alira aŭtentigo estas malaktiva: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 kaj 1.0a estas malaktivaj: %{link}'
permission_denied: Vi ne rajtas fari tiun ĉi agon
require_cookies:
cookies_needed: Ŝajnas, ke vi malaktivigis 'kuketojn' - bonvolu aktivigi 'kuketojn'
consider_pd_html: Mi konsideras ke miaj kontribuoj estu eldonitaj en la %{consider_pd_link}.
consider_pd: publika havaĵo
or: aŭ
- use external auth: aŭ registriĝu uzante eksteran liveranton
+ use external auth: 'registriĝi per ekstera liveranto:'
terms:
title: Kondiĉoj
heading: Kondiĉoj
intro: Ĉu vi rimarkis eraron aŭ io mankas? Sciigu aliajn mapigistojn, por ili
povos ripari tion. Movu la markon al la respektivan pozicion kaj enmetu la
rimarkon priskribantan la problemon.
+ anonymous_warning_html: Vi ne estas ensalutinta. %{log_in} aŭ %{sign_up} por
+ ricevi sciigojn pri via rimarko.
+ anonymous_warning_log_in: Ensalutu
+ anonymous_warning_sign_up: registriĝu
advice: Via rimarko estas publika kaj povas esti uzita por ĝisdatigi la mapon,
do ne enmetu privatajn informojn kaj informojn el kopirajtaj mapoj aŭ aliaj
datumbazoj.
diary_entry:
user: Kasutaja
title: Teema
- body: Päevikusissekanne
+ body: Kehatekst
latitude: Laius
longitude: Pikkus
language_code: Keel
Märkus on koha %{place} lähedal.'
commented_note_html: '%{commenter} on taasaktiveerinud märkuse, mida oled
kommenteerinud. Märkus on koha %{place} lähedal.'
- details: Üksikasjad märkuse kohta leiad aadressilt %{url}.
- details_html: Üksikasjad märkuse kohta leiad aadressilt %{url}.
+ details: Vasta või loe veel märkuse kohta aadressil %{url}.
+ details_html: Vasta või loe veel märkuse kohta aadressil %{url}.
changeset_comment_notification:
description: 'OpenStreetMapi muudatuskogum #%{id}'
hi: Tere, %{to_user}
partial_changeset_with_comment: kommentaariga '%{changeset_comment}'.
partial_changeset_with_comment_html: kommentaariga '%{changeset_comment}'.
partial_changeset_without_comment: ilma kommentaarita.
- details: Üksikasjad muudatuskogumi kohta leiad aadressilt %{url}.
- details_html: Üksikasjad muudatuskogumi kohta leiad aadressilt %{url}.
+ details: Vasta või loe muudatuskogumi kohta veel aadressil %{url}.
+ details_html: Vasta või loe muudatuskogumi kohta veel aadressil %{url}.
unsubscribe: Saad muudatuskogumi uuendusteadetest ära ütelda aadressil %{url}.
unsubscribe_html: Saad muudatuskogumi uuendusteadetest ära ütelda aadressil
%{url}.
lost password link: Kas unustasid parooli?
login_button: Logi sisse
register now: Registreeru nüüd
- with external: 'Teise võimalusena võid sisse logida kolmanda osapoole kaudu:'
+ with external: või logi sisse kolmanda osapoole kaudu
auth failure: Kahjuks ei õnnestu nende andmetega sisse logida.
destroy:
title: Logi välja
title: Minu volitatud rakendused
application: Rakendus
permissions: Õigused
+ last_authorized: Viimati volitatud
no_applications_html: Sa pole volitanud veel ühtegi %{oauth2} rakendust.
application:
revoke: Eemalda juurdepääs
users:
new:
title: Registreerumine
+ tab_title: Registreeru
no_auto_account_create: Kahjuks ei ole meil võimalik luua hetkel sinu jaoks
automaatselt kontot.
please_contact_support_html: Palun võta ühendust %{support_link}, et kasutajakonto
luua. Üritame tegeleda selle taotlusega nii kiiresti kui võimalik.
support: toega
about:
- header: Vaba ja muudetav
+ header: Vaba ja muudetav.
paragraph_1: Erinevalt teistest kaartidest on kogu OpenStreetMapi loonud sinusugused
inimesed ja igaüks võib seda parandada, täiendada, alla laadida ja kasutada.
- paragraph_2: Registreeru, et alustada kaardi täiendamist. Saadame sulle e-kirja,
- et saaksid kinnitada enda kasutajakonto.
+ paragraph_2: Registreeru, et alustada kaardi täiendamist.
display name description: Avalikult kuvatud kasutajanimi. Seda saate muuta hiljem
eelistustes.
+ by_signing_up_html: Registreerudes nõustud meie %{tou_link}, %{privacy_policy_link}
+ ja %{contributor_terms_link}.
+ tou: kasutustingimustega
+ contributor_terms: kaastöötingimustega
external auth: 'Kolmanda osapoole autentimine:'
continue: Registreeru
terms accepted: Täname, et nõustusid uute kaastöötingimustega!
- email_help_html: Sinu aadressi ei kuvata avalikult, loe täpsemalt meie %{privacy_policy_link}.
- privacy_policy: andmekaitsereeglitest
+ email_help_html: Sinu aadressi ei kuvata avalikult, tutvu meie %{privacy_policy_link}.
+ privacy_policy: andmekaitsereeglitega
privacy_policy_title: OSMF-i andmekaitsereeglid, milles on alaosa e-posti aadresside
kohta
- use external auth: Teise võimalusena võid sisse logida kolmanda osapoole kaudu
+ consider_pd_html: Pean enda kaastööd %{consider_pd_link} kuuluvaks.
+ consider_pd: avalikku omandisse
+ use external auth: või registreeru kolmanda osapoole kaudu
terms:
title: Tingimused
heading: Tingimused
andis.
success: Blokeering uuendatud.
index:
- title: Kasutaja blokeeringud
- heading: Kasutaja blokeeringute loetelu
+ title: Kasutajate blokeeringud
+ heading: Kasutajate blokeeringute loetelu
empty: Ühtegi blokeeringut pole veel antud.
revoke:
title: Kasutaja %{block_on} blokeeringu eemaldamine
intro: Kas märkasid viga või midagi, mis vajab täiendamist? Anna sellest teistele
kaardistajatele teada, et nad saaksid seda parandada. Lohista marker õigele
kohale ja kirjuta märkus, et probleemi selgitada.
+ anonymous_warning_html: Sa pole sisse logitud. Palun %{log_in} või %{sign_up},
+ kui soovid saada enda märkuse kohta uuendusi.
+ anonymous_warning_log_in: logi sisse
+ anonymous_warning_sign_up: registreeru
advice: Märkus on avalik ja seda võidakse kasutada kaardi uuendamiseks. Seega
palun ära kirjuta siia isiklikku teavet ega teavet autoriõigustega kaitstud
kaartidelt ega kataloogiloenditest.
continue_without_exit: 'Liigu edasi teele: %{name}'
slight_right_without_exit: 'Pööra kergelt paremal pool asuvale teele: %{name}'
offramp_right: Sõida paremal asuvale kaldteele
- offramp_right_with_exit: Lahku teelt paremal asuva ärapöörde %{exit} kaudu
- offramp_right_with_exit_name: 'Lahku teelt paremal asuva ärapöörde %{exit}
- kaudu sõites teele: %{name}'
- offramp_right_with_exit_directions: 'Lahku teelt paremal asuva ärapöörde %{exit}
- kaudu võttes suunaks: %{directions}'
- offramp_right_with_exit_name_directions: 'Lahku teelt paremal asuva ärapöörde
- %{exit} kaudu sõites teele: %{name} suunaga %{directions} poole'
+ offramp_right_with_exit: Lahku teelt %{exit}. väljumise kaudu paremal
+ offramp_right_with_exit_name: 'Lahku paremalt %{exit}. väljumise kaudu sõites
+ teele: %{name}'
+ offramp_right_with_exit_directions: Lahku paremalt %{exit}. väljumise kaudu,
+ sõites tee %{directions} suunas
+ offramp_right_with_exit_name_directions: Lahku paremalt %{exit}. väljumise
+ kaudu sõites teele %{name} tee %{directions} suunas
offramp_right_with_name: 'Pööra paremal asuvalt kaldteelt teele: %{name}'
- offramp_right_with_directions: Pööra paremal asuvale kaldteele suunaga %{directions}
- poole
+ offramp_right_with_directions: Pööra paremal asuvale kaldteele, liikudes tee
+ %{directions} suunas
offramp_right_with_name_directions: 'Pööra paremal asuvale kaldteele: uus
tee on %{name} ja suunaks %{directions}'
onramp_right_without_exit: 'Pööra paremale ja sõida kaldteed mööda teele:
%{name}'
- onramp_right_with_directions: Pööra paremale ja sõida kaldteelt %{directions}
+ onramp_right_with_directions: Pööra paremale ja sõida kaldteelt tee %{directions}
suunas
- onramp_right_with_name_directions: Pööra paremal asuvale kaldteele %{name}
- poole, suunaks %{directions}
+ onramp_right_with_name_directions: Pööra paremal asuvalt kaldteelt teele %{name},
+ sõites tee %{directions} suunas
onramp_right_without_directions: Sõida paremal asuvale kaldteele
onramp_right: Sõida paremal asuvale kaldteele
endofroad_right_without_exit: 'Tee lõpus pööra paremale teele: %{name}'
sharp_left_without_exit: 'Pööra järsult vasakul pool asuvale teele: %{name}'
turn_left_without_exit: 'Pööra vasakul pool asuvale teele: %{name}'
offramp_left: Sõida vasakul asuvale kaldteele
- offramp_left_with_exit: Lahku teelt vasakul asuva ärapöörde %{exit} kaudu
- offramp_left_with_exit_name: 'Lahku teelt vasakul asuva ärapöörde %{exit}
- kaudu sõites teele: %{name}'
- offramp_left_with_exit_directions: 'Lahku teelt vasakul asuva ärapöörde %{exit}
- kaudu võttes suunaks: %{directions}'
- offramp_left_with_exit_name_directions: 'Lahku teelt vasakul asuva ärapöörde
- %{exit} kaudu sõites teele: %{name} suunaga %{directions} poole'
+ offramp_left_with_exit: Lahku vasakult %{exit}. väljumise kaudu
+ offramp_left_with_exit_name: 'Lahku vasakult %{exit}. väljumise kaudu sõites
+ teele: %{name}'
+ offramp_left_with_exit_directions: Lahku vasakult %{exit}. väljumise kaudu,
+ sõites tee %{directions} suunas
+ offramp_left_with_exit_name_directions: Lahku vasakult %{exit}. väljumise
+ kaudu sõites teele %{name} tee %{directions} suunas
offramp_left_with_name: 'Pööra vasakul asuvalt kaldteelt teele: %{name}'
- offramp_left_with_directions: Pööra vasakul asuvale kaldteele suunaga %{directions}
- poole
+ offramp_left_with_directions: Pööra vasakul asuvale kaldteele, liikudes tee
+ %{directions} suunas
offramp_left_with_name_directions: 'Pööra vasakul asuvale kaldteele: uus tee
on %{name} ja suunaks %{directions}'
onramp_left_without_exit: 'Pööra vasakule ja sõida kaldteed mööda teele: %{name}'
- onramp_left_with_directions: Pööra vasakule ja sõida kaldteelt %{directions}
+ onramp_left_with_directions: Pööra vasakule ja sõida kaldteelt tee %{directions}
suunas
onramp_left_with_name_directions: 'Pööra vaskul asuvale kaldteele: uus tee
on %{name} ja suunaks %{directions}'
slight_left_without_exit: 'Pööra kergelt vasakule teele: %{name}'
via_point_without_exit: (teekonnapunkti kaudu)
follow_without_exit: 'Sõida edasi mööda teed: %{name}'
- roundabout_without_exit: 'Pööra ringteelt järgnevale teele: %{name}'
+ roundabout_without_exit: 'Pööra ringteelt järgmisele teele: %{name}'
leave_roundabout_without_exit: Pööra ära ringteelt - %{name}
stay_roundabout_without_exit: Jätka sõitmist ringteel - %{name}
start_without_exit: 'Alusta teelt: %{name}'
users:
new:
title: Rekisteröidy
+ tab_title: Rekisteröidy
no_auto_account_create: Automaattinen käyttäjätunnuksen luonti ei ole juuri
nyt käytössä.
support: tuki
about:
header: Muokkaa vapaasti
+ paragraph_1: Toisin kuin muut karttapalvelut, OpenStreetMap on täysin tavallisten
+ ihmisten luoma. Kuka tahansa voi korjata, päivittää, ladata ja käyttää sitä
+ ilmaiseksi.
+ paragraph_2: Osallistu projektiin luomalla käyttäjätunnus.
display name description: Julkisesti näkyvä käyttäjänimi. Tätä voi myöhemmin
muuttaa asetuksista.
+ by_signing_up_html: Rekisteröitymällä hyväksyt %{tou_link}, %{privacy_policy_link}
+ ja %{contributor_terms_link}.
external auth: 'Kolmannen osapuolen todennus:'
continue: Rekisteröidy
terms accepted: Kiitos uusien osallistujaehtojen hyväksymisestä!
+ email_help_html: Osoitetta ei näytetä julkisesti, lisätietoja on sivulla %{privacy_policy_link}.
privacy_policy: tietosuojakäytäntö
+ consider_pd_html: Pidän tuotoksiani %{consider_pd_link}.
use external auth: Kirjaudu toisen palvelun tunnuksilla
terms:
title: Ehdot
intro: Huomasitko virheen tai puuttuvan kohteen? Ilmoita siitä muille kartoittajille,
jolloin virhe voidaan korjata. Siirrä merkkipiste oikeaan kohtaan ja kirjoita
selite ongelmasta.
+ anonymous_warning_sign_up: rekisteröidy
advice: Merkintä näkyy julkisesti kaikille, älä kirjoita henkilökohtaisia tietoja.
Aineistoa kehitetään palautteen perusteella, minkä takia älä käytä lähteenä
muita karttoja tai hakemistoja.
# Author: GeorgeKaplan
# Author: Gileri
# Author: Gomoko
+# Author: Graineahumus
# Author: Gravitystorm
# Author: Guilhelma
# Author: Hashar
# Author: Orikrin1998
# Author: Otourly
# Author: Oupsa
+# Author: Overflorian
# Author: Peter17
# Author: Phoenamandre
# Author: Pipo
auth_provider: Fournisseur d’authentification
auth_uid: UID d’authentification
email: Courriel
- new_email: Nouvelle adresse de courriel
+ new_email: Nouvelle adresse email
active: Actif
display_name: Afficher le nom
description: Description du profil
view_unredacted_history: Voir l'historique non censuré
view_details: Afficher les détails
view_redacted_data: Afficher les données censurées
+ view_redaction_message: Afficher le message de rédaction
location: 'Emplacement :'
common_details:
coordinates_html: '%{latitude} ; %{longitude}'
closed: Fermé
belongs_to: Auteur
subscribe:
+ heading: S'abonner à la discussion sur l'ensemble de modifications suivante ?
button: S'abonner à la discussion
unsubscribe:
heading: Se désabonner de la discussion du groupe de modifications suivant ?
title: Groupe de modifications %{id}
created_by_html: Créé par %{link_user} le %{created}.
no_such_entry:
+ title: Aucun ensemble de modifications de ce type
heading: 'Aucune entrée avec l’identifiant : %{id}'
body: Désolé, il n’y a aucun groupe de modifications avec l'identifiant %{id}.
Veuillez vérifier l'orthographe ou la validité du lien sur lequel vous avez
newer_comments: Commentaires plus récents
older_comments: Commentaires plus anciens
subscribe:
+ heading: S'abonner à la discussion suivante sur les entrées de journal ?
button: S'abonner à la discussion
unsubscribe:
+ heading: Se désinscrire de la discussion suivante sur les entrées du journal ?
button: Se désinscrire de la discussion
doorkeeper:
errors:
contact_the_community_html: N’hésitez pas à %{contact_link} la communauté OpenStreetMap
si vous avez trouvé un lien cassé ou une anomalie. Notez l’URL exacte de votre
demande.
+ bad_request:
+ title: Mauvaise requête
+ description: L'opération que vous avez demandée sur le serveur OpenStreetMap
+ n'est pas valide (HTTP 400)
forbidden:
title: Interdit
description: L’opération que vous avez demandée sur le serveur OpenStreetMap
hosting_partners_2024_html: L’hébergement est pris en charge par %{fastly}, %{corpmembers},
et d’autres %{partners}.
partners_fastly: Fastly
+ partners_corpmembers: Membres d'entreprise de l'OSMF
partners_partners: partenaires
tou: Conditions d’utilisation
osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
more: Plus
user_mailer:
diary_comment_notification:
+ description: 'Entrée du journal OpenStreetMap #%{id}'
subject: '[OpenStreetMap] %{user} a publié un commentaire sur un article de
journal'
hi: Bonjour %{to_user},
La note se trouve près de %{place}.'
commented_note_html: '%{commenter} a réactivé une note de carte que vous avez
commentée. La note est près de %{place}.'
- details: Plus de détails concernant la note se trouvent à %{url}.
- details_html: Plus de détails concernant la note se trouvent à %{url}.
+ details: Répondez ou apprenez-en plus sur la note sur %{url}.
+ details_html: Répondez ou en savoir plus sur la note sur %{url}.
changeset_comment_notification:
description: 'Groupe de modifications OpenStreetMap #%{id}'
hi: Bonjour %{to_user},
partial_changeset_with_comment: avec le commentaire « %{changeset_comment} »
partial_changeset_with_comment_html: avec le commentaire « %{changeset_comment} »
partial_changeset_without_comment: sans commentaire
- details: Plus de détails sur l’ensemble de modifications à %{url}.
- details_html: Vous pouvez trouver plus de détails sur l’ensemble de modifications
- sur %{url}.
+ details: Répondez ou en savoir plus sur l'ensemble de changements sur %{url}.
+ details_html: Répondre ou en savoir plus sur l'ensemble de changements sur %{url}.
unsubscribe: Vous pouvez vous désabonner des mises à jour de cet ensemble de
modifications depuis %{url}.
unsubscribe_html: Vous pouvez vous désabonner des mises à jour de cet ensemble
unread_button: Marque comme non lu
destroy_button: Supprimer
back: Retour
- wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous essayez
- de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné. Veuillez
- vous connecter avec l’identifiant correct pour pouvoir le lire.
+ wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous avez
+ demandé de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné.
+ Veuillez vous connecter avec le bon identifiant pour pouvoir le lire.
sent_message_summary:
destroy_button: Supprimer
heading:
new:
title: Se connecter
tab_title: Se connecter
+ login_to_authorize_html: Connectez-vous à OpenStreetMap pour accéder à %{client_app_name}.
email or username: 'Adresse de courriel ou nom d’utilisateur :'
password: 'Mot de passe :'
remember: Se souvenir de moi
générale des finances publiques (anciennement la Direction générale des
impôts).'
contributors_fr_france: France
+ contributors_hr_credit_html: |-
+ %{croatia} : contient des données de %{dgu_link} et %{open_data_portal}
+ (informations publiques de Croatie).
contributors_hr_croatia: Croatie
+ contributors_hr_dgu: Administration géodésique de l'État de Croatie
+ contributors_hr_open_data_portal: Portail national des données ouvertes
contributors_nl_credit_html: '%{netherlands} : contient des données © AND,
2007 (%{and_link})'
contributors_nl_netherlands: Pays-Bas
identifiable: IDENTIFIABLE
private: PRIVÉE
trackable: PISTABLE
+ details_with_tags_html: '%{time_ago} par %{user} dans %{tags}'
+ details_without_tags_html: '%{time_ago} par %{user}'
index:
public_traces: Traces GPS publiques
my_gps_traces: Mes traces GPS
other: Fichier GPX avec %{count} points de %{user}
description_without_count: Fichier GPX de %{user}
application:
+ basic_auth_disabled: 'L''authentification HTTP de base est désactivée : %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 et 1.0a sont désactivés : %{link}'
permission_denied: Vous n’avez pas le droit d’accéder à cette action
require_cookies:
cookies_needed: Il semble que les témoins (cookies) soient désactivés dans votre
muted_users: Utilisateurs silencieux
auth_providers:
openid_logo_alt: Se connecter avec OpenID
+ openid_login_button: Continuer
openid:
title: Connexion avec OpenID
alt: Se connecter avec une URL OpenID
google:
- title: Connexion avec Google
+ title: Se connecter avec Google
alt: Se connecter avec un OpenID de Google
facebook:
- title: Connexion avec Facebook
+ title: Se connecter avec Facebook
alt: Se connecter avec un compte de Facebook
microsoft:
- title: Connexion avec Microsoft
+ title: Se connecter avec Microsoft
alt: Se connecter avec un compte Microsoft
github:
- title: Connexion avec GitHub
- alt: Se connecter avec un compte de GitHub
+ title: Se connecter avec GitHub
+ alt: Se connecter avec un compte GitHub
wikipedia:
- title: Connexion avec Wikipédia
- alt: Se connecter avec un compte de Wikipédia
+ title: Se connecter avec Wikipédia
+ alt: Se connecter avec un compte Wikipédia
wordpress:
- title: Connexion avec Wordpress
+ title: Se connecter avec Wordpress
alt: Se connecter avec un OpenID de Wordpress
aol:
- title: Connexion avec AOL
- alt: Se connecter avec un OpenID d’AOL
+ title: Se connecter avec AOL
+ alt: Se connecter avec un OpenID AOL
oauth:
authorize:
title: Autoriser l’accès à votre compte
write_redactions: Caviarder les données cartographiques
read_email: Lire l’adresse courriel de l’utilisateur
skip_authorization: Demande d’approbation automatique
+ for_roles:
+ moderator: Cette autorisation concerne les actions disponibles uniquement pour
+ les modérateurs
oauth_clients:
new:
title: Inscrire une nouvelle application
users:
new:
title: S’inscrire
+ tab_title: Créer un compte
+ signup_to_authorize_html: Se connecter à OpenStreetMap pour accéder à %{client_app_name}.
no_auto_account_create: Malheureusement, nous ne sommes actuellement pas en
mesure de vous créer un compte automatiquement.
please_contact_support_html: Veuillez contacter %{support_link} pour organiser
paragraph_1: Contrairement à d’autres cartes, OpenStreetMap est entièrement
créé par des personnes comme vous et il permet à quiconque de librement
la réparer, la mettre à jour, la télécharger et l’utiliser.
- paragraph_2: Inscrivez-vous pour commencer à contribuer. Nous vous enverrons
- un courriel pour confirmer votre compte.
+ paragraph_2: Se connecter pour commencer à contribuer.
+ welcome: Bienvenue dans OpenStreetMap
+ duplicate_social_email: Si vous possédez déjà un compte OpenStreetMap et souhaitez
+ utiliser un fournisseur d'identité tiers, veuillez vous connecter en utilisant
+ votre mot de passe et modifier les paramètres de votre compte.
display name description: Votre nom d’utilisateur affiché publiquement. Vous
pouvez changer ceci ultérieurement dans les préférences.
+ by_signing_up_html: En vous inscrivant, vous acceptez nos %{tou_link}, %{privacy_policy_link}
+ et %{contributor_terms_link}.
+ tou: conditions d'utilisation
+ contributor_terms: Conditions de contribution
external auth: 'Authentification tierce :'
continue: S’inscrire
terms accepted: Merci d’avoir accepté les nouveaux termes du contributeur !
privacy_policy: politique de confidentialité
privacy_policy_title: Politique de confidentialité de l’OSMF, qui comprend une
section sur les adresses de courriel
- use external auth: Vous pouvez également utiliser un service tiers pour vous
- connecter.
+ consider_pd_html: Je considère que mes contributions se situent dans le %{consider_pd_link}.
+ consider_pd: domaine public
+ or: ou
+ use external auth: ou vous pouvez vous connecter avec un service tiers.
terms:
title: Conditions
heading: Conditions
heading: Utilisateurs
older: Utilisateurs plus anciens
newer: Utilisateurs plus récents
+ found_users:
+ one: '%{count} utilisateur trouvé'
+ other: '%{count} utilisateurs trouvés'
summary_html: '%{name} créé depuis %{ip_address} le %{date}'
summary_no_ip_html: '%{name} créé le %{date}'
confirm: Confirmer les utilisateurs sélectionnés
heading: Votre identifiant n’est pas encore associé à un compte OpenStreetMap.
option_1: Si vous êtes nouveau sur OpenStreetMap, veuillez créer un nouveau
compte à l’aide du formulaire ci-dessous.
- option_2: Si vous avez déjà un compte, vous pouvez vous connecter avec en utilisant
- votre nom d’utilisateur et votre mot de passe, puis associer le compte avec
- votre ID dans vos préférences utilisateur.
+ option_2: Si vous avez déjà un compte, vous pouvez vous y connecter avec en
+ utilisant votre nom d’utilisateur et votre mot de passe, puis associer le
+ compte avec votre ID dans vos préférences utilisateur.
user_role:
filter:
not_a_role: La chaîne « %{role} » n’est pas un rôle valide.
reason: Motif du blocage
status: État
revoker_name: Révoqué par
+ older: Blocs plus anciens
+ newer: Blocs plus récents
navigation:
all_blocks: Tous les blocages
blocks_on_me: Blocages me concernant
intro: Vous avez repéré une erreur ou un manque ? Faites-le savoir aux autres
cartographes afin qu’ils puissent y remédier. Déplacez le marqueur à la position
exacte et écrivez une note pour expliquer le problème.
+ anonymous_warning_html: Vous n'êtes pas connecté. Veuillez %{log_in} ou %{sign_up}
+ si vous souhaitez recevoir des mises à jour pour votre note.
+ anonymous_warning_log_in: se connecter
+ anonymous_warning_sign_up: créer un compte
advice: Votre note est publique et peut être utilisée pour mettre à jour la
carte, aussi n’entrez aucune information personnelle, ni aucune information
venant de cartes protégées, ni aucune entrée de répertoire ou d’annuaire.
contact_the_community_html: Non dubides en %{contact_link} coa comunidade do
OpenStreetMap se atopaches un erro ou unha ligazón rota. Anota o enderezo
URL exacto da túa solicitude.
+ bad_request:
+ title: Solicitude incorrecta
+ description: A operación que solicitaches no servidor do OpenStreetMap non é
+ válida (HTTP 400)
forbidden:
title: Prohibido
description: A operación que solicitaches no servidor do OpenStreetMap só está
other: Ficheiro GPX con %{count} puntos de %{user}
description_without_count: Ficheiro GPX de %{user}
application:
+ basic_auth_disabled: 'A autenticación básica HTTP está desactivada: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 e 1.0a están desactivados: %{link}'
permission_denied: Non ten permisos para acceder a esa acción
require_cookies:
cookies_needed: Semella que ten as cookies do navegador desactivadas. Actíveas
intro: Atopou un erro ou descubriu que falla algún dato? Informe ós outros cartógrafos
para que poidamos solucionalo. Mova o marcador á posición correcta e escriba
unha nota expoñendo o problema.
+ anonymous_warning_html: Non iniciaches sesión. Por favor, %{log_in} ou %{sign_up}
+ se queres recibir actualizacións da túa nota.
+ anonymous_warning_log_in: accede ao sistema
+ anonymous_warning_sign_up: rexístrate
advice: A túa nota será pública e poderá empregarse para actualizar o mapa;
por conseguinte, non insiras información persoal, nin datos de mapas protexidos
por dereitos de autoría ou listaxes de directorios.
contact: ליצור קשר
contact_the_community_html: אפשר %{contact_link} עם קהילת OpenStreetMap אם מצאת
קישור פגום / תקלה. יש לתעד את הכתובת המדויקת של הבקשה שלך.
+ bad_request:
+ title: בקשה מקולקלת
+ description: הפעולה שביקשת בשרת OpenStreetMap אינה תקינה (HTTP 400)
forbidden:
title: אסור
description: הפעולה שביקשת לבצע מול שרת OpenStreetMap זמינה למנהלים בלבד (HTTP
היא ליד %{place}.
commented_note_html: '%{commenter} הפעיל מחדש הערת מפה שהגבת עליה. הערה נמצאת
ליד %{place}'
- details: ×\90פשר ×\9c×\9eצ×\95×\90 פר×\98×\99×\9d × ×\95ספ×\99×\9d ×¢×\9c ×\94×\94ערה בכתובת %{url}
- details_html: ×\90פשר ×\9c×\9eצ×\95×\90 פר×\98×\99×\9d × ×\95ספ×\99×\9d ×¢×\9c ×\94×\94ער×\94 ×\91×\9bת×\95×\91ת %{url}.
+ details: ×\90פשר ×\9c×\94×\92×\99×\91 ×\9c×\94ער×\94 ×\90×\95 ×\9cק×\91×\9c ×\9e×\99×\93×¢ × ×\95סף ×¢×\9c×\99ה בכתובת %{url}
+ details_html: ×\90פשר ×\9c×\94×\92×\99×\91 ×\9c×\94ער×\94 ×\90×\95 ×\9cק×\91×\9c ×\9e×\99×\93×¢ × ×\95סף ×¢×\9c×\99×\94 ×\91×\9bת×\95×\91ת %{url}
changeset_comment_notification:
description: ערכת שינויים של OpenStreetMap מס׳ %{id}
hi: שלום %{to_user},
partial_changeset_with_comment: עם ההערה '%{changeset_comment}'
partial_changeset_with_comment_html: עם ההערה '%{changeset_comment}'
partial_changeset_without_comment: ללא הערה
- details: פר×\98×\99×\9d × ×\95ספ×\99×\9d ×¢×\9c ער×\9bת ×\94ש×\99× ×\95×\99×\99×\9d ×\90פשר ×\9c×\9eצ×\95×\90 בכתובת %{url}
- details_html: פר×\98×\99×\9d × ×\95ספ×\99×\9d ×¢×\9c ער×\9bת ×\94ש×\99× ×\95×\99×\99×\9d ×\90פשר ×\9c×\9eצ×\95×\90 בכתובת %{url}
+ details: ×\90פשר ×\9c×\94×\92×\99×\91 ×\9cער×\9bת ×\94ש×\99× ×\95×\99×\99×\9d ×\90×\95 ×\9cק×\91×\9c ×\9e×\99×\93×¢ × ×\95סף ×¢×\9c×\99×\94 בכתובת %{url}
+ details_html: ×\90פשר ×\9c×\94×\92×\99×\91 ×\9cער×\9bת ×\94ש×\99× ×\95×\99×\99×\9d ×\90×\95 ×\9cק×\91×\9c ×\9e×\99×\93×¢ × ×\95סף ×¢×\9c×\99×\94 בכתובת %{url}
unsubscribe: באפשרותך לבטל את המינוי לעדכונים מערכת השינויים הזאת בכתובת %{url}.
unsubscribe_html: באפשרותך לבטל את המינוי לעדכונים מערכת השינויים הזאת בכתובת
%{url}.
other: קובץ GPS עם %{count} נקודות מאת %{user}
description_without_count: קובץ GPS מאת %{user}
application:
+ basic_auth_disabled: 'אימות בסיסי ב־HTTP כבוי: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 ו־1.0a כבויים: %{link}'
permission_denied: אין לך הרשאה לגשת לפעולה הזאת
require_cookies:
cookies_needed: נראה שהעוגיות כבויות אצלך – נא להפעיל עוגיות בדפדפן שלך כדי
title: הערה חדשה
intro: יש פה טעות או שחסר משהו? אנו מבקשים ממך לספר את זה לממפים אחרים. לשם
כך צריך להזיז את הסמן למקום הנכון ולכתוב הערה שמסבירה את הבעיה.
+ anonymous_warning_html: לא נכנסת לחשבון. נא %{log_in} או %{sign_up} אם ברצונך
+ לקבל עדכונים על ההערה שלך.
+ anonymous_warning_log_in: להיכנס לחשבון
+ anonymous_warning_sign_up: להירשם
advice: /start
add: הוספת הערה
javascripts:
delete_introduction: 'Tu pote deler tu conto OpenStreetMap con le button sequente.
Nota ben que:'
delete_profile: Tu information de profilo, includente tu avatar, description
- e domicilio, essera removite.
+ e loco de residentia, essera removite.
delete_display_name: Tu nomine a monstrar essera removite e potera esser reusate
per altere contos.
retain_caveats: 'Nonobstante, alcun informationes sur te essera retenite sur
friend: Amico
show:
title: Mi pannello
- no_home_location_html: '%{edit_profile_link} e defini tu loco de domicilio pro
- vider le usatores a proximitate.'
+ no_home_location_html: '%{edit_profile_link} e defini tu loco de residentia
+ pro vider le usatores a proximitate.'
edit_your_profile: Modifica tu profilo
my friends: Mi amicos
no friends: Tu non ha ancora addite alcun amico.
contact_the_community_html: Sia libere de %{contact_link} le communitate de
OpenStreetMap si tu ha trovate un ligamine rupte o qualcunque anomalia. Nota
le URL exacte de tu requesta.
+ bad_request:
+ title: Mal requesta
+ description: Le operation que tu ha requestate sur le servitor de OpenStreetMap
+ non es valide (HTTP 400)
forbidden:
title: Prohibite
description: Le operation que tu ha requestate sur le servitor de OpenStreetMap
layouts:
logo:
alt_text: Logo de OpenStreetMap
- home: Vader al position de initio
+ home: Vader al loco de residentia
logout: Clauder session
log_in: Aperir session
sign_up: Crear conto
delete image: Remover le imagine actual
replace image: Reimplaciar le imagine actual
image size hint: (imagines quadrate de al minus 100×100 functiona melio)
- home location: Position de origine
- no home location: Tu non ha entrate tu position de origine.
- update home location on click: Actualisar le position de origine quando io clicca
+ home location: Loco de residentia
+ no home location: Tu non ha definite tu loco de residentia.
+ update home location on click: Actualisar le loco de residentia quando io clicca
sur le carta?
show: Monstrar
delete: Deler
other: File GPX con %{count} punctos de %{user}
description_without_count: File GPX de %{user}
application:
+ basic_auth_disabled: 'Le authentication HTTP basic es disactivate: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 e 1.0a es disactivate: %{link}'
permission_denied: Tu non ha le permission de acceder a iste action
require_cookies:
cookies_needed: Tu pare haber disactivate le cookies. Per favor activa le cookies
intro: Tu ha trovate un error? Qualcosa manca? Face lo saper al altere cartographos
a fin que nos pote corriger lo. Displacia le marcator al position correcte
e scribe un nota pro explicar le problema.
+ anonymous_warning_html: Tu non ha aperite session. Per favor %{log_in} o %{sign_up}
+ si tu vole reciper actualisationes pro tu nota.
+ anonymous_warning_log_in: aperi session
+ anonymous_warning_sign_up: crea un conto
advice: Tu nota es public e pote esser usate pro actualisar le carta. Dunque,
non insere alcun information personal, ni datos ab cartas o catalogos protegite
per derectos de autor.
La nota si trova vicino a %{place}.'
commented_note_html: '%{commenter} ha riattivato una nota che avevi commentato.
La nota si trova vicino a %{place}.'
- details: Ulteriori dettagli sulla nota possono essere trovati su %{url}.
- details_html: Ulteriori dettagli sulla nota possono essere trovati su %{url}.
+ details: Rispondi o scopri di più sulla nota su %{url}.
+ details_html: Rispondi o scopri di più sulla nota su %{url}.
changeset_comment_notification:
description: 'Gruppo di modifiche OpenStreetMap #%{id}'
hi: Ciao %{to_user},
partial_changeset_with_comment: con il commento '%{changeset_comment}'
partial_changeset_with_comment_html: con il commento '%{changeset_comment}'
partial_changeset_without_comment: senza commento
- details: Ulteriori dettagli sul gruppo di modifiche possono essere trovati su
- %{url}.
- details_html: Ulteriori dettagli sul gruppo di modifiche possono essere trovati
- su %{url}.
+ details: Rispondi o scopri di più sul gruppo di modifiche su %{url}.
+ details_html: Rispondi o scopri di più sul gruppo di modifiche su %{url}.
unsubscribe: Puoi annullare l'iscrizione agli aggiornamenti di questo insieme
di modifiche su %{url}.
unsubscribe_html: Puoi annullare l'iscrizione agli aggiornamenti di questo insieme
intro: Ti sei accorto di un errore o di qualcosa che manca? Fallo sapere agli
altri mappatori così possono correggerlo. Sposta il puntatore nella posizione
esatta e inserisci una nota per spiegare il problema.
+ anonymous_warning_log_in: entra
+ anonymous_warning_sign_up: registrati
advice: La tua nota è pubblica e potrebbe essere utilizzata per aggiornare la
mappa, pertanto non inserire informazioni personali e neppure dati provenienti
da mappe protette da copyright oppure elenchi.
messages:
invalid_email_address: 유효한 이메일 주소로 보이지 않음
email_address_not_routable: 라우팅할 수 없음
+ models:
+ user_mute:
+ is_already_muted: 님은 이미 음소거되어 있습니다
models:
acl: 접근 제어 목록
changeset: 바뀜집합
introduction: 근처의 지물을 찾으려면 지도에서 클릭하세요.
nearby: 근처 지물
enclosing: 근접 지역 내 지물
+ old_nodes:
+ not_found:
+ sorry: '죄송합니다. 버전 %{version}의 노드 #%{id}를 찾을 수 없습니다.'
+ old_ways:
+ not_found:
+ sorry: '죄송합니다. 버전 %{version}의 경로 #%{id}를 찾을 수 없습니다.'
+ old_relations:
+ not_found:
+ sorry: '죄송합니다. 버전 %{version}의 관계 #%{id}를 찾을 수 없습니다.'
changesets:
changeset_paging_nav:
showing_page: '%{page}쪽'
contact: 여러 연락 수단
contact_the_community_html: 끊어진 링크나 버그를 발견했다면 언제든지 오픈스트리트맵 커뮤니티에 %{contact_link}으로
알려주십시오. 요청의 정확한 URL을 기록해 두십시오.
+ bad_request:
+ title: 잘못된 요청
forbidden:
title: 접근 거부됨
description: 오픈스트리트맵 서버에 요청한 이 작업은 관리자만 사용할 수 있습니다(HTTP 403).
lost password link: 비밀번호를 잊으셨나요?
login_button: 로그인
register now: 지금 등록하세요
- with external: '다른 제3자 로그인 방식 사용하기:'
+ with external: 혹은 제3자 방식으로 로그인하기
+ or: 혹은
auth failure: 죄송합니다, 입력한 정보로 로그인할 수 없습니다.
destroy:
title: 로그아웃
lake: 호수
reservoir: 저수지
glacier: 빙하
+ reef: 암초
wetland: 습지
farm: 농장
brownfield: 재개발지역
imports: 들여오기
automated_edits: 자동화 편집
start_mapping: 매핑 시작하기
+ continue_authorization: 승인 계속하기
add_a_note:
title: 편집할 짬을 내기가 어려우신가요? 손쉽게 '노트'(참고)를 덧붙이세요!
para_1: 가입한 다음 편집 방법을 배울 시간이 없거나 자잘한 사항만 고치고 싶은 경우, '노트'(참고)를 덧붙여서 알려주면 쉽습니다.
identifiable: 식별 가능
private: 비공개
trackable: 추적 가능
+ details_without_tags_html: '%{time_ago} %{user}님'
index:
public_traces: 공개 GPS 궤적
my_gps_traces: 내 GPS 궤적
users:
new:
title: 가입하기
+ tab_title: 가입하기
no_auto_account_create: 불행하게도 현재로서는 자동으로 계정을 만들 수 없습니다.
please_contact_support_html: 계정 생성 준비를 위해 %{support_link}(으)로 문의해 주세요. 요청 처리가
최대한 빨리 이뤄질 수 있도록 노력하겠습니다.
header: 자유롭게 편집 가능
paragraph_1: 다른 지도와 달리 오픈스트리트맵은 전부 여러분과 같은 사람들이 제작했으며 누구나 자유롭게 수정, 업데이트, 다운로드,
사용을 할 수 있습니다.
- paragraph_2: 기여를 시작하려면 가입하세요. 당신의 계정 확인을 위해 이메일을 보내드리겠습니다.
+ paragraph_2: 회원 가입으로 기여를 시작해 봅시다.
+ welcome: 오픈스트리트맵에 오신 것을 환영합니다
display name description: 공개적으로 표시되는 사용자 이름입니다. 나중에 환경 설정에서 바꿀 수 있습니다.
+ tou: 이용 약관
+ contributor_terms: 기여자 약관
external auth: '제3자 인증:'
continue: 가입하기
terms accepted: 새 기여자 약관에 동의해 주셔서 감사합니다!
email_help_html: 당신의 주소는 공개적으로 노출되지 않습니다. 자세한 내용은 %{privacy_policy_link}를 참조하세요.
privacy_policy: 개인정보처리방침
privacy_policy_title: 이메일 주소 섹션을 포함한 OSMF 개인 정보 보호 정책
+ consider_pd: 퍼블릭 도메인
+ or: 혹은
use external auth: 다른 제3자 로그인 방식 사용하기
terms:
title: 약관
my_dashboard: 내 대시보드
blocks on me: 나를 차단
blocks by me: 나한테 차단
+ create_mute: 이 사용자 음소거하기
+ destroy_mute: 이 사용자를 음소거 해제
edit_profile: 프로필 수정
send message: 메시지 보내기
diary: 일기
flash: 이 차단을 해제했습니다.
revoke_all:
revoke: 해제!
+ flash: 모든 차단 내역이 비활성화되었습니다.
helper:
time_future_html: '%{time}에 끝납니다.'
until_login: 사용자가 로그인할 때까지 활성합니다.
reason: 차단 이유
status: 상태
revoker_name: 해제자
+ older: 옛 차단내역
+ newer: 최근 차단내역
navigation:
all_blocks: 모든 차단
+ blocks_on_me: 나의 차단내역
+ blocks_on_user: '%{user}님의 차단내역'
+ blocks_by_me: 내가 차단한 내역
+ blocks_by_user: '%{user}님이 차단한 내역'
block: '#%{id} 차단'
user_mutes:
index:
thead:
actions: 동작
tbody:
+ unmute: 음소거 해제
send_message: 메시지 보내기
+ create:
+ notice: '%{name}님을 음소거했습니다.'
+ error: '%{name}님을 음소거할 수 없습니다. %{full_message}.'
+ destroy:
+ notice: '%{name}님의 음소거를 해제했습니다.'
+ error: 유저의 음소거를 해제할 수 없습니다. 다시 시도해 주세요.
notes:
index:
title: '%{user} 님이 제출했거나 덧글을 남긴 참고'
title: 새로운 참고
intro: 실수했거나 없는 무언가를 발견했나요? 다른 매퍼에게 알려주어 고칠 수 있게 해주세요. 마커를 올바른 위치로 이동하고, 참고를
남겨 문제를 설명해주세요.
+ anonymous_warning_log_in: 로그인
+ anonymous_warning_sign_up: 가입하기
advice: 노트는 공개되어 지도 업데이트에 쓰일 수 있으므로 개인정보 또는 저작권이 있는 지도나 디렉터리 리스팅의 정보를 입력하지 마십시오.
add: 참고 추가
javascripts:
description:
description_without_count: GPX-Fichier vum %{user}
application:
+ oauth_10a_disabled: 'OAuth 1.0 an 1.0a sinn desaktivéiert: %{link}'
settings_menu:
account_settings: Astellunge vum Benotzerkont
oauth1_settings: OAuth 1-Astellungen
contact_the_community_html: Слободно стапете во %{contact_link} со заедницата
OpenStreetMap ако имате најдено расипана врска или грешка. Забележете ја точната
URL на вашето барање.
+ bad_request:
+ title: Неисправно барање
+ description: Операцијат што ја побаравте од опслужувачот на OpenStreetMap server
+ не е важечка (HTTP 400)
forbidden:
title: Забрането
description: Постапката која ја побаравте на опслужувачот на OpenStreetMap е
other: GPX-податотеки со %{count} точки од %{user}
description_without_count: GPX-податотека од %{user}
application:
+ basic_auth_disabled: 'Оневозможена е основната заверка со HTTP: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 и 1.0a се оневозможени: %{link}'
permission_denied: Немате дозвола за ова дејство
require_cookies:
cookies_needed: Изгледа сте оневозможиле колачиња - дозволете колачиња во прелистувачот
intro: Забележавте некоја грешка или нешто недостасува? Дајте им на знаење на
другите картографи за да ја средиме работата. Поместете го бележникот на исправното
место и внесете порака, објаснувајќи го проблемот.
+ anonymous_warning_html: Не сте најавени. %{log_in} или %{sign_up} ако сакате
+ да ве известуваме за вашата белешка.
+ anonymous_warning_log_in: Најавете се
+ anonymous_warning_sign_up: зачленете се
advice: Вашата белешка е јавна и може да се употреби за поднова на картата.
Затоа, не внесувајте лични податоци, или пак податоци од карти или именици
заштитени со авторски права.
url: URL
richtext_field:
edit: Sunting
- preview: Pralihat
+ preview: Pratayang
site:
about:
next: Berikutnya
# Author: Bada Kaji
# Author: Danieldegroot2
# Author: Drjpoudel
+# Author: Gravitystorm
# Author: Haribanshi
# Author: Krish Dulal
# Author: Nirajan pant
# Author: हिमाल सुबेदी
---
ne:
+ html:
+ dir: ltr
time:
formats:
friendly: '%e %B %Y मा %H:%M'
+ count:
+ at_least_pattern: '%{count}+'
helpers:
file:
prompt: फाइल छान्नुहोस्
oauth2_application:
create: दर्ता गर्नुहाेस्
update: अद्यावधिक गर्नुहोस्
+ redaction:
+ create: डेटा हटाउनुहोस्
+ update: डेटा हटाउने सङ्ग्रह गर्नुहोस्
trace:
- create: अपलोड गर्ने
- update: परिवर्तनहरू संग्रह गर्ने
+ create: अपलोड गर्नुहोस्
+ update: परिवर्तनहरू संग्रह गर्नुहोस्
+ user_block:
+ create: ब्लक सिर्जना गर्नुहोस्
+ update: ब्लक अद्यावधिक गर्नुहाेस्
activerecord:
+ errors:
+ messages:
+ invalid_email_address: इमेल मान्य देखिँदैन
+ email_address_not_routable: राउटेबल छैन
+ models:
+ user_mute:
+ is_already_muted: पहिले नै म्युट गरिएको छ
models:
acl: अनुमति नियन्त्रण सूची
changeset: परिवर्तनहरू सूची
diary_comment: डायरी टिप्पणी
diary_entry: डायरी प्रविष्टी
friend: साथी
+ issue: इस्यु
language: भाषा
message: सन्देश
node: नोड
relation: रिलेशन
relation_member: रिलेशन सदस्य
relation_tag: सम्बन्ध चिनो
+ report: रिपोर्ट गर्नुहोस्
session: सत्र
trace: ट्रेस
tracepoint: ट्रेस बिन्दु
way_node: बाटो नोड
way_tag: मार्ग चिनो
attributes:
+ client_application:
+ name: नाम (आवश्यक)
+ url: मुख्य एप्लिकेसन युआरएल (आवश्यक)
+ callback_url: कलब्याक युआरएल
+ support_url: सहायता युआरएल
+ allow_read_prefs: उनीहरूको प्रयोगकर्ता अभिरुचीहरू पढ्नुहोस्
+ allow_write_prefs: उनीहरूको प्रयोगकर्ता अभिरुचीहरू परिमार्जन गर्नुहोस्
+ allow_write_diary: डायरी प्रविष्टी गर्नुहोस्, टिप्पणीहरू र साथी बनाउनुहोस्
+ allow_write_api: नक्सा परिमार्जन गर्नुहोस्
+ allow_read_gpx: उनीहरूको निजी जिपिएस ट्रेसहरू पढ्नुहोस्
+ allow_write_gpx: जिपिएस ट्रेसहरू अपलोड गर्नुहोस्
+ allow_write_notes: टिपोटहरू परिमार्जन गर्नुहोस्
diary_comment:
body: बडी
diary_entry:
user: प्रयोगकर्ता
title: विषय
+ body: बडी
latitude: अक्षांश
longitude: देशान्तर
language_code: भाषा
+ doorkeeper/application:
+ name: नाम
+ redirect_uri: रिडाइरेक्ट युआरआइहरू
+ confidential: गोप्य एप्लिकेसन?
+ scopes: अनुमतिहरू
friend:
user: प्रयोगकर्ता
friend: साथी
longitude: देशान्तर
public: सार्वजनिक
description: वर्णन
- gpx_file: 'जिपिएक्स फाइल उर्ध्वभरण गर्नुहाेस्:'
- visibility: 'दृश्यक्षमता:'
- tagstring: ट्यागहरूः
+ gpx_file: GPX फाइल अपलोड गर्नुहोस्
+ visibility: प्रदर्शन
+ tagstring: ट्यागहरू
message:
sender: पठाउने
title: विषय
body: बडी
recipient: प्रापक
redaction:
+ title: शीर्षक
description: वर्णन
+ report:
+ category: तपाईँको रिपोर्टको कारण छान्नुहोस्
user:
email: इमेल
active: सक्रिय
display_name: देखाउने नाम
description: वर्णन
- home_lat: 'देशान्तर:'
- home_lon: 'अक्षांश:'
+ home_lat: अक्षांश
+ home_lon: देशान्तर
languages: भाषाहरू
pass_crypt: पासवर्ड
help:
remote:
name: रिमोट कन्ट्रोल
description: रिमोट कन्ट्रोल (JOSM वा Merkaartor)
+ auth:
+ providers:
+ none: कुनै पनि होइन
api:
notes:
+ comment:
+ commented_at_by_html: '%{user} द्वारा %{when} पहिले अद्यावधिक गरिएको'
entry:
comment: टिप्पणी
+ account:
+ deletions:
+ show:
+ confirm_delete: निश्चित हुनुहुन्छ ?
+ cancel: रद्द गर्नुहोस्
accounts:
edit:
- my settings: मेरो अनुकुलताहरु
+ title: खाता सम्पादन गर्नुहोस्
+ my settings: मेरो सेटिङहरू
+ current email address: हालको इमेल ठेगाना
+ external auth: वाह्य अथेन्टिकेसन
openid:
+ link: https://wiki.openstreetmap.org/wiki/OpenID
link text: यो के हो ?
public editing:
heading: सार्वजनिक सम्पादन
+ enabled: सक्रिय। Not anonymous and can edit data.
enabled link text: यो के हो ?
disabled link text: म किन सम्पादन गर्न सक्दिन?
contributor terms:
+ heading: योगदानकर्ता सर्तहरू
+ agreed: तपाईँले नयाँ योगदानकर्ता सर्तहरू स्वीकार गर्नुभएको छ।
+ not yet agreed: तपाईँले नयाँ योगदानकर्ता सर्तहरू स्वीकार गर्नुभएको छैन।
link text: यो के हो ?
save changes button: परिवर्तनहरू संग्रह गर्नुहोस्
go_public:
- heading: 'सार्वजनिक सम्पादन:'
+ heading: सार्वजनिक सम्पादन
update:
success_confirm_needed: प्रयोगकर्ताको जानकारीहरू सफलतापूर्वक अध्यावधिक गरियो।
Check your email for a note to confirm your new email address.
feature_warning: '%{num_features}वटा सुविधाहरु लोड हुँदै छन्, जसले गर्दा तपाईंको
ब्राउजर सुस्त वा अनुत्तरदायी बनाउन सक्छ । तपाईं साँच्चै यो जानकारी हेर्न चाहनुहुन्छ
?'
- load_data: डेटा लोडगर्ने
+ load_data: डेटा लोड गर्नुहोस्
loading: खुल्दै छ…
tag_details:
tags: ट्यागहरू
title: परिवर्नहरू
title_user: '%{user}द्वरा गरिएका परिवर्तनहरू'
title_friend: तपाईको मित्रहरूद्वारा गरिएका परिवर्तनहरू
- title_nearby: तपाà¤\88à¤\82 नजिक हुनुभएका प्रयोगकर्ताहरूद्वारा गरिएका परिवर्तनहरू
+ title_nearby: तपाà¤\88à¤\81à¤\95à¥\8b नजिक हुनुभएका प्रयोगकर्ताहरूद्वारा गरिएका परिवर्तनहरू
empty: कुनै पनि परिवर्तनहरू भेटिएनन्।
empty_area: यो क्षेत्रमा कुनै परिवर्तनहरू छैनन्।
empty_user: यस प्रयोगकर्ताद्वारा कुनै परिवर्तनहरू गरिएका छैनन्।
created: सृजना गरिएको
closed: समापन भएको
belongs_to: रचयिता
+ heading:
+ title: 'परिवर्तनहरू: %{id}'
+ no_such_entry:
+ heading: '%{id} आइडी भएको कुनै अभिलेख भेटिएन'
show:
title: 'परिवर्तनहरू: %{id}'
discussion: छलफल
relations: सम्बन्धहरू (%{count})
relations_paginated: सम्बन्धहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
timeout:
- sorry: माफ à¤\97रà¥\8dनà¥\81हà¥\8bला, तपाà¤\88à¤\82ले खोज्नुभएको परिवर्तनहरूको सूची प्राप्त गर्न निकै
+ sorry: माफ à¤\97रà¥\8dनà¥\81हà¥\8bला, तपाà¤\88à¤\81ले खोज्नुभएको परिवर्तनहरूको सूची प्राप्त गर्न निकै
समय लाग्यो ।
changeset_comments:
comment:
- comment: ' %{author}द्वारा #%{changeset_id}मा नयाँ टिप्पणी'
- commented_at_by_html: ' %{user} द्वारा %{when} पहिले अद्यावधिक गरिएको'
+ comment: '%{author}द्वारा #%{changeset_id}मा नयाँ टिप्पणी'
+ commented_at_by_html: '%{user} द्वारा %{when} पहिले अद्यावधिक गरिएको'
+ comments:
+ comment: '%{author}द्वारा #%{changeset_id}मा नयाँ टिप्पणी'
index:
title_all: OpenStreetMap परिवर्वतन सूची छलफल
title_particular: 'OpenStreetMap परिवर्तन सूची #%{changeset_id} छलफल'
friend: साथी
show:
my friends: मेरा साथीहरू
- no friends: तपाईं कुनै साथीहरूलाई जोड्नु भएको छैन
+ no friends: तपाईँ कुनै साथीहरूलाई थप्नु भएको छैन
+ nearby users: अन्य नजिकका प्रयोगकर्ताहरू
diary_entries:
new:
title: नयाँ दैनिकी प्रविष्टी
user_title: '%{user}को डायरी'
in_language_title: '%{language} भाषामा भएका दैनिकीहरू'
new: नयाँ दैनिकी
- new_title: तपाईंको डायरीमा नयाँ दैनिकी सिर्जना गर्नुहोस्
+ new_title: तपाईँको डायरीमा नयाँ दैनिकी सिर्जना गर्नुहोस्
+ my_diary: मेरो डायरी
no_entries: कुनै पनि अभिलेखहरू भेटिएनन्
recent_entries: हालैका दैनिकीहरू
older_entries: पुराना अभिलेखहरू
newer_entries: नयाँ अभिलेखहरू
edit:
- title: दà¥\88निà¤\95à¥\80 पà¥\8dरविषà¥\8dठà¥\80 समà¥\8dपादन à¤\97रà¥\8dनà¥\87
- marker_text: दà¥\88निà¤\95ी प्रविष्ठी स्थान
+ title: डायरà¥\80 पà¥\8dरविषà¥\8dठà¥\80 समà¥\8dपादन à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
+ marker_text: डायरी प्रविष्ठी स्थान
show:
title: '%{user}को डायरी | %{title}'
user_title: '%{user}को डायरी'
+ discussion: छलफल
leave_a_comment: टिप्पणी छोड्ने
login_to_leave_a_comment_html: '%{login_link} टिप्पणी छोड्नलाई'
login: प्रवेश
edit_link: यो प्रविष्टी सम्पादन गर्ने
hide_link: यो प्रविष्टी लुकाउने
confirm: निश्चित गर्नुहोस्
- report: यà¥\8b पà¥\8dरविषà¥\8dà¤\9fà¥\80à¤\95à¥\8b à¤\89à¤\9cà¥\81रà¥\80 à¤\97रà¥\8dनà¥\87
+ report: यà¥\8b पà¥\8dरविषà¥\8dà¤\9fà¥\80à¤\95à¥\8b à¤\89à¤\9cà¥\81रà¥\80 à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
diary_comment:
comment_from_html: '%{link_user}द्वारा %{comment_created_at}मा गरिएको टिप्पणी'
hide_link: यो टिप्पणी लुकाउनुहोस्
confirm: निश्चित गर्नुहोस्
location:
location: 'स्थान:'
- view: अवलोकन गर्ने
- edit: सम्पादन
+ view: अवलोकन गर्नुहोस्
+ edit: सम्पादन गर्नुहोस्
+ coordinates: '%{latitude}; %{longitude}'
feed:
user:
- title: '%{user}को लागि ओपनस्ट्रीटम्याप दैनिकी'
- description: '%{user}को लागि हालैका ओपनस्ट्रीटम्याप दैनिकीहरू'
+ title: '%{user}को लागि OpenStreetMap डायरी'
+ description: '%{user}को लागि हालैका OpenStreetMap डायरी'
language:
title: '%{language_name} भाषामा OpenStreetMap दैनिकी'
- description: '%{language_name} भाषामा ओपनस्ट्रीटम्याप प्रयोगकर्ताहरूका हालैका
- दà¥\88निà¤\95ी'
+ description: '%{language_name} भाषामा OpenStreetMap प्रयोगकर्ताहरूका हालैका
+ डायरी'
all:
- title: ओपनस्ट्रीटम्याप दैनिकीहरू
- description: ओपनस्ट्रीटम्याप प्रयोगकर्ताहरूका हालैका दैनिकीहरू
+ title: OpenStreetMap डायरी प्रविष्टीहरू
+ description: OpenStreetMap प्रयोगकर्ताहरूका हालैका डायरी प्रविष्टीहरू
comments:
post: पोष्ट
when: कहिले
friendships:
make_friend:
button: साथीको रूपमा थप्नुहोस्
- success: '%{name} à¤\85ब तपाà¤\88à¤\82à¤\95à¥\8b मितà¥\8dर हुनुभएको छ!'
+ success: '%{name} à¤\85ब तपाà¤\88à¤\81à¤\95à¥\8b साथà¥\80 हुनुभएको छ!'
failed: माफ गर्नुहोला, %{name}लाई मित्रको रुपमा थप्न सकिएन।
- already_a_friend: '%{name} सँग तपाईंले पहिले नै मित्रता गरिसक्नु भएको छ ।'
+ already_a_friend: '%{name} सँग तपाईँले पहिले साथी हुनुहुन्छ।'
+ limit_exceeded: तपाईँले हालसालै थुप्रै प्रयोगकर्ताहरूलाई साथी बनाउनु भएको छ।
+ Please wait a while before trying to friend any more.
remove_friend:
button: साथीबाट हटाउने
geocoder:
viaduct: भियाडक्ट
"yes": पुल
building:
+ garages: ग्यारेजहरू
+ hangar: ह्याङ्गर
+ house: घर
+ public: सार्वजनिक भवन
"yes": भवन
craft:
brewery: ब्रुएरी
"yes": ऐतिहासिक स्थल
landuse:
basin: बेसिन
+ cemetery: अन्त्यष्टी स्थल
commercial: व्यवसायिक क्षेत्र
conservation: संरक्षण
construction: निर्माण
administrative: प्रबन्धकीय स्थल
architect: आर्किटेक्ट
company: कम्पनी
+ estate_agent: घरजग्गा एजेन्ट
government: सरकारी कार्यालय
insurance: बीमा कार्यालय
it: आइटी कार्यालय
railway:
abandoned: परित्यक्त रेलमार्ग
junction: रेलमार्ग जङ्सन
+ subway: सबवे
shop:
bakery: बेकरी
beauty: सौन्दर्य पसल
sports: खेलकुद सामग्री पसल
tailor: सुचीकार
toys: खेलौना पसल
+ travel_agency: ट्राभल एजेन्सी
video: भिडियो पसल
"yes": पसल
tourism:
"yes": जलमार्ग
admin_levels:
level2: राष्ट्रिय सीमा
+ level3: क्षेत्र सीमा
level4: राज्य सीमा
level5: क्षेत्र सीमा
level6: इलाका सीमा
reports:
new:
categories:
+ diary_entry:
+ other_label: अन्य
+ diary_comment:
+ other_label: अन्य
+ user:
+ other_label: अन्य
note:
other_label: अन्य
layouts:
+ project_name:
+ title: OpenStreetMap
+ h1: OpenStreetMap
logo:
alt_text: OpenStreetMap लोगो
logout: निर्गमन
log_in: प्रवेश गर्नुहोस्
sign_up: खाता खाेल्नुहाेस्
start_mapping: म्यापिङ गर्न सुरु गर्नुहोस्
- edit: सम्पादन
+ edit: सम्पादन गर्नुहोस्
history: इतिहास
export: निर्यात गर्नुहोस्
data: डेटा
friendship_notification:
hi: नमस्ते %{to_user},
subject: '[OpenStreetMap] %{user} ले तपाईँलाई मित्रको रूपमा थप्नु भयो'
+ gpx_failure:
+ hi: नमस्ते %{to_user},
+ gpx_success:
+ hi: नमस्ते %{to_user},
signup_confirm:
greeting: नमस्ते!
email_confirm:
title: पासवर्ड बिर्सियो
heading: पासवर्ड बिर्सिनुभयो ?
email address: 'इमेल ठेगाना:'
- new password button: पà¥\8dरवà¥\87स शबà¥\8dद परिवरà¥\8dतन à¤\97रà¥\8dनà¥\87
+ new password button: पासवरà¥\8dड परिवरà¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
edit:
- title: पà¥\8dरवà¥\87स शबà¥\8dद परिवरà¥\8dतन à¤\97रà¥\8dनà¥\87
- heading: '%{user}à¤\95à¥\8b लाà¤\97ि पà¥\8dरवà¥\87स शबà¥\8dद परिवरà¥\8dतन à¤\97रà¥\8dनà¥\87'
- reset: नयाà¤\81 पà¥\8dरवà¥\87शशवà¥\8dद
+ title: पासवरà¥\8dड परिवरà¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
+ heading: '%{user}à¤\95à¥\8b लाà¤\97ि पासवरà¥\8dड परिवरà¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d'
+ reset: पासवरà¥\8dड रिसà¥\87à¤\9f à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
update:
- flash changed: तपाईंको प्रवेश शब्द परिवर्तन गरिएको छ।
+ flash changed: तपाईँको पासवर्ड परिवर्तन गरिएको छ।
+ preferences:
+ edit:
+ cancel: रद्द गर्नुहोस्
profiles:
edit:
- image: 'चित्र:'
+ cancel: रद्द गर्नुहोस्
+ image: तस्विर
home location: 'गृह स्थान:'
- no home location: तपाईंले आफ्नो गृहस्थान प्रविष्ठ गर्नुभएको छैन।
+ no home location: तपाईँले आफ्नो गृहस्थान प्रविष्ठ गर्नुभएको छैन।
+ show: देखाउनुहोस्
+ delete: हटाउनुहोस्
sessions:
new:
title: प्रवेश
tab_title: प्रवेश
- password: 'पासवर्ड:'
+ password: पासवर्ड
login_button: प्रवेश
destroy:
title: लगआउट
logout_button: निर्गमन
+ shared:
+ markdown_help:
+ link: कडी
+ image: तस्विर
+ richtext_field:
+ edit: सम्पादन गर्नुहोस्
site:
about:
next: अर्को
legal_babble:
more_title_html: थप जान्नको लागि
contributors_title_html: हाम्रा योगदान कर्ताहरू
+ contributors_fr_france: फ्रान्स
index:
permalink: स्थायी लिङ्क
shortlink: छोटो लिङ्क
subway: सबवे
cable_car: केबल कार
chair_lift: कुर्सी लिफ्ट
+ taxiway: ट्याक्सीको बाटो
+ city: शहर
+ vineyard: अङ्गुर-बगैँचा
forest: वन
wood: कुञ्ज
+ farmland: खेतीयोग्य जमिन
+ grass: घाँस
+ meadow: घाँसेमैदान
+ sand: बालुवा
golf: गल्फ कोर्स
park: उद्यान
resident: आवासीय क्षेत्र
lake: ताल
- reservoir: मुहान
+ reservoir: जलाशय
+ glacier: हिमनदी
+ wetland: सिमसार
farm: खेती
cemetery: अन्त्यष्टी स्थल
+ beach: समुद्र किनारा
school: विद्यालय
university: विश्वविद्यालय
+ hospital: अस्पताल
summit: शिखर
peak: शिखर
bicycle_shop: साइकल पसल
bicycle_parking: साकल पार्किङ
toilets: शौचालय
welcome:
- title: स्वागतम्!
+ title: स्वागत!
whats_on_the_map:
title: म्यापमा के छ
+ basic_terms:
+ node: नोड
+ way: बाटो
rules:
title: नियमहरू !
+ start_mapping: म्यापिङ गर्न सुरु गर्नुहोस्
traces:
new:
+ upload_trace: GPS Trace अपलोड गर्ने
visibility_help: यसको मतलाब के हो ?
help: सहायता
create:
upload_trace: GPS Trace अपलोड गर्ने
edit:
+ cancel: रद्द गर्नुहोस्
title: ट्रेस सम्पादन गर्दै %{name}
heading: ट्रेस सम्पादन गर्दै %{name}
visibility_help: यसको मतलब के हो ?
uploaded: 'अपलोड गरिएको:'
points: 'विन्दुहरू:'
start_coordinates: 'सुरूको निर्देशङ्क:'
+ coordinates_html: '%{latitude}; %{longitude}'
map: नक्सा
edit: सम्पादन
owner: 'मालिक:'
public: सार्वजनिक
private: निजी
index:
- public_traces: सारवजनिक GPS ट्रेसहरु
- public_traces_from: '%{user}बाट सार्वकनिक GPS ट्रेसहरु'
+ public_traces: सार्वजनिक GPS ट्रेसहरू
+ my_gps_traces: मेरो जिपिएस ट्रेसहरू
+ public_traces_from: '%{user}बाट सार्वजनिक GPS ट्रेसहरू'
tagged_with: ' %{tags}हरूद्वारा ट्याग गरिएको'
+ my_traces: मेरा ट्रेसहरू
destroy:
scheduled_for_deletion: मेट्नको लागि तालिकावद्ध गरिएको ट्रेस
make_public:
show:
confirm: निश्चित हुनुहुन्छ ?
oauth2_applications:
+ index:
+ name: नाम
+ permissions: अनुमतिहरू
+ application:
+ edit: सम्पादन गर्नुहोस्
+ delete: हटाउनुहोस्
show:
+ edit: सम्पादन गर्नुहोस्
delete: मेट्ने
+ permissions: अनुमतिहरू
+ redirect_uris: रिडाइरेक्ट युआरआइहरू
+ oauth2_authorized_applications:
+ index:
+ permissions: अनुमतिहरू
users:
new:
title: खाता खाेल्नुहाेस्
my comments: मेरा टिप्पणीहरू
edits: सम्पादनहरू
traces: ट्रेसहरू
+ notes: म्याप टिप्पणीहरू
+ remove as friend: साथीबाट हटाउने
add as friend: साथी जोड्नुहोस्
status: 'स्थिति:'
role:
comments: टिप्पणी
confirm: निश्चित गर्नुहोस्
go_public:
- flash success: तपाà¤\88à¤\82à¤\95ा सबà¥\88 समà¥\8dपादनहरà¥\82 सारà¥\8dवाà¤\9cनिà¤\95 à¤\9bनà¥\8d , तपाà¤\88à¤\82 अब सम्पादन लायक
+ flash success: तपाà¤\88à¤\81à¤\95ा सबà¥\88 समà¥\8dपादनहरà¥\82 सारà¥\8dवाà¤\9cनिà¤\95 à¤\9bनà¥\8d , तपाà¤\88à¤\81 अब सम्पादन लायक
हुनु भयो ।
index:
title: प्रयोगकर्ताहरू
revoke:
title: भूमिका फिर्ता निश्चित गर्ने
heading: भूमिका फिर्ता निश्चित गर्ने
- are_you_sure: तपाà¤\88à¤\82 भूमिका `%{role}' , `%{name} प्रोगकर्ताबाट फिर्ता लिने कुरामा
+ are_you_sure: तपाà¤\88à¤\81 भूमिका `%{role}' , `%{name} प्रोगकर्ताबाट फिर्ता लिने कुरामा
निश्चित हुनुहुन्छ'?
confirm: निश्चित गर्नुहोस्
fail: भूमिका `%{role}' ,`%{name}'बाट फिर्ता लिन सकिएन । प्रोगकर्ता नाम र भूमिका
user_blocks:
show:
created: सृजना गरिएको
- status: वस्तुस्थिति
+ status: 'स्थिति:'
show: देखाउनुहोस्
- edit: सम्पादन
+ edit: सम्पादन गर्नुहोस्
confirm: निश्चित हुनुहुन्छ ?
block:
show: देखाउनुहोस्
- edit: सम्पादन
+ edit: सम्पादन गर्नुहोस्
blocks:
creator_name: सर्जक
status: वस्तुस्थिति
+ user_mutes:
+ index:
+ table:
+ tbody:
+ send_message: सान्देस पठाउ
notes:
index:
id: आईडी
share:
title: आदान-प्रदान गर्नुहोस्
cancel: रद्द गर्नुहोस्
- image: à¤\9bवि
+ image: तसà¥\8dविर
long_link: कडी
embed: एचटीएमएल
format: 'ढाँचा:'
layers:
header: म्याप लेयरहरू
notes: म्याप टिप्पणीहरू
+ gps: सार्वजनिक GPS ट्रेसहरू
+ make_a_donation: दान गर्नुहोस्
changesets:
show:
comment: टिप्पणी
# Author: Aalam
# Author: Babanwalia
# Author: Bgo eiu
+# Author: Cabal
# Author: Jimidar
# Author: Kuldeepburjbhalaike
# Author: Satnam S Virdi
helpers:
submit:
diary_comment:
- create: ਸਾà¨\82à¨à©\8b
+ create: à¨\9fਿੱਪਣà©\80
diary_entry:
- create: à¨\9bਾਪੋ
+ create: ਸਾà¨\82à¨ੋ
update: ਅੱਪਡੇਟ ਕਰੋ
issue_comment:
create: ਟਿੱਪਣੀ ਕਰੋ
relation: ਸਬੰਧ
relation_member: ਸਬੰਧ ਮੈਂਬਰ
relation_tag: ਸਬੰਧ ਟੈਗ
- report: ਰਿਪà©\8bਰà¨\9f à¨\95ਰà©\8b
+ report: à¨\87ਤਲਾਹ ਦਿà¨\93
session: ਸੈਸ਼ਨ
trace: ਟਰੇਸ
tracepoint: ਟਰੇਸ ਪੁਆਇੰਟ
way_tag: ਰਾਹ ਟੈਗ
attributes:
client_application:
+ name: ਨਾਮ (ਲੋੜੀਂਦਾ)
+ url: ਮੁੱਢਲਾ Application URL (ਲੋੜੀਂਦਾ ਹੈ)
support_url: ਮਦਦ URL
+ allow_read_prefs: ਉਹਨਾਂ ਦੀਆਂ ਵਰਤੋਂਕਾਰ ਤਰਜੀਹਾਂ ਨੂੰ ਪੜ੍ਹੋ
+ allow_write_prefs: ਉਹਨਾਂ ਦੀਆਂ ਵਰਤੋਂਕਾਰ ਤਰਜੀਹਾਂ ਨੂੰ ਸੋਧੋ
+ allow_write_api: ਨਕਸ਼ੇ ਨੂੰ ਸੋਧੋ
diary_comment:
body: ਮੁੱਖ ਭਾਗ
diary_entry:
language_code: ਬੋਲੀ
doorkeeper/application:
name: ਨਾਂ
+ scopes: ਇਜਾਜ਼ਤਾਂ
friend:
user: ਵਰਤੋਂਕਾਰ
friend: ਦੋਸਤ
trace:
user: ਵਰਤੋਂਕਾਰ
- visible: ਵਿਖਣਯੋਗ
+ visible: ਵਿਖਣ-ਯੋਗ
name: ਨਾਂ
size: ਅਕਾਰ
latitude: ਅਕਸ਼ਾਂਸ਼
body: ਮੁੱਖ ਭਾਗ
recipient: ਪ੍ਰਾਪਤਕਰਤਾ
redaction:
+ title: ਸਿਰਲੇਖ
description: ਵੇਰਵਾ
+ report:
+ category: ਆਪਣੀ ਇਤਲਾਹ ਦਾ ਕਾਰਨ ਚੁਣੋ
+ details: ਕਿਰਪਾ ਕਰਕੇ ਸਮੱਸਿਆ ਬਾਰੇ ਕੁਝ ਹੋਰ ਵੇਰਵੇ ਪ੍ਰਦਾਨ ਕਰੋ (ਲੋੜੀਂਦਾ)
user:
email: ਈਮੇਲ
- new_email: 'ਨਵਾਂ ਈ-ਮੇਲ ਪਤਾ:'
+ new_email: 'ਨਵਾਂ ਈਮੇਲ ਪਤਾ:'
active: ਸਰਗਰਮ
display_name: ਵਿਖਾਉਣ ਨਾਂ
description: ਵੇਰਵਾ
home_lat: ਅਕਸ਼ਾਂਸ਼
home_lon: 'ਰੇਖਾਂਸ਼:'
- languages: ਬੋਲੀਆਂ
+ languages: ਤਰਜੀਹੀ ਬੋਲੀਆਂ
+ preferred_editor: ਤਰਜੀਹੀ ਸੰਪਾਦਕ
pass_crypt: ਪਛਾਣ-ਸ਼ਬਦ
+ help:
+ user:
+ new_email: (ਜਨਤਕ ਤੌਰ 'ਤੇ ਕਦੇ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ)
datetime:
distance_in_words_ago:
+ about_x_hours:
+ one: ਲਗਭਗ %{count} ਘੰਟਾ ਪਹਿਲਾਂ
+ other: ਲਗਭਗ %{count} ਘੰਟੇ ਪਹਿਲਾਂ
+ about_x_months:
+ one: about %{count} ਮਹੀਨਾ ਪਹਿਲਾਂ
+ other: ਲਗਭਗ %{count} ਮਹੀਨੇ ਪਹਿਲਾਂ
+ about_x_years:
+ one: about %{count} ਸਾਲ ਪਹਿਲਾਂ
+ other: ਲਗਭਗ %{count} ਸਾਲ ਪਹਿਲਾਂ
+ almost_x_years:
+ one: ਲਗਭਗ %{count} ਸਾਲ ਪਹਿਲਾਂ
+ other: ਲਗਭਗ %{count} ਸਾਲ ਪਹਿਲਾਂ
half_a_minute: ਅੱਧਾ ਮਿੰਟ ਪਹਿਲਾਂ
+ less_than_x_seconds:
+ one: '%{count} ਸਕਿੰਟ ਤੋਂ ਘੱਟ'
+ other: '%{count} ਸਕਿੰਟ ਪਹਿਲਾਂ'
+ less_than_x_minutes:
+ one: '%{count} ਮਿੰਟ ਤੋਂ ਘੱਟ ਪਹਿਲਾਂ'
+ other: '%{count} ਮਿੰਟ ਪਹਿਲਾਂ'
+ over_x_years:
+ one: ਲਗਭਗ %{count} ਸਾਲ ਪਹਿਲਾਂ
+ other: ਲਗਭਗ %{count} ਸਾਲ ਪਹਿਲਾਂ
+ x_seconds:
+ one: '%{count} ਸਕਿੰਟ ਪਹਿਲਾਂ'
+ other: '%{count} ਸਕਿੰਟ ਪਹਿਲਾਂ'
+ x_minutes:
+ one: '%{count} ਮਿੰਟ ਪਹਿਲਾਂ'
+ other: '%{count} ਮਿੰਟ ਪਹਿਲਾਂ'
+ x_days:
+ one: '%{count} ਦਿਨ ਪਹਿਲਾਂ'
+ other: '%{count} ਦਿਨ ਪਹਿਲਾਂ'
+ x_months:
+ one: '%{count} ਮਹੀਨਾ ਪਹਿਲਾਂ'
+ other: '%{count} ਮਹੀਨੇ ਪਹਿਲਾਂ'
+ x_years:
+ one: '%{count} ਸਾਲ ਪਹਿਲਾਂ'
+ other: '%{count} ਸਾਲ ਪਹਿਲਾਂ'
editor:
default: ਮੂਲ (ਮੌਜੂਦਾ %{name})
id:
none: ਕੋਈ ਨਹੀਂ
google: ਗੂਗਲ
facebook: ਫੇਸਬੁੱਕ
- microsoft: ਵਿੰਡà©\8bà¨\9c਼ ਲਾà¨\88ਵ
+ microsoft: ਮਾà¨\88à¨\95à©\8dਰà©\8bਸਾਫà¨\9f
github: ਗਿੱਟਹੱਬ
wikipedia: ਵਿਕੀਪੀਡੀਆ
api:
notes:
+ comment:
+ opened_at_html: '%{when} ਬਣਾਇਆ ਗਿਆ'
+ opened_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} ਦੁਆਰਾ ਮੁੜ ਸਰਗਰਮ ਕੀਤਾ'
entry:
- comment: ਟਿੱਪਣੀ ਕਰੋ
+ comment: ਟਿੱਪਣੀ
full: ਪੂਰੀ ਟਿੱਪਣੀ
+ account:
+ deletions:
+ show:
+ title: ਮੇਰਾ ਖਾਤਾ ਮਿਟਾਓ
+ warning: ਚੇਤਾਵਨੀ! ਖਾਤਾ ਮਿਟਾਉਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਅੰਤਿਮ ਹੈ, ਅਤੇ ਇਸਨੂੰ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ
+ ਜਾ ਸਕਦਾ ਹੈ।
+ delete_account: ਖਾਤਾ ਮਿਟਾਓ
+ delete_introduction: 'ਤੁਸੀਂ ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣੇ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ
+ ਖਾਤੇ ਨੂੰ ਮਿਟਾ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਹੇਠ ਦਿੱਤੇ ਵੇਰਵਿਆਂ ਵੱਲ ਧਿਆਨ ਦਿਓ:'
+ delete_profile: ਤੁਹਾਡੇ ਪ੍ਰੋਫਾਈਲ ਦੀ ਜਾਣਕਾਰੀ, ਜਿਸ ਵਿੱਚ ਤੁਹਾਡਾ ਅਵਤਾਰ, ਵੇਰਵਾ ਅਤੇ
+ ਘਰ ਦੇ ਟਿਕਾਣੇ ਸ਼ਾਮਲ ਹੈ, ਨੂੰ ਮਿਦਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।
+ retain_caveats: 'ਹਾਲਾਂਕਿ, ਤੁਹਾਡੇ ਬਾਰੇ ਕੁਝ ਜਾਣਕਾਰੀ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ''ਤੇ ਬਰਕਰਾਰ
+ ਰੱਖੀ ਜਾਵੇਗੀ, ਭਾਵੇਂ ਤੁਹਾਡਾ ਖਾਤਾ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ:'
+ retain_edits: ਨਕਸ਼ੇ ਦੇ ਭੰਡਾਰ ਵਿੱਚ ਤੁਹਾਡੇ ਸੰਪਾਦਨ, ਜੇ ਕੋਈ ਹਨ, ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਿਆ
+ ਜਾਵੇਗਾ।
+ retain_email: ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਬਰਕਰਾਰ ਰੱਖਿਆ ਜਾਵੇਗਾ।
+ recent_editing_html: ਜਿਵੇਂ ਕਿ ਤੁਸੀਂ ਹਾਲ ਹੀ ਵਿੱਚ ਸੰਪਾਦਿਤ ਕੀਤਾ ਹੈ ਤੁਹਾਡੇ ਖਾਤੇ
+ ਨੂੰ ਵਰਤਮਾਨ ਵਿੱਚ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ। %{time} ਵਿੱਚ ਮਿਟਾਉਣਾ ਸੰਭਵ ਹੋਵੇਗਾ।
+ confirm_delete: ਕੀ ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ?
+ cancel: ਰੱਦ ਕਰੋ
accounts:
edit:
title: ਖਾਤਾ ਸੋਧੋ
enabled link text: ਇਹ ਕੀ ਹੈ?
disabled link text: ਮੈਂ ਸੋਧ ਕਿਉਂ ਨਹੀਂ ਕਰ ਸਕਦਾ?
contributor terms:
- heading: 'ਯੋਗਦਾਨੀ ਦੀਆਂ ਸ਼ਰਤਾਂ:'
+ heading: 'ਯੋਗਦਾਨ ਦੀਆਂ ਸ਼ਰਤਾਂ:'
agreed: ਤੁਸੀਂ ਯੋਗਦਾਨੀ ਦੀਆਂ ਨਵੀਆਂ ਸ਼ਰਤਾਂ ਨਾਲ਼ ਸਹਿਮਤੀ ਜਤਾਈ ਹੈ।
not yet agreed: ਤੁਸੀਂ ਯੋਗਦਾਨੀ ਦੀਆਂ ਨਵੀਆਂ ਸ਼ਰਤਾਂ ਨਾਲ਼ ਸਹਿਮਤੀ ਨਹੀਂ ਜਤਾਈ।
link text: ਇਹ ਕੀ ਹੈ?
save changes button: ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ
+ delete_account: ਖਾਤਾ ਮਿਟਾਓ
go_public:
+ heading: ਜਨਤਕ ਸੁਧਾਈ
+ currently_not_public: ਵਰਤਮਾਨ ਵਿੱਚ ਤੁਹਾਡੇ ਸੰਪਾਦਨ ਅਗਿਆਤ ਹਨ ਅਤੇ ਲੋਕ ਤੁਹਾਨੂੰ ਸੁਨੇਹੇ
+ ਨਹੀਂ ਭੇਜ ਸਕਦੇ ਜਾਂ ਤੁਹਾਡਾ ਟਿਕਾਣਾ ਨਹੀਂ ਦੇਖ ਸਕਦੇ। ਇਹ ਦਿਖਾਉਣ ਲਈ ਕਿ ਤੁਸੀਂ ਕੀ ਸੰਪਾਦਿਤ
+ ਕੀਤਾ ਹੈ ਅਤੇ ਲੋਕਾਂ ਨੂੰ ਵੈੱਬਸਾਈਟ ਰਾਹੀਂ ਤੁਹਾਡੇ ਨਾਲ ਸੰਪਰਕ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੱਤੀ
+ ਹੈ, ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।
+ find_out_why: ਪਤਾ ਕਰੋ ਕਿਉਂ
+ email_not_revealed: ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਜਨਤਕ ਹੋਣ ਨਾਲ ਪ੍ਰਗਟ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।
+ not_reversible: ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਵਾਪਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਸਾਰੇ ਨਵੇਂ ਵਰਤੋਂਕਾਰ
+ ਹੁਣ ਮੂਲ ਰੂਪ ਵਿੱਚ ਜਨਤਕ ਹਨ।
make_edits_public_button: ਮੇਰੀਆਂ ਸਾਰੀਆਂ ਸੋਧਾਂ ਜਨਤਕ ਕਰੋ
+ destroy:
+ success: ਖਾਤਾ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
browse:
+ deleted_ago_by_html: '%{time_ago} ਨੂੰ %{user} ਦੁਆਰਾ ਮਿਟਾਇਆ ਗਿਆ'
+ edited_ago_by_html: '%{time_ago} ਨੂੰ %{user} ਦੁਆਰਾ ਸੋਧਿਆ ਗਿਆ'
version: ਵਰਜਨ
in_changeset: ਤਬਦੀਲੀਆਂ
anonymous: ਬੇਪਛਾਣ
no_comment: (ਕੋਈ ਟਿੱਪਣੀ ਨਹੀਂ)
part_of: ਦਾ ਹਿੱਸਾ
+ part_of_relations:
+ one: '%{count} ਸਬੰਧ'
+ other: '%{count} ਸਬੰਧ'
download_xml: XML ਲਾਹੋ
view_history: ਅਤੀਤ ਵੇਖੋ
view_details: ਵੇਰਵੇ ਵੇਖੋ
- location: 'ਸਥਿਤà©\80:'
+ location: 'à¨\9fਿà¨\95ਾਣਾ:'
relation:
members: ਜੀਅ
relation_member:
node: ਨੋਡ
way: ਰਾਹ
relation: ਸਬੰਧ
+ containing_relation:
+ entry_html: ਸਬੰਧ %{relation_name}
+ entry_role_html: ਸਬੰਧ %{relation_name} (%{relation_role} ਵਜੋਂ)
not_found:
+ title: ਨਹੀਂ ਲੱਭਿਆ
+ sorry: 'ਮਾਫ਼ ਕਰਨਾ, %{type} #%{id} ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।'
type:
node: ਨੋਡ
way: ਰਾਹ
way: ਰਾਹ
relation: ਸਬੰਧ
start_rjs:
- load_data: ਡਾà¨\9fਾ ਲà©\8bਡ à¨\95ਰੋ
- loading: ਲà©\8bਡ ਹà©\8b ਰਿਹਾ ਹà©\88â\80¦
+ load_data: ਡà©\87à¨\9fਾ ਲੱਦੋ
+ loading: ਲੱਦ ਰਿਹਾ ਹà©\88...
tag_details:
tags: ਟੈਗ
wikipedia_link: '%{page} ਲੇਖ ਵਿਕਿਪੀਡਿਆ ਉੱਤੇ'
telephone_link: '%{phone_number} ਨੂੰ ਫੋਨ ਕਰੋ'
+ colour_preview: ਰੰਗ %{colour_value} ਝਲਕ
+ email_link: ਈਮੇਲ %{email}
+ query:
+ title: ਪੁੱਛਗਿੱਛ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ
+ introduction: ਨੇੜਲੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲੱਭਣ ਲਈ ਨਕਸ਼ੇ ਉੱਤੇ ਕਲਿੱਕ ਕਰੋ।
+ nearby: ਨੇੜਲੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ
+ enclosing: ਨੱਥੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ
changesets:
changeset_paging_nav:
- showing_page: ਵਰà¨\95ਾ %{page}
+ showing_page: ਸਫ਼ਾ %{page}
next: ਅਗਲਾ »
previous: « ਪਿਛਲਾ
changeset:
id: ਸ਼ਨਾਖ਼ਤ
user: ਵਰਤੋਂਕਾਰ
comment: ਟਿੱਪਣੀ
- area: à¨\87ਲਾà¨\95ਾ
+ area: à¨\96à©\87ਤਰ
index:
title: ਤਬਦੀਲੀਆਂ
- load_more: ਹà©\8bਰ ਲà©\8bਡ à¨\95ਰੋ
+ load_more: ਹà©\8bਰ ਪà©\9cà©\8dਹੋ
feed:
title: ਤਬਦੀਲੀ ਲੜੀ %{id}
title_comment: ਤਬਦੀਲੀ ਲੜੀ %{id} - %{comment}
belongs_to: ਲੇਖਕ
show:
title: 'ਤਬਦੀਲੀ ਲੜੀ: %{id}'
- discussion: ਚਰਚਾ
+ 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: ਚਰਚਾ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਲਈ ਦਾਖ਼ਲ ਹੋਵੋ
+ comment_by_html: '%{user} %{time_ago} ਤੋਂ ਟਿੱਪਣੀ'
+ hidden_comment_by_html: '%{user} %{time_ago} ਤੋਂ ਲੁਕਵੀਂ ਟਿੱਪਣੀ'
changesetxml: ਤਬਦੀਲੀ ਲੜੀ XML
dashboards:
contact:
km away: '%{count}ਕਿ.ਮੀ. ਪਰ੍ਹਾਂ'
m away: '%{count}ਮੀਟਰ ਪਰ੍ਹਾਂ'
- latest_edit_html: 'à¨\86à¨\96਼ਰà©\80 ਸà©\8bਧ %{ago}:'
+ latest_edit_html: 'ਤਾà¨\9c਼à©\87 ਸà©\8bਧ (%{ago}):'
popup:
your location: ਤੁਹਾਡੀ ਸਥਿਤੀ
friend: ਦੋਸਤ
show:
+ my friends: ਮੇਰੇ ਦੋਸਤ
no friends: ਤੁਸੀਂ ਅਜੇ ਕੋਈ ਮਿੱਤਰ ਨਹੀਂ ਜੋੜਿਆ।
nearby users: ਨੇੜੇ-ਤੇੜੇ ਦੇ ਹੋਰ ਵਰਤੋਂਕਾਰ
diary_entries:
form:
- location: 'ਸਥਿਤੀ:'
+ location: ਟਿਕਾਣਾ
use_map_link: ਨਕਸ਼ਾ ਵਰਤੋ
show:
+ discussion: ਗੱਲ-ਬਾਤ
leave_a_comment: ਕੋਈ ਟਿੱਪਣੀ ਛੱਡੋ
login_to_leave_a_comment_html: ਟਿੱਪਣੀ ਛੱਡਣ ਵਾਸਤੇ %{login_link}
login: ਦਾਖ਼ਲ ਹੋਵੋ
diary_entry:
comment_link: ਇਸ ਇੰਦਰਾਜ 'ਤੇ ਟਿੱਪਣੀ ਕਰੋ
reply_link: ਇਸ ਇੰਦਰਾਜ ਦਾ ਜੁਆਬ ਦਿਉ
+ no_comments: ਕੋਈ ਟਿੱਪਣੀਆਂ ਨਹੀਂ
edit_link: ਇਹ ਇੰਦਰਾਜ ਸੋਧੋ
hide_link: ਇਹ ਇੰਦਰਾਜ ਲੁਕਾਉ
confirm: ਤਸਦੀਕ ਕਰੋ
hide_link: ਇਹ ਟਿੱਪਣੀ ਲੁਕਾਉ
confirm: ਤਸਦੀਕ ਕਰੋ
location:
- location: 'ਸਥਿਤà©\80:'
+ location: 'à¨\9fਿà¨\95ਾਣਾ:'
view: ਵੇਖੋ
edit: ਸੋਧੋ
comments:
post: ਡਾਕ
when: ਕਦੋਂ
comment: ਟਿੱਪਣੀ
- newer_comments: ਹà©\8bਰ ਨਵà©\80à¨\86à¨\82 à¨\9fਿੱਪਣà©\80à¨\86à¨\82
- older_comments: ਹà©\8bਰ ਪà©\81ਰਾਣà©\80à¨\86à¨\82 à¨\9fਿੱਪਣà©\80à¨\86à¨\82
+ newer_comments: ਨਵੀਆਂ ਟਿੱਪਣੀਆਂ
+ older_comments: ਪੁਰਾਣੀਆਂ ਟਿੱਪਣੀਆਂ
friendships:
make_friend:
heading: '%{user} ਨਾਲ਼ ਯਾਰੀ ਪਾਉਣੀ ਹੈ?'
aeroway:
aerodrome: ਏਰੋਡਰੋਮ
apron: ਐਪਰਨ
- gate: ਦਰਵਾਜ਼ਾ
+ gate: ਹਵਾà¨\88 à¨\85ੱਡà©\87 ਦਾ ਦਰਵਾà¨\9c਼ਾ
helipad: ਹੈਲੀਪੈਡ
runway: ਉਡਾਣ-ਪੱਟੀ
taxiway: ਟੈਕਸੀਵੇਅ
waste_basket: ਕੂੜਾਦਾਨ
waste_disposal: ਕੂੜੇਦਾਨ
boundary:
- administrative: ਪà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+ administrative: ਪà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
census: ਮਰਦਮਸ਼ੁਮਾਰੀ ਸਰਹੱਦ
national_park: ਕੌਮੀ ਬਾਗ਼
protected_area: ਸੁਰੱਖਿਅਤ ਖੇਤਰ
recreation_ground: ਮਨੋਰੰਜਨ ਮੈਦਾਨ
reservoir: ਸਰੋਵਰ
residential: ਰਿਹਾਇਸ਼ੀ ਇਲਾਕਾ
- retail: ਪਰਚੂਨ
+ retail: ਪਰਚੂਨ ਖੇਤਰ
village_green: ਸ਼ਾਮਲਾਤ
vineyard: ਅੰਗੂਰਾਂ ਦਾ ਬਾਗ਼
leisure:
more_results: ਹੋਰ ਨਤੀਜੇ
layouts:
logo:
- alt_text: à¨\93ਪਨਸà¨\9fਰà©\80à¨\9fਮà©\88ਪ ਲà©\8bà¨\97à©\8b
+ alt_text: à¨\96à©\81ੱਲà©\8dਹਾ-à¨\97ਲà©\80-ਨà¨\95ਸ਼ਾ ਮਾਰà¨\95ਾ
home: ਘਰੇਲੂ ਟਿਕਾਣੇ 'ਤੇ ਜਾਉ
logout: ਵਿਦਾਈ ਲਉ
log_in: ਦਾਖ਼ਲ ਹੋਵੋ
sign_up: ਭਰਤੀ ਹੋਵੋ
start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ
edit: ਸੋਧੋ
- history: à¨\85ਤà©\80ਤ
+ history: ਪà©\81ਰਾਣਾ
export: ਬਰਾਮਦ
data: ਸਮੱਗਰੀ
export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
edit_with: '%{editor} ਨਾਲ ਸੋਧੋ'
+ intro_header: ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ਉੱਤੇ ਜੀ ਆਇਆਂ ਨੂੰ
intro_2_create_account: ਇੱਕ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਉ
partners_partners: ਜੋੜੀਦਾਰ
help: ਮਦਦ
learn_more: ਹੋਰ ਜਾਣੋ
more: ਹੋਰ
user_mailer:
+ message_notification:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] %{message_title}'
+ header: '%{from_user} ਨੇ ਤੁਹਾਨੂੰ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ਰਾਹੀਂ %{subject}: ਵਿਸ਼ੇ ਨਾਲ
+ ਸੁਨੇਹਾ ਭੇਜਿਆ ਹੈ।'
+ header_html: '%{from_user} ਨੇ ਤੁਹਾਨੂੰ %{subject} ਵਿਸ਼ੇ ਦੇ ਨਾਲ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ
+ ਰਾਹੀਂ ਇੱਕ ਸੁਨੇਹਾ ਭੇਜਿਆ ਹੈ:'
+ friendship_notification:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] %{user} ਨੇ ਤੁਹਾਨੂੰ ਇੱਕ ਦੋਸਤ ਵਜੋਂ ਸ਼ਾਮਲ ਕੀਤਾ ਹੈ'
+ had_added_you: '%{user} ਨੇ ਤੁਹਾਨੂੰ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ''ਤੇ ਇੱਕ ਦੋਸਤ ਵਜੋਂ ਸ਼ਾਮਲ
+ ਕੀਤਾ ਹੈ।'
+ gpx_failure:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] GPX ਦਰਾਮਦ ਅਸਫਲਤਾ'
+ gpx_success:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] GPX ਦਰਾਮਦ ਸਫਲਤਾ'
signup_confirm:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] ਉੱਤੇ ਜੀ ਆਈਆਂ ਨੂੰ'
greeting: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਜੀ!
email_confirm:
+ subject: '[ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ] ਆਪਣੇ ਈਮੇਲ ਪਤੇ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ'
greeting: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ,
lost_password:
greeting: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ,
date: ਮਿਤੀ
message_summary:
reply_button: ਜੁਆਬ
- destroy_button: ਮਿà¨\9fਾà¨\89
+ destroy_button: ਮਿà¨\9fਾà¨\93
new:
title: ਸੁਨੇਹਾ ਘੱਲੋ
create:
unread_button: ਅਣ-ਪੜ੍ਹਿਆ ਨਿਸ਼ਾਨ ਲਾਉ
back: ਪਿੱਛੇ
sent_message_summary:
- destroy_button: ਮਿà¨\9fਾà¨\89
+ destroy_button: ਮਿà¨\9fਾà¨\93
heading:
my_inbox: ਮੇਰਾ ਇਨਬਾਕਸ
destroy:
new:
title: ਪਛਾਣ ਸ਼ਬਦ ਗੁੰਮ ਗਿਆ
heading: ਪਛਾਣ ਸ਼ਬਦ ਭੁੱਲ ਗਿਆ?
- email address: 'ਈਮੇਲ ਪਤਾ:'
+ email address: ਈਮੇਲ ਪਤਾ
new password button: ਪਛਾਣ ਸ਼ਬਦ ਮੁੜ-ਸੈੱਟ ਕਰੋ
edit:
title: ਪਛਾਣ ਸ਼ਬਦ ਮੁੜ-ਸੈੱਟ ਕਰੋ
keep image: ਮੌਜੂਦਾ ਤਸਵੀਰ ਰੱਖੋ
delete image: ਮੌਜੂਦਾ ਤਸਵੀਰ ਹਟਾਉ
replace image: ਮੌਜੂਦਾ ਤਸਵੀਰ ਵਟਾਉ
- home location: 'ਘਰ ਦੀ ਸਥਿਤੀ:'
+ home location: ਘਰ ਦਾ ਟਿਕਾਣਾ
no home location: ਤੁਸੀਂ ਆਪਣੇ ਘਰ ਦੀ ਸਥਿਤੀ ਨਹੀਂ ਦੱਸੀ ਹੈ।
sessions:
new:
login_button: ਦਾਖ਼ਲ ਹੋਵੋ
register now: ਹੁਣੇ ਰਜਿਸਟਰ ਕਰੋ
destroy:
- title: ਲà©\8cà¨\97à¨\86à¨\8aà¨\9f
- heading: à¨\93ਪਨ ਸà¨\9fਰà©\80à¨\9f ਮà©\88ਪ ਤà©\8bà¨\82 ਲà©\8cà¨\97à¨\86à¨\8aà¨\9f à¨\95ਰà©\8b
- logout_button: ਲà©\8cà¨\97à¨\86à¨\8aà¨\9f
+ title: ਬਾਹਰ à¨\86à¨\89
+ heading: à¨\96à©\81ੱਲà©\8dਹਾ-à¨\97ਲà©\80-ਨà¨\95ਸ਼ਾ ਤà©\8bà¨\82 ਬਾਹਰ à¨\86à¨\93
+ logout_button: ਬਾਹਰ à¨\86à¨\89
site:
about:
next: ਅੱਗੇ
+ heading_html: '%{copyright}ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ %{br} ਯੋਗਦਾਨੀ'
local_knowledge_title: ਸਥਾਨੀ ਗਿਆਨ
open_data_title: ਓਪਨ ਡਾਟਾ
legal_title: ਕਾਨੂੰਨੀ
mapping_link: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ
legal_babble:
title_html: ਨਕਲ-ਹੱਕ ਤੇ ਲਾਇਸੰਸ
+ introduction_1_osm_foundation: ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ਸੰਸਥਾ
+ credit_title_html: ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ਨੂੰ ਕਿਵੇਂ ਸੇਹਰਾ ਦੇਣਾ ਹੈ
+ credit_1_html: 'ਜਿੱਥੇ ਤੁਸੀਂ ਖੁੱਲ੍ਹਾ-ਗਲੀ-ਨਕਸ਼ਾ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤੁਹਾਨੂੰ
+ ਹੇਠ ਲਿਖੀਆਂ ਦੋ ਚੀਜ਼ਾਂ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ:'
more_title_html: ਹੋਰ ਜਾਣਕਾਰੀ ਲੱਭਣ ਵਾਸਤੇ
contributors_title_html: ਸਾਡੇ ਯੋਗਦਾਨੀ
index:
export:
title: ਬਰਾਮਦ
manually_select: ਆਪਣੇ ਆਪ ਇੱਕ ਵੱਖਰਾ ਖੇਤਰ ਚੁਣੋ
- licence: ਲਾà¨\87ਸੰਸ
+ licence: ਲਸੰਸ
too_large:
other:
title: ਹੋਰ ਸਰੋਤ
how_to_help:
title: ਮਦਦ ਕਿਵੇਂ ਕਰਨੀ ਹੈ
join_the_community:
- title: ਭਾਈਚਾਰੇ ਨਾਲ਼ ਜੁੜੋ
+ title: ਭਾਈਚਾਰੇ ਨਾਲ ਜੁੜੋ
other_concerns:
title: ਹੋਰ ਫ਼ਿਕਰ
help:
get_directions: ਦਿਸ਼ਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ
from: ਵੱਲੋਂ
to: ਵੱਲ
- where_am_i: ਮà©\88à¨\82 à¨\95ਿੱਥà©\87 ਹਾà¨\82?
+ where_am_i: à¨\87ਹ à¨\95ਿੱਥà©\87 ਹà©\88?
submit_text: ਜਾਉ
key:
table:
runway: ਹਵਾਈ ਅੱਡੇ ਦੀ ਉਡਾਣ ਪੱਟੀ
taxiway: ਟੈਕਸੀਵੇਅ
apron: ਹਵਾਈ ਅੱਡੇ ਦਾ ਐਪਰਨ
- admin: ਪà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+ admin: ਪà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
forest: ਜੰਗਲ
- wood: à¨\9cà©°à¨\97ਲ
+ wood: ਲੱà¨\95à©\9c
golf: ਗੋਲਫ਼ ਮੈਦਾਨ
park: ਪਾਰਕ
common: ਸ਼ਾਮਲਾਟ
header: ਮੁਫ਼ਤ ਅਤੇ ਸੋਧਣਯੋਗ
continue: ਭਰਤੀ ਹੋਵੋ
terms:
- title: ਯà©\8bà¨\97ਦਾਨà©\80 ਦà©\80à¨\86à¨\82 ਸ਼ਰਤਾà¨\82
- heading: ਯà©\8bà¨\97ਦਾਨà©\80 ਦà©\80à¨\86à¨\82 ਸ਼ਰਤਾà¨\82
+ title: ਸ਼ਰਤਾਂ
+ heading: ਸ਼ਰਤਾਂ
consider_pd_why: ਇਹ ਕੀ ਹੈ?
+ informal_translations: ਗ਼ੈਰ-ਰਸਮੀ ਤਰਜਮਾ
decline: ਮਨਜ਼ੂਰ ਨਹੀਂ
legale_select: 'ਆਪਣੀ ਰਿਹਾਇਸ਼ ਦਾ ਦੇਸ਼ ਚੁਣੋ:'
legale_names:
created from: 'ਕਿੱਥੋਂ ਉਸਾਰਿਆ:'
status: 'ਦਰਜਾ:'
role:
- administrator: à¨\87ਹ ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨\87ੱà¨\95 ਪà©\8dਰਸ਼ਾਸਕ ਹੈ।
+ administrator: à¨\87ਹ ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨\87ੱà¨\95 ਪà©\8dਰਬੰਧਕ ਹੈ।
moderator: ਇਹ ਵਰਤੋਂਕਾਰ ਇੱਕ ਵਿਚੋਲਾ ਹੈ।
grant:
- administrator: ਪà©\8dਰਸ਼ਾਸà¨\95à©\80 ਹੱà¨\95 ਦਿà¨\89
+ administrator: ਪà©\8dਰਬੰਧà¨\95à©\80 ਹੱà¨\95 ਦਿà¨\93
moderator: ਵਿਚੋਲਗੀ ਦੇ ਹੱਕ ਦਿਉ
comments: ਟਿੱਪਣੀਆਂ
create_block: ਇਸ ਵਰਤੋਂਕਾਰ 'ਤੇ ਰੋਕ ਲਾਉ
helper:
block_duration:
hours:
- one: ੧ ਘੰਟਾ
+ one: '%{count} ਘੰਟਾ'
other: '%{count} ਘੰਟੇ'
show:
status: ਹਾਲਾਤ
entry_role_html: Relacja %{relation_name} (jako %{relation_role})
not_found:
title: Nie znaleziono
- sorry: 'Niestety, nie odnaleziono %{type} #%{id}.'
+ sorry: 'Nie odnaleziono %{type} #%{id}.'
type:
node: węzła
way: linii
introduction: Kliknij na mapie, by wyszukać pobliskie obiekty.
nearby: Obiekty w pobliżu
enclosing: Większe, otaczające obiekty
+ old_nodes:
+ not_found:
+ sorry: 'Nie odnaleziono węzła #%{id} w wersji %{version}.'
+ old_ways:
+ not_found:
+ sorry: 'Nie odnaleziono linii #%{id} w wersji %{version}.'
+ old_relations:
+ not_found:
+ sorry: 'Nie odnaleziono relacji #%{id} w wersji %{version}.'
changesets:
changeset_paging_nav:
showing_page: Strona %{page}
search:
title:
results_from_html: Wyniki z %{results_link}
- latlon: Wewnętrzny
+ latlon: Internal
osm_nominatim: Nominatim
osm_nominatim_reverse: Nominatim
search_osm_nominatim:
new password button: Wyczyść hasło
help_text: Proszę wprowadzić adres e-mail używany do logowania. Zostanie wysłany
na niego odnośnik służący do wyczyszczenia hasła.
+ create:
+ send_paranoid_instructions: Jeśli twój adres e-mail istnieje w naszej bazie
+ danych, otrzymasz link do odzyskania hasła na swój adres e-mail w ciągu kilku
+ minut.
edit:
title: Wyczyść hasło
heading: Czyszczenie hasła użytkownika %{user}
flash token bad: Nie znaleziono tokenu, sprawdź URL
update:
flash changed: Hasło zostało zmienione.
+ flash token bad: Nie znalaziono tego tokena. Sprawdź adres URL.
preferences:
show:
title: Preferencje
support: supportem
shared:
markdown_help:
- heading_html: Przeanalizowano za pomocą %{kramdown_link}
+ heading_html: Składnia %{kramdown_link}
+ kramdown_url: https://kramdown.gettalong.org/quickref.html
+ kramdown: kramdown
headings: Nagłówki
heading: Nagłówki
subheading: Podtytuł
contributors_fr_credit_html: '%{france}: Zawiera dane uzyskane z Direction
Générale des Impôts.'
contributors_fr_france: Francja
+ contributors_hr_credit_html: |-
+ %{croatia}: Zawiera dane z %{dgu_link} i %{open_data_portal}
+ (informacje publiczne Chorwacji).
+ contributors_hr_croatia: Chorwacja
+ contributors_hr_dgu: Państwowej Administracji Geodezyjnej Chorwacji (Državna
+ geodetska uprava)
+ contributors_hr_open_data_portal: Krajowego portalu otwartych danych (Portal
+ otvorenih podataka)
contributors_nl_credit_html: '%{netherlands}: Zawiera dane © AND, 2007
(%{and_link})'
contributors_nl_netherlands: Holandia
contributors_nz_new_zealand: Nowa Zelandia
contributors_nz_linz_data_service: LINZ Data Service
contributors_nz_cc_by: CC BY 4.0
+ contributors_rs_credit_html: |-
+ %{serbia}: Zawiera dane z %{rgz_link} i %{open_data_portal}
+ (informacje publiczne Serbii), 2018.
contributors_rs_serbia: Serbia
- contributors_rs_open_data_portal: Krajowy Portal Otwartych Danych
+ contributors_rs_rgz: Serbskiego Urzędu Geodezyjnego
+ contributors_rs_open_data_portal: Krajowego portalu otwartych danych
contributors_si_credit_html: '%{slovenia}: Zawiera dane %{gu_link} oraz %{mkgp_link}
(informacja publiczna Słowenii).'
contributors_si_slovenia: Słowenia
contributors_gb_united_kingdom: Wielka Brytania
contributors_2_html: Szczegóły tych i innych źródeł, które zostały wykorzystane,
aby udoskonalić OpenStreetMap, są dostępne na stronie %{contributors_page_link}.
- contributors_2_contributors_page: Contributors (en)
+ contributors_2_contributors_page: Contributors
contributors_footer_2_html: Włączenie danych do OpenStreetMap nie musi oznaczać,
że udostępniający je podmiot popiera OpenStreetMap, udziela jakiejkolwiek
gwarancji lub ponosi jakąkolwiek odpowiedzialność.
farmland: Grunty rolne
grass: Trawnik
meadow: Łąka
+ bare_rock: Odkryte skały
sand: Piaski
golf: Pole golfowe
park: Park
scrubland: Zarośla
lake: Jezioro
reservoir: Zbiornik
+ intermittent_water: Okresowy ciek
glacier: Lodowiec
reef: Rafa
wetland: Mokradła
oauth2_authorizations: Autoryzacje OAuth 2
auth_providers:
openid_logo_alt: Zaloguj się przez OpenID
+ openid_login_button: Kontynuuj
openid:
title: Zaloguj się przez OpenID
alt: Zaloguj się za pomocą adresu URL OpenID
users:
new:
title: Zarejestruj się
+ tab_title: Rejestracja
no_auto_account_create: Niestety nie możemy aktualnie stworzyć ci konta automatycznie.
please_contact_support_html: Skontaktuj się z %{support_link} w celu umówienia
się na założenie konta – postaramy się rozpatrzyć prośbę jak najszybciej.
privacy_policy_title: Polityka prywatności OSMF, w tym sekcja dotycząca adresów
e-mail
or: lub
- use external auth: Alternatywnie, zaloguj się przez...
+ use external auth: 'Alternatywnie, zarejestruj się przez:'
terms:
title: Warunki
heading: Warunki
role:
administrator: Ten użytkownik jest administratorem
moderator: Ten użytkownik jest moderatorem
+ importer: Ten użytkownik jest importerem
grant:
administrator: Przyznaj dostęp administratora
moderator: Przyznaj dostęp moderatora
+ importer: Przyznaj rolę importera
revoke:
administrator: Cofnij dostęp administratora
moderator: Cofnij dostęp moderatora
+ importer: Odwołaj rolę importera
block_history: aktywne blokady
moderator_history: nałożone blokady
+ revoke_all_blocks: Odwołaj wszystkie blokady
comments: komentarze
create_block: Zablokuj tego użytkownika
activate_user: Aktywuj tego użytkownika
confirm: Czy na pewno chcesz odwołać tę blokadę?
revoke: Odwołaj!
flash: Blokada została odwołana.
+ revoke_all:
+ title: Odwoływanie wszystkich blokad nałożonych na użytkownika %{block_on}
+ heading_html: Odwoływanie wszystkich blokad nałożonych na użytkownika %{block_on}
+ empty: Użytkownik %{name} nie ma aktywnych blokad.
+ confirm: Jesteś pewny, że chcesz odwołać %{active_blocks}?
+ active_blocks:
+ one: '%{count} aktywna blokada'
+ few: '%{count} aktywne blokady'
+ many: '%{count} aktywnych blokad'
+ other: ""
+ revoke: Odwołaj!
+ flash: Wszystkie aktywne blokady zostały odwołane.
helper:
time_future_html: Blokada wygasa za %{time}.
until_login: Aktywna do momentu zalogowania się użytkownika.
blocks_on:
title: Blokady na użytkownika %{name}
heading_html: Lista blokad na użytkownika %{name}
- empty: '%{name} nie był jeszcze zablokowany.'
+ empty: Użytkownik %{name} nie był jeszcze zablokowany.
blocks_by:
title: Blokady nałożone przez %{name}
heading_html: Lista blokad nałożonych przez %{name}
reason: Powód blokady
status: Status
revoker_name: Odwołana przez
+ older: Starsze blokady
+ newer: Nowsze blokady
+ navigation:
+ all_blocks: Wszystkie blokady
+ blocks_on_me: Blokady nałożone na mnie
+ blocks_on_user: Blokady na %{user}
+ blocks_by_me: Blokady nałożone przeze mnie
+ blocks_by_user: Blokady nałożone przez %{user}
+ block: Blokada nr %{id}
user_mutes:
index:
+ user_mute_explainer: Wiadomości od wyciszonych użytkowników są przenoszone do
+ osobnej skrzynki odbiorczej, a ty nie otrzymasz powiadomień e-mailem.
+ user_mute_admins_and_moderators: Możesz wyciszyć administratorów i moderatorów,
+ jednak ich wiadomości nie będą wyciszone.
table:
tbody:
unmute: Wyłącz wyciszenie
send_message: Wyślij wiadomość
create:
- notice: Wyciszyłeś %{name}.
+ notice: Wyciszyłeś użytkownika %{name}.
+ error: Nie udało się wyciszyć użytkownika %{name}. %{full_message}
+ destroy:
+ notice: Odciszyłeś użytkownika %{name}.
+ error: Nie udało się odciszyć użytkownika. Spróbuj ponownie.
notes:
index:
title: Uwagi użytkownika %{user}
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.
+ anonymous_warning_html: Nie jesteś zalogowany. %{log_in} lub %{sign_up}, jeśli
+ chcesz otrzymywać aktualizacje tej uwagi.
+ anonymous_warning_log_in: Zaloguj się
+ anonymous_warning_sign_up: zarejestruj
advice: Twoja uwaga jest publiczna i może zostać użyta do zaktualizowania mapy,
nie podawaj tu więc informacji osobistych oraz informacji z map i źródeł chronionych
prawami autorskimi.
osm_france: OpenStreetMap France
thunderforest_credit: Kafelki dzięki uprzejmości %{thunderforest_link}
andy_allan: Andy'ego Allana
+ tracestrack_credit: Kafelki dzięki uprzejmości %{tracestrack_link}
hotosm_credit: 'Styl kafelków: %{hotosm_link}. Hosting: %{osm_france_link}'
hotosm_name: Humanitarian OpenStreetMap Team
site:
contact_the_community_html: Fique à vontade para %{contact_link} a comunidade
OpenStreetMap caso tenha encontrado uma ligação inativa ou um erro. Deixe
uma nota da URL exata da sua solicitação.
+ bad_request:
+ title: Pedido inválido
+ description: A operação solicitada no servidor OpenStreetMap não é válida (HTTP
+ 400)
forbidden:
title: Proibido
description: A operação solicitada no servidor do OpenStreetMap só está disponível
perto de %{place}.'
commented_note_html: '%{commenter} reabriu uma nota comentada por ti. A nota
fica perto de %{place}.'
- details: Podes ver mais detalhes sobre a nota em %{url}.
- details_html: Podes ver mais detalhes sobre a nota em %{url}.
+ details: Responde ou descobre mais sobre a nota em %{url}.
+ details_html: Responde ou descobre mais sobre a nota em %{url}.
changeset_comment_notification:
description: Conjunto de alterações n.º %{id}
hi: Olá, %{to_user}.
partial_changeset_with_comment: com o comentário '%{changeset_comment}'
partial_changeset_with_comment_html: com o comentário '%{changeset_comment}'
partial_changeset_without_comment: sem comentários
- details: Podes encontrar mais informações sobre o conjunto de alterações em
- %{url}.
- details_html: Podes encontrar mais informações sobre o conjunto de alterações
- em %{url}.
+ details: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
+ details_html: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
unsubscribe: Podes deixar de acompanhar as atualizações deste conjunto de alterações
em %{url}.
unsubscribe_html: Podes deixar de acompanhar as atualizações deste conjunto
new:
title: Entrar
tab_title: Iniciar sessão
+ login_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
email or username: 'E-mail ou Nome de utilizador:'
password: Palavra-passe
remember: Ficar autenticado entre sessões
lost password link: Perdeste a tua palavra-passe?
login_button: Iniciar sessão
register now: Regista-te agora
- with external: 'Em alternativa, usa um serviço externo para iniciares sessão:'
+ with external: ou inicia sessão com uma aplicação de terceiros
+ or: ou
auth failure: Lamentamos, mas não foi possível iniciar sessão com os dados fornecidos.
destroy:
title: Sair
contributors_fr_credit_html: '%{france}: contém dados provenientes da Direção
Geral de Impostos.'
contributors_fr_france: França
+ contributors_hr_credit_html: |-
+ %{croatia}: Contém dados de %{dgu_link} e %{open_data_portal}
+ (informação pública da Croácia).
+ contributors_hr_croatia: Croácia
+ contributors_hr_dgu: Administração Geodésica Estatal da Croácia
+ contributors_hr_open_data_portal: Portal Nacional de Dados Abertos
contributors_nl_credit_html: '%{netherlands}: Contém © e dados, 2007
(%{and_link})'
contributors_nl_netherlands: Países Baixos
other: Ficheiro GPX com %{count} pontos de %{user}
description_without_count: Ficheiro GPX de %{user}
application:
+ basic_auth_disabled: 'A Autenticação Básica HTTP está desativada: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 e 1.0a estão desativados: %{link}'
permission_denied: Não tens permissões para realizar essa operação
require_cookies:
cookies_needed: Parece que tens os "cookies" desativados - por favor, ativa-os
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
alt: Iniciar sessão com um URL do OpenID
write_redactions: Rever dados do mapa
read_email: Ler e-mail de utilizador
skip_authorization: Aprovar a aplicação automaticamente
+ for_roles:
+ moderator: Esta permissão é para ações disponíveis apenas para moderadores
oauth_clients:
new:
title: Registar uma nova aplicação
users:
new:
title: Criar conta
+ tab_title: Registar
+ signup_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
no_auto_account_create: Infelizmente, e de momento, não é possível criar uma
conta automaticamente.
please_contact_support_html: Por favor, contacta %{support_link} para pedir
a criação de uma conta - tentaremos tratar do pedido o mais rapidamente possível.
support: apoio
about:
- header: Livre e editável
+ header: Gratuito e editável.
paragraph_1: Ao contrário de outros mapas, o OpenStreetMap é completamente
criado por pessoas como tu, e qualquer pessoa o pode corrigir, transferir
e usar de forma gratuita.
- paragraph_2: Regista-te para começares a contribuir. Iremos enviar um e-mail
- para confirmar a tua conta.
+ paragraph_2: Regista-te para começares a contribuir.
+ welcome: Bem-vind@ ao OpenStreetMap
+ duplicate_social_email: Se já tens uma conta OpenStreetMap e desejas utilizar
+ um provedor de identidade externo, inicia sessão com a tua palavra-passe e
+ modifica as definições da tua conta.
display name description: O nome de utilizador ficará visível publicamente.
Poderás alterar o nome posteriormente nas configurações do teu perfil.
+ by_signing_up_html: Ao registares-te, aceitas os nossos %{tou_link}, %{privacy_policy_link}
+ e %{contributor_terms_link}.
+ tou: Termos de Utilização
+ contributor_terms: Termos de Contribuidor
external auth: 'Autenticação por terceiros:'
continue: Criar conta
terms accepted: Obrigado por aceitares os novos termos de contribuidor!
privacy_policy: política de privacidade
privacy_policy_title: Política de privacidade da OSMF incluindo secção sobre
endereços de correio eletrónico
- use external auth: Em alternativa, usa um serviço externo para iniciares sessão
+ consider_pd_html: Considero que as minhas contribuições estão no %{consider_pd_link}.
+ consider_pd: domínio público
+ or: ou
+ use external auth: ou regista-te com um serviço externo
terms:
title: Termos
heading: Termos
revoker_name: Revogado por
older: Blocos mais antigos
newer: Blocos mais recentes
+ navigation:
+ all_blocks: Todos os bloqueios
+ blocks_on_me: Quem me bloqueou
+ blocks_on_user: Bloqueios a %{user}
+ blocks_by_me: Os meus bloqueios
+ blocks_by_user: Bloqueios de %{user}
+ block: 'Bloqueio #%{id}'
user_mutes:
index:
title: Utilizadores Silenciados
o mais pormenorizada possível sobre o que pretendes ver alterado no mapa,
para que outros mapeadores te possam ajudar. Posiciona o marcador no local
correto e escreve uma nota que explique o problema.
+ anonymous_warning_html: Não tens sessão iniciada. Por favor, %{log_in} ou %{sign_up}
+ se quiseres receber atualizações sobre a tua nota.
+ anonymous_warning_log_in: inicia sessão
+ anonymous_warning_sign_up: regista-te
advice: 'Lembra-te: a tua nota é pública e poderá ser usada para atualizar o
mapa, portanto, não introduzas informações pessoais, dados de mapas ou catálogos
protegidos por direitos de autor.'
success: Conta eliminada.
browse:
deleted_ago_by_html: Excluído há %{time_ago} por %{user}
- edited_ago_by_html: Editado há %{time_ago} por %{user}
+ edited_ago_by_html: Editado %{time_ago} por %{user}
version: Versão
redacted_version: Versão reduzida
in_changeset: Conjunto de alterações
заметок недалеко от %{place}.'
commented_note_html: '%{commenter} открыл заново одну из вами прокомментированных
заметок недалеко от %{place}.'
- details: Ð\9fодÑ\80обнее о заметке %{url}.
- details_html: 'Ð\9fодÑ\80обнее о заметке: %{url}.'
+ details: Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c или Ñ\83знаÑ\82Ñ\8c болÑ\8cÑ\88е о заметке %{url}.
+ details_html: 'Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c или Ñ\83знаÑ\82Ñ\8c болÑ\8cÑ\88е о заметке: %{url}.'
changeset_comment_notification:
hi: Здравствуйте, %{to_user},
greeting: Здравствуйте,
partial_changeset_with_comment: с комментарием '%{changeset_comment}'
partial_changeset_with_comment_html: с комментарием '%{changeset_comment}'
partial_changeset_without_comment: без комментария
- details: Дополнительные сведения о пакете правок можно найти на %{url}.
- details_html: Ð\94ополниÑ\82елÑ\8cнÑ\8bе Ñ\81ведениÑ\8f о пакеÑ\82е пÑ\80авок можно найÑ\82и на %{url}.
+ details: 'Ответить или узнать больше о пакете правок: %{url}.'
+ details_html: Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c или Ñ\83знаÑ\82Ñ\8c болÑ\8cÑ\88е о пакеÑ\82е пÑ\80авок можно на %{url}.
unsubscribe: Чтобы отказаться от новых сообщений для этого пакета правок, перейдите
по ссылке %{url} и нажмите кнопку "Отписаться".
unsubscribe_html: Чтобы отказаться от подписки на обновления этого набора изменений,
comment: تبصرہ
new:
title: نواں نوٹ
+ anonymous_warning_log_in: لاگ ان
+ anonymous_warning_sign_up: سائن اپ
add: نوٹ شامل کرو
javascripts:
close: بند کرو
# Author: Mtej
# Author: Peter Klofutar
# Author: Pickle12
+# Author: Pipi Ferry
# Author: Ruila
# Author: Skalcaa
# Author: Stefanb
in povezavo, ki ste jo kliknili.
show:
title: 'Nabor sprememb: %{id}'
+ created: 'Ustvarjeno: %{when}'
+ closed: 'Zaprto: %{when}'
created_ago_html: Ustvaril_a %{time_ago}
closed_ago_html: Zaprto %{time_ago}
created_ago_by_html: Ustvaril %{user} %{time_ago}
show:
title: Dnevnik uporabnika %{user} | %{title}
user_title: Dnevnik uporabnika %{user}
+ discussion: Pogovor
leave_a_comment: Napiši komentar
login_to_leave_a_comment_html: '%{login_link} za vpis komentarja'
login: Prijava
fountain: Vodomet
fuel: Polnilna postaja
gambling: Igre na srečo
- grave_yard: Pokopališče
+ grave_yard: Pokopališče v bližini cerkve
grit_bin: Posoda za pesek
hospital: Bolnišnica
hunting_stand: Lovska preža
pub: Pivnica
public_bath: Kopališče
public_bookcase: Javna knjižna omara
- public_building: Javne stavba
+ public_building: Javna stavba
ranger_station: Gozdarska postaja
recycling: Reciklirna točka
restaurant: Restavracija
"yes": Meja
bridge:
aqueduct: Akvadukt
- boardwalk: Sprehajališče
+ boardwalk: Sprehajališče iz desk
suspension: Viseči most
swing: Vrteči most
viaduct: Viadukt
barn: Skedenj
bungalow: Bungalov
cabin: Brunarica
- chapel: Kapelica
+ chapel: Kapela
church: Cerkveno poslopje
civic: Občinska stavba
college: VIsokošolska stavba
detached: Osamljena hiša
dormitory: Študentski dom
duplex: Dvostanovanjska hiša
- farm: Kmetija
+ farm: Hiša kmetije
farm_auxiliary: Pomožna kmetijska stavba
garage: Garaža
garages: Garaže
hospital: Poslopje bolnišnice
hotel: Poslopje hotela
house: Hiša
- houseboat: Bivalni čoln
+ houseboat: Bivalni čoln - Hiša-čoln
hut: Koča
industrial: Industrijski objekt
kindergarten: Poslopje vrtca
semidetached_house: Dvojček
service: Servisna stavba
shed: Lopa
- stable: Hlev
+ stable: Hlev za konje
static_caravan: Stanovanjska prikolica
temple: Tempelj
terrace: Terasa
stop: Stop znak
street_lamp: Ulična svetilka
tertiary: Lokalna cesta
- tertiary_link: Terciarna cesta
+ tertiary_link: Priključek na lokalno cesto
track: Kolovoz
traffic_mirror: Prometno ogledalo
traffic_signals: Prometna signalizacija
trunk_link: Priključek na hitro cesto
turning_circle: Obračališče
turning_loop: Obračališče
- unclassified: Neopredeljena cesta
+ unclassified: Neopredeljena cesta - Neklasificirana cesta
"yes": Cesta
historic:
aircraft: Zgodovinsko letalo
tomb: Grobnica
tower: Stolp
wayside_chapel: Obcestna kapelica
- wayside_cross: Križ
+ wayside_cross: Obpotni križ
wayside_shrine: Kapelica
wreck: Razbitina
"yes": Zgodovinski kraj
aquaculture: Akvakultura
basin: Čistilni bazen
brownfield: Gradbišče
- cemetery: Pokopališče
+ cemetery: Pokopališče, ki ni ob cerkvi
commercial: Poslovna cona
conservation: Zaščiteno območje
construction: Gradbišče
farmland: Kmetijsko zemljišče
- farmyard: Kmetija
+ farmyard: Kmetija - dvorišče
forest: Gozd
garages: Garaže
grass: Trata
funicular: Žična vzpenjača
halt: Železniško postajališče
junction: Križišče železnic
- level_crossing: Prehod
+ level_crossing: Nivojski prehod
light_rail: Mestna železnica
miniature: Miniaturna železnica
monorail: Monorail
erotic: Erotična trgovina
estate_agent: Nepremičninska agencija
fabric: Prodajalna blaga
- farm: Kmečka trgovina
+ farm: Kmetijska trgovina
fashion: Modna trgovina
fishing: Prodajalna ribiške opreme
florist: Cvetličarna
wine: Vinoteka
"yes": Trgovina
tourism:
- alpine_hut: Koča
+ alpine_hut: Alpska koča
apartment: Počitniški apartma
artwork: Umetnina
attraction: Zanimivost
cabin: Turistično prenočišče
camp_pitch: Prostor za kampiranje
camp_site: Kamp
- caravan_site: Kamp
+ caravan_site: Kamp - Prostor za avtodome/bivalne prikolice
chalet: Počitniška hišica
gallery: Galerija
guest_house: Penzion
%{france}: Vsebuje podatke iz
Direction Générale des Impôts.
contributors_fr_france: Francija
+ contributors_hr_credit_html: |-
+ %{croatia}: Vsebuje podatke iz %{dgu_link} in %{open_data_portal}
+ (javne informacije Hrvaške).
+ contributors_hr_croatia: Hrvaška
contributors_nl_credit_html: '%{netherlands}: Vsebuje podatke © IN, 2007 (%{and_link})'
contributors_nl_netherlands: Nizozemska
contributors_nz_credit_html: |-
intro: Ste opazili napako ali pomanjkljivost? Obvestite druge kartografe o tem,
da lahko to popravimo. Premaknite označevalec na pravo mesto in vpišite opombo,
v kateri pojasnite težavo.
+ anonymous_warning_log_in: Prijavite se
+ anonymous_warning_sign_up: Registrirajte se
advice: Vaša opomba je javna in se lahko uporabi za posodobitev zemljevida.
Ne vnašajte osebnih podatkov ali podatkov iz avtorsko varovanih zemljevidov
ali imenikov.
места %{place}.'
commented_note: '%{commenter} је реактивирао белешку мапе коју сте коментарисали.
Белешка је у близини места %{place}.'
- details: Ð\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а о белеÑ\88Ñ\86и може да Ñ\81е пÑ\80онаÑ\92е на %{url}.
+ details: Ð\9eдговоÑ\80иÑ\82е или Ñ\81азнаÑ\98Ñ\82е виÑ\88е о белеÑ\88Ñ\86и на %{url}.
changeset_comment_notification:
hi: Поздрав, %{to_user},
greeting: Поздрав,
мапе који надгледате и који је направио %{changeset_author}'
partial_changeset_with_comment: са коментаром „%{changeset_comment}”
partial_changeset_without_comment: без коментара
- details: Ð\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а о Ñ\87еÑ\98нÑ\9fÑ\81еÑ\82овима може да Ñ\81е пÑ\80онаÑ\92е на %{url}.
+ details: Ð\9eдговоÑ\80иÑ\82е или Ñ\81азнаÑ\98Ñ\82е виÑ\88е о Ñ\81еÑ\82овима пÑ\80омена на %{url}.
unsubscribe: Можете одјавити обавештења овог скупа измена на %{url}.
confirmations:
confirm:
deleted_ago_by_html: Raderades %{time_ago} av %{user}
edited_ago_by_html: Redigerades %{time_ago} av %{user}
version: Version
+ redacted_version: Redigerad version
in_changeset: Ändringsuppsättning
anonymous: anonym
no_comment: (inga kommentarer)
other: '%{count} sträckor'
download_xml: Ladda ner XML
view_history: Visa historik
+ view_unredacted_history: Visa oredigerad historik
view_details: Visa detaljer
+ view_redacted_data: Visa redigerad data
+ view_redaction_message: Visa redigeringsmeddelande
location: 'Plats:'
node:
title_html: 'Nod: %{name}'
created: Skapad
closed: Stängd
belongs_to: Författare
+ subscribe:
+ heading: Prenumerera på följande diskussion om ändringsuppsättning?
+ button: Prenumerera på diskussion
+ unsubscribe:
+ heading: Avsluta prenumeration på följande diskussion om ändringsuppsättning?
+ button: Sluta prenumerera på diskussion
+ heading:
+ title: Ändringsuppsättning %{id}
+ created_by_html: Skapades av %{link_user} %{created}.
+ no_such_entry:
+ title: Ingen sådan ändringsuppsättning
+ heading: 'Inget inlägg med ID: %{id}'
+ body: Det finns tyvärr ingen ändringsuppsättning med ID:t %{id}. Kontrollera
+ stavningen eller så kanske du tryckt på fel länk.
show:
title: 'Ändringsuppsättning: %{id}'
+ created: 'Skapades: %{when}'
+ closed: 'Stängdes: %{when}'
created_ago_html: Skapades %{time_ago}
closed_ago_html: Stängdes %{time_ago}
created_ago_by_html: Skapades %{time_ago} av %{user}
show:
title: '%{user}s dagbok | %{title}'
user_title: '%{user}s dagbok'
+ discussion: Diskussion
leave_a_comment: Lämna en kommentar
login_to_leave_a_comment_html: '%{login_link} för att lämna en kommentar'
login: Logga in
comment: Kommentar
newer_comments: Nyare kommentarer
older_comments: Äldre kommentarer
+ subscribe:
+ heading: Prenumerera på följande diskussion om dagboksinlägg?
+ button: Prenumerera på diskussion
+ unsubscribe:
+ heading: Avsluta prenumeration på följande diskussion om dagboksinlägg?
+ button: Avsluta prenumeration på diskussion
doorkeeper:
errors:
messages:
contact: kontakta
contact_the_community_html: Gå gärna till %{contact_link} OpenStreetMap-gemenskapen
om du har hittat en trasig länk/bugg. Anteckna din förfrågas exakta webbadress.
+ bad_request:
+ title: Felaktig förfrågan
+ description: Operationen du begärde från OpenStreetMaps server är inte giltig
+ (HTTP 400)
forbidden:
title: Förbjudet
description: Åtgärden du begärde på OpenStreetMap-servern är endast tillgänglig
och fri att använda under en öppen licens.
intro_2_create_account: Skapa ett användarkonto
partners_fastly: Fastly
+ partners_corpmembers: OSMF-företagsmedlemmar
partners_partners: partners
tou: Användarvillkor
osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
more: Mer
user_mailer:
diary_comment_notification:
+ description: 'OpenStreetMap dagboksinlägg #%{id}'
subject: '[OpenStreetMap] %{user} kommenterade på ett dagboksinlägg'
hi: Hej %{to_user},
header: '%{from_user} har kommenterat dagboksinlägget på OpenStreetMap med rubriken
%{commenturl} eller skicka ett meddelande till författaren på %{replyurl}
footer_html: Du kan också läsa kommentaren på %{readurl} och du kan kommentera
på %{commenturl} eller skicka ett meddelande till författaren på %{replyurl}
+ footer_unsubscribe: Du kan avsluta prenumerationen från diskussionen på %{unsubscribeurl}
+ footer_unsubscribe_html: Du kan avsluta prenumerationen från diskussionen på
+ %{unsubscribeurl}
message_notification:
subject: '[OpenStreetMap] %{message_title}'
hi: Hej %{to_user},
click_the_link: Om det är du, klicka på länken nedan för att återställa ditt
lösenord.
note_comment_notification:
+ description: 'OpenStreetMap not #%{id}'
anonymous: En anonym användare
greeting: Hej,
commented:
på. Anteckningen är nära %{place}.'
commented_note_html: '%{commenter} har återaktiverat en kartanteckning du
har kommenterat på. Anteckningen är nära %{place}.'
- details: Fler detaljer om anteckningen finns på %{url}.
- details_html: Fler detaljer om anteckningen finns på %{url}.
+ details: Svara eller ta reda på mer anteckningen på %{url}.
+ details_html: Svara eller ta reda på mer om anteckningen på %{url}.
changeset_comment_notification:
+ description: 'OpenStreetMap ändringsuppsättning #%{id}'
hi: Hej %{to_user},
greeting: Hej,
commented:
partial_changeset_with_comment: med kommentar '%{changeset_comment}'
partial_changeset_with_comment_html: med kommentar '%{changeset_comment}'
partial_changeset_without_comment: utan kommentar
- details: Fler detaljer om ändringsuppsättningen finns på %{url}.
- details_html: Fler detaljer om ändringsuppsättningen finns på %{url}.
- unsubscribe: För att avsluta prenumerationen av uppdateringar i denna ändringsuppsättning,
- besök %{url} och klicka på "Avprenumerera".
- unsubscribe_html: För att avsluta prenumerationen av uppdateringar i denna ändringsuppsättning,
- besök %{url} och klicka på "Avprenumerera".
+ details: Svara eller ta reda på mer om ändringsuppsättningen på %{url}.
+ details_html: Svara eller ta reda på mer om ändringsuppsättningen på %{url}.
+ unsubscribe: Du kan avsluta prenumeration på uppdateringar i denna ändringsuppsättning
+ på %{url}.
+ unsubscribe_html: Du kan avsluta prenumeration på uppdateringar i denna ändringsuppsättning
+ på %{url}.
confirmations:
confirm:
heading: Kontrollera din e-post!
new:
title: Logga in
tab_title: Logga in
+ login_to_authorize_html: Logga in på OpenStreetMap för att komma åt %{client_app_name}.
email or username: E-postadress eller Användarnamn
password: Lösenord
remember: Kom ihåg mig
lost password link: Glömt ditt lösenord?
login_button: Logga in
register now: Registrera dig nu
- with external: 'Alternativt kan du använda en tredje part för att logga in:'
+ with external: eller logga in med en tredje part
+ or: eller
auth failure: Kunde inte logga in med de uppgifterna.
destroy:
title: Logga ut
contributors_at_cc_by_at_with_amendments: CC BY AT med tillägg
contributors_au_australia: Australien
contributors_au_geoscape_australia: Geoscape Australien
+ contributors_au_cc_licence: Creative Commons Erkännande 4.0 Internationell-licens
+ (CC BY 4.0)
contributors_ca_credit_html: |-
%{canada}: Innehåller data från
GeoBase®, GeoGratis (© Department of Natural
Resources Canada), och StatCan (Geography Division,
Statistics Canada).
contributors_ca_canada: Kanada
+ contributors_cz_credit_html: '%{czechia}: Innehåller data från den statliga
+ administrationen för landmäteri och Cadastre licensierad under %{cc_licence_link}'
contributors_cz_czechia: Tjeckien
+ contributors_cz_cc_licence: Creative Commons Erkännande 4.0 Internationell
+ (CC BY 4.0)
+ contributors_fi_credit_html: '%{finland}: Innehåller data från Lantmäteriet
+ i Finlands Terrängdatabas och andra datauppsättningar, under %{nlsfi_license_link}.'
contributors_fi_finland: Finland
contributors_fi_nlsfi_license: NLSFI-licens
contributors_fr_credit_html: |-
%{france}: Innehåller data hämtade från
Direction Générale des Impôts.
contributors_fr_france: Frankrike
+ contributors_hr_credit_html: '%{croatia}: Innehåller data från %{dgu_link}
+ och %{open_data_portal} (offentlig information om Kroatien)'
+ contributors_hr_croatia: Kroatien
+ contributors_hr_dgu: Kroatiens statliga geodatiska förvaltning
contributors_nl_credit_html: '%{netherlands}: Innehåller © AND data,
2007 (%{and_link}).'
contributors_nl_netherlands: Nederländerna
%{serbia}: Innehåller data från %{rgz_link} och %{open_data_portal}
(offentlig information om Serbien), 2018.
contributors_rs_serbia: Serbien
+ contributors_rs_rgz: Serbiens geodetiska myndighet
+ contributors_rs_open_data_portal: Nationell portal för öppen data
+ contributors_si_credit_html: '%{slovenia}: Innehåller data från %{gu_link}
+ och %{mkgp_link} (offentlig information om Slovenien)'
contributors_si_slovenia: Slovenien
+ contributors_si_gu: Lantmäteri- och kartverket
contributors_si_mkgp: Ministeriet för Jordbruk, Skogsbruk och Livsmedel
contributors_es_credit_html: |-
%{spain}: Innehåller data hämtade från
heathland: Hed
scrubland: Buskskog
lake: Sjö
- reservoir: vattenmagasin
+ reservoir: Vattenmagasin
intermittent_water: Intermittent vattenkropp
glacier: Glaciär
reef: Rev
identifiable: IDENTIFIERBAR
private: PRIVAT
trackable: SPÅRBAR
+ details_with_tags_html: '%{time_ago} av %{user} i %{tags}'
+ details_without_tags_html: '%{time_ago} av %{user}'
index:
public_traces: Publika GPS-spår
my_gps_traces: Mina GPS-spår
other: GPX-fil med %{count} punkter från %{user}
description_without_count: GPX-fil från %{user}
application:
+ basic_auth_disabled: 'Grundläggande HTTP-autentisering är inaktiverat: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 och 1.0a är inaktiverade: %{link}'
permission_denied: Du har inte behörighet för denna åtgärd
require_cookies:
cookies_needed: Du verkar ha inaktiverat kakor - aktivera kakor i din webbläsare
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
alt: Logga in med en OpenID-URL
write_redactions: Omarbeta kartdata
read_email: Läs användarens e-postadress
skip_authorization: Godkänn applikation automatiskt
+ for_roles:
+ moderator: Denna behörighet är till för åtgärder som endast är tillgängliga
+ för moderatorer
oauth_clients:
new:
title: Registrera en ny applikation
users:
new:
title: Registrera
+ tab_title: Registrera
+ signup_to_authorize_html: Registrera dig på OpenStreetMap för att få åtkomst
+ till %{client_app_name}
no_auto_account_create: Tyvärr kan vi för närvarande inte kan skapa ett konto
åt dig automatiskt.
please_contact_support_html: Kontakta %{support_link} för att ordna att ett
konto ska skapas - vi kommer att försöka ta itu med begäran så fort som möjligt.
support: support
about:
- header: Fri och redigerbar
+ header: Fri och redigerbar.
paragraph_1: Till skillnad från andra kartor är OpenStreetMap helt skapad
av människor som du, och det är gratis för alla att fixa, uppdatera, ladda
ner och använda.
- paragraph_2: Registrera dig för att börja bidra. Vi skickar ett e-postmeddelande
- för att bekräfta ditt konto.
+ paragraph_2: Registrera dig för att börja bidra.
+ welcome: Välkommen till OpenStreetMap
display name description: Ditt offentligt visade användarnamn. Du kan ändra
detta senare i alternativ.
+ tou: användarvillkor
+ contributor_terms: bidragsvillkor
external auth: 'Tredjepartsautentisering:'
continue: Registrera
terms accepted: Tack för att du accepterat de nya villkoren för bidrag till
för mer information.
privacy_policy: integritetspolicy
privacy_policy_title: OSMFs integritetspolicy inklusive avsnitt om e-postadresser
- use external auth: Alternativt kan du använda en tredje part för att logga in
+ consider_pd_html: Jag anser mina bidrag vara i %{consider_pd_link}.
+ consider_pd: public domain
+ or: eller
+ use external auth: eller registrera med en tredje part
terms:
title: Villkor för deltagare
heading: Villkor för deltagare
index:
title: Användare
heading: Användare
+ older: Äldre användare
+ newer: Nyare användare
+ found_users:
+ one: '%{count} användare hittade'
+ other: '%{count} användare hittade'
summary_html: '%{name} skapades från %{ip_address} den %{date}'
summary_no_ip_html: '%{name} skapad den %{date}'
confirm: Bekräfta valda användare
reason: Orsak till blockering
status: Status
revoker_name: Återkallad av
+ older: Äldre blockeringar
+ newer: Nya blockeringar
+ navigation:
+ all_blocks: Alla blockeringar
+ blocks_on_me: Blockeringar på mig
+ blocks_on_user: Blockeringar på %{user}
+ blocks_by_me: Blockeringar av mig
+ blocks_by_user: Blockeringar av %{user}
+ block: 'Blockering #%{id}'
user_mutes:
index:
title: Tystade användare
intro: Upptäckt ett misstag eller något som saknas? Låt andra karterare veta
så att vi kan fixa det. Flytta markören till rätt position och skriv in en
kommentar som förklarar problemet.
+ anonymous_warning_html: Du är inte inloggad. %{log_in} eller %{sign_up} om du
+ vill få uppdateringar för din anteckning.
+ anonymous_warning_log_in: logga in
+ anonymous_warning_sign_up: registrera dig
advice: Din anteckning är offentlig och kan användas för att uppdatera kartan,
så skriv inte personuppgifter eller information från upphovsrättsligt skyddade
kartor eller kataloger.
standard: Standard
cycle_map: Cykelkarta
transport_map: Transportkarta
+ tracestracktop_topo: Tracetrack Topo
hot: Humanitärt
layers:
header: Kartskikt
contact_the_community_html: Bozuk bir bağlantı/hata bulduysanız OpenStreetMap
topluluğuna %{contact_link} bağlantısıyla iletmekten çekinmeyin. İsteğinizin
tam URL'sini not edin.
+ bad_request:
+ title: Geçersiz İstek
+ description: OpenStreetMap sunucusunda talep ettiğiniz işlem geçerli değil (HTTP
+ 400)
forbidden:
title: Yasaklı
description: OpenStreetMap sunucusunda talep ettiğiniz işlem sadece yöneticiler
Not, %{place} yakınlarında yer almakta.'
commented_note_html: '%{commenter}, yorumladığınız bir harita notunu yeniden
etkinleştirdi. Not, %{place} yakınlarında yer almakta.'
- details: Not hakkındaki ayrıntılı bilgiler %{url} bağlantısında görülebilir.
- details_html: Notla ilgili daha fazla ayrıntı %{url} adresinde bulunabilir.
+ details: '%{url} bağlantısındaki notu yanıtlayın veya not hakkında daha fazla
+ bilgi edinin.'
+ details_html: '%{url} bağlantısındaki notu yanıtlayın veya not hakkında daha
+ fazla bilgi edinin.'
changeset_comment_notification:
description: 'OpenStreetMap Değişiklik Kaydı #%{id}'
hi: Merhaba %{to_user},
partial_changeset_with_comment: '''%{changeset_comment}'' yorumuyla'
partial_changeset_with_comment_html: '''%{changeset_comment}'' yorumuyla'
partial_changeset_without_comment: yorumsuz
- details: Değişiklik kaydıyla ilgili daha fazla bilgi %{url} sayfasından edinebilirsiniz.
- details_html: Değişiklik kümesiyle ilgili daha fazla ayrıntı %{url} adresinde
- bulunabilir.
+ details: '%{url} bağlantısına yanıt verin veya değişiklik seti hakkında daha
+ fazla bilgi edinin.'
+ details_html: '%{url} bağlantısına yanıt verin veya değişiklik seti hakkında
+ daha fazla bilgi edinin.'
unsubscribe: Bu değişiklik kaydındaki güncellemelere ilişkin aboneliğinizi %{url}
adresinden iptal edebilirsiniz.
unsubscribe_html: Bu değişiklik kaydındaki güncellemelere ilişkin aboneliğinizi
other: '%{user} tarafından %{count} noktalı GPX dosyası'
description_without_count: '%{user} tarafından GPX dosyası'
application:
+ basic_auth_disabled: 'HTTP Temel Kimlik Doğrulaması devre dışı: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 ve 1.0a devre dışı bırakıldı: %{link}'
permission_denied: Bu eyleme erişme izniniz yok
require_cookies:
cookies_needed: Çerezleri devre dışı bırakmış görünüyorsunuz - devam etmeden
intro: Bir hata mı buldunuz ya da eksik bir şey mi var? Bu sorunun düzeltilebilmesi
için diğer haritacılara bildirin. İmleci doğru konuma taşıyın ve sorunu açıklayan
bir not yazın.
+ anonymous_warning_html: Giriş yapmadınız. Notunuzla ilgili güncellemeleri almak
+ istiyorsanız lütfen %{log_in} veya %{sign_up}.
+ anonymous_warning_log_in: oturum aç
+ anonymous_warning_sign_up: kaydol
advice: Notunuz herkese açıktır ve haritayı güncellemek için kullanılabilir,
bu nedenle kişisel bilgilerinizi veya telif hakkıyla korunan haritalar veya
dizin listelerinden bilgi girmeyin.
diary_comment: Коментарі щоденника
diary_entry: Запис щоденника
friend: Друг
- issue: Звіт
+ issue: Звернення
language: Мова
message: Повідомлення
node: Точка
він стане закритим.
comment_by_html: Коментар від %{user} %{time_ago}
hidden_comment_by_html: Прихований коментар від %{user} %{time_ago}
- changesetxml: XML опис набору змін
+ changesetxml: Набір змін в XML
osmchangexml: osmChange XML
paging_nav:
nodes: Точки (%{count})
- nodes_paginated: Точки (%{x}-%{y} із %{count})
+ nodes_paginated: Точки (%{x}-%{y} з %{count})
ways: Лінії (%{count})
- ways_paginated: Лінії (%{x}-%{y} із %{count})
+ ways_paginated: Лінії (%{x}-%{y} з %{count})
relations: Зв’язки (%{count})
- relations_paginated: Зв’язки (%{x}-%{y} із %{count})
+ relations_paginated: Зв’язки (%{x}-%{y} з %{count})
timeout:
sorry: На жаль, перелік наборів змін, який ви запросили, потребує забагато часу
для завантаження.
contact_the_community_html: Будь ласка, %{contact_link} зі спільнотою OpenStreetMap,
якщо ви знайшли несправне посилання або помилку. Запишіть точну URL-адресу
вашого запиту.
+ bad_request:
+ title: Хибний запит
+ description: Операція, яку ви запитали на сервері OpenStreetMap, не є дійсною
+ (HTTP 400)
forbidden:
title: Заборонено
description: Дія, яку ви намагались виконати, доступна лише адміністраторам
memorial: Меморіал
milestone: Історичний межовий стовп
mine: Копальня
- mine_shaft: Шахтний вал
+ mine_shaft: Шахтний ствол
monument: Пам’ятник
railway: Історична залізниця
roman_road: Римська дорога
other: ""
no_reports: Скарг немає
report_created_at_html: Вперше повідомлено %{datetime}
- last_resolved_at_html: Востаннє розв'язано %{datetime}
+ last_resolved_at_html: Востаннє розвʼязано %{datetime}
last_updated_at_html: В останнє оновлено %{datetime}, %{displayname}
resolve: Розв'язати
ignore: Ігнорувати
had_added_you: '%{user} додав Вас як друга в OpenStreetMap.'
see_their_profile: Ви можете побачити їх профіль на %{userurl}.
see_their_profile_html: Ви можете ознайомитись з його/її профілем - %{userurl}.
- befriend_them: Ð\92и Ñ\82акож можеÑ\82е додаÑ\82и Ñ\97Ñ\85 Ñ\83 Ñ\8fкоÑ\81Ñ\82Ñ\96 друзів %{befriendurl}.
+ befriend_them: Ð\92и Ñ\82акож можеÑ\82е додаÑ\82и Ñ\97Ñ\85 Ñ\8fк друзів %{befriendurl}.
befriend_them_html: Ви також можете додати його/її до друзів %{befriendurl}.
gpx_description:
description_with_tags_html: 'Схоже це ваш файл GPX %{trace_name}, що має опис
біля %{place}.'
commented_note_html: '%{commenter} поновив нотатку, прокоментовану вами, що
знаходиться біля %{place}.'
- details: Ð\94окладнÑ\96Ñ\88е пÑ\80о ноÑ\82аÑ\82кÑ\83 %{url}.
- details_html: Ð\94окладнÑ\96Ñ\88е пÑ\80о ноÑ\82аÑ\82кÑ\83 %{url}.
+ details: Ð\94айÑ\82е вÑ\96дповÑ\96дÑ\8c або дÑ\96знайÑ\82еÑ\81Ñ\8f бÑ\96лÑ\8cÑ\88е пÑ\80о ноÑ\82аÑ\82кÑ\83 за %{url}.
+ details_html: Ð\94айÑ\82е вÑ\96дповÑ\96дÑ\8c або дÑ\96знайÑ\82еÑ\81Ñ\8f бÑ\96лÑ\8cÑ\88е пÑ\80о ноÑ\82аÑ\82кÑ\83 за %{url}.
changeset_comment_notification:
description: 'Набір змін OpenStreetMap #%{id}'
hi: Привіт %{to_user},
partial_changeset_with_comment: з коментарем '%{changeset_comment}'
partial_changeset_with_comment_html: з коментарем '%{changeset_comment}'
partial_changeset_without_comment: без коментарів
- details: Ð\91Ñ\96лÑ\8cÑ\88е деÑ\82алей пÑ\80о змÑ\96ни, Ñ\8fкÑ\96 можÑ\83Ñ\82Ñ\8c бÑ\83Ñ\82и знайденÑ\96 в %{url}.
- details_html: Ð\91Ñ\96лÑ\8cÑ\88е деÑ\82алей пÑ\80о набÑ\96Ñ\80 змÑ\96н можна знайÑ\82и за поÑ\81иланнÑ\8fм - %{url}.
+ details: Ð\94айÑ\82е вÑ\96дповÑ\96дÑ\8c або дÑ\96знайÑ\82еÑ\81Ñ\8f бÑ\96лÑ\8cÑ\88е пÑ\80о набÑ\96Ñ\80 змÑ\96н за %{url}.
+ details_html: Ð\94айÑ\82е вÑ\96дповÑ\96дÑ\8c або дÑ\96знайÑ\82еÑ\81Ñ\8f бÑ\96лÑ\8cÑ\88е пÑ\80о набÑ\96Ñ\80 змÑ\96н за %{url}.
unsubscribe: Щоб відмовитись від отримання повідомлень для цього набору змін
за посиланням %{url}.
unsubscribe_html: Щоб відмовитись від отримання повідомлень для цього набору
preferred_languages: Типові мови
edit_preferences: Зміна вподобань
edit:
- title: Ð\97мÑ\96на налаÑ\88Ñ\82Ñ\83вань
+ title: Ð\97мÑ\96на вподобань
save: Зберегти вподобання
cancel: Скасувати
update:
new:
title: Ласкаво просимо
tab_title: Ласкаво просимо
+ login_to_authorize_html: Увійдіть до OpenStreetMap, щоб отримати доступ до %{client_app_name}.
email or username: Ел. пошта або прізвисько
password: Пароль
remember: Запам’ятати мене
lost password link: Забули пароль?
login_button: Увійти
register now: Зареєструйтеся зараз
- with external: 'Або використовуйте, облікові записи з інших ресурсів:'
+ with external: Або використовуйте, облікові записи з інших ресурсів
+ or: або
auth failure: Вибачте, вхід з цими ім’ям або паролем неможливий.
destroy:
title: Вийти
other: ""
description_without_count: GPX файл від %{user}
application:
+ basic_auth_disabled: 'HTTP Basic Authentication вимкнено: %{link}'
+ oauth_10a_disabled: 'OAuth 1.0 та 1.0a вимкнено: %{link}'
permission_denied: Вибачте, у вас недостатньо прав для виконання цієї дії.
require_cookies:
cookies_needed: Схоже, що у вас вимкнені куки. Будь ласка, увімкніть куки у
oauth2_authorizations: авторизації OAuth 2
muted_users: Стишені учасники
auth_providers:
- openid_logo_alt: Увійти з допомогою OpenID
+ openid_logo_alt: Увійти з OpenID
+ openid_login_button: Продовжити
openid:
- title: Увійти за допомогою OpenID
- alt: Увійти за допомогою OpenID URL
+ title: Увійти за OpenID
+ alt: Увійти за OpenID URL
google:
title: Увійти через Google
alt: Увійти через Google OpenID
write_redactions: Виконувати очищення даних
read_email: Отримувати адресу е-пошти
skip_authorization: Автоматичне схвалення заявки
+ for_roles:
+ moderator: Цей дозвіл призначений для дій, доступних лише модераторам
oauth_clients:
new:
title: Зареєструвати новий застосунок
users:
new:
title: Реєстрація
+ tab_title: Реєстрація
+ signup_to_authorize_html: Увійдіть до свого облікового запису OpenStreetMap,
+ щоб отримати доступ до %{client_app_name}.
no_auto_account_create: На жаль, наразі ми не в змозі створити для вас обліковий
запис автоматично.
please_contact_support_html: Будь ласка, зв’яжіться з %{support_link}, щоб домовитися
швидше.
support: підтримкою
about:
- header: Вільні й доступні для редагування
+ header: Вільні й доступні для редагування.
paragraph_1: На відміну від інших мап, OpenStreetMap повністю створено людьми,
такими ж як ви, і кожен може вільно виправляти, оновлювати, завантажувати
та використовувати дані OpenStreetMap.
- paragraph_2: Зареєструйтеся, щоб почати мапити. Ми надішлемо електронного
- листа для підтвердження вашого облікового запису.
+ paragraph_2: Зареєструйтеся, щоб почати мапити.
+ welcome: Ласкаво просимо до OpenStreetMap
+ duplicate_social_email: Якщо у вас вже є обліковий запис OpenStreetMap і ви
+ хочете використовувати стороннього постачальника ідентифікаційних даних, будь
+ ласка, увійдіть, використовуючи свій пароль, і змініть налаштування свого
+ облікового запису.
display name description: Ваше ім’я учасника, доступне всім. Ви можете змінити
його потім у ваших налаштуваннях.
+ by_signing_up_html: Реєструючись, ви приймаєте наші %{tou_link}, %{privacy_policy_link}
+ і %{contributor_terms_link}.
+ tou: умови використання
+ contributor_terms: умови співпраці
external auth: 'Автентифікація через:'
continue: Зареєструватись
terms accepted: Дякуємо за прийняття нових умов співпраці!
privacy_policy: Політикою конфіденційності
privacy_policy_title: Політика конфіденційності OSMF, включаючи розділ про адреси
електронної пошти
- use external auth: Або використовуйте, облікові записи з інших ресурсів для
+ consider_pd_html: Я вважаю, що мій внесок належать до %{consider_pd_link}.
+ consider_pd: суспільного надбання
+ or: або
+ use external auth: або використовуйте, облікові записи з інших ресурсів для
входу
terms:
title: Умови
intro: Помітили помилку або чогось не вистачає? Дайте знати іншим маперам, щоб
можна було це виправити. Перемістіть позначку в потрібне місце та додайте
пояснення проблеми.
+ anonymous_warning_html: Ви не ввійшли в систему. Будь ласка, %{log_in} або %{sign_up},
+ якщо ви хочете отримувати оновлення щодо своєї нотатки.
+ anonymous_warning_log_in: увійдіть
+ anonymous_warning_sign_up: зареєструйтесь
advice: Ваша нотатка є публічною та може бути використана для оновлення мапи.
Будь ласка, не додавайте персональні дані або інформацію, яка міститься на
захищених авторським правом мапах чи каталогах.
edit_help: Перемістіть мапу і наблизьтесь до місця, яке ви бажаєте змінити, потім
клацніть тут.
directions:
- ascend: Ð\92гоÑ\80Ñ\83
+ ascend: Ð\9fÑ\96дйом
engines:
fossgis_osrm_bike: Велосипед (OSRM)
fossgis_osrm_car: Машина (OSRM)
fossgis_valhalla_bicycle: Велосипед (Valhalla)
fossgis_valhalla_car: Машина (Valhalla)
fossgis_valhalla_foot: Пішки (Valhalla)
- descend: Ð\92низ
+ descend: СпÑ\83Ñ\81к
directions: Маршрут
distance: Відстань
distance_m: '%{distance} м'
contact: 联系
contact_the_community_html: 如果您发现有损坏的链接/错误,请随时%{contact_link} OpenStreetMap
社区。并记下您请求的确切 URL。
+ bad_request:
+ title: 错误请求
+ description: 您在 OpenStreetMap 服务器上请求的操作无效 (HTTP 400)
forbidden:
title: 禁止
description: 您在 OpenStreetMap 服务器上请求的操作仅限管理员使用(HTTP 403)
subject_other: '[OpenStreetMap] %{commenter} 已经解决了一个您感兴趣的注记'
your_note: '%{commenter} 解决了您在 %{place} 附近的一个注记。'
your_note_html: '%{commenter} 解决了您在 %{place} 附近的一个注记。'
- commented_note: '%{commenter} 解决了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
- commented_note_html: '%{commenter} 解决了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
+ commented_note: '%{commenter} 解决了您留言的地图注记。该注记位于 %{place} 附近。'
+ commented_note_html: '%{commenter} 解决了您留言的地图注记。该注记位于 %{place} 附近。'
reopened:
subject_own: '[OpenStreetMap] %{commenter} 重新激活了您的一个注记'
subject_other: '[OpenStreetMap] %{commenter} 重新激活了您感兴趣的一个注记'
your_note_html: '%{commenter} 重新激活了您在 %{place} 附近的一个注记。'
commented_note: '%{commenter} 重新激活了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
commented_note_html: '%{commenter} 重新激活了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
- details: 更多关于笔记的详细信息可以在%{url}找到。
- details_html: 更多关于笔记的详细信息可以在%{url}找到。
+ details: 在 %{url} 回复或了解更多有关注记的信息。
+ details_html: 在 %{url} 回复或了解更多有关注记的信息。
changeset_comment_notification:
description: 'OpenStreetMap 变更集 #%{id}'
hi: 您好,%{to_user}:
partial_changeset_with_comment: 带评论“%{changeset_comment}”
partial_changeset_with_comment_html: 带有评论“%{changeset_comment}”
partial_changeset_without_comment: 没有评论
- details: 更多关于变更集的详细信息可以在 %{url} 找到。
- details_html: 更多有关变更集的详细信息,请参见 %{url}。
+ details: 在 %{url} 回复或了解更多有关变更集的信息。
+ details_html: 在 %{url} 回复或了解更多有关变更集的信息。
unsubscribe: 您可访问%{url}以从该变更集中退订。
unsubscribe_html: 您可访问%{url}以从该变更集中退订。
confirmations:
other: 来自 %{user} 的带 %{count} 点的GPX文件
description_without_count: 来自 %{user} 的 GPX 文件
application:
+ basic_auth_disabled: HTTP 基本身份验证已禁用:%{link}
+ oauth_10a_disabled: OAuth 1.0 和 1.0a 已禁用:%{link}
permission_denied: 您没有权限来执行此操作
require_cookies:
cookies_needed: 您似乎停用了 cookie - 请在继续操作前启用您的浏览器 cookie。
new:
title: 新注记
intro: 发现错误或遗漏了什么?请告诉其他绘图者以便于我们更正错误。将标记移动到正确的位置并输入备注说明问题。
+ anonymous_warning_html: 您尚未登录。如果您想接收笔记的更新信息,请%{log_in}或%{sign_up}。
+ anonymous_warning_log_in: 登录
+ anonymous_warning_sign_up: 注册
advice: 您的注释会公开,并可能用于更新地图,所以不要输入个人信息,或是来自版权保护地图的信息或目录列表。
add: 添加注记
javascripts:
# Author: Winston Sung
# Author: Wrightbus
# Author: Xiplus
+# Author: Yuchenglinedu
# Author: 予弦
# Author: 列维劳德
# Author: 捍粵者
errors:
messages:
invalid_email_address: 似乎不是有效的電子郵件信箱地址。
- email_address_not_routable: ä¸\8då\8f¯ç¹\9e送
+ email_address_not_routable: ä¸\8då\8f¯ç\99¼送
display_name_is_user_n: 不能是「user_n」除非「n」是您的使用者 ID
models:
user_mute:
tracetag: 軌跡標籤
user: 使用者
user_preference: 使用者偏好設定
- user_token: 使用者令牌
+ user_token: 使用者Token
way: 路徑
way_node: 路徑節點
way_tag: 路徑標籤
attributes:
client_application:
- name: 名稱(必需)
- url: 主程式 URL(必需)
- callback_url: 回呼 (Callback) URL
+ name: 名稱(必填)
+ url: 主要應用程式 URL(必填)
+ callback_url: 回撥 (Callback) URL
support_url: 支援 URL
- allow_read_prefs: è®\80å\8f\96ä»\96å\80\91ç\9a\84使ç\94¨è\80\85å\81\8f好è¨å®\9a
- allow_write_prefs: ä¿®æ\94¹ä»\96å\80\91ç\9a\84使ç\94¨è\80\85å\81\8f好è¨å®\9a
+ allow_read_prefs: 讀取使用者偏好設定
+ allow_write_prefs: 修改使用者偏好設定
allow_write_diary: 建立日記、評論和加入好友
allow_write_api: 修改地圖
- allow_read_gpx: 讀取他們的私人GPS軌跡
+ allow_read_gpx: 讀取個人GPS軌跡
allow_write_gpx: 上傳 GPS 軌跡
allow_write_notes: 修改註記
diary_comment:
latitude: 緯度
longitude: 經度
public: 公開
- description: 說明
+ description: 描述
gpx_file: 上傳 GPX 檔案
visibility: 能見度
tagstring: 標籤
recipient: 收件者
redaction:
title: 標題
- description: 說明
+ description: 描述
report:
- category: 選擇您回報的原因
- details: è«\8bæ\8f\90ä¾\9bæ\9c\89é\97\9cå\95\8fé¡\8cç\9a\84æ\9b´å¤\9aäº\9b詳æ\83\85ï¼\88å¿\85é\9c\80)
+ category: 選擇你回報的原因
+ details: è«\8bæ\8f\90ä¾\9bæ\9b´å¤\9aæ\9c\89é\97\9cå\95\8fé¡\8cç\9a\84詳æ\83\85ï¼\88å¿\85å¡«)
user:
- auth_provider: 認證提供方
+ auth_provider: 認證提供者
auth_uid: 認證 UID
email: 電子郵件
new_email: 新的電子郵件地址
- active: 開啟中
+ active: 活躍
display_name: 顯示名稱
- description: å\9fºæ\9c¬è³\87æ\96\99說æ\98\8e
+ description: å\80\8b人æª\94æ¡\88æ\8f\8fè¿°
home_lat: 緯度
home_lon: 經度
languages: 偏好的語言
help:
doorkeeper/application:
confidential: 應用程式會在客戶端密鑰可以維持機密時使用(本地端移動應用程式和單一頁面應用程式不保密)
- redirect_uri: 一行一URI
+ redirect_uri: 每條 URI 使用一行
trace:
- tagstring: 逗點分隔
+ tagstring: 以逗點分隔
user_block:
- reason: 封鎖使用者的理由。請盡量以平靜、合理態度詳細描述情況,並記住訊息公開可見。請注意,並非所有使用者都了解社群術語,所以請盡量使用通俗說法。
+ reason: 封鎖使用者的理由。請盡量以平靜、合理的態度詳細描述情況,並記住訊息公開可見。請注意,並非所有使用者都了解社群術語,所以請盡量使用通俗說法。
needs_view: 解封前是否需要使用者登入?
user:
- new_email: (永不公開顯示)
+ new_email: (永遠不公開顯示)
datetime:
distance_in_words_ago:
about_x_hours:
about_x_years:
one: 約 %{count} 年前
other: 約 %{count} 年前
- almost_x_years:
- one: 將近 %{count} 年前
- other: 將近 %{count} 年前
+ almost_x_years: 將近 %{count} 年前
half_a_minute: 半分鐘前
- less_than_x_seconds:
- one: 小於 %{count} 秒前
- other: 小於 %{count} 秒前
- less_than_x_minutes:
- one: 小於 %{count} 分前
- other: 小於 %{count} 分前
+ less_than_x_seconds: 不到 %{count} 秒前
+ less_than_x_minutes: 不到 %{count} 分鐘前
over_x_years:
- one: 超過 %{count} 年前
- other: 超過 %{count} 年前
+ one: 超過1年前
+ other: 超過%{count}年前
x_seconds:
- one: '%{count} 秒前'
- other: '%{count} 秒前'
- x_minutes:
- one: '%{count} 分鐘前'
- other: '%{count} 分鐘前'
- x_days:
- one: '%{count} 天前'
- other: '%{count} 天前'
+ one: 1秒前
+ other: '%{count}秒前'
+ x_minutes: '%{count} 分鐘前'
+ x_days: '%{count} 天前'
x_months:
one: '%{count} 個月前'
other: '%{count} 個月前'
- x_years:
- one: '%{count} 年前'
- other: '%{count} 年前'
+ x_years: '%{count} 年前'
printable_name:
current_and_old_links_html: '%{current_link},%{old_link}'
editor:
reopened_at_by_html: 於%{when}由%{user}重新開啟
rss:
title: OpenStreetMap 註記
- description_all: å·²å ±å\91\8aã\80\81è©\95è«\96ã\80\81æ\88\96æ\98¯é\97\9cé\96\89註è¨\98ç\9a\84清單
+ description_all: å ±å\91\8aã\80\81è©\95è«\96ã\80\81æ\88\96é\97\9cé\96\89ç\9a\84註è¨\98清單
description_area: 在你的區域[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]所報告、評論或關閉的註記的清單
description_item: 註記 %{id} 的 RSS feed
opened: 新的註記 (在 %{place} 附近)
commented: 新的評論 (在 %{place} 附近)
closed: 關閉的註記 (在 %{place} 附近)
- reopened: 重新開啟的註記 (在 %{place} 附近)
+ reopened: 重新開啟的註記(在%{place}附近)
entry:
comment: 評論
full: 註記原文
deletions:
show:
title: 刪除我的帳號
- warning: 警告!帳號刪除處理是完全徹底、無法還原的。
+ warning: 警告!帳號刪除程序不可逆轉,無法復原。
delete_account: 刪除帳號
- delete_introduction: 您可以使用下方按鈕來刪除您的 OpenStreetMap 帳號。並請注意以下細節:
- delete_profile: 您的個人檔案資訊,包含像是您的頭像圖片、描述,以及住家位置將會移除。
- delete_display_name: 您的顯示名稱將會移除,並且會被其他帳號拿來重覆使用。
- retain_caveats: 然而,即使您的帳號被刪除後,一些關於您的資訊仍會繼續保留在 OpenStreetMap 裡:
- retain_edits: 若有您對於地圖資料庫的編輯次數,這將會繼續保留。
- retain_traces: 若有您上傳過的軌跡資料內容,這將會繼續保留。
- retain_diary_entries: 若有您的日記項目與日記評論內容,這將會繼續保留。
- retain_notes: 若有您的地圖註記與註記評論內容,這將會繼續保留;不過會隱藏起來。
- retain_changeset_discussions: 若有您的變更集討論,這將會繼續保留。
- retain_email: 您的電子郵件地址將會繼續保留。
- recent_editing_html: 因為您最近有作過編輯,目前無法刪除您的帳號。在 %{time} 後才可刪除。
- confirm_delete: 您確定嗎?
+ delete_introduction: 你可以使用下方按鈕來刪除你的 OpenStreetMap 帳號。並請留意以下細節:
+ delete_profile: 你的個人檔案資訊,包含:例如你的頭像圖片、描述,以及住家位置將會移除。
+ delete_display_name: 你的顯示名稱將會移除,並且會被其他帳號拿來重覆使用。
+ retain_caveats: 然而,即使你的帳號被刪除後,一些關於你的資訊仍會繼續保留在 OpenStreetMap 裡:
+ retain_edits: 你對於地圖資料庫的編輯次數,假如存在,這將會繼續保留。
+ retain_traces: 若有你上傳過的軌跡資料內容,這將會繼續保留。
+ retain_diary_entries: 若有你的日誌項目與日誌評論內容,這將會繼續保留。
+ retain_notes: 若有你的地圖註記與註記評論內容,這將會繼續保留;不過會隱藏起來。
+ retain_changeset_discussions: 若有你的變更集討論,這將會繼續保留。
+ retain_email: 你的電子郵件地址將會繼續保留。
+ recent_editing_html: 因為你最近有編輯過,目前無法刪除你的帳號。在 %{time} 後才可刪除。
+ confirm_delete: 你確定嗎?
cancel: 取消
accounts:
edit:
heading: 公開編輯
enabled: 已開啟。非匿名且可以編輯資料。
enabled link text: 這是什麼?
- disabled: 已停用且不能編輯資料,所有先前的編輯都會成為匿名的。
+ disabled: 已停用且不能編輯資料,所有你先前的編輯都會成為匿名的。
disabled link text: 為什麼我不能編輯?
contributor terms:
heading: 貢獻者條款
- agreed: 您已同意新的貢獻者條款。
- not yet agreed: 您未同意新的貢獻者條款。
+ agreed: 你已同意新的貢獻者條款。
+ not yet agreed: 你未同意新的貢獻者條款。
review link text: 請跟隨此連結,方便你檢視並接受新的貢獻者條款。
- agreed_with_pd: 您亦同意將您的編輯放到公共領域
+ agreed_with_pd: 你亦同意將你的編輯放到公共領域
link text: 這是什麼?
save changes button: 儲存變更
delete_account: 刪除帳號…
go_public:
heading: 公開編輯
- currently_not_public: 目前你的編輯都是暱名的,其他人無法寄給你訊息或是知道你的位置。要讓別人知道你編輯什麼,以及透過網站聯繫你,你點下面的按鈕。
+ currently_not_public: 目前你的編輯都是暱名的,其他人無法寄給你訊息或是知道你的位置。要讓別人知道你編輯什麼,以及透過網站聯繫你,請你點以下的按鈕。
only_public_can_edit: 自從 API 0.6 版本上線,只有公共帳號的使用者可以編輯地圖資料。
find_out_why_html: (%{link})。
- find_out_why: 找出來為什麼
- email_not_revealed: 你的電子郵件地址不會揭露公開。
+ find_out_why: 找出原因
+ email_not_revealed: 你的電子郵件地址不會公開洩漏。
not_reversible: 這項操作無法撤銷,所有的新使用者都是預設公開的。
- make_edits_public_button: 將我所有的編輯設為公開
+ make_edits_public_button: 將與我有關的所有的編輯設為公開
update:
- success_confirm_needed: 使用者資訊成功的更新。請檢查您的電子郵件,以確認收到新電子郵件地址的通知。
+ success_confirm_needed: 使用者資訊成功的更新。請檢查你的電子郵件,以便確認收到新電子郵件地址的通知。
success: 使用者資訊已成功更新。
destroy:
success: 帳號已刪除。
version: 版本
redacted_version: 編修版本
in_changeset: 變更集
- anonymous: 匿名
+ anonymous: 匿名使用者
no_comment: (沒有評論)
part_of: 屬於:
part_of_relations:
- one: '%{count} 個關聯'
+ one: 1 個關聯
other: '%{count} 個關聯'
part_of_ways:
one: '%{count} 條路徑'
other: '%{count} 條路徑'
download_xml: 下載 XML
view_history: 檢視歷史
- view_unredacted_history: 查看未編修的歷史
+ view_unredacted_history: 查看未編輯的歷史記錄
view_details: 檢視詳細資料
view_redacted_data: 查看編修資料
- view_redaction_message: 查看編修訊息
+ view_redaction_message: 查看密文訊息
location: 位置:
node:
title_html: 節點:%{name}
contact: 聯絡
contact_the_community_html: 如果您發現有損壞的連結/錯誤,請隨時%{contact_link}OpenStreetMap 社群。並請記下您的請求的確切
URL 位址。
+ bad_request:
+ title: 錯誤請求
+ description: 您在 OpenStreetMap 伺服器上請求的操作無效(HTTP 400)
forbidden:
title: Forbidden
description: 您在 OpenStreetMap 伺服器上請求的運作僅限管理員使用(HTTP 403)
commented_note_html: '%{commenter} 在你感興趣的地圖註記評論。該註記在 %{place} 附近。'
closed:
subject_own: '[OpenStreetMap] %{commenter} 解決你其中一筆註記 %{commenter}'
- subject_other: '[OpenStreetMap]%{commenter} 已經解決一筆你興趣的註記'
- your_note: '%{commenter} 已經解決你其中一筆接近 %{place} 的註記。'
- your_note_html: '%{commenter} 已經解決你其中一筆接近 %{place} 的註記。'
- commented_note: '%{commenter} 已經解決一筆你留言過的地圖註記。這筆在 %{place} 附近。'
- commented_note_html: '%{commenter} 已經解決一筆你留言過的地圖註記。這筆在 %{place} 附近。'
+ 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} 再次開啟你感興趣的註記。'
commented_note: '%{commenter} 重新開啟了一個您曾評論的地圖註記。該註記位於 %{place} 附近。'
commented_note_html: '%{commenter} 重新開啟了一個您曾評論的地圖註記。該註記位於 %{place} 附近。'
details: 關於註記的更多詳細資料可在 %{url} 找到。
- details_html: 關於註記的更多詳細資料可在 %{url} 找到。
+ details_html: 在%{url}回覆或是瞭解更多有關註記的訊息。
changeset_comment_notification:
description: 'OpenStreetMap 變更集 #%{id}'
hi: 嗨 %{to_user},
partial_changeset_with_comment: 評論 "%{changeset_comment}"
partial_changeset_with_comment_html: 評論 "%{changeset_comment}"
partial_changeset_without_comment: 沒有評論
- details: 關於變更集的詳情可在 %{url} 找到。
- details_html: 關於變更集的詳情可在 %{url} 找到。
+ details: 在 %{url} 回覆或瞭解更多有關於變更集的資訊。
+ details_html: 在 %{url} 回覆或瞭解更多有關變更集的資訊。
unsubscribe: 您可以在 %{url} 取消訂閱此變更集的更新內容。
unsubscribe_html: 您可以在 %{url} 取消訂閱此變更集的更新內容。
confirmations:
search: 搜尋
get_directions: 取得方向指引
get_directions_title: 尋找兩點之間的路線
- from: 來自
+ from: 從
to: 到
where_am_i: 這是哪裡?
where_am_i_title: 使用搜尋引擎描述目前的位置
other: 由 %{user} 上傳的 GPX 檔案,含有 %{count} 點
description_without_count: 由 %{user} 上傳的 GPX 檔案
application:
+ basic_auth_disabled: HTTP 基本認證已停用:%{link}
+ oauth_10a_disabled: OAuth 1.0 與 1.0a 已停用:%{link}
permission_denied: 您沒有權限來存取該操作。
require_cookies:
cookies_needed: 您似乎已停用 cookies - 請在瀏覽器中開啟 cookies,然後繼續。
write_redactions: 編寫地圖資料
read_email: 讀取使用者電子郵件位址
skip_authorization: 自動核准申請
+ for_roles:
+ moderator: 此權限用於僅可由仲裁員執行的操作
oauth_clients:
new:
title: 註冊新的應用程式
report_link_html: 如果此註記含有需要移除的敏感資訊,您可以%{link}。
other_problems_resolve: 對於註記的所有其他問題,您可以依據評論內容來自行處理。
other_problems_resolved: 對於其他類型回報,解決已經足夠了。
- disappear_date_html: 已經解決的註記會從地圖的 %{disappear_in} 消失
+ disappear_date_html: 已解決的註記會在%{disappear_in}後從地圖中消失
new:
title: 新增註記
intro: 發現錯誤或缺少些什麼東西嗎?請告訴其他地圖製作者以便於我們處理。將標記移動到正確的位置並輸入註記,以解釋問題。
+ anonymous_warning_html: 您尚未登入。若您想收到您的註記更新內容,請%{log_in}或%{sign_up}。
+ anonymous_warning_log_in: 登入
+ anonymous_warning_sign_up: 註冊
advice: 您的註記已公開並可用於更新地圖,因此請不要輸入個人訊息,或是來自於具版權保護地圖的訊息以及目錄清單。
add: 送出註記
javascripts:
resources :redactions
# errors
+ match "/400", :to => "errors#bad_request", :via => :all
match "/403", :to => "errors#forbidden", :via => :all
match "/404", :to => "errors#not_found", :via => :all
match "/500", :to => "errors#internal_server_error", :via => :all
#memcache_servers: []
# Enable HTTP basic authentication support
basic_auth_support: true
+# Enable OAuth 1.0/1.0a registration
+oauth_10_registration: true
# Enable legacy OAuth 1.0 support
oauth_10_support: true
-oauth_10_registration: true
+# Enable OAuth 1.0a support
+oauth_10a_support: true
# URL of Nominatim instance to use for geocoding
nominatim_url: "https://nominatim.openstreetmap.org/"
# Default editor
# The base class for API Errors.
class APIError < RuntimeError
def initialize(message = "Generic API Error")
- super(message)
+ super
end
def status
(spammy_phrases * 40)
end
+ def image
+ nil
+ end
+
protected
def simple_format(text)
class Markdown < Base
def to_html
- linkify(sanitize(Kramdown::Document.new(self).to_html), :all)
+ linkify(sanitize(document.to_html), :all)
end
def to_text
to_s
end
+
+ def image
+ return @image if defined? @image
+
+ @image = first_image_element(document.root)&.attr&.[]("src")
+ end
+
+ private
+
+ def document
+ @document ||= Kramdown::Document.new(self)
+ end
+
+ def first_image_element(element)
+ return element if element.type == :img
+
+ element.children.find do |child|
+ nested_image = first_image_element(child)
+ break nested_image if nested_image
+ end
+ end
end
class Text < Base
assert_equal "online", js["api"]["status"]["gpx"]
assert_equal Settings.imagery_blacklist.length, js["policy"]["imagery"]["blacklist"].length
end
+
+ def test_capabilities_api_readonly
+ with_settings(:status => "api_readonly") do
+ get api_capabilities_path
+ assert_response :success
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "status[database='online']", :count => 1
+ assert_select "status[api='readonly']", :count => 1
+ assert_select "status[gpx='online']", :count => 1
+ end
+ end
+ end
+ end
+
+ def test_capabilities_api_offline
+ with_settings(:status => "api_offline") do
+ get api_capabilities_path
+ assert_response :success
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "status[database='online']", :count => 1
+ assert_select "status[api='offline']", :count => 1
+ assert_select "status[gpx='online']", :count => 1
+ end
+ end
+ end
+ end
+
+ def test_capabilities_database_readonly
+ with_settings(:status => "database_readonly") do
+ get api_capabilities_path
+ assert_response :success
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "status[database='readonly']", :count => 1
+ assert_select "status[api='readonly']", :count => 1
+ assert_select "status[gpx='readonly']", :count => 1
+ end
+ end
+ end
+ end
+
+ def test_capabilities_database_offline
+ with_settings(:status => "database_offline") do
+ get api_capabilities_path
+ assert_response :success
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "status[database='offline']", :count => 1
+ assert_select "status[api='offline']", :count => 1
+ assert_select "status[gpx='offline']", :count => 1
+ end
+ end
+ end
+ end
+
+ def test_capabilities_gpx_offline
+ with_settings(:status => "gpx_offline") do
+ get api_capabilities_path
+ assert_response :success
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "status[database='online']", :count => 1
+ assert_select "status[api='online']", :count => 1
+ assert_select "status[gpx='offline']", :count => 1
+ end
+ end
+ end
+ end
end
end
put user_preferences_path, :params => "nonsense", :headers => auth_header
end
assert_response :bad_request
+
+ # try a put with unicode characters
+ assert_no_difference "UserPreference.count" do
+ put user_preferences_path, :params => "<osm><preferences><preference k='kêy' v='néw_vâlué'/><preference k='nêw_kêy' v='vâlué'/></preferences></osm>", :headers => auth_header
+ end
+ assert_response :success
+ assert_equal "text/plain", @response.media_type
+ assert_equal "", @response.body
+ assert_equal "néw_vâlué", UserPreference.find([user.id, "kêy"]).v
+ assert_equal "vâlué", UserPreference.find([user.id, "nêw_kêy"]).v
+ assert_raises ActiveRecord::RecordNotFound do
+ UserPreference.find([user.id, "some_key"])
+ end
end
##
assert_equal "text/plain", @response.media_type
assert_equal "", @response.body
assert_equal "newer_value", UserPreference.find([user.id, "new_key"]).v
+
+ # try changing the value of a preference to include unicode characters
+ assert_difference "UserPreference.count", 1 do
+ put user_preference_path(:preference_key => "nêw_kêy"), :params => "néwèr_vâlué", :headers => auth_header
+ end
+ assert_response :success
+ assert_equal "text/plain", @response.media_type
+ assert_equal "", @response.body
+ assert_equal "néwèr_vâlué", UserPreference.find([user.id, "nêw_kêy"]).v
end
##
assert_response :success
assert_select "osm[version]", :count => 0
end
+
+ def test_versions_available_while_offline
+ with_settings(:status => "api_offline") do
+ get api_versions_path
+ assert_response :success
+ assert_select "osm[generator='#{Settings.generator}']", :count => 1 do
+ assert_select "api", :count => 1 do
+ assert_select "version", Settings.api_version
+ end
+ end
+ end
+ end
end
end
check_index_result(changesets.last(20))
end
+ ##
+ # This should report an error
+ def test_index_invalid_xhr
+ %w[-1 0 fred].each do |id|
+ get history_path(:format => "html", :list => "1", :max_id => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
##
# This should display the last 20 changesets closed in a specific area
def test_index_bbox
assert_select "li.page-item.disabled span.page-link", :text => "Newer Entries", :count => 1
end
+ def test_index_invalid_paged
+ # Try some invalid paged accesses
+ %w[-1 0 fred].each do |id|
+ get diary_entries_path(:before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get diary_entries_path(:after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
def test_rss
create(:language, :code => "de")
create(:diary_entry, :language_code => "en")
end
end
+ def test_show_og_image
+ user = create(:user)
+ diary_entry = create(:diary_entry, :user => user, :body => "![some picture](https://example.com/picture.jpg)")
+
+ get diary_entry_path(user, diary_entry)
+ assert_response :success
+ assert_dom "head meta[property='og:image']" do
+ assert_dom "> @content", "https://example.com/picture.jpg"
+ end
+ end
+
+ def test_show_og_image_with_relative_uri
+ user = create(:user)
+ diary_entry = create(:diary_entry, :user => user, :body => "![some local picture](/picture.jpg)")
+
+ get diary_entry_path(user, diary_entry)
+ assert_response :success
+ assert_dom "head meta[property='og:image']" do
+ assert_dom "> @content", "#{root_url}picture.jpg"
+ end
+ end
+
def test_hide
user = create(:user)
diary_entry = create(:diary_entry, :user => user)
assert_response :not_found
end
+ def test_comments_invalid_paged
+ user = create(:user)
+
+ %w[-1 0 fred].each do |id|
+ get diary_comments_path(:display_name => user.display_name, :before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get diary_comments_path(:display_name => user.display_name, :after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
def test_subscribe_page
user = create(:user)
other_user = create(:user)
class ErrorsControllerTest < ActionDispatch::IntegrationTest
def test_routes
+ assert_routing(
+ { :path => "/400", :method => :get },
+ { :controller => "errors", :action => "bad_request" }
+ )
assert_routing(
{ :path => "/403", :method => :get },
{ :controller => "errors", :action => "forbidden" }
)
end
+ def test_bad_request
+ get "/400"
+ assert_response :bad_request
+ end
+
def test_forbidden
get "/403"
assert_response :forbidden
assert_select "table.note_list tbody tr", :count => 10
end
+ def test_index_invalid_paged
+ user = create(:user)
+
+ %w[-1 0 fred].each do |page|
+ get user_notes_path(user, :page => page)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
def test_empty_page
user = create(:user)
get user_notes_path(user)
assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
end
+ def test_index_invalid_paged
+ # Try some invalid paged accesses
+ %w[-1 0 fred].each do |id|
+ get traces_path(:before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get traces_path(:after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
# Check the RSS feed
def test_rss
user = create(:user)
check_no_page_link "Older Blocks"
end
+ ##
+ # test the index action with invalid pages
+ def test_index_invalid_paged
+ %w[-1 0 fred].each do |id|
+ get user_blocks_path(:before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get user_blocks_path(:after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
##
# test the show action
def test_show
check_no_page_link "Older Blocks"
end
+ ##
+ # test the blocks_on action with invalid pages
+ def test_blocks_on_invalid_paged
+ user = create(:user)
+
+ %w[-1 0 fred].each do |id|
+ get user_blocks_on_path(user, :before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get user_blocks_on_path(user, :after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
##
# test the blocks_by action
def test_blocks_by
check_no_page_link "Older Blocks"
end
+ ##
+ # test the blocks_by action with invalid pages
+ def test_blocks_by_invalid_paged
+ user = create(:moderator_user)
+
+ %w[-1 0 fred].each do |id|
+ get user_blocks_by_path(user, :before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get user_blocks_by_path(user, :after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
private
def check_user_blocks_table(user_blocks)
check_no_page_link "Older Users"
end
+ def test_index_get_invalid_paginated
+ session_for(create(:administrator_user))
+
+ %w[-1 0 fred].each do |id|
+ get users_path(:before => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+
+ get users_path(:after => id)
+ assert_redirected_to :controller => :errors, :action => :bad_request
+ end
+ end
+
private
def check_no_page_link(name)
assert_equal "Test", link[:title]
link = wikipedia_link("wikipedia", "de:Test")
- assert_equal "https://de.wikipedia.org/wiki/de:Test?uselang=en", link[:url]
+ assert_equal "https://de.wikipedia.org/wiki/Test?uselang=en", link[:url]
assert_equal "de:Test", link[:title]
+ link = wikipedia_link("wikipedia:fr", "Portsea")
+ assert_equal "https://fr.wikipedia.org/wiki/Portsea?uselang=en", link[:url]
+ assert_equal "Portsea", link[:title]
+
link = wikipedia_link("wikipedia:fr", "de:Test")
- assert_equal "https://fr.wikipedia.org/wiki/de:Test?uselang=en", link[:url]
+ assert_equal "https://de.wikipedia.org/wiki/Test?uselang=en", link[:url]
assert_equal "de:Test", link[:title]
link = wikipedia_link("wikipedia", "de:Englischer Garten (München)#Japanisches Teehaus")
- assert_equal "https://de.wikipedia.org/wiki/de:Englischer Garten (München)?uselang=en#Japanisches_Teehaus", link[:url]
+ assert_equal "https://de.wikipedia.org/wiki/Englischer Garten (München)?uselang=en#Japanisches_Teehaus", link[:url]
assert_equal "de:Englischer Garten (München)#Japanisches Teehaus", link[:title]
link = wikipedia_link("wikipedia", "de:Alte Brücke (Heidelberg)#Brückenaffe")
- assert_equal "https://de.wikipedia.org/wiki/de:Alte Brücke (Heidelberg)?uselang=en#Br%C3%BCckenaffe", link[:url]
+ assert_equal "https://de.wikipedia.org/wiki/Alte Brücke (Heidelberg)?uselang=en#Br%C3%BCckenaffe", link[:url]
assert_equal "de:Alte Brücke (Heidelberg)#Brückenaffe", link[:title]
link = wikipedia_link("wikipedia", "de:Liste der Baudenkmäler in Eichstätt#Brückenstraße 1, Ehemaliges Bauernhaus")
- assert_equal "https://de.wikipedia.org/wiki/de:Liste der Baudenkmäler in Eichstätt?uselang=en#Br%C3%BCckenstra%C3%9Fe_1%2C_Ehemaliges_Bauernhaus", link[:url]
+ assert_equal "https://de.wikipedia.org/wiki/Liste der Baudenkmäler in Eichstätt?uselang=en#Br%C3%BCckenstra%C3%9Fe_1%2C_Ehemaliges_Bauernhaus", link[:url]
assert_equal "de:Liste der Baudenkmäler in Eichstätt#Brückenstraße 1, Ehemaliges Bauernhaus", link[:title]
I18n.with_locale "pt-BR" do
link = wikipedia_link("wikipedia", "zh-classical:Test#Section")
- assert_equal "https://zh-classical.wikipedia.org/wiki/zh-classical:Test?uselang=pt-BR#Section", link[:url]
+ assert_equal "https://zh-classical.wikipedia.org/wiki/Test?uselang=pt-BR#Section", link[:url]
assert_equal "zh-classical:Test#Section", link[:title]
end
link = wikipedia_link("subject:wikipedia", "en:Catherine McAuley")
- assert_equal "https://en.wikipedia.org/wiki/en:Catherine McAuley?uselang=en", link[:url]
+ assert_equal "https://en.wikipedia.org/wiki/Catherine McAuley?uselang=en", link[:url]
assert_equal "en:Catherine McAuley", link[:title]
link = wikipedia_link("foo", "Test")
def test_openid_logo
logo = openid_logo
- assert_match %r{^<img .* src="/images/openid_small.png" />$}, logo
+ assert_match %r{^<img .* src="/images/openid.svg" .* />$}, logo
end
def test_auth_button
assert_select "form > div > input.is-invalid#user_email"
end
- def test_user_create_association_bad_auth_provider
- assert_difference("User.count", 0) do
- assert_no_difference("ActionMailer::Base.deliveries.size") do
- perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => "test@example.com",
- :display_name => "new_tester",
- :pass_crypt => "testtest",
- :pass_crypt_confirmation => "testtest",
- :auth_provider => "noprovider",
- :auth_uid => "123454321",
- :consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "noprovider", :origin => "/user/new")
- post response.location
- end
- end
- end
- assert_response :not_found
- end
-
- def test_user_create_association_no_auth_uid
- OmniAuth.config.mock_auth[:google] = :invalid_credentials
- assert_difference("User.count", 0) do
- assert_no_difference("ActionMailer::Base.deliveries.size") do
- perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => "test@example.com",
- :display_name => "new_tester",
- :pass_crypt => "testtest",
- :pass_crypt_confirmation => "testtest",
- :auth_provider => "google",
- :consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
- post response.location
- end
- end
- end
- follow_redirect!
- assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/user/new")
- end
-
def test_user_create_association_submit_duplicate_email
dup_email = create(:user).email
display_name = "new_tester"
def test_user_create_openid_success
new_email = "newtester-openid@osm.org"
display_name = "new_tester-openid"
+ openid_url = "http://localhost:1000/new.tester"
auth_uid = "http://localhost:1123/new.tester"
OmniAuth.config.add_mock(:openid,
assert_difference("User.count") do
assert_difference("ActionMailer::Base.deliveries.size", 1) do
perform_enqueued_jobs do
- post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+ post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
+ assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
follow_redirect!
assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
:auth_provider => "openid", :auth_uid => auth_uid
:params => { :user => { :email => new_email,
:display_name => display_name,
:auth_provider => "openid",
- :auth_uid => "http://localhost:1123/new.tester",
+ :auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- post response.location
- follow_redirect!
end
end
end
def test_user_create_openid_failure
OmniAuth.config.mock_auth[:openid] = :connection_failed
- new_email = "newtester-openid2@osm.org"
- display_name = "new_tester-openid2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "openid",
- :auth_uid => "http://localhost:1123/new.tester",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+ post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
end
def test_user_create_openid_redirect
+ openid_url = "http://localhost:1000/new.tester"
auth_uid = "http://localhost:1123/new.tester"
new_email = "redirect_tester_openid@osm.org"
display_name = "redirect_tester_openid"
assert_difference("User.count") do
assert_difference("ActionMailer::Base.deliveries.size", 1) do
perform_enqueued_jobs do
- post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+ post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
+ assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
follow_redirect!
assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
:auth_provider => "openid", :auth_uid => auth_uid
:auth_provider => "openid",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
follow_redirect!
end
end
:auth_uid => auth_uid,
:consider_pd => "1" },
:email_hmac => email_hmac }
- assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "google")
- follow_redirect!
assert_redirected_to welcome_path
follow_redirect!
end
def test_user_create_google_failure
OmniAuth.config.mock_auth[:google] = :connection_failed
- new_email = "newtester-google2@osm.org"
- display_name = "new_tester-google2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "google",
- :auth_uid => "123454321",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "google")
+ post auth_path(:provider => "google", :origin => "/user/new")
+ assert_response :redirect
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
:auth_provider => "google",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "google")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
+ assert_response :redirect
follow_redirect!
end
end
:auth_uid => auth_uid,
:consider_pd => "1" },
:email_hmac => email_hmac }
- assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "facebook")
- follow_redirect!
assert_redirected_to welcome_path
follow_redirect!
end
def test_user_create_facebook_failure
OmniAuth.config.mock_auth[:facebook] = :connection_failed
- new_email = "newtester-facebook2@osm.org"
- display_name = "new_tester-facebook2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "facebook",
- :auth_uid => "123454321",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "facebook")
+ post auth_path(:provider => "facebook", :origin => "/user/new")
+ assert_response :redirect
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
:auth_provider => "facebook",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "facebook")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
assert_response :redirect
follow_redirect!
end
:auth_uid => auth_uid,
:consider_pd => "1" },
:email_hmac => email_hmac }
- assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "microsoft")
- follow_redirect!
assert_redirected_to welcome_path
follow_redirect!
end
def test_user_create_microsoft_failure
OmniAuth.config.mock_auth[:microsoft] = :connection_failed
- new_email = "newtester-microsoft2@osm.org"
- display_name = "new_tester-microsoft2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "microsoft",
- :auth_uid => "123454321",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "microsoft")
+ post auth_path(:provider => "microsoft", :origin => "/user/new")
+ assert_response :redirect
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
:auth_provider => "microsoft",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "microsoft")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
assert_response :redirect
follow_redirect!
end
:read_ct => 1,
:read_tou => 1,
:email_hmac => email_hmac }
- assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "github")
- follow_redirect!
assert_redirected_to welcome_path
follow_redirect!
end
def test_user_create_github_failure
OmniAuth.config.mock_auth[:github] = :connection_failed
- new_email = "newtester-github2@osm.org"
- display_name = "new_tester-github2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "github",
- :auth_uid => "123454321",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "github")
+ post auth_path(:provider => "github", :origin => "/user/new")
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
:auth_provider => "github",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "github")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
assert_response :redirect
follow_redirect!
end
:read_ct => 1,
:read_tou => 1,
:email_hmac => email_hmac }
- assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
- follow_redirect!
assert_redirected_to welcome_path
follow_redirect!
end
def test_user_create_wikipedia_failure
OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
- new_email = "newtester-wikipedia2@osm.org"
- display_name = "new_tester-wikipedia2"
assert_difference("User.count", 0) do
assert_difference("ActionMailer::Base.deliveries.size", 0) do
perform_enqueued_jobs do
- post "/user/new",
- :params => { :user => { :email => new_email,
- :email_confirmation => new_email,
- :display_name => display_name,
- :auth_provider => "wikipedia",
- :auth_uid => "123454321",
- :pass_crypt => "",
- :pass_crypt_confirmation => "" } }
- assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
+ post auth_path(:provider => "wikipedia", :origin => "/user/new")
+ assert_response :redirect
follow_redirect!
assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
follow_redirect!
:auth_provider => "wikipedia",
:auth_uid => auth_uid,
:consider_pd => "1" } }
- assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
- post response.location
- assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
- follow_redirect!
- assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
assert_response :redirect
follow_redirect!
end
assert_equal 141, r.spam_score.round
end
+ def test_text_no_image
+ r = RichText.new("text", "foo https://example.com/ bar")
+ assert_nil r.image
+ end
+
+ def test_html_no_image
+ r = RichText.new("html", "foo <a href='https://example.com/'>bar</a> baz")
+ assert_nil r.image
+ end
+
+ def test_markdown_no_image
+ r = RichText.new("markdown", "foo [bar](https://example.com/) baz")
+ assert_nil r.image
+ end
+
+ def test_markdown_image
+ r = RichText.new("markdown", "foo ![bar](https://example.com/image.jpg) baz")
+ assert_equal "https://example.com/image.jpg", r.image
+ end
+
+ def test_markdown_first_image
+ r = RichText.new("markdown", "foo ![bar1](https://example.com/image1.jpg) baz\nfoo ![bar2](https://example.com/image2.jpg) baz")
+ assert_equal "https://example.com/image1.jpg", r.image
+ end
+
private
def assert_html(richtext, &block)
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
-"@eslint/eslintrc@^3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e"
- integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==
+"@eslint/config-array@^0.15.1":
+ version "0.15.1"
+ resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.15.1.tgz#1fa78b422d98f4e7979f2211a1fde137e26c7d61"
+ integrity sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==
+ dependencies:
+ "@eslint/object-schema" "^2.1.3"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@eslint/eslintrc@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6"
+ integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@9.2.0":
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.2.0.tgz#b0a9123e8e91a3d9a2eed3a04a6ed44fdab639aa"
- integrity sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==
+"@eslint/js@9.4.0":
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.4.0.tgz#96a2edd37ec0551ce5f9540705be23951c008a0c"
+ integrity sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==
-"@humanwhocodes/config-array@^0.13.0":
- version "0.13.0"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
- integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
- dependencies:
- "@humanwhocodes/object-schema" "^2.0.3"
- debug "^4.3.1"
- minimatch "^3.0.5"
+"@eslint/object-schema@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.3.tgz#e65ae80ee2927b4fd8c5c26b15ecacc2b2a6cc2a"
+ integrity sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
- integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
-
-"@humanwhocodes/retry@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.2.3.tgz#c9aa036d1afa643f1250e83150f39efb3a15a631"
- integrity sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g==
+"@humanwhocodes/retry@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570"
+ integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
eslint@^9.0.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.2.0.tgz#0700ebc99528753315d78090876911d3cdbf19fe"
- integrity sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og==
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.4.0.tgz#79150c3610ae606eb131f1d648d5f43b3d45f3cd"
+ integrity sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^3.0.2"
- "@eslint/js" "9.2.0"
- "@humanwhocodes/config-array" "^0.13.0"
+ "@eslint/config-array" "^0.15.1"
+ "@eslint/eslintrc" "^3.1.0"
+ "@eslint/js" "9.4.0"
"@humanwhocodes/module-importer" "^1.0.1"
- "@humanwhocodes/retry" "^0.2.3"
+ "@humanwhocodes/retry" "^0.3.0"
"@nodelib/fs.walk" "^1.2.8"
ajv "^6.12.4"
chalk "^4.0.0"
json-buffer "3.0.1"
leaflet.locatecontrol@^0.81.0:
- version "0.81.0"
- resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.81.0.tgz#75e92d07c19edade910a2b5a177ac24cef7d10e7"
- integrity sha512-5Dqj6VXVFl1vPquYZW95hQYegvzqSI4eLIpZrBMuHuyoAo5i9y6js3z02TF//XXZByIyTI/XBtlxlZLUM08Pcg==
+ version "0.81.1"
+ resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.81.1.tgz#8aec3124ef5cdda3476fd9013315789b4e301a45"
+ integrity sha512-ZtsdScGufPw330X3UIaGGjnfQ1NrhLySnlruWufIMnfzsHgQPz0+mSxsCQMVh7QgOBoefCGb/lioSejiaNx1EQ==
leaflet@^1.8.0:
version "1.9.4"
type-check "^0.4.0"
osm-community-index@^5.2.0:
- version "5.6.3"
- resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.6.3.tgz#8c7621683a2a4c1037ddb14d060b8442a3aa15cb"
- integrity sha512-UnJBRbaMPIM3J08CA1crKeAok6c1HYiK6tB8AdnjvrvGNnl2JXPxdztA4Jcb3pbrjq/0q14v1mBr300TmtMwbQ==
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.7.1.tgz#2341666c83d14c00ef3d9a90298c96d5e791b56c"
+ integrity sha512-E+Xib5m//WliNq2iqeUXyKqZk7yhZu/vSJbwwyxDAPzcNWxgIMoO0B7cUMeFNckhMQsKM2UuC2BAjWuVfbYf1Q==
dependencies:
diacritics "^1.3.0"