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"
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.3)
+ actionpack (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ actionpack (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ actionpack (= 7.1.3.3)
+ actionview (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ actionview (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ actionpack (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionview (7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ activesupport (= 7.1.3.3)
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.3)
+ activesupport (= 7.1.3.3)
+ activerecord (7.1.3.3)
+ activemodel (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.3)
+ actionpack (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
marcel (~> 1.0)
- activesupport (7.1.3.2)
+ activesupport (7.1.3.3)
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.928.0)
- aws-sdk-core (3.196.0)
+ aws-partitions (1.934.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.81.0)
+ aws-sdk-kms (1.82.0)
aws-sdk-core (~> 3, >= 3.193.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.150.0)
+ 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)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
concurrent-ruby (1.2.3)
- config (5.4.0)
+ config (5.5.0)
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)
mini_portile2 (2.8.6)
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)
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)
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.3)
+ actioncable (= 7.1.3.3)
+ actionmailbox (= 7.1.3.3)
+ actionmailer (= 7.1.3.3)
+ actionpack (= 7.1.3.3)
+ actiontext (= 7.1.3.3)
+ actionview (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activemodel (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
bundler (>= 1.15.0)
- railties (= 7.1.3.2)
+ railties (= 7.1.3.3)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
rails_param (1.3.1)
actionpack (>= 3.2.0)
activesupport (>= 3.2.0)
- railties (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ railties (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
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.1)
+ regexp_parser (2.9.2)
reline (0.5.7)
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.5)
+ rubocop (1.64.0)
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.14)
+ zeitwerk (2.6.15)
PLATFORMS
ruby
rubocop-rake
sanitize
sass-embedded (~> 1.64.0)
- secure_headers
selenium-webdriver
simplecov
simplecov-lcov
--- /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>
+++ /dev/null
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="500">
- <g transform="translate(0 -552.362)">
- <g fill="#70cd8f">
- <path d="M-153 412.862v-2l10-4h2v2l-4 10h-2v-6z" filter="url(#filter6591-2)"/>
- <use xlink:href="#B"/>
- </g>
- <use xlink:href="#B" x="100" fill="#cd7070"/>
- <path d="M135 582.362h-2l-3 3v2l15 15-15 15v2l3 3h2l15-15 15 15h2l3-3v-2l-15-15 15-15v-2l-3-3h-2l-15 15zm130 20c0 8.284-6.716 15-15 15s-15-6.716-15-15 6.716-15 15-15 15 6.716 15 15z" fill="#fff"/>
- <g fill="#7092ff">
- <path d="M519.728 582.914l19.834-15.219L580 617.362l-19.834 15.219z" opacity=".5"/>
- <path d="M510.597 571.013l19.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"/>
- </g>
- <use xlink:href="#B" x="600" fill="#fff"/>
- <path d="M425 639.362l-20-20v-29l20-20h68l2 2v65l-2 2zm-45.698-82a15.7 15.7 0 0 0-15.698 15.698c0 1.581.284 3.074.719 4.513l-39.113 39.113c-1.44-.435-2.932-.719-4.513-.719A15.7 15.7 0 0 0 305 631.665a15.7 15.7 0 0 0 15.698 15.698 15.7 15.7 0 0 0 15.698-15.698c0-1.581-.284-3.074-.719-4.513l39.113-39.113c1.44.435 2.932.719 4.513.719A15.7 15.7 0 0 0 395 573.06a15.7 15.7 0 0 0-15.698-15.698zm0 9.419a6.28 6.28 0 0 1 6.279 6.279 6.28 6.28 0 0 1-6.279 6.279 6.28 6.28 0 0 1-6.279-6.279 6.28 6.28 0 0 1 6.279-6.279zm-58.605 58.605a6.28 6.28 0 0 1 6.279 6.279 6.28 6.28 0 0 1-6.279 6.279 6.28 6.28 0 0 1-6.279-6.279 6.28 6.28 0 0 1 6.279-6.279zM250 557.362c-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.5zm1.172 22.5c8.285 0 15 6.716 15 15s-6.716 15-15 15-15-6.716-15-15 6.716-15 15-15z" fill="#7092ff"/>
- <path d="M31 598.362h-2l-3 3v2l14 14 5 5 5-5 25-25v-2l-3-3h-2l-25 25z" fill="#fff"/>
- <path d="M337 631.362c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z" fill="#7092ff"/>
- <path d="M328 631.362a7 7 0 1 1-14 0 7 7 0 1 1 14 0z" fill="#fff"/>
- <use xlink:href="#B" x="600" fill="#7092ff"/>
- <g fill="#fff">
- <path d="M644.42 607.312q0-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"/>
- <rect width="10" height="15" x="415" y="597.362" rx="3" ry="2.25"/>
- </g>
- <use xlink:href="#B" x="700" fill="#7092ff"/>
- <path d="M741.072 601.642q0-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"/>
- </g>
- <defs>
- <path id="B" d="M95 602.362c0 24.853-20.147 45-45 45s-45-20.147-45-45 20.147-45 45-45 45 20.147 45 45z"/>
- </defs>
-</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
$("<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);
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: 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 {
.routing_marker { width: 15px; cursor: move; }
-.browse_status {
- display: none;
-}
-
/* Rules for the history sidebar */
#sidebar .changesets {
}
}
- .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.svg");
- 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;
- display: inline-block;
- }
-
- .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 {
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
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
##
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
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
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
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]
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
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
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
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
# 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
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
: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>
<% @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) %>
<% 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>
<%= 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 %>
</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-sm btn-primary px-1 switch_link", :title => t("site.search.get_directions_title") do %>
+ <svg width="28" height="20" 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>
<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",
:data => { :method => "DELETE",
<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") %>">
<% end -%>
<% 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" %>
- <h2><%= t ".title" %></h2>
- <div class='clearfix'>
- <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>
<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>
<div class='row'>
<div class='col-sm'>
- <div>
- <span class='sprite small check mx-auto'></span>
- </div>
+ <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-sm'>
- <div>
- <span class='sprite small x mx-auto'></span>
- </div>
+ <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>
- <div class='align-middle mb-2'>
- <span class='sprite small term editor'></span>
+<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>
- </div>
- <div class='align-middle mb-2'>
- <span class='sprite small term 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'>
+ <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>
- </div>
- <div class='align-middle mb-2'>
- <span class='sprite small term 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'>
+ <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>
- </div>
- <div class='align-middle mb-2'>
- <span class='sprite small term tag'></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>
- </div>
-</div>
+ </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>
<% 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">
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
# 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
other: restr GPX gant %{count} poent digant {user}
description_without_count: Restr GPX digant %{user}
application:
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
permission_denied: N'emañ ket an aotreoù ret ganeoc'h evit seveniñ an ober-se.
require_cookies:
cookies_needed: Diweredekaet eo an toupinoù ganeoc'h war a seblant - gweredekait
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'
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
consider_pd_html: Své příspěvky považuji za %{consider_pd_link}.
# 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
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:
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:
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
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}'
# 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
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
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
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
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
title: Connexion avec Wordpress
alt: Se connecter avec un OpenID de Wordpress
aol:
- title: Connexion avec AOL
+ title: Se connecter avec AOL
alt: Se connecter avec un OpenID d’AOL
oauth:
authorize:
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
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
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.
+ 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}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
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
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}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
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
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:
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
diary_comment:
create: ਸਾਂਭੋ
diary_entry:
- create: à¨\9bਾਪੋ
+ create: ਸਾà¨\82à¨ੋ
update: ਅੱਪਡੇਟ ਕਰੋ
issue_comment:
create: ਟਿੱਪਣੀ ਕਰੋ
download_xml: XML ਲਾਹੋ
view_history: ਅਤੀਤ ਵੇਖੋ
view_details: ਵੇਰਵੇ ਵੇਖੋ
- location: 'ਸਥਿਤà©\80:'
+ location: 'à¨\9fਿà¨\95ਾਣਾ:'
relation:
members: ਜੀਅ
relation_member:
relation: ਸਬੰਧ
start_rjs:
load_data: ਡਾਟਾ ਲੋਡ ਕਰੋ
- loading: ਲà©\8bਡ ਹà©\8b ਰਿਹਾ ਹà©\88â\80¦
+ loading: ਲੱਦ ਰਿਹਾ ਹà©\88...
tag_details:
tags: ਟੈਗ
wikipedia_link: '%{page} ਲੇਖ ਵਿਕਿਪੀਡਿਆ ਉੱਤੇ'
waste_basket: ਕੂੜਾਦਾਨ
waste_disposal: ਕੂੜੇਦਾਨ
boundary:
- administrative: ਪà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+ administrative: ਪà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
census: ਮਰਦਮਸ਼ੁਮਾਰੀ ਸਰਹੱਦ
national_park: ਕੌਮੀ ਬਾਗ਼
protected_area: ਸੁਰੱਖਿਅਤ ਖੇਤਰ
sign_up: ਭਰਤੀ ਹੋਵੋ
start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ
edit: ਸੋਧੋ
- history: à¨\85ਤà©\80ਤ
+ history: ਪà©\81ਰਾਣਾ
export: ਬਰਾਮਦ
data: ਸਮੱਗਰੀ
export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
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:
export:
title: ਬਰਾਮਦ
manually_select: ਆਪਣੇ ਆਪ ਇੱਕ ਵੱਖਰਾ ਖੇਤਰ ਚੁਣੋ
- licence: ਲਾà¨\87ਸੰਸ
+ licence: ਲਸੰਸ
too_large:
other:
title: ਹੋਰ ਸਰੋਤ
how_to_help:
title: ਮਦਦ ਕਿਵੇਂ ਕਰਨੀ ਹੈ
join_the_community:
- title: ਭਾਈਚਾਰੇ ਨਾਲ਼ ਜੁੜੋ
+ title: ਭਾਈਚਾਰੇ ਨਾਲ ਜੁੜੋ
other_concerns:
title: ਹੋਰ ਫ਼ਿਕਰ
help:
runway: ਹਵਾਈ ਅੱਡੇ ਦੀ ਉਡਾਣ ਪੱਟੀ
taxiway: ਟੈਕਸੀਵੇਅ
apron: ਹਵਾਈ ਅੱਡੇ ਦਾ ਐਪਰਨ
- admin: ਪà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+ admin: ਪà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
forest: ਜੰਗਲ
wood: ਜੰਗਲ
golf: ਗੋਲਫ਼ ਮੈਦਾਨ
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: ਇਸ ਵਰਤੋਂਕਾਰ 'ਤੇ ਰੋਕ ਲਾਉ
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
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
other: Plik GPX z %{count} punktami od %{user}
description_without_count: Plik GPX od %{user}
application:
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
permission_denied: Nie masz uprawnień do wykonywania tej akcji
require_cookies:
cookies_needed: Wygląda na to, że wyłączono obsługę ciasteczek w przeglądarce.
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}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
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.'
заметок недалеко от %{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: Чтобы отказаться от подписки на обновления этого набора изменений,
# 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:
+ button: Prenumerera på diskussion
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:
+ button: Prenumerera på diskussion
doorkeeper:
errors:
messages:
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
%{france}: Innehåller data hämtade från
Direction Générale des Impôts.
contributors_fr_france: Frankrike
+ contributors_hr_croatia: Kroatien
contributors_nl_credit_html: '%{netherlands}: Innehåller © AND data,
2007 (%{and_link}).'
contributors_nl_netherlands: Nederländerna
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: 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
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}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
permission_denied: Bu eyleme erişme izniniz yok
require_cookies:
cookies_needed: Çerezleri devre dışı bırakmış görünüyorsunuz - devam etmeden
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}'
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
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)
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}
+ auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
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}
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: 使用搜尋引擎描述目前的位置
# The base class for API Errors.
class APIError < RuntimeError
def initialize(message = "Generic API Error")
- super(message)
+ super
end
def status
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
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
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
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/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.3.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.3.0.tgz#2e8f65c9c55227abc4845b1513c69c32c679d8fe"
+ integrity sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==
"@humanwhocodes/config-array@^0.13.0":
version "0.13.0"
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.3.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.3.0.tgz#36a96db84592618d6ed9074d677e92f4e58c08b9"
+ integrity sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^3.0.2"
- "@eslint/js" "9.2.0"
+ "@eslint/eslintrc" "^3.1.0"
+ "@eslint/js" "9.3.0"
"@humanwhocodes/config-array" "^0.13.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"