From: Tom Hughes
Date: Thu, 23 Feb 2017 10:06:42 +0000 (+0000)
Subject: Merge remote-tracking branch 'openstreetmap/pull/1436'
X-Git-Tag: live~4183
X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/392b68a65fd6ffa521b89e079b234bb0241380d3?hp=cc65b2d126d708499edb5fb5d513266cfa33a47b
Merge remote-tracking branch 'openstreetmap/pull/1436'
---
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index a7b456aec..4232b0574 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -50,7 +50,7 @@ Lint/ShadowingOuterLocalVariable:
# Offense count: 630
Metrics/AbcSize:
- Max: 271
+ Max: 280
# Offense count: 35
# Configuration parameters: CountComments.
diff --git a/VAGRANT.md b/VAGRANT.md
index 549e06687..3825ad988 100644
--- a/VAGRANT.md
+++ b/VAGRANT.md
@@ -6,10 +6,13 @@ On Ubuntu, it should be as simple as:
sudo apt-get install vagrant
```
-Other Linux distributions should have similar installation instructions using `yum` or similar.
+Other Linux distributions should have similar installation instructions using `dnf`, `pacman`, or similar.
Installers are available for Mac OS X and Windows, please see the [Vagrant project download page](http://www.vagrantup.com/downloads.html) for more information.
+Note than until there are suitable _xenial64_ [vagrant boxes](https://atlas.hashicorp.com/boxes/search?utf8=%E2%9C%93&sort=&provider=&q=xenial64) for other providers,
+the only virtualization provider supported is virtualbox. You might need to install it and specify `--provider virtualbox` when setting up your environment.
+
# Setting up openstreetmap-website
Once Vagrant has been installed, you can start an environment by checking out the openstreetmap-website code if you haven't already, then changing to the directory which contains the Vagrantfile by typing:
diff --git a/Vendorfile b/Vendorfile
index 361f2c843..304be9e15 100644
--- a/Vendorfile
+++ b/Vendorfile
@@ -20,6 +20,11 @@ folder 'vendor/assets' do
file "images/#{image}", "https://unpkg.com/leaflet@1.0.3/dist/images/#{image}"
end
+ from 'git://github.com/aratcliffe/Leaflet.contextmenu.git', :tag => 'v1.2.1' do
+ file 'leaflet.contextmenu.js', 'dist/leaflet.contextmenu.js'
+ file 'leaflet.contextmenu.css', 'dist/leaflet.contextmenu.css'
+ end
+
from 'git://github.com/kajic/leaflet-locationfilter.git' do
file 'leaflet.locationfilter.css', 'src/locationfilter.css'
file 'leaflet.locationfilter.js', 'src/locationfilter.js'
diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js
index 9d7122e4d..1ba2fbbde 100644
--- a/app/assets/javascripts/index.js
+++ b/app/assets/javascripts/index.js
@@ -7,6 +7,8 @@
//= require leaflet.share
//= require leaflet.polyline
//= require leaflet.query
+//= require leaflet.contextmenu
+//= require index/contextmenu
//= require index/search
//= require index/browse
//= require index/export
@@ -77,7 +79,9 @@ $(document).ready(function () {
var map = new L.OSM.Map("map", {
zoomControl: false,
- layerControl: false
+ layerControl: false,
+ contextmenu: true,
+ contextmenuWidth: 140
});
map.attributionControl.setPrefix('');
@@ -147,6 +151,8 @@ $(document).ready(function () {
L.control.scale()
.addTo(map);
+ OSM.initializeContextMenu(map);
+
if (OSM.STATUS !== 'api_offline' && OSM.STATUS !== 'database_offline') {
OSM.initializeNotes(map);
if (params.layers.indexOf(map.noteLayer.options.code) >= 0) {
diff --git a/app/assets/javascripts/index/contextmenu.js b/app/assets/javascripts/index/contextmenu.js
new file mode 100644
index 000000000..148ccf908
--- /dev/null
+++ b/app/assets/javascripts/index/contextmenu.js
@@ -0,0 +1,85 @@
+OSM.initializeContextMenu = function (map) {
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.directions_from"),
+ callback: function directionsFromHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/directions?" + querystring.stringify({
+ route: lat + "," + lng + ";" + $("#route_to").val()
+ }));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.directions_to"),
+ callback: function directionsToHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/directions?" + querystring.stringify({
+ route: $("#route_from").val() + ";" + lat + "," + lng
+ }));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.add_note"),
+ callback: function addNoteHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/note/new?lat=" + lat + "&lon=" + lng);
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.show_address"),
+ callback: function describeLocation(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/search?query=" + encodeURIComponent(lat + "," + lng));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.query_features"),
+ callback: function queryFeatures(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.centre_map"),
+ callback: function centreMap(e) {
+ map.panTo(e.latlng);
+ }
+ });
+
+ map.on("mousedown", function (e) {
+ if (e.originalEvent.shiftKey) map.contextmenu.disable();
+ else map.contextmenu.enable();
+ });
+
+ var updateMenu = function updateMenu () {
+ map.contextmenu.setDisabled(2, map.getZoom() < 12);
+ map.contextmenu.setDisabled(4, map.getZoom() < 14);
+ };
+
+ map.on("zoomend", updateMenu);
+ updateMenu();
+};
diff --git a/app/assets/javascripts/index/directions/graphhopper.js b/app/assets/javascripts/index/directions/graphhopper.js
index 88a9c15c1..7a5d77d9b 100644
--- a/app/assets/javascripts/index/directions/graphhopper.js
+++ b/app/assets/javascripts/index/directions/graphhopper.js
@@ -49,12 +49,16 @@ function GraphHopperEngine(id, vehicleType) {
instrText += instr.text;
var latLng = line[instr.interval[0]];
var distInMeter = instr.distance;
+ var lineseg = [];
+ for (var j = instr.interval[0]; j <= instr.interval[1]; j++) {
+ lineseg.push({lat: line[j][0], lng: line[j][1]});
+ }
steps.push([
- {lat: latLng.lat, lng: latLng.lng},
+ {lat: latLng[0], lng: latLng[1]},
instrCode,
instrText,
distInMeter,
- []
+ lineseg
]); // TODO does graphhopper map instructions onto line indices?
}
diff --git a/app/assets/javascripts/index/new_note.js b/app/assets/javascripts/index/new_note.js
index 397daa637..53697e65b 100644
--- a/app/assets/javascripts/index/new_note.js
+++ b/app/assets/javascripts/index/new_note.js
@@ -77,7 +77,9 @@ OSM.NewNote = function(map) {
}
page.pushstate = page.popstate = function (path) {
- OSM.loadSidebarContent(path, page.load);
+ OSM.loadSidebarContent(path, function () {
+ page.load(path);
+ });
};
function newHalo(loc, a) {
@@ -97,7 +99,7 @@ OSM.NewNote = function(map) {
}
}
- page.load = function () {
+ page.load = function (path) {
if (addNoteButton.hasClass("disabled")) return;
if (addNoteButton.hasClass("active")) return;
@@ -105,12 +107,34 @@ OSM.NewNote = function(map) {
map.addLayer(noteLayer);
- var mapSize = map.getSize();
- var markerPosition;
+ var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+ var markerLatlng;
+
+ if (params.lat && params.lon) {
+ markerLatlng = L.latLng(params.lat, params.lon);
+
+ var markerPosition = map.latLngToContainerPoint(markerLatlng),
+ mapSize = map.getSize(),
+ panBy = L.point(0, 0);
+
+ if (markerPosition.x < 50) {
+ panBy.x = markerPosition.x - 50;
+ } else if (markerPosition.x > mapSize.x - 50) {
+ panBy.x = 50 - mapSize.x + markerPosition.x;
+ }
- markerPosition = [mapSize.x / 2, mapSize.y / 2];
+ if (markerPosition.y < 50) {
+ panBy.y = markerPosition.y - 50;
+ } else if (markerPosition.y > mapSize.y - 50) {
+ panBy.y = 50 - mapSize.y + markerPosition.y;
+ }
+
+ map.panBy(panBy);
+ } else {
+ markerLatlng = map.getCenter();
+ }
- newNote = L.marker(map.containerPointToLatLng(markerPosition), {
+ newNote = L.marker(markerLatlng, {
icon: noteIcons["new"],
opacity: 0.9,
draggable: true
diff --git a/app/assets/javascripts/leaflet.map.js b/app/assets/javascripts/leaflet.map.js
index 4b50cc78c..b87764b1d 100644
--- a/app/assets/javascripts/leaflet.map.js
+++ b/app/assets/javascripts/leaflet.map.js
@@ -107,7 +107,7 @@ L.OSM.Map = L.Map.extend({
params.mlon = latLng.lng.toFixed(precision);
}
- var url = 'http://' + OSM.SERVER_URL + '/',
+ var url = window.location.protocol + '//' + OSM.SERVER_URL + '/',
query = querystring.stringify(params),
hash = OSM.formatHash(this);
@@ -121,7 +121,8 @@ L.OSM.Map = L.Map.extend({
var zoom = this.getZoom(),
latLng = marker && this.hasLayer(marker) ? marker.getLatLng().wrap() : this.getCenter().wrap(),
str = window.location.hostname.match(/^www\.openstreetmap\.org/i) ?
- 'http://osm.org/go/' : 'http://' + window.location.hostname + '/go/',
+ window.location.protocol + '//osm.org/go/' :
+ window.location.protocol + '//' + window.location.hostname + '/go/',
char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_~",
x = Math.round((latLng.lng + 180.0) * ((1 << 30) / 90.0)),
y = Math.round((latLng.lat + 90.0) * ((1 << 30) / 45.0)),
diff --git a/app/assets/stylesheets/leaflet-all.scss b/app/assets/stylesheets/leaflet-all.scss
index 10ad2607a..82312e5c2 100644
--- a/app/assets/stylesheets/leaflet-all.scss
+++ b/app/assets/stylesheets/leaflet-all.scss
@@ -1,6 +1,7 @@
/*
*= require leaflet
*= require leaflet.locationfilter
+ *= require leaflet.contextmenu
*/
/* Override to serve images through the asset pipeline. */
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 354fcc7c0..8eb5f2409 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -152,9 +152,14 @@ class ApplicationController < ActionController::Base
# have we identified the user?
if @user
# check if the user has been banned
- if @user.blocks.active.exists?
- # NOTE: need slightly more helpful message than this.
- report_error t("application.setup_user_auth.blocked"), :forbidden
+ user_block = @user.blocks.active.take
+ unless user_block.nil?
+ set_locale
+ if user_block.zero_hour?
+ report_error t("application.setup_user_auth.blocked_zero_hour"), :forbidden
+ else
+ report_error t("application.setup_user_auth.blocked"), :forbidden
+ end
end
# if the user hasn't seen the contributor terms then don't
diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb
index e41bd01f3..8d9b670c5 100644
--- a/app/controllers/trace_controller.rb
+++ b/app/controllers/trace_controller.rb
@@ -170,7 +170,7 @@ class TraceController < ApplicationController
else
@title = t "trace.edit.title", :name => @trace.name
- if request.post?
+ if request.post? && params[:trace]
@trace.description = params[:trace][:description]
@trace.tagstring = params[:trace][:tagstring]
@trace.visibility = params[:trace][:visibility]
diff --git a/app/helpers/user_blocks_helper.rb b/app/helpers/user_blocks_helper.rb
index 282d9164a..3c9c0a37e 100644
--- a/app/helpers/user_blocks_helper.rb
+++ b/app/helpers/user_blocks_helper.rb
@@ -4,8 +4,13 @@ module UserBlocksHelper
# user block (i.e: whether it's active, what the expiry time is)
def block_status(block)
if block.active?
+ # if the block hasn't expired yet show the date, if the user just needs to login show that
if block.needs_view?
- I18n.t("user_block.helper.until_login")
+ if block.ends_at > Time.now.getutc
+ I18n.t("user_block.helper.time_future_and_until_login", :time => friendly_date(block.ends_at)).html_safe
+ else
+ I18n.t("user_block.helper.until_login")
+ end
else
I18n.t("user_block.helper.time_future", :time => friendly_date(block.ends_at)).html_safe
end
diff --git a/app/models/user_block.rb b/app/models/user_block.rb
index de14dcaa9..eb0daba65 100644
--- a/app/models/user_block.rb
+++ b/app/models/user_block.rb
@@ -26,6 +26,13 @@ class UserBlock < ActiveRecord::Base
needs_view || ends_at > Time.now.getutc
end
+ ##
+ # returns true if the block is a "zero hour" block
+ def zero_hour?
+ # if the times differ more than 1 minute we probably have more important issues
+ needs_view && (ends_at.to_i - updated_at.to_i) < 60
+ end
+
##
# revokes the block, allowing the user to use the API again. the argument
# is the user object who is revoking the ban.
diff --git a/app/views/layouts/map.html.erb b/app/views/layouts/map.html.erb
index 6607bf7a5..3f11edf59 100644
--- a/app/views/layouts/map.html.erb
+++ b/app/views/layouts/map.html.erb
@@ -49,6 +49,12 @@
<%= t 'layouts.intro_header' %>
<%= t 'layouts.intro_text' %>
+ <%= t 'layouts.partners_html',
+ :ucl => link_to(t('layouts.partners_ucl'), "http://www.bartlett.ucl.ac.uk"),
+ :ic => link_to(t('layouts.partners_ic'), "http://www.imperial.ac.uk/"),
+ :bytemark => link_to(t('layouts.partners_bytemark'), "http://www.bytemark.co.uk"),
+ :partners => link_to(t('layouts.partners_partners'), "https://hardware.openstreetmap.org/thanks/") %>
+
<%= t('layouts.learn_more') %>
<%= t('layouts.start_mapping') %>
diff --git a/app/views/notes/_note.rss.builder b/app/views/notes/_note.rss.builder
index 038ca564b..38c42f1ec 100644
--- a/app/views/notes/_note.rss.builder
+++ b/app/views/notes/_note.rss.builder
@@ -15,7 +15,7 @@ xml.item do
xml.dc :creator, note.author.display_name if note.author
- xml.pubDate note.updated_at.to_s(:rfc822)
+ xml.pubDate note.created_at.to_s(:rfc822)
xml.geo :lat, note.lat
xml.geo :long, note.lon
xml.georss :point, "#{note.lat} #{note.lon}"
diff --git a/app/views/site/about.html.erb b/app/views/site/about.html.erb
index 07b2f9e52..9847cf5aa 100644
--- a/app/views/site/about.html.erb
+++ b/app/views/site/about.html.erb
@@ -36,7 +36,7 @@
:ucl => link_to(t('layouts.partners_ucl'), "http://www.bartlett.ucl.ac.uk"),
:ic => link_to(t('layouts.partners_ic'), "http://www.imperial.ac.uk/"),
:bytemark => link_to(t('layouts.partners_bytemark'), "http://www.bytemark.co.uk"),
- :partners => link_to(t('layouts.partners_partners'), t('layouts.partners_url')) %>
+ :partners => link_to(t('layouts.partners_partners'), "https://hardware.openstreetmap.org/thanks/") %>
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 671d4a77c..57ba6a2f3 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -1308,6 +1308,7 @@ ast:
La nota ta cerca de %{place}.'
details: Pue alcontrar más detalles sobro la nota en %{url}.
changeset_comment_notification:
+ hi: Bones %{to_user},
greeting: Bones,
commented:
subject_own: '[OpenStreetMap] %{commenter} comentó unu de los tos conxuntos
@@ -1321,6 +1322,8 @@ ast:
partial_changeset_with_comment: col comentariu '%{changeset_comment}'
partial_changeset_without_comment: ensin comentarios
details: Puen alcontrase más detalles del conxuntu de cambios en %{url}
+ unsubscribe: Pa date de baxa de les actualizaciones d'esti conxuntu de cambeos,
+ visita %{url} y fai clic en «dase de baxa».
message:
inbox:
title: Buzón
@@ -1645,6 +1648,8 @@ ast:
require_moderator:
not_a_moderator: Has de ser moderador pa facer esa aición.
setup_user_auth:
+ blocked_zero_hour: Tienes un mensaxe urxente nel sitiu web d'OpenStreetMap.
+ Tienes de lleer el mensaxe antes de que puedas guardar les ediciones.
blocked: Se bloquió el to accesu a la API. Por favor, coneuta pela interfaz
web pa saber más.
need_to_see_terms: El to accesu a la API ta torgáu de mou temporal. Por favor,
@@ -2189,6 +2194,8 @@ ast:
helper:
time_future: Fina en %{time}.
until_login: Activu fasta que'l usuariu anicie sesión.
+ time_future_and_until_login: Acaba en %{time} y después de que l'usuariu anicie
+ sesión.
time_past: Finó hai %{time}.
blocks_on:
title: Bloqueos fechos a %{name}
@@ -2353,9 +2360,9 @@ ast:
merge_right_without_exit: Xúnite a la drecha haza %{name}
fork_right_without_exit: Nel biforcu xira a la drecha haza %{name}
turn_right_without_exit: Xira a la drecha haza %{name}
- sharp_right_without_exit: Fuerte a la drecha haza %{name}
+ sharp_right_without_exit: Zarrao a la drecha haza %{name}
uturn_without_exit: Cambiu de sentÃu en %{name}
- sharp_left_without_exit: Fuerte a la izquierda haza %{name}
+ sharp_left_without_exit: Zarrao a la izquierda haza %{name}
turn_left_without_exit: Xira a la izquierda haza %{name}
offramp_left_without_exit: Cueye la rampla a la izquierda haza %{name}
onramp_left_without_exit: Xira a la izquierda na rampla haza %{name}
@@ -2389,6 +2396,13 @@ ast:
nothing_found: Nun s'alcontraron entidaes
error: 'Error al comunicase con %{server}: %{error}'
timeout: Tiempu escosáu al comunicase con %{server}
+ context:
+ directions_from: Direiciones dende equÃ
+ directions_to: Direiciones ata equÃ
+ add_note: Añadir una nota equÃ
+ show_address: Amosar la direición
+ query_features: Consultar entidaes
+ centre_map: Centrar el mapa equÃ
redaction:
edit:
description: Descripción
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index dfbd128bb..e38963bb4 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -22,6 +22,7 @@ bg:
language: Ðзик
message: СÑобÑение
node: ÐÑзел
+ notifier: ÐзвеÑÑиÑел
old_node: СÑÐ°Ñ Ð²Ñзел
relation: РелаÑиÑ
relation_member: Член на ÑелаÑиÑ
@@ -155,6 +156,8 @@ bg:
new_note: Ðова бележка
description: ÐпиÑание
open_by: СÑздадено Ð¾Ñ %{user} пÑеди %{when}
+ query:
+ title: ТÑÑÑене на оÑобеноÑÑи
changeset:
changeset_paging_nav:
showing_page: СÑÑаниÑа %{page}
@@ -402,6 +405,7 @@ bg:
speed_camera: ÐамеÑа за конÑÑол на ÑкоÑоÑÑÑа
steps: СÑÑлбиÑе
street_lamp: УлиÑна лампа
+ track: ÐолÑки пÑÑ
trunk: СкоÑоÑÑен пÑÑ
trunk_link: СкоÑоÑÑен пÑÑ
unsurfaced: ÐÑÑ Ð±ÐµÐ· наÑÑилка
@@ -646,6 +650,7 @@ bg:
log_in: Ðлизане
log_in_tooltip: ÐпиÑване ÑÑÑ ÑÑÑеÑÑвÑÐ²Ð°Ñ Ð¿ÑоÑил
sign_up: РегиÑÑÑиÑане
+ start_mapping: ÐаÑÑогÑаÑиÑане
edit: РедакÑиÑане
history: ÐÑÑоÑиÑ
export: ÐзнаÑÑне
@@ -676,6 +681,7 @@ bg:
english_link: ÐÑигиналÑÑ Ð½Ð° английÑки
native:
title: Ðа Ñази ÑÑÑаниÑа
+ mapping_link: каÑÑогÑаÑиÑане
legal_babble:
title_html: ÐвÑоÑÑки пÑава и лиÑенз
infringement_title_html: ÐаÑÑÑаване на авÑоÑÑкиÑе пÑава
@@ -738,6 +744,7 @@ bg:
note_comment_notification:
greeting: ÐдÑавейÑе,
changeset_comment_notification:
+ hi: ÐдÑавейÑе %{to_user},
greeting: ÐдÑавейÑе,
message:
inbox:
@@ -793,6 +800,7 @@ bg:
trunk: ÐеждÑгÑадÑки пÑÑ
primary: Ðлавен пÑÑ
secondary: ÐÑоÑоÑÑепенен пÑÑ
+ track: ÐолÑки пÑÑ
bridleway: Ðонен пÑÑ
cycleway: ÐелоÑипедна пÑÑека
footway: ÐÑÑека
@@ -902,6 +910,7 @@ bg:
user:
login:
title: ÐпиÑване
+ heading: ÐпиÑване
email or username: 'ÐлекÑÑонна поÑа или поÑÑебиÑелÑко име:'
password: 'ÐаÑола:'
remember: Ðапомни ме
@@ -916,8 +925,11 @@ bg:
title: ÐпиÑване Ñ Ð¤ÐµÐ¹ÑбÑк
wikipedia:
title: ÐпиÑване Ñ Ð£Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ
+ alt: ÐпиÑване ÑÑÑ ÑмеÑка Ð¾Ñ Ð£Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ
yahoo:
title: ÐпиÑване Ñ Ð¯Ñ
Ñ
+ wordpress:
+ title: ÐпиÑване Ñ Ð£ÑÑдпÑеÑ
lost_password:
email address: 'ÐлекÑÑонна поÑа:'
reset_password:
@@ -926,8 +938,11 @@ bg:
flash changed: ÐаÑолаÑа е пÑоменена ÑÑпеÑно.
new:
title: РегиÑÑÑиÑане
+ about:
+ header: ÐезплаÑна и доÑÑÑпна за ÑедакÑиÑане
email address: 'ÐлекÑÑонна поÑа:'
confirm email address: 'ÐоÑвÑÑждаване на елекÑÑоннаÑа поÑа:'
+ display name: Ðидимо поÑÑебиÑелÑко имеË
password: 'ÐаÑола:'
confirm password: 'ÐоÑвÑÑждаване на паÑолаÑа:'
continue: РегиÑÑÑиÑане
@@ -995,9 +1010,13 @@ bg:
cancel: ÐÑказ
image: ÐзобÑажение
link: ÐÑепÑаÑка или код
+ long_link: ÐÑепÑаÑка
+ short_link: ÐÑаÑка пÑепÑаÑка
+ embed: Ðод
custom_dimensions: Ð Ð°Ð·Ð¼ÐµÑ Ð¿Ð¾ избоÑ
format: 'ФоÑмаÑ:'
scale: 'ÐаÑаб:'
+ image_size: Ðа изобÑажениеÑо Ñе бÑде обиÑайнаÑа каÑÑа Ñ ÑазмеÑ
download: ÐзÑеглÑне
include_marker: ÐобавÑне на маÑкеÑ
key:
@@ -1023,6 +1042,8 @@ bg:
site:
edit_tooltip: РедакÑиÑане на каÑÑаÑа
createnote_tooltip: ÐобавÑне на бележка на каÑÑаÑа
+ queryfeature_tooltip: ТÑÑÑене на оÑобеноÑÑи
+ queryfeature_disabled_tooltip: УвелиÑеÑе, за да ÑÑÑÑиÑе оÑобеноÑÑи
notes:
new:
add: ÐобавÑне на бележка
@@ -1049,4 +1070,6 @@ bg:
destination_without_exit: ÐÑиÑÑигнаÑ
Ñе на меÑÑоназнаÑениеÑо
unnamed: неименÑван пÑÑ
time: ÐÑеме
+ context:
+ add_note: ÐобавеÑе бележка ÑÑк
...
diff --git a/config/locales/bn.yml b/config/locales/bn.yml
index d74d289a7..bb1b5ef27 100644
--- a/config/locales/bn.yml
+++ b/config/locales/bn.yml
@@ -1043,10 +1043,10 @@ bn:
back: পিà¦à¦¨à§
to: পà§à¦°à¦¾à¦ªà¦
sent_message_summary:
- delete_button: মà§à¦à§ ফà§à¦²à§à¦¨
+ delete_button: à¦
পসারণ
mark:
- as_read: বারà§à¦¤à¦¾ পঠিত হিসà§à¦¬à§ à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤
- as_unread: বারà§à¦¤à¦¾ à¦
পঠিত হিসà§à¦¬à§ à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤
+ as_read: বারà§à¦¤à¦¾ পঠিত হিসà§à¦¬à§ à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ à¦à¦°à§à¦¨
+ as_unread: বারà§à¦¤à¦¾ à¦
পঠিত হিসà§à¦¬à§ à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ à¦à¦°à§à¦¨
delete:
deleted: বারà§à¦¤à¦¾ মà§à¦à¦¾ হয়à§à¦à§
site:
@@ -1072,7 +1072,7 @@ bn:
key:
table:
entry:
- motorway: মà§à¦à§à¦°à¦ªà¦¥
+ motorway: মà§à¦à¦°à¦ªà¦¥
main_road: পà§à¦°à¦§à¦¾à¦¨ সড়à¦
trunk: মà§à¦² সড়à¦
primary: পà§à¦°à¦¾à¦¥à¦®à¦¿à¦ সড়à¦
@@ -1140,7 +1140,7 @@ bn:
description: 'বিবরণ:'
tags: 'à¦à§à¦¯à¦¾à¦à¦¸à¦®à§à¦¹:'
save_button: পরিবরà§à¦¤à¦¨ সà¦à¦°à¦à§à¦·à¦£
- visibility: দà§à¦·à§à¦à¦¿à¦¯à§à¦à§à¦¯à¦¤à¦¾
+ visibility: 'দà§à¦·à§à¦à¦¿à¦¯à§à¦à§à¦¯à¦¤à¦¾:'
visibility_help: à¦à¦à¦¾à¦° মানৠà¦à¦¿?
trace_form:
upload_gpx: 'à¦à¦¿à¦ªà¦¿à¦à¦à§à¦¸ ফাà¦à¦² à¦à¦ªà¦²à§à¦¡:'
@@ -1177,7 +1177,7 @@ bn:
edit_track: à¦à¦ à¦
নà§à¦¸à¦°à¦£à¦à¦¿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ à¦à¦°à§à¦¨
delete_track: à¦à¦ à¦
নà§à¦¸à¦°à¦£à¦à¦¿ মà§à¦à§ ফà§à¦²à§à¦¨
trace_not_found: à¦
নà§à¦¸à¦°à¦£ পাà¦à¦¯à¦¾ যায়নি।
- visibility: দà§à¦·à§à¦à¦¿à¦¯à§à¦à§à¦¯à¦¤à¦¾
+ visibility: 'দà§à¦·à§à¦à¦¿à¦¯à§à¦à§à¦¯à¦¤à¦¾:'
trace_paging_nav:
showing_page: '%{page} পাতা'
trace:
@@ -1220,8 +1220,8 @@ bn:
remember: à¦à¦®à¦¾à¦à§ মনৠরাà¦à§
login_button: পà§à¦°à¦¬à§à¦¶
register now: à¦à¦à¦¨à¦ নিবনà§à¦§à¦¨ à¦à¦°à§à¦¨
- with username: 'à¦à¦¤à¦¿à¦®à¦§à§à¦¯à§ à¦à¦à¦à¦¿ à¦à¦ªà§à¦¨à¦¸à§à¦à§à¦°à¦¿à¦à¦®à§à¦¯à¦¾à¦ª à¦
à§à¦¯à¦¾à¦à¦¾à¦à¦¨à§à¦ à¦à¦à§? দয়া à¦à¦°à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦¨à¦¾à¦®
- à¦à¦¬à¦ পাসà¦à¦¯à¦¼à¦¾à¦°à§à¦¡ দিয়ৠপà§à¦°à¦¬à§à¦¶ à¦à¦°à§à¦¨:'
+ with username: 'à¦à¦¤à¦¿à¦®à¦§à§à¦¯à§ à¦à¦à¦à¦¿ à¦à¦ªà§à¦¨à¦¸à§à¦à§à¦°à¦¿à¦à¦®à§à¦¯à¦¾à¦ª à¦
à§à¦¯à¦¾à¦à¦¾à¦à¦¨à§à¦ à¦à¦à§? দয়া à¦à¦°à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§
+ নাম à¦à¦¬à¦ পাসà¦à¦¯à¦¼à¦¾à¦°à§à¦¡ দিয়ৠপà§à¦°à¦¬à§à¦¶ à¦à¦°à§à¦¨:'
new to osm: à¦à¦ªà§à¦¨à¦¸à§à¦à§à¦°à¦¿à¦à¦®à§à¦¯à¦¾à¦ªà§ নতà§à¦¨?
no account: à¦à§à¦¨à¦ à¦
à§à¦¯à¦¾à¦à¦¾à¦à¦¨à§à¦ নà§à¦?
auth_providers:
@@ -1386,6 +1386,9 @@ bn:
way: রাসà§à¦¤à¦¾
relation: সমà§à¦ªà¦°à§à¦
nothing_found: বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ à¦à§à¦à¦à§ পাà¦à¦¯à¦¼à¦¾ যায়নি
+ context:
+ add_note: à¦à¦à¦¾à¦¨à§ à¦à¦à¦à¦¿ à¦à§à¦à¦¾ যà§à¦ à¦à¦°à§à¦¨
+ show_address: ঠিà¦à¦¾à¦¨à¦¾ দà§à¦à¦¾à¦¨
redaction:
edit:
description: বিবরণ
diff --git a/config/locales/br.yml b/config/locales/br.yml
index c1e9bf6cc..8e6d20e30 100644
--- a/config/locales/br.yml
+++ b/config/locales/br.yml
@@ -662,6 +662,7 @@ br:
pitch: Tachenn sport
playground: Tachenn c'hoari
recreation_ground: Tachenn c'hoari
+ resort: Lec'h hañviñ
sauna: Saona
slipway: Kal
sports_centre: Kreizenn sport
@@ -1024,12 +1025,13 @@ br:
more_1_html: Ma fell deoc'h kaout muioc'h a ditouroù diwar-benn adimplij hor
roadennoù, lennit Licence OSMF
Licence page hag ar gumuniezh reolennoù evit implijout an API,
- reolennoù evit implijout ar gartenn
- ha reolennoù evit implijout Nominatim.
+ more_2_html: "Daoust da OpenStreetMap bezañ un hollad roadennoù digor, n'omp
+ ket evit pourchas un API digoust evit an dredeourien.\n Sellit ouzh hor
+ reolennoù
+ evit implijout an API, \n Sellit ouzh hor reolennoù evit
+ implijout an teolennoù, ha\nreolennoù
+ evit implijout Nominatin"
contributors_title_html: Hor c'henlabourerien
contributors_intro_html: 'Miliadoù a hiniennoù a labour ganimp. Ebarzhiñ a reomp
ivez roadennoù digor eus ajañsoù kartennañ hag eus mamennoù all, hag en o
@@ -1085,6 +1087,10 @@ br:
dizober, mar plij, pe skrivit war-eeun war hor furmskrid
enlinenn.
trademarks_title_html: Merkoù
+ trademarks_1_html: Openstreet, al logo brasaer ha State of the Map zo merkoù
+ marilhet gant OpenStreetMap Foundation. M'ho pez goulennoù da sevel diwar-benn
+ implij ar merkoù-se, kit e darempred gant Licence
+ Working Group, mar plij.
welcome_page:
title: Deuet-mat oc'h !
introduction_html: Degemer mat en OpenStreetMap, ar gartenn digoust eus ar bed
@@ -1114,6 +1120,12 @@ br:
un hent, evel anv ur preti pe an tizh bevennet war un hent.
rules:
title: Reolennoù !
+ paragraph_1_html: OpenStreetMap en deus un nebeud reolennoù furmel, met gortoz
+ a reomp ma vo kemeret perzh gant an holl berzhidi ha ma vo darempredoù gant
+ ar gumuniezh. Ma vezit e-sell d'ober traoù all estreget ober cheñchamantoù
+ gant an dorn, lennit ha heuilhit ar sturiadoù, mar plij, e An
+ ezporzhiadurioù> ha
+ Ar c'hemmoù emgefre>/a>.
questions:
title: Traoù da c'houlenn ?
paragraph_1_html: Ezhomm ho peus sikour evit kartennaouiñ, pe n'eo ket sklaer
@@ -1209,10 +1221,13 @@ br:
legal_title: Lezennel
legal_html: "Al lec'hienn-mañ hag e-leizh a servijoù all kar zo korvoet ent furmel
gant an Diazezaddur OpenStreetMap
- (OSMF) \nen anv ar gumuniezh.\n
\nKit contacter
+ (OSMF) \nen anv ar gumuniezh.\nEvit implijout an holl servijoù kinniget gant
+ an OSMF e ranker doujañ d'hor \n
+ Politikerezh war an implijoù degemeret ha d'hor Politikerzh
+ prevezded.\n
\nKit contacter
l'OSMF e darempred gant an OSMF, mar plij, m'ho peus goulennoù da sevel
diwar-benn an aotreoù-implijout, ar gwirioù oberour pe diwar-benn goulennoù
- lezennel all."
+ lezennel all.\n
"
partners_title: Kevelerien
notifier:
diary_comment_notification:
@@ -1320,6 +1335,7 @@ br:
hoc''h eus addispleget. Emañ an notenn tost da %{place}.'
details: Munudoù ouzhpenn diwar-benn an notenn a c'hall bezañ kavet e %{url}.
changeset_comment_notification:
+ hi: Demat %{to_user},
greeting: Demat,
commented:
subject_own: '[OpenStreetMap] %{commenter} en deus addispleget unan eus ho
@@ -1334,6 +1350,8 @@ br:
partial_changeset_with_comment: gant an addispleg '%{changeset_comment}'
partial_changeset_without_comment: Hep evezhiadenn
details: Muioc'h a ditouroù war an holl cheñchamantoù e %{url}.
+ unsubscribe: Evit digoumanantiñ diouzh hizivadurioù an holl gemmoù, gweladennit
+ %{url} ha klikit war «â¯Digoumanantiñâ¯Â».
message:
inbox:
title: Boest resev
@@ -1468,6 +1486,7 @@ br:
bridleway: Hent evit kezeg
cycleway: Roudenn divrodegoù
cycleway_national: roudenn vroadel evit an divrodegoù
+ cycleway_regional: Roudenn divrodegoù rannvroel
cycleway_local: roudenn lec'hel evit an divrodegoù
footway: Hent evit an dud war droad
rail: Hent-houarn
@@ -1522,6 +1541,7 @@ br:
destination: Moned d'ar pal
construction: Hentoù war ar stern
bicycle_shop: Stal varc'hoù-houarn
+ bicycle_parking: Parklec'h belioù
toilets: Privezioù
richtext_area:
edit: Aozañ
@@ -1659,6 +1679,8 @@ br:
require_moderator:
not_a_moderator: Ret eo deoc'h bezañ habaskaer evit kas an ober-mañ da benn.
setup_user_auth:
+ blocked_zero_hour: Ur gemennadenn vallus zo war lec'hienn OpenStreetMap evidoc'h.
+ Ret eo deoc'h lenn ar gemennadenn-se a-raok gallout enrollañ ho kemmoù.
blocked: Stanket eo bet ho moned d'an API. Kevreit ouzh an etrefas web evit
gouzout hiroc'h.
need_to_see_terms: Evit ar mare n'oc'h ket aotreet da vont war an API ken. Kevreit
@@ -1678,6 +1700,7 @@ br:
allow_read_gpx: lenn ho roudoù GPS prevez.
allow_write_gpx: kas roudoù GPS.
allow_write_notes: kemmañ notennoù
+ grant_access: Grataat ar monet
oauthorize_success:
title: Reked aotre roet
allowed: Aotreet ho peus an arload %{app_name} da vont d'ho kont.
@@ -1762,6 +1785,7 @@ br:
register now: En em enskrivañ bremañ
with username: 'Ur gont OpenStreetMap hoc''h eus dija ? Digorit un dalc''h en
ur verkañ hoc''h anv implijer hag ho ker-tremen :'
+ with external: 'Peotramant, implijit un tredeour evit kevreañ :'
new to osm: Nevez war OpenStreetMap ?
to make changes: Evit kemmañ roadennoù OpenStreetMap e rankit kaout ur gont.
create account minute: Krouiñ ur gont. Ne bad nemet ur vunutenn.
@@ -1840,15 +1864,20 @@ br:
ar c'henlabourer.
email address: 'Chomlec''h postel :'
confirm email address: 'Kadarnaat ar chomlec''h postel :'
- not displayed publicly: N'eo ket diskwelet d'an holl (gwelet hor c'harta
- prevezded)
+ not displayed publicly: N'eo ket diskwelet ho chomlec'h d'an holl (gwelet hor c'harta prevezded) evit
+ gouzout hiroc'h
display name: 'Anv diskwelet :'
display name description: Emañ hoc'h anv implijer a-wel d'an holl. Se a c'hallit
cheñch diwezhatoc'h en ho penndibaboù.
external auth: 'Dilesadur trede :'
password: 'Ger-tremen :'
confirm password: 'Kadarnaat ar ger-tremen :'
+ use external auth: 'Peotramant, implijit un tredeour evit kevreañ :'
+ auth no password: Gant dilesadur un tredeour n'eus ket ezhomm d'ober gant ur
+ ger-tremen, met evit binvioù ouzhpenn pe evit ur servijer e c'haller bepred
+ goulenn unan diganeco'h.
continue: En em enskrivañ
terms accepted: Trugarez deoc'h evit bezañ asantet da ziferadennoù nevez ar
c'henlabourer !
@@ -1996,6 +2025,8 @@ br:
gravatar: Implijout Gravatar
link: http://wiki.openstreetmap.org/wiki/Gravatar
link text: petra eo se ?
+ disabled: Diweredekaet eo bet Gravatar.
+ enabled: Gweredekaet eo bet diskwel ho Kravatar.
new image: Ouzhpennañ ur skeudenn
keep image: Derc'hel ar skeudenn a-vremañ
delete image: Dilemel ar skeudenn a-vremañ
@@ -2091,6 +2122,9 @@ br:
heading: N'eo ket kevredet ho ID ouzh ur gont OpenStreetMap.
option_1: Ma'z oc'h un den nevez en OpenStreetMap, krouit ur gont nevez, mar
plij, war-bouez ar furmskrid amañ dindan.
+ option_2: M'ho pez ur gont dija e c'hallit kevreañ outi en ur implijout hoc'h
+ anv implijer hag ho ker-tremen, ha goude-se kevrediñ ho kont gant hoc'h ID
+ en ho tibaboù implijer.
user_role:
filter:
not_an_administrator: N'eus nemet ar verourien a c'hall merañ ar rolloù, ha
@@ -2194,6 +2228,8 @@ br:
helper:
time_future: Echuiñ a ray a-benn %{time}.
until_login: Oberiant betek ma kevre an implijer.
+ time_future_and_until_login: Echuiñ a ra a-benn %{time} hag ur wech kevreet
+ an implijer.
time_past: Echuet %{time} zo.
blocks_on:
title: Stankadurioù evit %{name}
@@ -2272,12 +2308,15 @@ br:
center_marker: Kreizañ ar gartenn war ar merker
paste_html: Pegañ HTML evit bezañ enkorfet en ul lec'hienn web
view_larger_map: Gwelet ur gartenn vrasoc'h
+ only_standard_layer: Ar gwiskad standart hepken a c'hall bezañ ezporzhiet evel
+ ur skeudenn.
embed:
report_problem: Menegiñ ur gudenn
key:
title: Alc'hwez ar gartenn
tooltip: Alc'hwez ar gartenn
- tooltip_disabled: Alc'hwez kartenn da gaout evit ar gwiskad standart hepken
+ tooltip_disabled: Ne c'haller ket kaout an alc'hwez kartenn evit ar gwiskad
+ stantart
map:
zoom:
in: Zoumañ
@@ -2294,6 +2333,7 @@ br:
header: Gwiskadoù kartenn
notes: Notennoù kartenn
data: Roadennoù ar gartenn
+ gps: Roudoù GPS foran
overlays: Gweredekaat an adwiskadoù evit dresañ ar gartenn
title: Gwiskadoù
copyright: © Kenlabourerien OpenStreetMap
@@ -2351,11 +2391,21 @@ br:
instructions:
continue_without_exit: Kenderc'hel war%{name}
slight_right_without_exit: Troit un tammig a-zehoù war %{name}
+ offramp_right_without_exit: Kemer ar vretell dehoù %{name}
+ onramp_right_without_exit: Troit a-zehoù war ar bretell war %{name}
+ endofroad_right_without_exit: E penn an hent, troit a-zezhoù war %{name}
+ merge_right_without_exit: Mont a-zehoù war %{name}
+ fork_right_without_exit: Er forc'h-hent, troit a-zehoù war %{name}
turn_right_without_exit: Treiñ a-zehoù war %{name}
sharp_right_without_exit: Troit prim a-zehoù war %{name}
uturn_without_exit: Grit hanter dro war %{name}
sharp_left_without_exit: Troit prim a-gleiz war %{name}
turn_left_without_exit: Treiñ a-gleiz war %{name}
+ offramp_left_without_exit: Kemer ar vretell gleiz betek %{name}
+ onramp_left_without_exit: Troit a-gleiz war ar vretell war %{name}
+ endofroad_left_without_exit: E penn an hent, troit a-gleiz war %{name}
+ merge_left_without_exit: Mont a-gleiz war %{name}
+ fork_left_without_exit: Er forc'h-hent, troit a-gleiz war %{name}
slight_left_without_exit: Troit un tammig a-gleiz war %{name}
via_point_without_exit: (dre ar poent)
follow_without_exit: Heuliañ %{name}
@@ -2367,6 +2417,11 @@ br:
against_oneway_without_exit: Mont gant ar straed untu war %{name}
end_oneway_without_exit: Dibenn an tremen untun war %{name}
roundabout_with_exit: Er c'hroashent-tro, kemer an hent-maez %{exit} war %{name}
+ turn_left_with_exit: Er c'hroashent-tro, troit a-gleiz war %{name}
+ slight_left_with_exit: Er c'hroashent, treiñ un tamm a-gleiz war %{name}
+ turn_right_with_exit: Er c'hroashent-tro, treiñ a-zehoù war %{name}
+ slight_right_with_exit: Er c'hroashent-tro, treiñ un tamm a-zehoù war %{name}
+ continue_with_exit: Er c'hroashent-tro, kenderc'hel war-eeun war %{name}
unnamed: hep anv
courtesy: Hent a-berzh %{link}
time: Eur
@@ -2377,6 +2432,13 @@ br:
nothing_found: Arc'hweladur ebet kavet
error: Fazi o vont e daremmpred gant %{server}:%{error}
timeout: Amzer aet e-biou %{server}
+ context:
+ directions_from: Durc'hadurioù adalek amañ
+ directions_to: Durc'hadurioù betek amañ
+ add_note: Ouzhpennañ un notenn amañ
+ show_address: Diskouez ar chomlec'h
+ query_features: Perzhioù enklask
+ centre_map: Kreizañ ar gartenn amañ
redaction:
edit:
description: Deskrivadur
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index f9e647fa6..315993ee5 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -19,6 +19,7 @@
# Author: Micru
# Author: Mlforcada
# Author: Nemo bis
+# Author: Netol
# Author: PerroVerd
# Author: Pitort
# Author: Ruila
@@ -1399,7 +1400,7 @@ ca:
reply_button: Respon
delete_button: Suprimeix
new:
- title: Envia el missatge
+ title: Envia un missatge
send_message_to: Envia un missatge nou per a %{name}
subject: Assumpte
body: Cos
@@ -1947,7 +1948,7 @@ ca:
oauth settings: configuració OAuth
blocks on me: Blocs sobre mi
blocks by me: Blocs fets per mi
- send message: Envia el missatge
+ send message: Envia un missatge
diary: Diari
edits: Modificacions
traces: Traces
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index ca65c0af2..803b68729 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -24,6 +24,7 @@
# Author: Nemo bis
# Author: Paxt
# Author: Reaperman
+# Author: StenSoft
# Author: TchoÅ
# Author: Urbanecm
# Author: Veritaslibero
@@ -790,7 +791,7 @@ cs:
abandoned: ZruÅ¡ená železniÄnà traÅ¥
construction: Železnice ve výstavbÄ
disused: NepoužÃvaná železniÄnà traÅ¥
- disused_station: NepoužÃvaná železniÄnà stanice
+ disused_station: ZruÅ¡ená železniÄnà stanice
funicular: Lanová dráha
halt: ŽelezniÄnà zastávka
historic_station: Nádražà historické železnice
@@ -936,7 +937,7 @@ cs:
level6: Hranice okresu
level8: Hranice obce
level9: Hranice vesnice
- level10: Hranice Ätvrti
+ level10: Hranice mÄstské Äásti
description:
title:
osm_nominatim: Poloha podle OpenStreetMap
@@ -979,7 +980,6 @@ cs:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partneÅi
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=cs
osm_offline: Databáze OpenStreetMap je momentálnÄ kvůli probÃhajÃcà neodkladné
údržbÄ mimo provoz.
osm_read_only: Databáze OpenStreetMap je momentálnÄ kvůli probÃhajÃcà neodkladné
@@ -1326,6 +1326,7 @@ cs:
Poznámka je umÃstÄna poblÞ %{place}.'
details: Podrobnosti k poznámce můžete najÃt na %{url}.
changeset_comment_notification:
+ hi: Dobrý den, uživateli %{to_user},
greeting: Ahoj,
commented:
subject_own: '[OpenStreetMap] %{commenter} okomentoval jednu z vašich sad
@@ -1339,6 +1340,8 @@ cs:
partial_changeset_with_comment: s komentáÅem â%{changeset_comment}â
partial_changeset_without_comment: bez komentáÅe
details: VÃce informacà o této sadÄ zmÄn lze nalézt na %{url}.
+ unsubscribe: Pro odhlášenà z aktualizacà této sady zmÄn jdÄte na %{url} a kliknÄte
+ na âZruÅ¡it odebÃránÃâ.
message:
inbox:
title: DoruÄená poÅ¡ta
@@ -2409,6 +2412,8 @@ cs:
nothing_found: Žádné nalezené objekty
error: 'Chyba pÅi pÅipojovánà k %{server}: %{error}'
timeout: VyprÅ¡el Äas pÅi pÅipojovánà k %{server}
+ context:
+ show_address: Zobrazit adresu
redaction:
edit:
description: Popis
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 7fc38de1f..d1adc7cd0 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -452,7 +452,7 @@ da:
cinema: Biograf
clinic: Klinik
clock: Ur
- college: Videregående uddanelsesinstitution
+ college: Videregående uddannelsesinstitution
community_centre: Forsamlingshus / lokalcenter
courthouse: Retsbygning
crematorium: Krematorium
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 7b5976c61..82fed433d 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1002,7 +1002,6 @@ de:
partners_ic: dem Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: Partnern
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
nicht verfügbar.
osm_read_only: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
@@ -1745,6 +1744,8 @@ de:
require_moderator:
not_a_moderator: Du musst Moderator sein, um diese Aktion durchführen zu können.
setup_user_auth:
+ blocked_zero_hour: Du hast eine dringende Nachricht auf der OpenStreetMap-Website.
+ Du musst sie zuerst lesen, bevor du deine Bearbeitungen speichern kannst.
blocked: Dein Zugriff auf die API wurde gesperrt. Bitte melde dich auf der Web-Oberfläche
an, um mehr zu erfahren.
need_to_see_terms: Dein Zugriff auf die API wurde vorübergehend ausgesetzt.
@@ -2305,6 +2306,8 @@ de:
helper:
time_future: Endet in %{time}.
until_login: Aktiv, bis der Benutzer sich anmeldet.
+ time_future_and_until_login: Endet in %{time} und nachdem sich der Benutzer
+ angemeldet hat.
time_past: Endete vor %{time}
blocks_on:
title: Sperren für %{name}
@@ -2507,6 +2510,13 @@ de:
nothing_found: Keine Objekte gefunden
error: 'Fehler beim Kontaktieren von %{server}: %{error}'
timeout: Zeitüberschreitung beim Kontaktieren von %{server}
+ context:
+ directions_from: Route von hier
+ directions_to: Route nach hier
+ add_note: Einen Kartenfehler hier einfügen
+ show_address: Adresse anzeigen
+ query_features: Abfrage-Funktionen
+ centre_map: Karte hier zentrieren
redaction:
edit:
description: Beschreibung
diff --git a/config/locales/diq.yml b/config/locales/diq.yml
index 69b7a28b4..16173e1b9 100644
--- a/config/locales/diq.yml
+++ b/config/locales/diq.yml
@@ -920,7 +920,7 @@ diq:
edits: VurnayıÅi
traces: Rêçi
remove as friend: Embazan ra vec
- add as friend: Embaz bı
+ add as friend: Embazi cı ke
mapper since: 'Demê herdnigarwaniye:'
ago: (%{time_in_words_ago} veror)
ct undecided: Darıdeyo
diff --git a/config/locales/el.yml b/config/locales/el.yml
index b7b89dcc8..221ddff60 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -21,6 +21,7 @@
# Author: Stam.nikos
# Author: SucreRouge
# Author: Zserdx
+# Author: ÎνÏνÏ
Î¼Î¿Ï ÎικιÏαιδιÏÏήÏ
# Author: ìë¼
---
el:
@@ -992,7 +993,6 @@ el:
partners_ic: Imperial College ÏοÏ
ÎονδίνοÏ
partners_bytemark: Bytemark Hosting
partners_partners: ÏÏ
νεÏγάÏεÏ
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: ΠβάÏη δεδομÎνÏν ÏοÏ
OpenStreetMap είναι ÏÏοÏÏÏινά εκÏÏÏ Î»ÎµÎ¹ÏοÏ
ÏγίαÏ
λÏÎ³Ï ÎµÏγαÏιÏν ÏÏ
νÏήÏηÏÎ·Ï ÏÎ·Ï Î²Î¬ÏÎ·Ï Î´ÎµÎ´Î¿Î¼ÎνÏν.
osm_read_only: ΠβάÏη δεδομÎνÏν ÏοÏ
OpenStreetMap ÎÏει Ïεθεί ÏÏοÏÏÏινά Ïε λειÏοÏ
Ïγία
@@ -1372,6 +1372,7 @@ el:
details: ΠεÏιÏÏÏÏεÏÎµÏ Î»ÎµÏÏομÎÏÎµÎ¹ÎµÏ ÏÏεÏικά με Ïη ÏημείÏÏη μÏοÏοÏν να βÏεθοÏν
ÏÏο %{url}.
changeset_comment_notification:
+ hi: Îεια ÏαÏ, %{to_user},
greeting: Îεια,
commented:
subject_own: '[OpenStreetMap] {{GENDER:%{commenter}|Î|Î}} %{commenter} ÏÏολίαÏε
@@ -1387,6 +1388,8 @@ el:
partial_changeset_without_comment: ÏÏÏÎ¯Ï ÏÏÏλιο
details: ΠεÏιÏÏÏÏεÏÎµÏ Î»ÎµÏÏομÎÏÎµÎ¹ÎµÏ Î³Î¹Î± Ïην ομάδα αλλαγÏν μÏοÏοÏν να βÏεθοÏν
ÏÏο %{url}.
+ unsubscribe: Îια να διαγÏαÏείÏε αÏÏ ÏÎ¹Ï ÎµÎ½Î·Î¼ÎµÏÏÏÎµÎ¹Ï Î±Ï
ÏÎ®Ï ÏÎ·Ï Î¿Î¼Î¬Î´Î±Ï Î±Î»Î»Î±Î³Ïν,
+ εÏιÏκεÏθείÏε Ïο %{url} και ÏαÏήÏÏε "ÎιαγÏαÏή".
message:
inbox:
title: ÎιÏεÏÏÏμενα
@@ -1713,8 +1716,14 @@ el:
not_a_moderator: Îα ÏÏÎÏει να είÏÏε ÏÏ
νÏονιÏÏÎ®Ï Î³Î¹Î± να εκÏελÎÏεÏε αÏ
Ïήν Ïην
ενÎÏγεια.
setup_user_auth:
+ blocked_zero_hour: ÎÏεÏε Îνα εÏείγον μήνÏ
μα ÏÏον ιÏÏÏÏοÏο ÏοÏ
OpenStreetMap.
+ Îα ÏÏÎÏει να διαβάÏεÏε Ïο μήνÏ
μα ÏÏιν να μÏοÏείÏε να αÏοθηκεÏÏεÏε ÏÎ¹Ï Î±Î»Î»Î±Î³ÎÏ
+ ÏαÏ.
blocked: Î ÏÏÏÏβαÏή ÏÎ±Ï ÏÏο API ÎÏει αÏοκλειÏÏεί. ΠαÏÎ±ÎºÎ±Î»Ï ÏÏ
νδεθείÏε με Ïη
διεÏαÏή ÏοÏ
ιÏÏÏÏοÏοÏ
για να μάθεÏε ÏεÏιÏÏÏÏεÏα.
+ need_to_see_terms: Î ÏÏÏÏβαÏή ÏÎ±Ï ÏÏο API ÎÏει αναÏÏαλεί ÏÏοÏÏÏινά. ΠαÏακαλοÏμε
+ ÏÏ
νδεθείÏε ÏÏην ηλεκÏÏονική διεÏαÏή για να δείÏε ÏοÏ
Ï ÎÏοÏ
Ï Î£Ï
νειÏÏεÏÏνÏÏν.
+ Îεν ÏÏειάζεÏαι να ÏÏ
μÏÏνήÏεÏε, αλλά θα ÏÏÎÏει να ÏοÏ
Ï Î´ÎµÎ¯Ïε.
oauth:
oauthorize:
title: ÎÏιÏÏÎÏÏε Ïην ÏÏÏÏβαÏη ÏÏο λογαÏιαÏÎ¼Ï ÏαÏ
@@ -2443,6 +2452,13 @@ el:
nothing_found: Îεν βÏÎθηκαν ÏαÏακÏηÏιÏÏικά
error: 'ΣÏάλμα εÏικοινÏÎ½Î¯Î±Ï Î¼Îµ Ïον %{server}: %{error}'
timeout: Îληξε Ïο ÏÏÎ¿Î½Î¹ÎºÏ ÏÏιο εÏικοινÏÎ½Î¯Î±Ï Î¼Îµ %{server}
+ context:
+ directions_from: ÎÎ´Î·Î³Î¯ÎµÏ Î±ÏÏ ÎµÎ´Ï
+ directions_to: ÎÎ´Î·Î³Î¯ÎµÏ ÏÏÎ¿Ï Ïα εδÏ
+ add_note: Î ÏοÏθÎÏÏε μια ÏημείÏÏη εδÏ
+ show_address: ÎμÏάνιÏη διεÏθÏ
νÏηÏ
+ query_features: ΠληÏοÏοÏÎ¯ÎµÏ ÏαÏακÏηÏιÏÏικÏν
+ centre_map: ÎενÏÏάÏιÏμα ÏάÏÏη εδÏ
redaction:
edit:
description: ΠεÏιγÏαÏή
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 4b0ccd15e..c3eca7447 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -973,7 +973,6 @@ en-GB:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: The OpenStreetMap database is currently offline while essential database
maintenance work is carried out.
osm_read_only: The OpenStreetMap database is currently in read-only mode while
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2414fcd1f..3afa7e805 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -933,12 +933,11 @@ en:
intro_header: Welcome to OpenStreetMap!
intro_text: OpenStreetMap is a map of the world, created by people like you and free to use under an open license.
intro_2_create_account: "Create a user account"
- partners_html: "Hosting is supported by %{ucl}, %{ic} and %{bytemark}, and other %{partners}."
+ partners_html: "Hosting is supported by %{ucl}, %{bytemark} and %{ic}, and other %{partners}."
partners_ucl: "the UCL VR Centre"
partners_ic: "Imperial College London"
partners_bytemark: "Bytemark Hosting"
partners_partners: "partners"
- partners_url: "http://wiki.openstreetmap.org/wiki/Partners"
osm_offline: "The OpenStreetMap database is currently offline while essential database maintenance work is carried out."
osm_read_only: "The OpenStreetMap database is currently in read-only mode while essential database maintenance work is carried out."
donate: "Support OpenStreetMap by %{link} to the Hardware Upgrade Fund."
@@ -1626,6 +1625,7 @@ en:
require_moderator:
not_a_moderator: "You need to be a moderator to perform that action."
setup_user_auth:
+ blocked_zero_hour: "You have an urgent message on the OpenStreetMap web site. You need to read the message before you will be able to save your edits."
blocked: "Your access to the API has been blocked. Please log-in to the web interface to find out more."
need_to_see_terms: "Your access to the API is temporarily suspended. Please log-in to the web interface to view the Contributor Terms. You do not need to agree, but you must view them."
oauth:
@@ -2112,6 +2112,7 @@ en:
helper:
time_future: "Ends in %{time}."
until_login: "Active until the user logs in."
+ time_future_and_until_login: "Ends in %{time} and after the user has logged in."
time_past: "Ended %{time} ago."
blocks_on:
title: "Blocks on %{name}"
@@ -2305,6 +2306,13 @@ en:
nothing_found: No features found
error: "Error contacting %{server}: %{error}"
timeout: "Timeout contacting %{server}"
+ context:
+ directions_from: Directions from here
+ directions_to: Directions to here
+ add_note: Add a note here
+ show_address: Show address
+ query_features: Query features
+ centre_map: Centre map here
redaction:
edit:
description: "Description"
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 62034ca63..fda175ac0 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -1022,7 +1022,7 @@ eo:
attribution_example:
alt: Ekzemplo kiel atribui OpenStreetMap sur retpaÄo
title: Ekzemplo de aÅtorec-atribuado
- more_title_html: Sciigi pli
+ more_title_html: SciiÄi pli
more_1_html: |-
Legu pli pri uzado de niaj datumoj kaj kiel atribui aÅtorecon je la retpaÄo de OSMF permesilo kaj je la elÅuti
Flash Player el Adobe.com retpaÄo. Kelkaj
@@ -1648,8 +1648,10 @@ eo:
require_moderator:
not_a_moderator: Vi devas esti kontrolanto por fari Äi tiun agon.
setup_user_auth:
+ blocked_zero_hour: Vi havas urÄan mesaÄon en la OpenStreetMap retejo. Vi devas
+ legi la mesaÄon antaÅ ol vi povos konservi viajn redaktojn.
blocked: Via aliro al API estas blokita. Bonvolu ensaluti al reta interfaco
- por sciigi pli.
+ por sciiÄi pli.
need_to_see_terms: Via aliro al API estas dumtempe provizore haltigita. Bonvolu
ensaluti al reta fasado por legi interkonsenton pri kontribuado. Vi ne devas
akcepti Äin, sed vi devas legi Äin.
@@ -1967,7 +1969,7 @@ eo:
text: Nuntempe viaj redaktoj estas anonimaj kaj aliuloj ne povas sendi mesaÄojn
al vi kaj vidi vian lokon. Por montri kion vi redaktis kaj ebligi al aliuloj
kontakti vin per la retejo, alklaku la butonon sube. Ekde la versio 0.6
- de API, nur publikaj uzantoj povas redakti map-datumojn. (sciigi
+ de API, nur publikaj uzantoj povas redakti map-datumojn. (sciiÄi
kial).- Via retpoÅta adreso ne estos publikigita.
- Äi tio
ago ne povos esti malfarita kaj Äiuj novaj uzantoj estas publikaj implicite.
contributor terms:
@@ -2180,6 +2182,7 @@ eo:
helper:
time_future: FiniÄos %{time}.
until_login: Aktiva Äis la uzanto ensalutos.
+ time_future_and_until_login: FiniÄos dum %{time} kaj post la uzanto ensalutos.
time_past: FiniÄis antaÅ %{time}
blocks_on:
title: Blokadoj por %{name}
@@ -2379,6 +2382,13 @@ eo:
nothing_found: Neniuj objektoj trovitaj
error: 'Eraro dum komunikado kun %{server}: %{error}'
timeout: Atingis tempolimon dum kontakto kun %{server}
+ context:
+ directions_from: Direktoj el Äi tie
+ directions_to: Direktoj al Äi tie
+ add_note: Aldoni rimarkon Äi tien
+ show_address: Montri adreson
+ query_features: Informoj pri objektoj
+ centre_map: Centrigi mapon Äi tien
redaction:
edit:
description: Priskribo
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 2a982c93b..672756395 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -7,6 +7,7 @@
# Author: Carlosz22
# Author: Crazymadlover
# Author: Csbotero
+# Author: Dgstranz
# Author: Egofer
# Author: Fitoschido
# Author: Fortega
@@ -988,7 +989,6 @@ es:
partners_ic: Imperial College de Londres
partners_bytemark: Bytemark Hosting
partners_partners: socios
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
debido a trabajos de mantenimiento.
osm_read_only: La base de datos de OpenStreetMap se encuentra en modo de sólo
@@ -1697,6 +1697,8 @@ es:
require_moderator:
not_a_moderator: Tienes que ser un moderador para ejecutar esa acción.
setup_user_auth:
+ blocked_zero_hour: Tienes un mensaje urgente en el sitio web de OpenStreetMap.
+ Debes leer el mensaje antes de que puedas guardar tus ediciones.
blocked: Su acceso a la API ha sido bloqueado. Por favor, inicie sesión en la
interfaz web para obtener más información.
need_to_see_terms: Su acceso a la API está temporalmente suspendido. Por favor,
@@ -2453,6 +2455,12 @@ es:
nothing_found: No se encontraron caracterÃsticas
error: 'Error al contactar a %{server}: %{error}'
timeout: Tiempo de espera agotado al contactar a %{server}
+ context:
+ directions_from: Indicaciones desde aquÃ
+ directions_to: Indicaciones hasta aquÃ
+ add_note: Añadir una nota aquÃ
+ show_address: Mostrar dirección
+ centre_map: Centrar el mapa aquÃ
redaction:
edit:
description: Descripción
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 9ba591beb..29852f3fc 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -2,6 +2,7 @@
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Alirezaaa
+# Author: Arash.pt
# Author: Armin1392
# Author: BMRG14
# Author: Baqeri
@@ -2385,6 +2386,8 @@ fa:
nothing_found: ÙÛÚÚ¯ÛâØ§Û ÛاÙت Ùشد
error: 'خطار در ارتباط %{server}: %{error}'
timeout: اتÙ
اÙ
زÙ
ا٠%{server}
+ context:
+ show_address: ÙÙ
اÛØ´ آدرس
redaction:
edit:
description: شرØ
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index d2a4e5912..c2e072a21 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -280,6 +280,7 @@ fi:
kauan.
rss:
title_all: Keskustelu OpenStreetMapin muutoskokoelmasta
+ title_particular: 'OpenStreetMap muutoskokoelma #%{changeset_id} keskustelu'
comment: 'Käyttäjä %{author} kommentoi muutoskokoelmaa #%{changeset_id}'
commented_at_html: Päivitetty %{when} sitten
commented_at_by_html: '%{user} päivittänyt %{when} sitten'
@@ -1196,6 +1197,8 @@ fi:
aiheita koskevilla tai alueellisilla sähköpostilistoilla.
forums:
title: Keskustelupalsta
+ description: Kysymykset ja keskustelut niille, jotka haluavat mielummin ilmoitustaulutyylisen
+ käyttöliittymän.
irc:
title: IRC
description: Interaktiivinen chat monilla eri kielillä ja monista eri aiheista.
@@ -1337,8 +1340,16 @@ fi:
hi: Hei %{to_user},
greeting: Hei,
commented:
+ subject_own: '[OpenStreetMap] %{commenter} on kommentoinut yhtä muutoskokoelmaasi'
+ subject_other: '[OpenStreetMap] %{commenter} on kommentoinut muutoskokoelmaa
+ josta olet kiinnostunut'
+ your_changeset: '%{commenter} on jättänyt kommentin yhteen muutoskokoelmistasi
+ joka on luotu %{time}'
+ partial_changeset_with_comment: kommentin kanssa '%{changeset_comment}'
partial_changeset_without_comment: ei kommenttia
details: 'Lisätietoja muutoskokoelmasta: %{url}'
+ unsubscribe: Peruaksesi tilauksen päivityksistä tähän muutoskokoelmaan, vieraile
+ sivulla %{url} ja klikkaa "Unsubscribe".
message:
inbox:
title: Saapuneet
@@ -2000,6 +2011,7 @@ fi:
gravatar: Käytä Gravataria
link text: mikä tämä on?
disabled: Gravatar on poistettu käytöstä.
+ enabled: Gravatarisi näyttäminen on otettu käyttöön.
new image: Lisää kuva
keep image: Säilytä nykyinen kuva
delete image: Poista nykyinen kuva
@@ -2258,6 +2270,7 @@ fi:
link: Linkki tai HTML-koodi
long_link: Linkki
short_link: Lyhyt linkki
+ geo_uri: Geo URI
embed: HTML-koodi
custom_dimensions: Rajaa alue itse
format: 'Tiedostomuoto:'
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index c088db13f..50054c3a8 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1011,7 +1011,6 @@ fr:
partners_ic: le Collège impérial de Londres
partners_bytemark: Hébergement Bytemark
partners_partners: partenaires
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
maintenance essentielle à son bon fonctionnement est en cours.
osm_read_only: La base de données OpenStreetMap est actuellement en mode lecture
@@ -1732,6 +1731,8 @@ fr:
require_moderator:
not_a_moderator: Vous devez être modérateur pour effectuer cette action.
setup_user_auth:
+ blocked_zero_hour: Vous avez un message urgent sur le site web OpenStreetMap.
+ Vous devez lire le message avant de pouvoir enregistrer vos modifications.
blocked: Votre accès à lâAPI a été bloqué. Connectez-vous sur lâinterface web
pour plus dâinformations.
need_to_see_terms: Votre accès à lâAPI est temporairement suspendu. Veuillez
@@ -2294,6 +2295,8 @@ fr:
helper:
time_future: Prends fin dans %{time}.
until_login: Actif jusquâà ce que lâutilisateur se connecte.
+ time_future_and_until_login: Finit dans %{time} et une fois que lâutilisateur
+ sâest connecté.
time_past: Terminé il y a %{time}.
blocks_on:
title: Blocages de « %{name} »
@@ -2494,6 +2497,13 @@ fr:
nothing_found: Aucun objet trouvé
error: 'Erreur en contactant %{server} : %{error}'
timeout: Délai dépassé en contactant %{server}
+ context:
+ directions_from: Directions depuis ici
+ directions_to: Directions vers ici
+ add_note: Ajouter une note ici
+ show_address: Afficher lâadresse
+ query_features: Requêter sur les fonctionnalités
+ centre_map: Centrer la carte ici
redaction:
edit:
description: Description
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index 261bee3eb..4b25790c2 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -168,6 +168,7 @@ gd:
way: an t-slighe
relation: an dà imh
changeset: seata atharraichean
+ note: an aire
timeout:
sorry: Duilich ach thug e ro fhada an dà ta airson %{type} air a bheil an id
%{id} fhaighinn.
@@ -176,6 +177,7 @@ gd:
way: an t-slighe
relation: an dà imh
changeset: seata atharraichean
+ note: an aire
redacted:
redaction: Ath-sgrùdadh %{id}
message_html: Chan urrainn dhuinn an tionndadh %{version} %{type} a shealltainn
@@ -269,6 +271,7 @@ gd:
diary_entry:
new:
title: Clà r ùr an leabhair-latha
+ publish_button: Foillsich
list:
title: Leabhraichean-latha
title_friends: Leabhraichean-latha do charaidean
@@ -974,7 +977,6 @@ gd:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: com-pà irtichean eile
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Tha an stòr-dà ta aig OpenStreetMap far loidhÅe an-drà sta on a tha
sinn a' dèanamh obair-charaidh riatanach air.
osm_read_only: Tha an stòr-dà ta aig OpenStreetMap sa mhodh leughaidh a-mhà in an-drà sta
@@ -1144,6 +1146,8 @@ gd:
loch no togalach.'
tag_html: '''S e beagan dà ta mu nòd no slighe a tha ann an taga,
can ainm taighe-bhìdh no crìoch astair rathaid.'
+ rules:
+ title: Riaghailtean!
questions:
title: A bheil ceist sam bith agad?
paragraph_1_html: |-
@@ -1191,11 +1195,19 @@ gd:
title: FÃ ilte gu OSM
description: Faigh toiseach tòiseachaidh air OpenStreetMap leis an stiùireadh
luath seo.
+ beginners_guide:
+ url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide
+ title: Treòir an luchd-tòiseachaidh
+ description: Treòir leis aâ choimhearsnachd do luchd-tòiseachaidh
help:
url: https://help.openstreetmap.org/
title: help.openstreetmap.org
description: Faighnich ceist no rùraich na freagairtean air là rach nan ceistean
à bhaisteach aig OSM.
+ mailing_lists:
+ title: Liostaichean-puist
+ switch2osm:
+ title: switch2osm
wiki:
url: http://wiki.openstreetmap.org/
title: wiki.openstreetmap.org
@@ -1222,13 +1234,14 @@ gd:
open_data_html: |-
'S e dà ta fosgailte a tha san OpenStreetMap: faodaidh tu a chleachdadh a chum adhbhair sam bith cho fad 's a bheir thu urram air OpenStreetMap agus na co-thabhartaichean aige. Ma nì thu atharrachadh air an dà ta againn no ma thogas tu rudeigin eile leis, faodaidh tu
an toradh a sgaoileadh fon aon cheadachas. Thoir sùil air Duilleag na còrach-lethbhreac agus a' cheadachais airson barrachd fiosrachaidh.
+ legal_title: Nòtaichean laghail
partners_title: Com-pà irtichean
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] Thug %{user} beachd air an leabhar-latha agad'
+ subject: '[OpenStreetMap] Thug %{user} seachad beachd air leabhar-latha'
hi: Shin thu, %{to_user},
- header: 'Thug %{from_user} beachd air clà r leabhar-latha OpenStreetMap agad
- a rinn thu o chionn goirid air a bheil an cuspair "%{subject}":'
+ header: 'Thug %{from_user} seachad beachd air innteart leabhar-latha OpenStreetMap
+ a rinn thu o chionn goirid air a bheil an cuspair â%{subject}â:'
footer: '''S urrainn dhut am beachd a leughadh air %{readurl} cuideachd agus
beachd agad fhèin a chur ris air %{commenturl} no freagairt a sgrìobhadh air
%{replyurl}'
@@ -1333,6 +1346,7 @@ gd:
a thug thu beachd air. Tha an nòta faisg air %{place}.'
details: Gheibh thu barrachd fiosrachaidh air an nòta air %{url}.
changeset_comment_notification:
+ hi: Shin thu, %{to_user},
greeting: Shin thu,
commented:
subject_own: '[OpenStreetMap] Thug %{commenter} beachd air seata atharraichean
@@ -1471,6 +1485,7 @@ gd:
table:
entry:
motorway: Mòr-rathad
+ main_road: Prìomh-rathad
trunk: Prìomh-rathad
primary: Prìomh-rathad
secondary: Rathad dà rnach
@@ -1478,6 +1493,9 @@ gd:
track: Slighe
bridleway: Ceum marcachd
cycleway: Slighe baidhseagail
+ cycleway_national: Slighe baidhseagail nà iseanta
+ cycleway_regional: Slighe baidhseagail roinneil
+ cycleway_local: Slighe baidhseagail ionadail
footway: Ãrainn-choisichean
rail: Rèile
subway: Meatro
@@ -1530,6 +1548,9 @@ gd:
private: Cead-inntrigidh prìobhaideach
destination: Inntrigeadh a' chinn-uidhe
construction: Rathaidean 'gan togail
+ bicycle_shop: Bùth bhaidhseagalan
+ bicycle_parking: PÃ irceadh bhaidhseagalan
+ toilets: Taighean-beaga
richtext_area:
edit: Deasaich
preview: Ro-sheall
@@ -1665,7 +1686,10 @@ gd:
title: Lorgaidhean GPS aig OpenStreetMap
description:
description_with_count:
- other: faidhle GPX le %{count} phuing o %{user}
+ one: faidhle GPX le %{count} phuing o %{user}
+ two: faidhle GPX le %{count} phuing o %{user}
+ few: faidhle GPX le %{count} puingean o %{user}
+ other: faidhle GPX le %{count} puing o %{user}
description_without_count: Faidhle GPX o %{user}
application:
require_cookies:
@@ -1696,6 +1720,7 @@ gd:
allow_read_gpx: na lorgaidhean GPS prìobhaideach agad a leughadh.
allow_write_gpx: lorgaidhean GPS a luchdadh suas.
allow_write_notes: nòtaichean atharrachadh.
+ grant_access: Thoir inntrigeadh
oauthorize_success:
title: Chaidh gabhail ri iarrtas a' chead
allowed: Thug thu cead dha dh'aplacaid %{app_name} an cunntas agad inntrigeadh.
@@ -1805,6 +1830,18 @@ gd:
google:
title: Clà raich a-steach le Google
alt: Clà raich a-steach le OpenID Google
+ facebook:
+ title: Clà raich a-steach le Facebook
+ alt: Clà raich a-steach le cunntas Facebook
+ windowslive:
+ title: Clà raich a-steach le Windows Live
+ alt: Clà raich a-steach le cunntas Windows Live
+ github:
+ title: Clà raich a-steach le GitHub
+ alt: Clà raich a-steach le cunntas GitHub
+ wikipedia:
+ title: Clà raich a-steach leis an Uicipeid
+ alt: Clà raich a-steach le cunntas na h-Uicipeid
yahoo:
title: Clà raich a-steach le Yahoo
alt: Clà raich a-steach le OpenID Yahoo
@@ -1856,10 +1893,10 @@ gd:
a' chom-pà irtiche.
email address: 'Seòladh puist-d:'
confirm email address: 'Dearbhaich an seòladh puist-d:'
- not displayed publicly: Cha dèid a shealltainn gu poblach (thoir sùil air poileasaidh
- na prìobhaideachd)
+ not displayed publicly: Cha dèid do sheòladh shealltainn gu poblach, thoir sùil
+ air poileasaidh
+ na prìobhaideachd airson barrachd fiosrachaidh
display name: 'Ainm seallaidh:'
display name description: An t-ainm-cleachdaiche agad a thèid a shealltainn
gu poblach. 'S urrainn dhut seo atharrachadh uair sam bith sna roghainnean.
@@ -1905,6 +1942,7 @@ gd:
body: Duilich ach chan eil cleachdaiche ann air a bheil %{user}. Dearbhaich
an litreachadh no 's dòcha nach eil an ceangal air an do rinn thu briogadh
mar bu chòir.
+ deleted: air a sguabadh à s
view:
my diary: An leabhar-latha agam
new diary entry: clà r leabhair-latha ùr
@@ -2305,8 +2343,7 @@ gd:
key:
title: Iuchair a' mhapa
tooltip: Iuchair a' mhapa
- tooltip_disabled: Chan eil iuchair a' mhapa ri fhaighinn ach airson na breatha
- stannardaich
+ tooltip_disabled: Chan eil iuchair aâ mhapa ri fhaighinn airson na breath seo
map:
zoom:
in: Sùm a-steach
diff --git a/config/locales/he.yml b/config/locales/he.yml
index cdf75890c..7628d710c 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -963,7 +963,6 @@ he:
partners_ic: ×××××× ×××××ת×ת ×©× ××× ×××
partners_bytemark: ××ר×× ××××××רק
partners_partners: ש×תפ××
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: ××¡× ×× ×ª×× ×× ×©× ×תר OpenStreetMap ××× × ×ק××× ×עת ××©× ×¢××××ת ת×××ק×
××××צע×ת ××.
osm_read_only: ××¡× ×× ×ª×× ×× ×©× ×תר OpenStreetMap × ×ª×× ×עת ×××¦× ×§×¨××× ×××× ××©× ×¢××××ת
diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml
index 204819de0..4fd0ed828 100644
--- a/config/locales/hsb.yml
+++ b/config/locales/hsb.yml
@@ -954,7 +954,6 @@ hsb:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partnerow
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Datowa banka OpenStreetMap je tuchwilu offline, dokelž so wažne wobhladowankse
dźÄÅa na datowej bance pÅewjedu.
osm_read_only: Datowa banka OpenStreetMap je tuchwilu jenož Äitajomna, dokelž
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index eebb71d02..644532690 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -956,7 +956,6 @@ ia:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Le base de datos de OpenStreetMap non es disponibile al momento debite
a operationes de mantenentia essential.
osm_read_only: Le base de datos de OpenStreetMap es al momento in modo de solmente
diff --git a/config/locales/is.yml b/config/locales/is.yml
index a8d1323d0..34f38685c 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -200,7 +200,23 @@ is:
title: 'Minnispunktur: %{id}'
new_note: Nýr minnispunktur
description: Lýsing
+ open_title: 'Minnispunktur án lausnar #%{note_name}'
+ closed_title: 'Minnispunktur með lausn #%{note_name}'
hidden_title: 'Falinn minnispunktur #%{note_name}'
+ open_by: Búið til af %{user} fyrir %{when} sÃðan
+ open_by_anonymous: Búið til af nafnlausum notanda fyrir
+ %{when} sÃðan
+ commented_by: Umsögn frá %{user} fyrir %{when} sÃðan
+ commented_by_anonymous: Umsögn frá nafnlausum notanda fyrir
+ %{when} sÃðan
+ closed_by: Leyst af %{user} fyrir %{when} sÃðan
+ closed_by_anonymous: Leyst af nafnlausum notanda fyrir
+ %{when} sÃðan
+ reopened_by: Endurvirkjað af %{user} fyrir %{when}
+ sÃðan
+ reopened_by_anonymous: Endurvirkjað af nafnlausum notanda fyrir
+ %{when} sÃðan
+ hidden_by: Falið af %{user} fyrir %{when} sÃðan
query:
title: Rannsaka fitjur
introduction: Smelltu á kortið til að finna fitjur à nágrenninu.
@@ -224,6 +240,9 @@ is:
list:
title: Breytingasett
title_user: Breytingar eftir %{user}
+ title_friend: Breytingar eftir vini þÃna
+ title_nearby: Breytingasett eftir nálæga notendur
+ empty: Engin breytingasett fundust.
load_more: Hlaða inn fleiri
rss:
commented_at_html: Uppfært fyrir %{when} sÃðan
@@ -286,7 +305,7 @@ is:
location:
location: 'Staðsetning:'
view: kort
- edit: breyta
+ edit: Breyta
feed:
user:
title: OpenStreetMap bloggfærslur eftir %{user}
@@ -321,6 +340,8 @@ is:
body: Svæðið sem þú ert að reyna að flytja út á OpenStreetMap á XML-sniði
er of stórt. Auktu aðdráttinn eða veldu smærra svæði, nú eða notaðu eina
af eftirfarandi leiðum til að flytja inn mikið magn gagna.
+ planet:
+ title: OSM-plánetan
geofabrik:
title: Niðurhöl frá Geofabrik
other:
@@ -336,7 +357,7 @@ is:
longitude: 'Breidd:'
output: Ãttak
paste_html: Notaðu þennan HTML kóða til að bæta kortinu á vefsÃðu
- export_button: Niðurhala
+ export_button: Flytja út
geocoder:
search:
title:
@@ -407,7 +428,7 @@ is:
fire_hydrant: Brunahani
fire_station: Slökkvistöð
fountain: Gosbrunnur
- fuel: BensÃnstöð
+ fuel: Eldsneyti
gambling: Fjárhættuspil
grave_yard: Kirkjugarður
gym: LÃkamsræktarstöð
@@ -552,13 +573,17 @@ is:
landuse:
allotments: Ãthlutuð svæði
basin: Lægð
+ brownfield: Byggingarsvæði
cemetery: Grafreitur
commercial: Verslunarsvæði
+ conservation: Verndarsvæði
+ construction: Bygging
farm: Býli
- farmland: Akurlendi
+ farmland: Ræktarland
forest: Skógur
garages: Verkstæði
grass: Gras
+ greenfield: Nýbyggingarsvæði
industrial: Iðnaðarsvæði
landfill: Landfylling
meadow: Skógarlundur
@@ -569,12 +594,14 @@ is:
railway: Lestarteinar
reservoir: Uppistöðulón
residential: Ãbúðasvæði
+ retail: Smásala
vineyard: VÃnekra
"yes": Landnotkun
leisure:
bird_hide: Fuglaskoðunarhús
club: Klúbbur
common: Almenningur
+ dog_park: Hundagarður
fitness_centre: LÃkamsræktarstöð
garden: Garður
golf_course: Golfvöllur
@@ -665,7 +692,9 @@ is:
houses: Hús
island: Eyja
islet: Smáeyja
+ isolated_dwelling: Einangraður bústaður
locality: Sveitarfélag
+ moor: Mýri
municipality: Sveitarfélag
neighbourhood: Nágrenni
postcode: Póstnúmer
@@ -678,12 +707,19 @@ is:
village: Ãorp
"yes": Staður
railway:
+ abandoned: Aflögð járnbraut
+ construction: Járnbraut à byggingu
+ historic_station: Söguleg lestarstöð
+ level_crossing: Ãverun brautarteina
light_rail: Smálest
+ monorail: Einteinungur
station: Lestarstöð
subway: Neðanjarðarlest
+ subway_entrance: Inngangur à neðanjarðarlest
tram: Sporvagn
tram_stop: Sporvagnastöð
shop:
+ antiques: AntÃkverslun
art: Listmunaverslun
bakery: BakarÃ
bicycle: Hjólaverslun
@@ -744,6 +780,7 @@ is:
alpine_hut: Fjallaskáli
apartment: Ãbúð
artwork: Listaverk
+ attraction: Aðdráttarafl
bed_and_breakfast: BB-gisting og veitingar
cabin: Kofi
camp_site: Tjaldstæði
@@ -777,7 +814,10 @@ is:
waterfall: Foss
"yes": Siglingaleið
admin_levels:
+ level2: Landamæri
+ level4: Fylkismörk
level5: Héraðsmörk
+ level6: Sýslumörk
level8: Borgarmörk
description:
title:
@@ -805,8 +845,8 @@ is:
start_mapping: Hefja kortlagningu
sign_up_tooltip: Stofnaðu aðgang til að geta breytt kortinu
edit: Breyta
- history: Sagnfræði
- export: Niðurhala
+ history: Breytingaskrá
+ export: Flytja út
data: Gögn
export_data: Flytja út gögn
gps_traces: GPS ferlar
@@ -817,14 +857,16 @@ is:
tag_line: Frjálsa wiki heimskortið
intro_header: Velkomin à OpenStreetMap!
intro_2_create_account: Búa til notandaaðgang
+ partners_ucl: UCL VR Centre
+ partners_ic: Imperial College London
+ partners_bytemark: Bytemark Hosting
partners_partners: samstarfsaðilar
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
osm_read_only: Ekki er hægt að skrifa à OpenStreetMap gagnagrunninn à augnablikinu
vegna viðhalds.
donate: Hjálpaðu OpenStreetMap verkefninu með %{link} à vélbúnaðarsjóðinn.
help: Hjálp
- about: Um
+ about: Um hugbúnaðinn
copyright: Höfundaréttur
community: Samfélag
community_blogs: Blogg félaga
@@ -916,13 +958,14 @@ is:
partners_title: Samstarfsaðilar
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} bætti við athugasemd á bloggfærslu þÃna'
+ subject: '[OpenStreetMap] %{user} bætti athugasemd við bloggfærslu þÃna'
hi: Hæ %{to_user},
- header: '%{from_user} hefur bætt við athugasemd á OpenStreetMap bloggið þitt
+ header: '%{from_user} hefur bætt við athugasemd á OpenStreetMap bloggfærsluna
með titlinum â%{subject}â:'
footer: Ãú getur einnig lesið athugasemdina á %{readurl} og skrifað athugasemd
á %{commenturl} eða svarað á %{replyurl}
message_notification:
+ subject_header: '[OpenStreetMap] %{subject}'
hi: Hæ %{to_user},
header: '%{from_user} hefur send þér skilaboð á OpenStreetMap með titlinum â%{subject}â:'
friend_notification:
@@ -1144,6 +1187,7 @@ is:
private: Einkaaðgangur
destination: Umferð leyfileg á ákveðinn áfangastað
construction: Vegir à byggingu
+ bicycle_parking: Reiðhjólastæði
richtext_area:
edit: Breyta
preview: Forskoðun
@@ -1227,7 +1271,7 @@ is:
owner: 'Eigandi:'
description: 'Lýsing:'
tags: 'Merki:'
- none: engin
+ none: Ekkert
edit_track: Breyta
delete_track: Eyða
trace_not_found: Ãessi ferill fannst ekki!
@@ -1301,13 +1345,15 @@ is:
oauth_clients:
new:
title: Skrá nýtt forrit
- submit: Skrá
+ submit: Nýskrá
edit:
title: Breyta forritinu þÃnu
- submit: Vista
+ submit: Breyta
show:
title: OAuth stillingar fyrir %{app_name}
+ authorize_url: 'Leyfa slóð (URL):'
edit: Breyta þessari skráningu
+ delete: Eyða biðlara
confirm: Ertu viss?
requests: 'Ãska eftir eftirfarandi leyfum frá notendum:'
allow_read_prefs: Lesa notandastillingar þeirra.
@@ -1315,8 +1361,9 @@ is:
allow_write_diary: Búa til bloggfærslur, setja inn athugasemdir og bæta við
vinum.
allow_write_api: Breyta kortagögnunum.
+ allow_read_gpx: Lesa einka-GPS-ferlana þeirra.
allow_write_gpx: Senda inn GPS ferla.
- allow_write_notes: breyta minnispunktum.
+ allow_write_notes: Breyta minnispunktum.
index:
title: OAuth stillingar
revoke: Eyða banninu
@@ -1412,11 +1459,13 @@ is:
vegna framlaga.
email address: 'Netfang:'
confirm email address: 'Staðfestu netfang:'
- not displayed publicly: Ekki sýnt opinberlega (sjá meðferð persónuupplýsinga)
+ not displayed publicly: Netfangið þitt er ekki birt opinberlega, sjá kaflann
+ um meðferð persónuupplýsinga
display name: 'Sýnilegt nafn:'
display name description: Nafn þitt sem aðrir notendur sjá, þú getur breytt
þvà sÃðar à stillingunum þÃnum.
+ external auth: 'Auðkenning með þriðja aðila:'
password: 'Lykilorð:'
confirm password: 'Staðfestu lykilorðið:'
continue: Nýskrá
@@ -1509,6 +1558,10 @@ is:
unhide_user: Af-fela þennan notanda
delete_user: Eyða þessum notanda
confirm: Staðfesta
+ friends_changesets: breytingasett vina
+ friends_diaries: bloggfærslur vina
+ nearby_changesets: breytingasett vina à næsta nágrenni
+ nearby_diaries: bloggfærslur vina à næsta nágrenni
popup:
your location: Staðsetning þÃn
nearby mapper: Nálægur notandi
@@ -1553,9 +1606,11 @@ is:
preferred editor: 'Uppáhaldsritill:'
image: 'Mynd:'
gravatar:
- gravatar: Nota Gravatar-merki
+ gravatar: Nota Gravatar-auðkennismynd
link: http://wiki.openstreetmap.org/wiki/Gravatar
link text: Hvað er þetta?
+ disabled: Gravatar-auðkennismynd hefur verið gerð óvirk.
+ enabled: Birting Gravatar-auðkennismyndar hefur verið gerð virk.
new image: Bæta við mynd
keep image: Halda þessari mynd
delete image: Eyða þessari mynd
@@ -1575,9 +1630,11 @@ is:
flash update success: Stillingarnar þÃnar voru uppfærðar.
confirm:
heading: Athuga með tölvupóstinn þinn!
+ introduction_1: Við höfum sent þér staðfestingartölvupóst.
press confirm button: Hér getur þú staðfest að þú viljir búa til notanda..
button: Staðfesta
success: Notandinn þinn hefur verið staðfestur.
+ already active: Ãessi notandaaðgangur hefur þegar verið staðfestur.
confirm_email:
heading: Staðfesta breytingu á netfangi
press confirm button: Hér getur þú staðfest breytingu á netfangi.
@@ -1708,7 +1765,7 @@ is:
ago: Fyrir %{time} sÃðan
status: Staða
show: Sýna
- edit: Breyta banninu
+ edit: Breyta
revoke: Eyða banninu
confirm: Ertu viss?
reason: 'Ãstæða banns:'
@@ -1767,6 +1824,7 @@ is:
header: Lög á korti
notes: Minnispunktar á korti
data: Gögn korts
+ gps: Opinberir GPS-ferlar
title: Lög
copyright: © OpenStreetMap þátttakendur
donate_link_text: Styrkja verkefnið
@@ -1774,6 +1832,7 @@ is:
edit_tooltip: Breyta kortinu
edit_disabled_tooltip: Renndu að til að breyta kortinu
createnote_tooltip: Bæta við minnispunkti á kortið
+ createnote_disabled_tooltip: Renndu að til að bæta minnispunkti á kortið
map_notes_zoom_in_tooltip: Renndu að til að sjá minnispunkta á kortinu
map_data_zoom_in_tooltip: Renndu að til að skoða gögn kortsins
queryfeature_tooltip: Rannsaka fitjur
@@ -1784,12 +1843,14 @@ is:
subscribe: Gerast áskrifandi
unsubscribe: Segja upp áskrift
hide_comment: fela
+ unhide_comment: hætta að fela
notes:
new:
add: Bæta við minnispunkti
show:
hide: Fela
resolve: Leysa
+ reactivate: Virkja aftur
comment: Athugasemd
directions:
engines:
@@ -1802,17 +1863,22 @@ is:
mapzen_bicycle: Reiðhjól (Mapzen)
mapzen_car: BÃll (Mapzen)
mapzen_foot: Fótgangandi (Mapzen)
- directions: Stefnur
+ directions: Leiðir
distance: Vegalengd
errors:
no_route: Gat ekki fundið leið á milli þessara tveggja staða.
no_place: Ãvà miður, gat ekki fundið þennan stað.
+ instructions:
+ continue_without_exit: Halda áfram á %{name}
+ unnamed: ónefnd gata
time: TÃmi
query:
node: Hnútur
way: Leið
relation: Vensl
nothing_found: Engar fitjur fundust
+ error: 'Villa við að tengjast %{server}: %{error}'
+ timeout: Rann út á tÃma við að tengjast %{server}
redaction:
edit:
description: Lýsing
diff --git a/config/locales/it.yml b/config/locales/it.yml
index e82a2bd1e..3491b37f9 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -2459,6 +2459,8 @@ it:
nothing_found: Nessun elemento trovato
error: Errore durante la connessione a %{server}, %{error}
timeout: Tempo scaduto per la connessione a %{server}
+ context:
+ show_address: Mostra indirizzo
redaction:
edit:
description: Descrizione
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 06e40b852..34ba51a6a 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -772,7 +772,6 @@ ka:
tag_line: ááááá¡á£á¤ááá áááá-á á£áá
intro_2_create_account: áááá®ááá ááááá¡ ááááá áá¨áá¡ á¨áá¥ááá
partners_partners: ááá á¢áááá ááá
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
help: ááá®ááá ááá
copyright: á¡áááá¢áá á á£á¤áááá
community: ááááá¡áááááááááá
@@ -1252,6 +1251,8 @@ ka:
show:
hide: ááááááá
comment: áááááá¢áá á
+ context:
+ show_address: ááá¡áááá ááá¡ á©áááááá
redaction:
edit:
description: áá¦á¬áá á
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index a8fb1cb3c..18310628b 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -35,7 +35,7 @@ ko:
acl: ì ê·¼ ì ì´ ëª©ë¡
changeset: ë°ëì§í©
changeset_tag: ë°ëì§í© íê·¸
- country: êµê°
+ country: ëë¼
diary_comment: ì¼ê¸° ëê¸
diary_entry: ì¼ê¸° í목
friend: ì¹êµ¬
@@ -63,7 +63,7 @@ ko:
user_preference: ì¬ì©ì íê²½ ì¤ì
user_token: ì¬ì©ì í í°
way: 길
- way_node: 길 ë
¸ë
+ way_node: 길 êµì
way_tag: 길 íê·¸
attributes:
diary_comment:
@@ -94,7 +94,7 @@ ko:
user:
email: ì´ë©ì¼
active: íì±
- display_name: íìí ì´ë¦
+ display_name: íì ì´ë¦
description: ì¤ëª
languages: ì¸ì´
pass_crypt: ë¹ë°ë²í¸
@@ -133,13 +133,13 @@ ko:
changeset:
title: 'ë°ëì§í©: %{id}'
belongs_to: ì ì
- node: ë
¸ë (%{count})
- node_paginated: ë
¸ë (%{count} ì¤ %{x}-%{y})
- way: 길 (%{count})
- way_paginated: 길 (%{count} ì¤ %{x}-%{y})
- relation: ê´ê³ (%{count})
- relation_paginated: ê´ê³ (%{count} ì¤ %{x}-%{y})
- comment: ëê¸ (%{count})
+ node: êµì (%{count})
+ node_paginated: êµì (%{count}ê° ì¤ %{x}-%{y})
+ way: 길(%{count})
+ way_paginated: 길(%{count}ê° ì¤ %{x}-%{y})
+ relation: ê´ê³(%{count})
+ relation_paginated: ê´ê³(%{count}ê° ì¤ %{x}-%{y})
+ comment: ëê¸(%{count})
hidden_commented_by: '%{user}ëì´ %{when} ì ì
ë¨ê¸´ ì¨ê²¨ì§ ëê¸'
commented_by: '%{user}ëì´ %{when} ì ì ëê¸ì
@@ -152,12 +152,12 @@ ko:
join_discussion: í ë¡ ì ì°¸ì¬íë ¤ë©´ ë¡ê·¸ì¸
discussion: í ë¡
node:
- title: 'ë
¸ë: %{name}'
- history_title: 'ë
¸ë ìì¬: %{name}'
+ title: 'êµì : %{name}'
+ history_title: 'êµì ìì¬: %{name}'
way:
title: '길: %{name}'
history_title: '길 ìì¬: %{name}'
- nodes: ë
¸ë
+ nodes: êµì
also_part_of:
one: '%{related_ways} 길ì ì¼ë¶'
other: '%{related_ways} 길ì ì¼ë¶'
@@ -168,7 +168,7 @@ ko:
relation_member:
entry_role: '%{type}ìì %{role}ì %{name}'
type:
- node: ë
¸ë
+ node: êµì
way: 길
relation: ê´ê³
containing_relation:
@@ -177,7 +177,7 @@ ko:
not_found:
sorry: 'ì£ì¡íì§ë§, %{type} #%{id}ì(를) ì°¾ì§ ëª»íìµëë¤.'
type:
- node: ë
¸ë
+ node: êµì
way: 길
relation: ê´ê³
changeset: ë°ëì§í©
@@ -185,7 +185,7 @@ ko:
timeout:
sorry: ì£ì¡í©ëë¤, %{id} idì¸ %{type}ì ëí ë°ì´í°ë¥¼ ì»ëë° ë무 ì¤ë 걸립ëë¤.
type:
- node: ë
¸ë
+ node: êµì
way: 길
relation: ê´ê³
changeset: ë°ëì§í©
@@ -195,7 +195,7 @@ ko:
message_html: ì´ %{type}ì %{version}íì ë¹ê³µê° ì²ë¦¬ëì기 ë문ì ë³¼ ì ììµëë¤. ìì¸í ë´ì©ì %{redaction_link}ì(를)
참조íì¸ì.
type:
- node: ë
¸ë
+ node: êµì
way: 길
relation: ê´ê³
start_rjs:
@@ -308,7 +308,7 @@ ko:
no_such_entry:
title: ì´ë¬í ì¼ê¸° íëª©ì´ ìì
heading: 'idì í목 ìì: %{id}'
- body: ì£ì¡í©ëë¤, %{id} idë¡ ë ì¼ê¸° í목ì´ë ëê¸ì´ ììµëë¤. ë§ì¶¤ë²ì´ë í´ë¦í ë§í¬ê° ì못ëëì§ íì¸íì¸ì.
+ body: ì£ì¡íì§ë§, %{id} idë¡ ë ì¼ê¸° í목ì´ë ëê¸ì´ ììµëë¤. ë§ì¶¤ë²ì´ë í´ë¦í ë§í¬ê° ì못ëëì§ íì¸íì¸ì.
diary_entry:
posted_by: '%{link_user}ëì´ %{language_link}ë¡ %{created}ì ê²ìí¨'
comment_link: ì´ í목ì ëê¸ ë¨ê¸°ê¸°
@@ -2329,6 +2329,10 @@ ko:
nothing_found: ì§ë¬¼ì ì°¾ì ì ììµëë¤
error: '%{server} ì°ê²°ì ì¤ë¥: %{error}'
timeout: '%{server} ì°ê²°ì ìê° ì´ê³¼'
+ context:
+ add_note: ì¬ê¸°ì ì¤ëª
ì¶ê°
+ show_address: 주ì 보기
+ query_features: ì문 ì§ë¬¼
redaction:
edit:
description: ì¤ëª
diff --git a/config/locales/lb.yml b/config/locales/lb.yml
index d301cc85c..b41974789 100644
--- a/config/locales/lb.yml
+++ b/config/locales/lb.yml
@@ -1243,6 +1243,12 @@ lb:
query:
way: Wee
relation: Relatioun
+ context:
+ directions_from: Vun hei fort
+ directions_to: Heihinn
+ add_note: Eng Notiz hei dobäisetzen
+ show_address: Adress weisen
+ centre_map: Kaart hei zentréieren
redaction:
edit:
description: Beschreiwung
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 6aefd05b8..29ff2a56a 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -91,13 +91,13 @@ lt:
default: Numatytasis (Å¡iuo metu %{name})
potlatch:
name: Potlatch 1
- description: Potlatch 1 (redaktorius narÅ¡yklÄje)
+ description: Potlatch 1 (rengyklÄ narÅ¡yklÄje)
id:
name: iD
- description: iD (narÅ¡yklÄs redaktorius)
+ description: iD (rengyklÄ narÅ¡yklÄje)
potlatch2:
name: Potlatch 2
- description: Potlatch 2 (redaktorius narÅ¡yklÄje)
+ description: Potlatch 2 (rengyklÄ narÅ¡yklÄje)
remote:
name: nuotoliniu valdymu
description: nuotolinį valdymÄ
(JOSM arba Merkaartor)
@@ -953,7 +953,7 @@ lt:
gps_traces_tooltip: Tvarkyti GPS pÄdsakus
user_diaries: DienoraÅ¡Äiai
user_diaries_tooltip: PeržiÅ«rÄti naudotojų dienoraÅ¡Äius
- edit_with: Redaguoti per %{editor}
+ edit_with: Redaguoti su %{editor}
tag_line: Atviras wiki žemÄlapis
intro_header: Sveiki atvykÄ Ä¯ OpenStreetMap!
intro_text: OpenStreetMap yra pasaulio žemÄlapis, kuriamas žmonių, tokių kaip
@@ -985,7 +985,7 @@ lt:
license_page:
foreign:
title: Apie šį vertimÄ
- text: Konfliktuojant tarp šio išversto puslapio ir %{english_original_link},
+ text: Esant konfliktui tarp šio išversto puslapio ir %{english_original_link},
pirmenybÄ bus teikiama angliÅ¡kajai versijai.
english_link: anglų originalas
native:
@@ -1032,9 +1032,11 @@ lt:
Sužinokite daugiau apie mÅ«sų duomenų naudojimÄ
, kaip pažymÄti prisidÄjusius OSMF licencijavimo puslapyje ir bendruomenÄs DUK dÄl legalumo.
more_2_html: |-
- Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti free-of-charge žemÄlapių API treÄiųjų Å¡alių vystytojams.
-
- PeržiÅ«rÄkite mÅ«sų API naudojimo politikÄ
, bei Nominatim naudojimo politika.
+ Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti
+ nemokamos žemÄlapių API treÄiosioms Å¡alims.
+ PeržiÅ«rÄkite mÅ«sų API naudojimo politikÄ
,
+ KaladÄlių naudojimo politikÄ
,
+ bei Nominatim naudojimo politikÄ
.
contributors_title_html: Mūsų autoriai
contributors_intro_html: MÅ«sų autoriai yra tÅ«kstanÄiai įvairių žmonių. Taip
pat apimame ir laisvai prieinamÄ
turinį iš valstybinių kartografijos agentūrų,
@@ -1113,8 +1115,8 @@ lt:
title: Pagrindiniai žymÄjimo terminai
paragraph_1_html: OpenStreetMap turi savo žodynÄ
. Äia keli pagrindiniai naudojami
terminai/žodžiai.
- editor_html: Redaktorius - tai programa arba svetainÄ, kurios
- pagalba galite redaguoti žemÄlapį.
+ editor_html: RengyklÄ - tai programa arba svetainÄ su kuria
+ galite redaguoti žemÄlapį.
node_html: node/taÅ¡kas - taÅ¡kas žemÄlapyje, pavyzdžiui vienas
restoranas ar medis.
way_html: kelias/way - linija ar plotas, pavyzdžiui kelias,
@@ -1224,15 +1226,18 @@ lt:
legal_title: TeisÄs
legal_html: "Šis puslapis ir daugelis kitų susijusių paslaugų yra formaliai valdomi
\nOpenStreetMap fondo (OSMF) \nbendruomenÄs
- vardu.\n
\nSusisiekite su OSMF,
- \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų ar problemų."
+ vardu. Visų OSMF valdomų paslaugų naudojimas yra\npriklausomas nuo \nPriimtino
+ naudojimo politikos ir mūsų Privatumo
+ politikos.\n
\nSusisiekite
+ su OSMF, \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų
+ ar problemų."
partners_title: Partneriai
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} pakomentavo jÅ«sų dienoraÅ¡Äio įraÅ¡Ä
'
+ subject: '[OpenStreetMap] %{user} pakomentavo dienoraÅ¡Äio įraÅ¡Ä
'
hi: Sveiki, %{to_user},
- header: '%{from_user} pakomentavo jÅ«sų paskutinį OpenStreetMap dienoraÅ¡Äio įraÅ¡Ä
- su tema %{subject}:'
+ header: '%{from_user} pakomentavo jÅ«sų OpenStreetMap dienoraÅ¡Äio įraÅ¡Ä
su tema
+ %{subject}:'
footer: Taip pat galite perskaityti komentarÄ
adresu %{readurl}, komentuoti
galite adresu %{commenturl}, o atsakyti - adresu %{replyurl}
message_notification:
@@ -1319,6 +1324,7 @@ lt:
Pastaba yra netoli %{place}.'
details: Daugiau informacijos apie pastabÄ
galima rasti %{url}.
changeset_comment_notification:
+ hi: Sveiki, %{to_user},
greeting: Labas,
commented:
subject_own: '[OpenStreetMap] %{commenter} pakomentavo vienÄ
iš jūsų pakeitimų'
@@ -1331,6 +1337,8 @@ lt:
partial_changeset_with_comment: su komentaru '%{changeset_comment}'
partial_changeset_without_comment: be komentaro
details: Daugiau informacijos apie pakeitimÄ
rasite Äia %{url}.
+ unsubscribe: Jei norite atsisakyti šio pakeitimo atnaujinimų, eikite į %{url}
+ ir spauskite âAtsisakytiâ.
message:
inbox:
title: Gautieji
@@ -1421,11 +1429,11 @@ lt:
edit:
not_public: JÅ«s nenustatÄte savo keitimų, kad bÅ«tų vieÅ¡i
not_public_description: JÅ«s nebegalite keisti žemÄlapio, jei jÅ«s tÄ
darysite.
- Jūs galite nustatyti keitimus,kaip viešus iš savo %{user_page}.
+ Jūs galite nustatyti keitimus, kaip viešus, iš savo %{user_page}.
user_page_link: naudotojo puslapis
anon_edits_link_text: Sužinokite, kodÄl taip yra.
- flash_player_required: Jums reikalingas Flash player norint redaguoti su Potlatch
- (atvirojo žemÄlapio Flash redagavimo įrankis). JÅ«s galite parsisiųsti
+ flash_player_required: Jums reikalingas Flash player norint redaguoti su Potlatch,
+ OpenStreetMap Flash rengykle. Jūs galite parsisiųsti
Flash Player iš Adobe.com. Taip
pat yra daugybÄ kitų bÅ«dų, kuriais galÄsite prisidÄti prie OpenStreetMap
žemÄlapio redagavimo.
@@ -1463,6 +1471,8 @@ lt:
track: PÄdsakas
bridleway: Takas galvijams varyti
cycleway: DviraÄių takas
+ cycleway_national: Nacionalinis dviraÄių takas
+ cycleway_regional: Regioninis dviraÄių takas
cycleway_local: Vietinis dviraÄių takas
footway: PÄsÄiųjų takas
rail: Geležinkelis
@@ -1659,6 +1669,8 @@ lt:
require_moderator:
not_a_moderator: NorÄdami atlikti šį veiksmÄ
, turite būti administratoriumi.
setup_user_auth:
+ blocked_zero_hour: Turite skubų praneÅ¡imÄ
OpenStreetMap puslapyje. Jums reikia
+ perskaityti šį praneÅ¡imÄ
prieš galint išsaugoti pakeitimus.
blocked: JÅ«sų prieiga prie API užblokuota. Prisijunkite prie žiniatinklio sÄ
sajos,
kad sužinotumÄte daugiau.
need_to_see_terms: JÅ«sų priÄjimas prie API laikinai pristabdytas. JÅ«s turite
@@ -1843,8 +1855,9 @@ lt:
sÄ
lygomis.
email address: 'E-pašto adresas:'
confirm email address: 'Patvirtinkite e-paÅ¡to adresÄ
:'
- not displayed publicly: VieÅ¡ai nerodoma (skaitykite privatumo politikÄ
)
+ not displayed publicly: JÅ«sų adresas nÄra vieÅ¡ai rodomas, daugiau informacijos
+ rasite privatumo politikoje
display name: 'Rodomas vardas:'
display name description: JÅ«sų vieÅ¡ai rodomas naudotojo vardas. Jei norÄsite,
galÄsite jį vÄliau pakeisti savo nustatymuose.
@@ -1978,11 +1991,11 @@ lt:
text: Å iuo metu jÅ«sų keitimai yra anonimiÅ¡ki ir žmonÄs negali jums siųsti
praneÅ¡imų ar matyti jÅ«sų vietovÄs. Parodymui kÄ
jÅ«s keitÄte ir galimybei
kitiems žmonÄms su jumis susisiekti per Å¡iÄ
svetainÄ, spauskit nuorodÄ
žemiau.
- Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duoemnis.
- (dÄl ko taip
- padaryta).- Jūsų el. pašto adresas nebus atskleistas kol ne taps
- viešas.
- Å is veiksmas negalÄs bÅ«ti atÅ¡auktas ir visi nauji naudotojai
- dabar yra vieÅ¡i pagal nutylÄjimÄ
.
+ Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duomenis.
+ (sužinokite
+ kodÄl).- JÅ«sų el. paÅ¡to adresas nebus vieÅ¡ai atskleistas.
- Å is
+ veiksmas negalÄs bÅ«ti atÅ¡auktas ir visi nauji naudotojai dabar yra automatiÅ¡kai
+ vieši.
contributor terms:
heading: 'Talkininkų sÄ
lygos:'
agreed: JÅ«s sutikote su naujomis talkininkų sÄ
lygomis.
@@ -1994,12 +2007,13 @@ lt:
link text: kas tai?
profile description: 'Profilio aprašymas:'
preferred languages: 'Pageidautinos kalbos:'
- preferred editor: 'Pageidautinas redaktorius:'
+ preferred editor: 'Pageidautina rengyklÄ:'
image: 'Nuotrauka:'
gravatar:
gravatar: Naudoti Gravatar
link text: kas tai?
disabled: Gravatar buvo išjungtas.
+ enabled: Jūsų Gravatar rodymas įjungtas.
new image: PridÄti nuotraukÄ
keep image: Palikti dabartinÄ nuotraukÄ
delete image: PaÅ¡alintį dabartinÄ nuotraukÄ
@@ -2284,7 +2298,7 @@ lt:
key:
title: Sutartiniai ženklai
tooltip: Sutartiniai ženklai
- tooltip_disabled: Sutartiniai ženklai galimi tik standartiniame sluoksnyje
+ tooltip_disabled: Sutartiniai ženklai neprieinami šiame sluoksnyje
map:
zoom:
in: Priartinti
@@ -2301,6 +2315,7 @@ lt:
header: ŽemÄlapio sluoksniai
notes: ŽemÄlapio pastabos
data: ŽemÄlapio duomenys
+ gps: VieÅ¡i GPS pÄdsakai
overlays: Įjungti papildomus sluoksnius problemų pranešimui
title: Sluoksniai
copyright: © OpenStreetMap talkininkai
@@ -2357,22 +2372,37 @@ lt:
instructions:
continue_without_exit: TÄskite kelionÄ %{name}
slight_right_without_exit: Dešiniau į %{name}
+ offramp_right_without_exit: Pasirinkite rampÄ
deÅ¡inÄje į %{name}
+ onramp_right_without_exit: Sukite deÅ¡inÄn ant rampos į %{name}
+ endofroad_right_without_exit: Kelio pabaigoje sukite deÅ¡inÄn į %{name}
+ merge_right_without_exit: Ä®silieti deÅ¡inÄn į %{name}
+ fork_right_without_exit: IÅ¡siÅ¡akojime sukite deÅ¡inÄn į %{name}
turn_right_without_exit: Sukite deÅ¡inÄn į %{name}
sharp_right_without_exit: Staigus posÅ«kis deÅ¡inÄn į %{name}
uturn_without_exit: Apsisukite ties %{name}
sharp_left_without_exit: Staigus posÅ«kis kairÄn į %{name}
turn_left_without_exit: Sukite kairÄn į %{name}
+ offramp_left_without_exit: Pasirinkite rampÄ
kairÄje į %{name}
+ onramp_left_without_exit: Sukite kairÄn ant rampos į %{name}
+ endofroad_left_without_exit: Kelio pabaigoje sukite kairÄn į %{name}
+ merge_left_without_exit: Ä®silieti kairÄn į %{name}
+ fork_left_without_exit: IÅ¡siÅ¡akojime sukite kairÄn į %{name}
slight_left_without_exit: Kairiau į %{name}
via_point_without_exit: (per taÅ¡kÄ
)
follow_without_exit: Sekite %{name}
- roundabout_without_exit: Žiede išvažiuokite į %{name}
+ roundabout_without_exit: Žiede pasirinkite %{name}
leave_roundabout_without_exit: Išvažiuokite iš žiedo - %{name}
stay_roundabout_without_exit: Likite žiede - %{name}
start_without_exit: PradÄkite %{name} pabaigoje
destination_without_exit: Pasiekite tikslÄ
against_oneway_without_exit: Važiuokite prieÅ¡ eismÄ
%{name}
end_oneway_without_exit: Vienpusio eismo pabaiga %{name}
- roundabout_with_exit: Žiede išvažiuokite %{exit} išvažiavime į %{name}
+ roundabout_with_exit: Žiede pasirinkite iÅ¡važiavimÄ
%{exit} į %{name}
+ turn_left_with_exit: Žiede sukite kairÄn į %{name}
+ slight_left_with_exit: Žiede Å¡iek tiek kairÄn į %{name}
+ turn_right_with_exit: Žiede sukite deÅ¡inÄn į %{name}
+ slight_right_with_exit: Žiede Å¡iek tiek deÅ¡inÄn į %{name}
+ continue_with_exit: Žiede tÄskite tiesiai į %{name}
unnamed: bevardis
courtesy: Nuorodas pateikÄ %{link}
time: Laikas
@@ -2383,6 +2413,13 @@ lt:
nothing_found: Nerasta objektų
error: 'Klaida jungiantis prie %{server}: %{error}'
timeout: Jungiantis prie %{server} baigÄsi laikas
+ context:
+ directions_from: Nuorodos iÅ¡ Äia
+ directions_to: Nuorodos į Äia
+ add_note: PridÄti pastabÄ
Äia
+ show_address: Rodyti adresÄ
+ query_features: Ieškoti objektų
+ centre_map: Centruoti žemÄlapį Äia
redaction:
edit:
description: Aprašymas
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index af6fc1dff..917c85d6e 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -957,7 +957,6 @@ lv:
partners_ic: Londonas ImperiÄlÄ Koledža
partners_bytemark: Bytemark Hosting
partners_partners: partneri
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap datubÄze Å¡obrÄ«d nav pieejama, tiek veikti svarÄ«gi datubÄzes
apkalpošanas darbi.
osm_read_only: OpenStreetMap datubÄze Å¡obrÄ«d ir pieejama tikai-lasÄmÄ režīmÄ,
diff --git a/config/locales/mk.yml b/config/locales/mk.yml
index d247d1891..e2f6cb35b 100644
--- a/config/locales/mk.yml
+++ b/config/locales/mk.yml
@@ -954,7 +954,6 @@ mk:
partners_ic: ÐмпеÑиÑÐ°Ð»Ð½Ð¸Ð¾Ñ ÐºÐ¾Ð»ÐµÑ - Ðондон
partners_bytemark: вдомиÑÐµÐ»Ð¾Ñ âBytemarkâ
partners_partners: паÑÑнеÑи
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=mk
osm_offline: ÐазаÑа на подаÑоÑи на OpenStreetMap моменÑално е иÑклÑÑена додека
ÑабоÑиме на неопÑ
одни одÑжÑваÑа.
osm_read_only: ÐазаÑа на подаÑоÑи на OpenStreetMap моменÑално може Ñамо да Ñе
@@ -1000,7 +999,7 @@ mk:
пÑавен ÑекÑÑ."
intro_3_html: |-
ÐаÑÑогÑаÑиÑаÑа во наÑиÑе полиÑа на каÑÑиÑе и наÑаÑа докÑменÑаÑиÑа
- Ñе нÑÐ´Ð°Ñ Ð¿Ð¾Ð´ лиÑенÑаÑа ÐÑиеÑÑив ÐºÐ¾Ð¼Ð¾Ð½Ñ ÐаведиÐзвоÑ-СподелиÐодÐÑÑиУÑлови 2.0 (CC-BY-SA).
+ Ñе нÑÐ´Ð°Ñ Ð¿Ð¾Ð´ лиÑенÑаÑа ÐÑиеÑÑив ÐºÐ¾Ð¼Ð¾Ð½Ñ Ðаведи извоÑ-Сподели под иÑÑи ÑÑлови 2.0 (CC-BY-SA).
credit_title_html: Ðако да Ñа наведеÑе OpenStreetMap
credit_1_html: |-
ÐадолжиÑелно наведÑваÑÑе нè Ñо “© УÑеÑниÑи на
@@ -1676,6 +1675,8 @@ mk:
require_moderator:
not_a_moderator: Ðа да го изведеÑе Ñоа, ÑÑеба да ÑÑе модеÑаÑоÑ.
setup_user_auth:
+ blocked_zero_hour: ÐмаÑе иÑна поÑака на OpenStreetMap. Ðе моÑа да Ñа пÑоÑиÑаÑе
+ поÑакаÑа пÑед да ги заÑÑваÑе ÑÑедÑваÑаÑа.
blocked: ÐÑиÑÑÐ°Ð¿Ð¾Ñ ÐºÐ¾Ð½ API ви е блокиÑан. ÐаÑавеÑе Ñе на поÑÑÐµÐ´Ð½Ð¸ÐºÐ¾Ñ Ð·Ð° да дознаеÑе
повеÑе.
need_to_see_terms: ÐаÑÐ¸Ð¾Ñ Ð¿ÑиÑÑап до извÑÑниÑÐºÐ¸Ð¾Ñ Ð¿ÑогÑам е пÑивÑемено запÑен.
@@ -2225,6 +2226,7 @@ mk:
helper:
time_future: ÐÑÑекÑва за %{time}.
until_login: ÐкÑивно додека не Ñе наÑави коÑиÑникоÑ.
+ time_future_and_until_login: ÐавÑÑÑва во %{time} и оÑкако коÑиÑÐ½Ð¸ÐºÐ¾Ñ Ñе Ñе наÑави.
time_past: ÐÑÑеÑено пÑед %{time}.
blocks_on:
title: Ðлокови за %{name}
@@ -2425,6 +2427,13 @@ mk:
nothing_found: Ðе пÑонаÑдов ниеден елеменÑ
error: 'ÐÑеÑка пÑи повÑзÑваÑеÑо Ñо %{server}: %{error}'
timeout: ÐÑÑеÑе вÑемеÑо за повÑзÑваÑе Ñо %{server}
+ context:
+ directions_from: ÐаÑоки оÑÑÑка
+ directions_to: ÐаÑоки доÑÑка
+ add_note: ТÑка ÑÑавеÑе белеÑка
+ show_address: ÐÑикажи адÑеÑа
+ query_features: ÐожноÑÑи за баÑаÑа
+ centre_map: ТÑка ÑоÑÑедоÑоÑи Ñа каÑÑаÑа
redaction:
edit:
description: ÐпиÑ
diff --git a/config/locales/ne.yml b/config/locales/ne.yml
index bc5d03db0..d2560a94b 100644
--- a/config/locales/ne.yml
+++ b/config/locales/ne.yml
@@ -2,18 +2,22 @@
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Krish Dulal
+# Author: Nirjal stha
# Author: Njsubedi
# Author: RajeshPandey
+# Author: राम पà¥à¤°à¤¸à¤¾à¤¦ à¤à¥à¤¶à¥
# Author: सरà¥à¤ à¤à¥à¤®à¤¾à¤° ढà¤à¤¾à¤²
---
ne:
+ html:
+ dir: ltr
time:
formats:
- friendly: '%e %B %Y at %H:%M'
+ friendly: '%e %B %Y मा %H:%M'
activerecord:
models:
acl: à¤
नà¥à¤®à¤¤à¤¿ नियनà¥à¤¤à¥à¤°à¤£ सà¥à¤à¥
- changeset: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¥à¤à¥
+ changeset: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¥à¤à¥
changeset_tag: à¤à¥à¤¨à¥à¤à¤¸à¥à¤ à¤à¥à¤¯à¤¾à¤
country: दà¥à¤¶
diary_comment: डायरॠà¤à¤¿à¤ªà¥à¤ªà¤£à¥
@@ -76,8 +80,11 @@ ne:
active: सà¤à¥à¤°à¤¿à¤¯
display_name: दà¥à¤à¤¾à¤à¤¨à¥ नाम
description: वरà¥à¤£à¤¨
- languages: à¤à¤¾à¤·à¤¾à¤¹à¤°à¥
+ languages: à¤à¤¾à¤·à¤¾à¤¹à¤°à¥
pass_crypt: पासवरà¥à¤¡
+ printable_name:
+ with_version: '%{id}, v%{version}'
+ with_name_html: '%{name} (%{id})'
editor:
default: पà¥à¤°à¥à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤(à¤
हिलà¥à¤à¥ %{name})
potlatch:
@@ -122,11 +129,18 @@ ne:
way_paginated: बाà¤à¥à¤¹à¤°à¥ (à¤à¤®à¥à¤®à¤¾ %{count} मधà¥à¤¯à¥à¤¬à¤¾à¤ %{x}-%{y})
relation: समà¥à¤¬à¤¨à¥à¤§à¤¹à¤°à¥ (%{count})
relation_paginated: समà¥à¤¬à¤¨à¥à¤§à¤¹à¤°à¥ (à¤à¤®à¥à¤®à¤¾ %{count} मधà¥à¤¯à¥à¤¬à¤¾à¤ %{x}-%{y})
+ comment: à¤à¤¿à¤ªà¥à¤ªà¤£à¥à¤¹à¤°à¥ (%{count})
+ hidden_commented_by: ' %{user} दà¥à¤µà¤¾à¤°à¤¾ à¤à¤°à¤¿à¤à¤à¥ लà¥à¤à¤¾à¤à¤à¤à¥ à¤à¤¿à¤ªà¥à¤ªà¤£à¥ %{when}
+ पहिलà¥'
+ commented_by: '%{user}दà¥à¤µà¤¾à¤°à¤¾ %{when} à¤
à¤à¤¾à¤¡à¤¿
+ à¤à¤°à¤¿à¤à¤à¥ à¤à¤¿à¤ªà¥à¤ªà¤£à¥'
changesetxml: à¤à¥à¤¨à¥à¤à¤¸à¥à¤ XML
osmchangexml: osmChange XML
feed:
title: 'परिवरà¥à¤¤à¤¨à¤¹à¤°à¥: %{id}'
title_comment: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ %{id} - %{comment}
+ join_discussion: à¤à¤²à¤«à¤²à¤®à¤¾ à¤à¤¾à¤ लिन लठà¤à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ discussion: à¤à¤²à¤«à¤²
node:
title: 'à¤
à¤à¤¶: %{name}'
history_title: 'à¤
à¤à¤¶à¤à¥ à¤à¤¤à¤¿à¤¹à¤¾à¤¸: %{name}'
@@ -156,7 +170,8 @@ ne:
node: नà¥à¤¡
way: बाà¤à¥
relation: समà¥à¤¬à¤¨à¥à¤§
- changeset: परिवरà¥à¤¤à¤¨à¤¸à¥à¤ \
+ changeset: परिवरà¥à¤¤à¤¨à¤¸à¥à¤
+ note: à¤à¤¿à¤ªà¥à¤
timeout:
sorry: माफ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤²à¤¾, %{id} à¤
ाà¤à¤¡à¤¿ à¤à¤à¤à¥ %{type}à¤à¥ लाà¤à¤¿ तथà¥à¤¯à¤¾à¤à¥à¤ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¥à¤¨
निà¤à¥à¤à¥ समय लाà¤à¥à¤¯à¥ ।
@@ -165,10 +180,11 @@ ne:
way: बाà¤à¥
relation: समà¥à¤¬à¤¨à¥à¤§
changeset: à¤à¥à¤¨à¥à¤à¤¸à¥à¤
+ note: à¤à¤¿à¤ªà¥à¤
redacted:
redaction: समà¥à¤ªà¤¾à¤¦à¤¨ %{id}
- message_html: '%{type}à¤à¥ सà¤à¤¸à¥à¤à¤°à¤£ %{version} समà¥à¤ªà¤¾à¤¦à¤¿à¤¤ à¤à¤à¤à¤¾à¤²à¥ दà¥à¤à¤¾à¤à¤¨ सà¤à¤¿à¤à¤¨ । à¤à¥à¤ªà¤¯à¤¾
- विसà¥à¤¤à¥à¤¤ à¤à¤¾à¤¨à¤à¤¾à¤°à¥à¤à¥ लाà¤à¤¿ %{redaction_link} हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥ ।'
+ message_html: सà¤à¤¸à¥à¤à¤°à¤£ %{version} यस पà¥à¤°à¤à¤¾à¤°à¤à¥ %{type} दà¥à¤à¤¾à¤à¤¨ सà¤à¤¿à¤à¤¦à¥à¤¨ à¤à¤¿à¤¨à¤à¤¨à¥
+ यॠहà¤à¤¾à¤à¤à¤à¥ ठà¤à¥à¤ªà¤¯à¤¾ à¤à¤¾à¤¨à¤à¤¾à¤°à¥à¤à¥ लाà¤à¤¿ %{redaction_link} हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
type:
node: नà¥à¤¡
way: बाà¤à¥
@@ -180,11 +196,13 @@ ne:
load_data: डà¥à¤à¤¾ लà¥à¤¡à¤à¤°à¥à¤¨à¥
loading: लà¥à¤¡ हà¥à¤¦à¥à¤...
tag_details:
- tags: सà¤à¤à¥à¤¤à¤¹à¤°à¥
+ tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥
wiki_link:
key: '%{key} सà¤à¤à¥à¤¤à¤à¥ लाà¤à¤¿ विà¤à¤¿ विवरण पà¥à¤·à¥à¤ '
tag: '%{key}=%{value} सà¤à¤à¥à¤¤à¤à¥ लाà¤à¤¿ विà¤à¤¿ विवरण पà¥à¤·à¥à¤ '
+ wikidata_link: '%{page} वसà¥à¤¤à¥ Wikidata मा'
wikipedia_link: '%{page}à¤à¥ बारà¥à¤®à¤¾ विà¤à¤¿à¤ªà¥à¤¡à¤¿à¤¯à¤¾à¤®à¤¾ à¤à¤à¤à¥ लà¥à¤'
+ telephone_link: '%{phone_number} मा फà¥à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥'
note:
title: 'à¤à¤¿à¤ªà¥à¤ªà¤£à¥: %{id}'
new_note: नयाठà¤à¤¿à¤ªà¥à¤ªà¤£à¥
@@ -210,6 +228,8 @@ ne:
à¤
à¤à¤¾à¤¡à¤¿ पà¥à¤¨à¤à¤¸à¤à¥à¤°à¤¿à¤¯ à¤à¤°à¤¿à¤à¤à¥
hidden_by: '%{user}दà¥à¤µà¤¾à¤°à¤¾ %{when} à¤
à¤à¤¾à¤¡à¤¿
लà¥à¤à¤¾à¤à¤à¤à¥'
+ query:
+ title: à¤à¥à¤µà¥à¤°à¥ à¤à¥à¤£à¤¹à¤°à¥
changeset:
changeset_paging_nav:
showing_page: पà¥à¤·à¥à¤ %{page}
@@ -243,6 +263,7 @@ ne:
diary_entry:
new:
title: नयाठदà¥à¤¨à¤¿à¤à¥
+ publish_button: पà¥à¤°à¤à¤¾à¤¶à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
list:
title: पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾à¤à¤¾ डायरà¥à¤¹à¤°à¥
title_friends: साथà¥à¤¹à¤°à¥à¤à¤¾ डायरà¥à¤¹à¤°à¥
@@ -264,7 +285,7 @@ ne:
latitude: 'दà¥à¤¶à¤¾à¤¨à¥à¤¤à¤°:'
longitude: 'à¤
à¤à¥à¤·à¤¾à¤à¤¶:'
use_map_link: नà¤à¥à¤¸à¤¾ पà¥à¤°à¤¯à¥à¤à¤°à¥à¤¨à¥
- save_button: सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥
+ save_button: सà¤à¥à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
marker_text: दà¥à¤¨à¤¿à¤à¥ पà¥à¤°à¤µà¤¿à¤·à¥à¤ ॠसà¥à¤¥à¤¾à¤¨
view:
title: '%{user}à¤à¥ डायरॠ| %{title}'
@@ -272,7 +293,7 @@ ne:
leave_a_comment: à¤à¤¿à¤ªà¥à¤ªà¤£à¥ à¤à¥à¤¡à¥à¤¨à¥
login_to_leave_a_comment: '%{login_link} à¤à¤¿à¤ªà¥à¤ªà¤£à¥ à¤à¥à¤¡à¥à¤¨à¤²à¤¾à¤'
login: पà¥à¤°à¤µà¥à¤¶
- save_button: सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥
+ save_button: सà¤à¥à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
no_such_entry:
title: तà¥à¤¯à¤¸à¥à¤¤à¥ à¤à¥à¤¨à¥ दà¥à¤¨à¤¿à¤à¥ à¤à¥à¤à¤¿à¤à¤¨
heading: '%{id} à¤à¤à¤¡à¥ à¤à¤à¤à¥ à¤à¥à¤¨à¥ à¤
à¤à¤¿à¤²à¥à¤ à¤à¥à¤à¤¿à¤à¤¨'
@@ -292,7 +313,7 @@ ne:
diary_comment:
comment_from: '%{link_user}दà¥à¤µà¤¾à¤°à¤¾ %{comment_created_at}मा à¤à¤°à¤¿à¤à¤à¥ à¤à¤¿à¤ªà¥à¤ªà¤£à¥'
hide_link: यॠà¤à¤¿à¤ªà¥à¤ªà¤£à¥ लà¥à¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
- confirm: ' निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥'
+ confirm: निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
location:
location: 'सà¥à¤¥à¤¾à¤¨:'
view: à¤
वलà¥à¤à¤¨ à¤à¤°à¥à¤¨à¥
@@ -350,7 +371,7 @@ ne:
other:
title: à¤
नà¥à¤¯ सà¥à¤°à¥à¤¤à¤¹à¤°à¥
description: à¤à¤ªà¤¨à¤¸à¥à¤à¥à¤°à¥à¤à¤®à¥à¤¯à¤¾à¤ª विà¤à¤¿à¤®à¤¾ सà¥à¤à¥à¤¤ थप सà¥à¤°à¥à¤¤à¤¹à¤°à¥
- options: विà¤à¤²à¥à¤ªà¤¹à¤°à¥
+ options: विà¤à¤²à¥à¤ªà¤¹à¤°à¥
format: ढाà¤à¤à¤¾
scale: सà¥à¤à¥à¤²
max: à¤
धिà¤à¤¤à¤®
@@ -379,8 +400,10 @@ ne:
search_osm_nominatim:
prefix:
aerialway:
+ cable_car: à¤à¥à¤¬à¤² à¤à¤¾à¤°
chair_lift: à¤à¥à¤°à¥à¤¸à¥ लिफà¥à¤
drag_lift: तानà¥à¤¨à¥ लिफà¥à¤
+ gondola: à¤à¥à¤¨à¥à¤¡à¥à¤²à¤¾ लिफà¥à¤
station: हवाठमारà¥à¤ सà¥à¤à¥à¤¶à¤¨
aeroway:
aerodrome: हवाà¤à¤¡à¥à¤°à¥à¤®
@@ -391,11 +414,9 @@ ne:
taxiway: à¤à¥à¤¯à¤¾à¤à¥à¤¸à¥à¤à¥ बाà¤à¥
terminal: à¤à¤°à¥à¤®à¤¿à¤¨à¤²
amenity:
- airport: विमानसà¥à¤¥à¤²
+ animal_shelter: पशॠà¤à¤¶à¥à¤°à¤¯
arts_centre: à¤à¤²à¤¾ à¤à¥à¤¨à¥à¤¦à¥à¤°
- artwork: à¤à¤²à¤¾
atm: à¤à¤à¤¿à¤à¤®à¥ मà¥à¤¸à¤¿à¤¨
- auditorium: पà¥à¤°à¥à¤à¥à¤·à¤¾à¤²à¤¯
bank: बà¥à¤à¤
bar: बार
bbq: बारबिà¤à¥à¤¯à¥
@@ -403,6 +424,7 @@ ne:
bicycle_parking: साà¤à¤à¤¿à¤² पारà¥à¤à¤¿à¤à¥
bicycle_rental: साà¤à¤à¤¿à¤² à¤à¤¾à¤¡à¤¾à¤®à¤¾
biergarten: बियर पिà¤à¤¨à¥ ठाà¤à¤
+ boat_rental: ढà¥à¤à¥à¤à¤¾ à¤à¤¾à¤¡à¤¾ सà¥à¤µà¤¾
brothel: वà¥à¤¶à¥à¤¯à¤¾à¤²à¤¯
bureau_de_change: परिवरà¥à¤¤à¤¨ वà¥à¤¯à¥à¤°à¥
bus_station: बस सà¥à¤à¥à¤¸à¤¨à¥
@@ -412,11 +434,12 @@ ne:
car_wash: à¤à¤¾à¤° धà¥à¤¨à¥ ठाà¤à¤
casino: à¤à¥à¤¯à¤¾à¤¸à¤¿à¤¨à¥
charging_station: à¤à¤¾à¤°à¥à¤ à¤à¤°à¥à¤¨à¥ सà¥à¤à¥à¤¸à¤¨
+ childcare: बालबालिà¤à¤¾ हà¥à¤°à¤à¤¾à¤¹
cinema: सिनà¥à¤®à¤¾ à¤à¤°
clinic: à¤à¥à¤²à¤¿à¤¨à¤¿à¤
- club: à¤à¥à¤²à¤¬
+ clock: à¤à¤¨à¥à¤à¤¾à¤à¤°
college: à¤à¤²à¥à¤
- community_centre: सामà¥à¤¦à¤¾à¤¯à¥à¤ à¤à¥à¤¨à¥à¤¦à¥à¤°
+ community_centre: सामà¥à¤¦à¤¾à¤¯à¤¿à¤ à¤à¥à¤¨à¥à¤¦à¥à¤°
courthouse: à¤
दालत
crematorium: शà¥à¤®à¤¶à¤¾à¤¨
dentist: दाà¤à¤¤à¤à¥ डाà¤à¥à¤à¤°
@@ -433,24 +456,246 @@ ne:
food_court: à¤à¤¾à¤à¤¾ à¤à¤°
fountain: पानà¥à¤à¥ फà¥à¤¹à¥à¤°à¤¾
fuel: à¤à¤¨à¥à¤§à¤¨
+ gambling: à¤à¥à¤µà¤¾à¤à¤°
grave_yard: शà¥à¤®à¤¶à¤¾à¤¨ à¤à¤¾à¤
gym: à¤à¤¿à¤®à¤à¤¾à¤¨à¤¾
- hall: हल
health_centre: सà¥à¤µà¤¾à¤¸à¥à¤¥à¥à¤¯ à¤à¥à¤¨à¥à¤¦à¥à¤°
hospital: à¤
सà¥à¤ªà¤¤à¤¾à¤²
- hotel: हà¥à¤à¥à¤²
hunting_stand: शिà¤à¤¾à¤° à¤à¥à¤·à¥à¤¤à¥à¤°
ice_cream: बरफ
kindergarten: बाल à¤à¤¶à¥à¤°à¤®
library: पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯
market: बà¤à¤¾à¤°
marketplace: बà¤à¤¾à¤° à¤à¥à¤·à¥à¤¤à¥à¤°
+ monastery: à¤à¥à¤¤à¥à¤¯
+ motorcycle_parking: मà¥à¤à¤° साà¤à¤à¤² पारà¥à¤à¤¿à¤
+ nightclub: रातà¥à¤°à¥ à¤à¥à¤²à¤¬
+ nursery: नरà¥à¤¸à¤°à¥
+ nursing_home: नरà¥à¤¸à¤¿à¤ हà¥à¤®
+ office: à¤à¤¾à¤°à¥à¤¯à¤²à¤¯
+ parking: पारà¥à¤à¤¿à¤
+ parking_entrance: पारà¥à¤à¤¿à¤ पà¥à¤°à¤µà¥à¤¶
+ pharmacy: à¤à¤·à¤§à¥ पसल
+ place_of_worship: पà¥à¤à¤¾ à¤à¤°à¥à¤¨à¥ सà¥à¤¥à¤¾à¤¨
+ police: पà¥à¤°à¤¹à¤°à¥
+ post_box: हà¥à¤²à¤¾à¤ बाà¤à¥à¤¸à¤¾
+ post_office: हà¥à¤²à¤¾à¤
+ prison: à¤à¤¾à¤°à¤¾à¤à¤¾à¤°
+ pub: पब
+ public_building: सारà¥à¤µà¤à¤¨à¤¿à¤ à¤à¤µà¤¨
+ reception_area: रिसà¥à¤ªà¥à¤¸à¤¨ à¤à¥à¤·à¥à¥à¤¤à¥à¤°
+ recycling: पà¥à¤¨à¤ पà¥à¤°à¤¯à¥à¤ विनà¥à¤¦à¥
+ restaurant: रà¥à¤¸à¥à¤à¥à¤°à¥à¤¨à¥à¤
+ retirement_home: बà¥à¤¦à¥à¤§ à¤à¤¶à¥à¤°à¤®
+ sauna: सà¥à¤¨à¤¾
+ school: विदà¥à¤¯à¤¾à¤²à¤¯
+ shelter: à¤à¤¶à¥à¤°à¤¯
+ shop: पसल
+ shower: सà¥à¤¨à¤¾à¤¨à¤à¤°
+ social_centre: सामाà¤à¤¿à¤ à¤à¥à¤¨à¥à¤¦à¥à¤°
+ social_club: सामाà¤à¤¿à¤ à¤à¥à¤²à¤¬
+ social_facility: सामाà¤à¤¿à¤ सà¥à¤µà¤¾
+ studio: सà¥à¤à¥à¤¡à¤¿à¤¯à¥
+ swimming_pool: पà¥à¤²à¥ पà¥à¤à¤°à¥
+ taxi: à¤à¥à¤¯à¤¾à¤à¥à¤¸à¥
+ telephone: सारà¥à¤µà¤à¤¨à¤¿à¤ à¤à¥à¤²à¤¿à¤«à¥à¤¨
+ theatre: हल
+ toilets: शà¥à¤à¤¾à¤²à¤¯
+ townhall: सà¤à¤¾ à¤à¥à¤¹
+ university: विशà¥à¤µà¤µà¤¿à¤¦à¥à¤¯à¤¾à¤²à¤¯
+ vending_machine: à¤à¥à¤¨à¥à¤¡à¤¿à¤ मà¥à¤¸à¤¿à¤¨
+ veterinary: à¤à¥à¤à¥à¤°à¤¿à¤¨à¤°à¥ शलà¥à¤¯à¤à¥à¤°à¤¿à¤¯à¤¾
+ village_hall: सà¤à¤¾ à¤à¥à¤¹
+ waste_basket: फà¥à¤¹à¤° à¤à¥à¤à¤°à¥
+ waste_disposal: फà¥à¤¹à¤° फालà¥à¤¨à¥ ठाà¤à¤
+ youth_centre: यà¥à¤µà¤¾ à¤à¥à¤¨à¥à¤¦à¥à¤°
+ boundary:
+ administrative: पà¥à¤°à¤¶à¤¾à¤¸à¤¨à¤¿à¤ सिमाना
+ census: à¤à¤¨à¤à¤£à¤¨à¤¾ सिमाना
+ national_park: राषà¥à¤à¥à¤°à¤¿à¤¯ निà¤à¥à¤à¥à¤
+ protected_area: सà¤à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¥à¤·à¥à¤¤à¥à¤°
+ bridge:
+ aqueduct: नहर
+ suspension: à¤à¥à¤²à¥à¤à¥à¤à¥ पà¥à¤²
+ swing: à¤à¥à¤²à¥à¤à¥à¤à¥ पà¥à¤²
+ "yes": पà¥à¤²
+ building:
+ "yes": à¤à¤µà¤¨
+ craft:
+ brewery: बà¥à¤°à¥à¤à¤°à¥
+ carpenter: सिà¤à¤°à¥à¤®à¥
+ electrician: विदà¥à¤¯à¥à¤¤à¤à¤°à¥à¤®à¥
+ gardener: मालà¥
+ painter: पà¥à¤¨à¥à¤à¤°
+ photographer: फà¥à¤à¥à¤à¥à¤°à¤¾
+ plumber: पà¥à¤²à¤®à¤°
+ shoemaker: à¤à¥à¤¤à¥à¤¤à¤¾à¤¬à¤¨à¤¾à¤à¤¨à¥
+ tailor: सà¥à¤à¥à¤à¤¾à¤°
+ "yes": à¤à¤²à¤¾ पसल
+ emergency:
+ ambulance_station: à¤à¤®à¥à¤¬à¥à¤²à¥à¤¨à¥à¤¸ पारà¥à¤
+ phone: à¤à¤à¤¸à¥à¤®à¤¿à¤ फà¥à¤¨
+ highway:
+ path: पथ
+ primary: पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤ सडà¤
+ primary_link: पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤ सडà¤
+ proposed: पà¥à¤°à¤¸à¥à¤¤à¤¾à¤µà¤¿à¤¤ सडà¤
+ raceway: रà¥à¤¸à¤µà¥
+ residential: à¤à¤µà¤¾à¤¸à¥à¤¯ सडà¤
+ road: सडà¤
+ secondary: माधà¥à¤¯à¤®à¤¿à¤ सडà¤
+ secondary_link: माधà¥à¤¯à¤®à¤¿à¤ सडà¤
+ service: सरà¥à¤à¤¿à¤¸ सडà¤
+ speed_camera: à¤à¤¤à¤¿ à¤à¥à¤¯à¤¾à¤®à¥à¤°à¤¾
+ steps: à¤à¥à¤à¥à¤à¤¿à¤²à¤¾à¤¹à¤°à¥
+ street_lamp: सडठबतà¥à¤¤à¥
+ track: à¤à¥à¤°à¤¯à¤¾à¤
+ "yes": सडà¤
+ historic:
+ house: à¤à¤°
+ icon: पà¥à¤°à¤¤à¤¿à¤®à¤¾
+ stone: पतà¥à¤¥à¤°
+ tower: à¤à¤¾à¤µà¤°
+ landuse:
+ farm: à¤à¥à¤¤à¥
+ forest: वन
+ leisure:
+ club: à¤à¤²à¥à¤¬
+ sauna: सà¥à¤¨à¤¾
+ swimming_pool: पà¥à¤²à¥ पà¥à¤à¤°à¥
+ man_made:
+ tower: à¤à¤¾à¤µà¤°
+ natural:
+ forest: वन
+ point: बिनà¥à¤¦à¥
+ rock: रà¤
+ spring: सà¥à¤ªà¥à¤°à¤¿à¤
+ stone: पतà¥à¤¥à¤°
+ water: पानà¥
+ office:
+ company: à¤à¤®à¥à¤ªà¤¨à¥
+ "yes": à¤à¤¾à¤°à¥à¤¯à¤²à¤¯
+ place:
+ block: à¤à¤£à¥à¤¡
+ city: शहर
+ country: दà¥à¤¶
+ farm: à¤à¥à¤¤à¥
+ house: à¤à¤°
+ state: राà¤à¥à¤¯
+ "yes": सà¥à¤¥à¤¾à¤¨à¤¹à¤°à¥
+ shop:
+ gallery: सà¤à¥à¤à¥à¤°à¤¹à¤¾à¤²à¤¯
+ market: बà¤à¤¾à¤°
+ pharmacy: à¤à¤·à¤§à¥ पसल
+ tailor: सà¥à¤à¥à¤à¤¾à¤°
+ "yes": पसल
+ tourism:
+ gallery: सà¤à¥à¤à¥à¤°à¤¹à¤¾à¤²à¤¯
+ information: सà¥à¤à¤¨à¤¾
+ waterway:
+ dock: डठà¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ stream: पà¥à¤°à¤µà¤¾à¤¹
+ description:
+ types:
+ places: सà¥à¤¥à¤¾à¤¨à¤¹à¤°à¥
+ results:
+ no_results: à¤à¥à¤¨à¥ नतिà¤à¤¾à¤¹à¤°à¥ à¤à¥à¤à¤¿à¤à¤¨à¤¨à¥
+ layouts:
+ edit: समà¥à¤ªà¤¾à¤¦à¤¨
+ history: à¤à¤¤à¤¿à¤¹à¤¾à¤¸
+ export: निरà¥à¤¯à¤¾à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ data: डà¥à¤à¤¾
+ help: सहायता
+ about: बारà¥à¤®à¤¾
+ copyright: पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ à¤
धिà¤à¤¾à¤°
+ learn_more: थप à¤à¤¾à¤¨à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ more: थप
+ help_page:
+ beginners_guide:
+ url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide
+ title: शिà¤à¤¾à¤°à¥à¤à¥ लाà¤à¥ मारà¥à¤à¤¦à¤°à¥à¤¶à¤¨
+ description: शिà¤à¤¾à¤°à¥à¤à¥ लाà¤à¥ समà¥à¤¦à¤¾à¤¯à¤²à¥ मारà¥à¤à¤¦à¤°à¥à¤¶à¤¨ à¤à¤¾à¤¯à¤® à¤à¤°à¥à¤à¥à¤
+ mailing_lists:
+ title: मà¥à¤²à¤¿à¤à¥à¤ सà¥à¤à¥à¤¹à¤°à¥
+ forums:
+ title: मà¤à¥à¤
+ irc:
+ title: à¤à¤à¤à¤°à¤¸à¤¿
+ switch2osm:
+ title: सà¥à¤µà¤¿à¤à¤à¥âà¤à¤à¤¸à¤à¤®
+ about_page:
+ next: à¤
रà¥à¤à¥
+ legal_title: à¤à¤¾à¤¨à¥à¤¨à¥
+ notifier:
+ gpx_notification:
+ greeting: हाय,
+ email_confirm_plain:
+ greeting: हाय,
+ email_confirm_html:
+ greeting: हाय,
+ lost_password_plain:
+ greeting: हाय,
+ lost_password_html:
+ greeting: हाय,
+ note_comment_notification:
+ anonymous: à¤à¤ à¤
à¤à¥à¤à¤¾à¤¤ पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾
+ greeting: हाय,
+ changeset_comment_notification:
+ greeting: हाय,
+ message:
+ inbox:
+ from: बाà¤
+ subject: विषय
+ date: मिति
+ message_summary:
+ delete_button: हà¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
+ new:
+ title: सानà¥à¤¦à¥à¤¸ पठाà¤
+ subject: विषय
+ body: बडà¥
+ send_button: पठाà¤à¤¨à¥à¤¹à¥à¤¸à¥
+ outbox:
+ to: लाà¤
+ subject: विषय
+ date: मिति
+ read:
+ from: बाà¤
+ subject: विषय
+ date: मिति
+ back: पà¤à¤¾à¤¡à¤¿
+ to: लाà¤
+ sent_message_summary:
+ delete_button: हà¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
site:
+ sidebar:
+ close: बनà¥à¤¦ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
search:
- search: à¤à¥à¤
+ search: à¤à¥à¤à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ get_directions: दिशानिरà¥à¤¦à¥à¤¶à¤¨ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ from: बाà¤
+ to: लाà¤
+ key:
+ table:
+ entry:
+ track: à¤à¥à¤°à¤¯à¤¾à¤
+ forest: वन
+ farm: à¤à¥à¤¤à¥
+ school:
+ - विदà¥à¤¯à¤¾à¤²à¤¯
+ toilets: शà¥à¤à¤¾à¤²à¤¯
+ richtext_area:
+ edit: समà¥à¤ªà¤¾à¤¦à¤¨
+ preview: पà¥à¤°à¥à¤µà¤¾à¤µà¤²à¥à¤à¤¨
+ markdown_help:
+ headings: शà¥à¤°à¥à¤·à¤à¤¹à¤°à¥
+ heading: शà¥à¤°à¥à¤·à¤
+ first: पहिलॠवसà¥à¤¤à¥
+ link: लिà¤à¥à¤
+ text: पाà¤
+ image: à¤à¤µà¤¿
trace:
create:
- upload_trace: ' GPS Trace à¤
पलà¥à¤¡ à¤à¤°à¥à¤¨à¥'
+ upload_trace: GPS Trace à¤
पलà¥à¤¡ à¤à¤°à¥à¤¨à¥
edit:
title: à¤à¥à¤°à¥à¤¸ समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤°à¥à¤¦à¥ %{name}
heading: à¤à¥à¤°à¥à¤¸ समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤°à¥à¤¦à¥ %{name}
@@ -463,15 +708,15 @@ ne:
edit: समà¥à¤ªà¤¾à¤¦à¤¨
owner: 'मालिà¤:'
description: विवरण
- tags: 'à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥:'
+ tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥à¤
tags_help: à¤
लà¥à¤ªà¤µà¤¿à¤°à¤¾à¤®à¤²à¥ à¤à¥à¤à¥à¤¯à¤¾à¤à¤à¥
- save_button: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥
+ save_button: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥
visibility: 'दà¥à¤¶à¥à¤¯à¤à¥à¤·à¤®à¤¤à¤¾:'
visibility_help: यसà¤à¥ मतलब à¤à¥ हॠ?
trace_form:
upload_gpx: 'GPX फाà¤à¤² à¤
पलà¥à¤¡ à¤à¤°à¥à¤¨à¥:'
description: 'विवरण:'
- tags: 'à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥:'
+ tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥à¤
tags_help: à¤
लà¥à¤ªà¤µà¤¿à¤°à¤¾à¤®à¤²à¥ à¤à¥à¤à¥à¤¯à¤¾à¤à¤à¥
visibility: 'दà¥à¤¶à¥à¤¯à¤à¥à¤·à¤®à¤¤à¤¾:'
visibility_help: यसà¤à¥ मतलाब à¤à¥ हॠ?
@@ -479,9 +724,9 @@ ne:
help: सहायता
trace_header:
see_all_traces: सबॠà¤à¥à¤°à¥à¤¸à¤¹à¤°à¥ हà¥à¤°à¥à¤¨à¥
- see_your_traces: तपाà¤à¤à¥ सबॠà¤à¥à¤°à¥à¤¸à¤¹à¤°à¥ हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸ \
+ see_your_traces: तपाà¤à¤à¤à¥ सबॠà¤à¥à¤°à¥à¤¸à¤¹à¤°à¥ हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
trace_optionals:
- tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥
+ tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥
view:
title: हà¥à¤°à¥à¤¦à¥ à¤à¥à¤°à¥à¤¸ %{name}
heading: हà¥à¤°à¥à¤¦à¥ à¤à¥à¤°à¥à¤¸ %{name}
@@ -495,12 +740,14 @@ ne:
edit: समà¥à¤ªà¤¾à¤¦à¤¨
owner: 'मालिà¤:'
description: 'विवरण:'
- tags: 'à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥:'
+ tags: à¤à¥à¤¯à¤¾à¤à¤¹à¤°à¥à¤
none: à¤à¥à¤¨à¥ पनि हà¥à¤à¤¨
edit_track: यॠà¤à¥à¤°à¥à¤¸ समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤°à¥à¤¨à¥
delete_track: यॠà¤à¥à¤°à¥à¤¸ मà¥à¤à¥à¤¨à¥
trace_not_found: à¤à¥à¤°à¥à¤¸ à¤à¥à¤à¤¿à¤à¤¨!
visibility: 'दà¥à¤¶à¥à¤¯à¤à¥à¤·à¤®à¤¤à¤¾:'
+ trace_paging_nav:
+ showing_page: पà¥à¤·à¥à¤ %{page}
trace:
pending: बाà¤à¤à¥ रहà¥à¤à¥
count_points: पà¥à¤à¤¨à¥à¤à¤¹à¤°à¥ %{count}
@@ -516,27 +763,58 @@ ne:
in: मा
map: नà¤à¥à¤¸à¤¾
list:
- public_traces: सारवà¤à¤¨à¤¿à¤ GPS à¤à¥à¤°à¥à¤¸à¤¹à¤°à¥ \
- your_traces: तपाà¤à¤à¥ GPS à¤à¥à¤°à¥à¤¸à¤¹à¤°à¥
+ public_traces: सारवà¤à¤¨à¤¿à¤ GPS à¤à¥à¤°à¥à¤¸à¤¹à¤°à¥
+ your_traces: तपाà¤à¤à¤à¥ GPS à¤à¥à¤°à¥à¤¸à¤¹à¤°à¥
public_traces_from: '%{user}बाठसारà¥à¤µà¤à¤¨à¤¿à¤ GPS à¤à¥à¤°à¥à¤¸à¤¹à¤°à¥'
tagged_with: ' %{tags}हरà¥à¤¦à¥à¤µà¤¾à¤°à¤¾ à¤à¥à¤¯à¤¾à¤ à¤à¤°à¤¿à¤à¤à¥'
delete:
scheduled_for_deletion: मà¥à¤à¥à¤¨à¤à¥ लाà¤à¤¿ तालिà¤à¤¾à¤µà¤¦à¥à¤§ à¤à¤°à¤¿à¤à¤à¥ à¤à¥à¤°à¥à¤¸
make_public:
made_public: सारà¥à¤µà¤à¤¨à¤¿à¤ बनाà¤à¤à¤à¥ à¤à¥à¤°à¥à¤¸
+ oauth_clients:
+ edit:
+ submit: समà¥à¤ªà¤¾à¤¦à¤¨
+ show:
+ confirm: निशà¥à¤à¤¿à¤¤ हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤ ?
+ form:
+ name: नाम
+ required: à¤à¤µà¤¶à¥à¤¯à¤ परà¥à¤¦à¤
user:
+ login:
+ title: पà¥à¤°à¤µà¥à¤¶
+ heading: पà¥à¤°à¤µà¥à¤¶
+ password: 'पासवरà¥à¤¡:'
+ login_button: पà¥à¤°à¤µà¥à¤¶
+ no account: à¤à¤¾à¤¤à¤¾ à¤à¥à¤¨?
+ lost_password:
+ new password button: पà¥à¤°à¤µà¥à¤¸ शबà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¥à¤¨à¥
reset_password:
- title: पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¥à¤¨à¥
- heading: ' %{user}à¤à¥ लाà¤à¤¿ पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¥à¤¨à¥ \'
- password: 'पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦:'
+ title: पà¥à¤°à¤µà¥à¤¸ शबà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¥à¤¨à¥
+ heading: '%{user}à¤à¥ लाà¤à¤¿ पà¥à¤°à¤µà¥à¤¸ शबà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¥à¤¨à¥'
+ password: 'पासवरà¥à¤¡:'
+ confirm password: 'पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥:'
+ reset: नयाठपà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦
+ flash changed: तपाà¤à¤à¤à¥ पà¥à¤°à¤µà¥à¤¶ शबà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¤¿à¤à¤à¥ à¤à¥¤
+ new:
+ password: 'पासवरà¥à¤¡:'
confirm password: 'पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥:'
- reset: नयाठपà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ \
- flash changed: तपाà¤à¤à¥ पà¥à¤°à¤µà¥à¤¶à¤¶à¤µà¥à¤¦ परिवरà¥à¤¤à¤¨ à¤à¤°à¤¿à¤à¤à¥ à¤à¥¤
terms:
consider_pd_why: यॠà¤à¥ हॠ?
+ legale_names:
+ france: फà¥à¤°à¤¾à¤¨à¥à¤¸
+ italy: à¤à¤à¤¾à¤²à¥
+ no_such_user:
+ deleted: मà¥à¤à¤¾à¤à¤à¤à¥
+ view:
+ traces: निशानहरà¥
+ status: 'सà¥à¤¥à¤¿à¤¤à¤¿:'
+ description: वरà¥à¤£à¤¨
+ comments: à¤à¤¿à¤ªà¥à¤ªà¤£à¥
+ confirm: निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
popup:
- your location: तपाà¤à¤à¥ सà¥à¤¥à¤¾à¤¨
+ your location: तपाà¤à¤à¤à¥ सà¥à¤¥à¤¾à¤¨
nearby mapper: नà¤à¤¿à¤à¤à¥ मानà¤à¤¿à¤¤à¥à¤°à¤à¤°à¥à¤®à¥
+ friend: साथà¥
account:
my settings: मà¥à¤°à¥ à¤
नà¥à¤à¥à¤²à¤¤à¤¾à¤¹à¤°à¥
openid:
@@ -549,47 +827,120 @@ ne:
heading: सारà¥à¤µà¤à¤¨à¤¿à¤ समà¥à¤ªà¤¾à¤¦à¤¨
contributor terms:
link text: यॠà¤à¥ हॠ?
- preferred languages: 'रà¥à¤à¤¾à¤à¤à¤à¤¾ à¤à¤¾à¤·à¤¾à¤¹à¤°à¥:'
+ preferred languages: 'रà¥à¤à¤¾à¤à¤à¤à¤¾ à¤à¤¾à¤·à¤¾à¤¹à¤°à¥:'
+ gravatar:
+ link text: यॠà¤à¥ हॠ?
home location: 'à¤à¥à¤¹ सà¥à¤¥à¤¾à¤¨:'
- no home location: तपाà¤à¤²à¥ à¤à¤«à¥à¤¨à¥ à¤à¥à¤¹à¤¸à¥à¤¥à¤¾à¤¨ पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤à¤°à¥à¤¨à¥à¤à¤à¤à¥ à¤à¥à¤¨à¥¤
- save changes button: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸ \
- flash update success: पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥à¤¹à¤°à¥ सफलतापà¥à¤°à¥à¤µà¤ à¤
धà¥à¤¯à¤¾à¤µà¤§à¤¿à¤ à¤à¤°à¤¿à¤¯à¥à¥¤
+ no home location: तपाà¤à¤à¤²à¥ à¤à¤«à¥à¤¨à¥ à¤à¥à¤¹à¤¸à¥à¤¥à¤¾à¤¨ पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤à¤°à¥à¤¨à¥à¤à¤à¤à¥ à¤à¥à¤¨à¥¤
+ latitude: 'दà¥à¤¶à¤¾à¤¨à¥à¤¤à¤°:'
+ longitude: 'à¤
à¤à¥à¤·à¤¾à¤à¤¶:'
+ save changes button: परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ सà¤à¤à¥à¤°à¤¹ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ flash update success confirm needed: पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥à¤¹à¤°à¥ सफलतापà¥à¤°à¥à¤µà¤ à¤
धà¥à¤¯à¤¾à¤µà¤§à¤¿à¤
+ à¤à¤°à¤¿à¤¯à¥à¥¤ Check your email for a note to confirm your new email address.
+ flash update success: पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥à¤¹à¤°à¥ सफलतापà¥à¤°à¥à¤µà¤ à¤
धà¥à¤¯à¤¾à¤µà¤§à¤¿à¤ à¤à¤°à¤¿à¤¯à¥à¥¤
+ confirm:
+ button: निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
confirm_email:
- heading: à¤à¤®à¥à¤² परिवरà¥à¤¤à¤¨ à¤à¤à¤à¥ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥ \
+ heading: à¤à¤®à¥à¤² परिवरà¥à¤¤à¤¨ à¤à¤à¤à¥ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
press confirm button: à¤à¤®à¥à¤² निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¤à¥ लाà¤à¤¿ निशà¥à¤à¤¿à¤¤à¤®à¤¾ à¤à¥à¤²à¤¿à¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥ ।
button: निशà¥à¤à¤¿à¤¤
- success: तपाà¤à¤à¥ à¤à¤®à¥à¤² निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸, à¤à¥à¤°à¤¾à¤¹à¥à¤¯à¤¾à¤¤à¤¾à¤à¥ लाà¤à¤¿ धनà¥à¤¯à¤µà¤¾à¤¦!
+ success: तपाà¤à¤à¤à¥ à¤à¤®à¥à¤² निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥, à¤à¥à¤°à¤¾à¤¹à¥à¤¯à¤¾à¤¤à¤¾à¤à¥ लाà¤à¤¿ धनà¥à¤¯à¤µà¤¾à¤¦!
failure: यॠà¤à¥à¤à¤¨ à¤à¥ साथम à¤à¤ à¤à¤®à¥à¤² पहिलॠनॠनिशà¥à¤à¤¿à¤¤ à¤à¤°à¤¿à¤¸à¤à¤¿à¤à¤à¥ à¤à¥¤
go_public:
- flash success: तपाà¤à¤à¥ सबॠसमà¥à¤ªà¤¾à¤¦à¤¨à¤¹à¤°à¥ सारà¥à¤µà¤¾à¤à¤¨à¤¿à¤ à¤à¤¨à¥ ,तपाठà¤
ब समà¥à¤ªà¤¾à¤¨ लायठहà¥à¤¨à¥
- à¤à¤¯à¥ ।
+ flash success: तपाà¤à¤à¤à¤¾ सबॠसमà¥à¤ªà¤¾à¤¦à¤¨à¤¹à¤°à¥ सारà¥à¤µà¤¾à¤à¤¨à¤¿à¤ à¤à¤¨à¥ , तपाà¤à¤ à¤
ब समà¥à¤ªà¤¾à¤¦à¤¨ लायà¤
+ हà¥à¤¨à¥ à¤à¤¯à¥ ।
make_friend:
- success: '%{name} à¤
ब तपाà¤à¤à¥ मितà¥à¤° हà¥à¤¨à¥à¤à¤à¤à¥ à¤!'
+ success: '%{name} à¤
ब तपाà¤à¤à¤à¥ मितà¥à¤° हà¥à¤¨à¥à¤à¤à¤à¥ à¤!'
failed: माफ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤²à¤¾, %{name}लाठमितà¥à¤°à¤à¥ रà¥à¤ªà¤®à¤¾ थपà¥à¤¨ सà¤à¤¿à¤à¤¨à¥¤
- already_a_friend: ' %{name} सà¤à¤ तपाठपहिलॠनॠमितà¥à¤°à¤¤à¤¾ à¤à¤°à¤¿à¤¸à¤à¥à¤¨à¥ à¤à¤à¤à¥ ठ।'
+ already_a_friend: '%{name} सà¤à¤ तपाà¤à¤à¤²à¥ पहिलॠनॠमितà¥à¤°à¤¤à¤¾ à¤à¤°à¤¿à¤¸à¤à¥à¤¨à¥ à¤à¤à¤à¥ ठ।'
filter:
- not_an_administrator: यॠà¤à¤¾à¤°à¥à¤¯ à¤à¤°à¥à¤¨ तपाठपà¥à¤°à¤µà¤¨à¥à¤§à¤ हà¥à¤¨à¥à¤ªà¤°à¥à¤ .
+ not_an_administrator: यॠà¤à¤¾à¤°à¥à¤¯ à¤à¤°à¥à¤¨ तपाà¤à¤ पà¥à¤°à¤µà¤¨à¥à¤§à¤ हà¥à¤¨à¥à¤ªà¤°à¥à¤ .
user_role:
filter:
- not_an_administrator: पà¥à¤°à¤µà¤¨à¥à¤§à¤à¤¹à¤°à¥à¤²à¥ à¤à¥à¤®à¤¿à¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ à¤à¤°à¥à¤¨ सà¤à¥à¤à¤¨à¥ र तपाठपà¥à¤°à¤µà¤¨à¥à¤§à¤
+ not_an_administrator: पà¥à¤°à¤µà¤¨à¥à¤§à¤à¤¹à¤°à¥à¤²à¥ à¤à¥à¤®à¤¿à¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ à¤à¤°à¥à¤¨ सà¤à¥à¤à¤¨à¥ र तपाà¤à¤ पà¥à¤°à¤µà¤¨à¥à¤§à¤
हà¥à¤¨ ।
- not_a_role: ' `%{role}'' मानà¥à¤¯ à¤à¥à¤®à¤¿à¤à¤¾ हà¥à¤¨ ।'
+ not_a_role: '`%{role}'' मानà¥à¤¯ à¤à¥à¤®à¤¿à¤à¤¾ हà¥à¤¨ ।'
already_has_role: पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ सà¤à¤ %{role} à¤à¥à¤®à¤¿à¤à¤¾ पहिलॠदà¥à¤à¤¿ नॠà¤à¥¤
- doesnt_have_role: ' पà¥à¤°à¤¯à¥à¤à¤°à¥à¤¤à¤¾à¤à¥ %{role}à¤à¥ à¤à¥à¤®à¤¿à¤à¤¾ à¤à¥à¤¨'
+ doesnt_have_role: पà¥à¤°à¤¯à¥à¤à¤°à¥à¤¤à¤¾à¤à¥ %{role}à¤à¥ à¤à¥à¤®à¤¿à¤à¤¾ à¤à¥à¤¨
grant:
- title: à¤à¥à¤®à¤¿à¤à¤¾ पà¥à¤°à¤¦à¤¾à¤¨ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥ \
- heading: à¤à¥à¤®à¤¿à¤à¤¾ पà¥à¤°à¤¦à¤¾à¤¨ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥ \
+ title: à¤à¥à¤®à¤¿à¤à¤¾ पà¥à¤°à¤¦à¤¾à¤¨ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
+ heading: à¤à¥à¤®à¤¿à¤à¤¾ पà¥à¤°à¤¦à¤¾à¤¨ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
are_you_sure: à¤à¥à¤®à¤¿à¤à¤¾ `%{role}' पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ `%{name}'लाठपà¥à¤°à¤¦à¤¾à¤¨ à¤à¤°à¥à¤¨ निशà¥à¤à¤¿à¤¤
हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤?
confirm: निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
fail: à¤à¥à¤®à¤¿à¤à¤¾ `%{role}' पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ `%{name}'लाठपà¥à¤°à¤¦à¤¾à¤¨ à¤à¤°à¥à¤¨ सà¤à¤¿à¤à¤¨ । à¤à¥à¤ªà¤¯à¤¾ पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾
र à¤à¥à¤®à¤¿à¤à¤¾ दà¥à¤¬à¥ मानà¥à¤¯ à¤à¤¨à¥ à¤à¤¨à¤¿ à¤à¤¾à¤à¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥ ।
revoke:
- title: Confirm role revoking
+ title: à¤à¥à¤®à¤¿à¤à¤¾ फिरà¥à¤¤à¤¾ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
heading: à¤à¥à¤®à¤¿à¤à¤¾ फिरà¥à¤¤à¤¾ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
- are_you_sure: तपाà¤à¤ à¤à¥à¤®à¤¿à¤à¤¾ `%{role}' , `%{name} पà¥à¤°à¥à¤à¤à¤°à¥à¤¤à¤¾à¤¬à¤¾à¤ फिरà¥à¤¤à¤¾ लिनॠà¤à¥à¤°à¤¾à¤®à¤¾
+ are_you_sure: तपाà¤à¤ à¤à¥à¤®à¤¿à¤à¤¾ `%{role}' , `%{name} पà¥à¤°à¥à¤à¤à¤°à¥à¤¤à¤¾à¤¬à¤¾à¤ फिरà¥à¤¤à¤¾ लिनॠà¤à¥à¤°à¤¾à¤®à¤¾
निशà¥à¤à¤¿à¤¤ हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤'?
confirm: निशà¥à¤à¤¿à¤¤ à¤à¤°à¥à¤¨à¥
fail: à¤à¥à¤®à¤¿à¤à¤¾ `%{role}' ,`%{name}'बाठफिरà¥à¤¤à¤¾ लिन सà¤à¤¿à¤à¤¨ । पà¥à¤°à¥à¤à¤à¤°à¥à¤¤à¤¾ नाम र à¤à¥à¤®à¤¿à¤à¤¾
दà¥à¤¬à¥ मानà¥à¤¯ à¤à¤¨à¥ à¤à¤¨à¥à¤¨à¥ à¤à¥à¤²à¤¾à¤à¤¨à¥ हà¥à¤¸à¥ ।
+ user_block:
+ partial:
+ show: दà¥à¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
+ edit: समà¥à¤ªà¤¾à¤¦à¤¨
+ confirm: निशà¥à¤à¤¿à¤¤ हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤ ?
+ creator_name: सरà¥à¤à¤
+ status: वसà¥à¤¤à¥à¤¸à¥à¤¥à¤¿à¤¤à¤¿
+ showing_page: पà¥à¤·à¥à¤ %{page}
+ next: à¤
रà¥à¤à¥ »
+ previous: « à¤
à¤à¤¿à¤²à¥à¤²à¥
+ show:
+ created: सà¥à¤à¤¨à¤¾ à¤à¤°à¤¿à¤à¤à¥
+ status: वसà¥à¤¤à¥à¤¸à¥à¤¥à¤¿à¤¤à¤¿
+ show: दà¥à¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
+ edit: समà¥à¤ªà¤¾à¤¦à¤¨
+ confirm: निशà¥à¤à¤¿à¤¤ हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤ ?
+ note:
+ entry:
+ comment: à¤à¤¿à¤ªà¥à¤ªà¤£à¥
+ mine:
+ id: à¤à¤à¤¡à¥
+ creator: सरà¥à¤à¤
+ description: वरà¥à¤£à¤¨
+ javascripts:
+ close: बनà¥à¤¦ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ share:
+ title: à¤à¤¦à¤¾à¤¨-पà¥à¤°à¤¦à¤¾à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ cancel: रदà¥à¤¦ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ image: à¤à¤µà¤¿
+ long_link: लिà¤à¥à¤
+ embed: à¤à¤à¤à¥à¤à¤®à¤à¤²
+ format: 'ढाà¤à¤à¤¾:'
+ download: डाà¤à¤¨à¤²à¥à¤¡
+ paste_html: वà¥à¤¬à¤¸à¤¾à¤à¤ à¤à¤®à¥à¤¬à¥à¤¡ à¤à¤°à¥à¤¨ HTML पà¥à¤¸à¥à¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ map:
+ zoom:
+ in: ठà¥à¤²à¥ पारà¥à¤¨à¥à¤¹à¥à¤¸
+ out: सानॠपारà¥à¤¨à¥à¤¹à¥à¤¸
+ base:
+ standard: मानà¤
+ changesets:
+ show:
+ comment: à¤à¤¿à¤ªà¥à¤ªà¤£à¥
+ subscribe: सवसà¥à¤à¥à¤°à¤¿à¤ªà¥à¤
+ unsubscribe: सदसà¥à¤¯à¤¤à¤¾ à¤à¤¾à¤°à¥à¤ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+ hide_comment: लà¥à¤à¤¾à¤
+ notes:
+ show:
+ hide: लà¥à¤à¤¾à¤à¤¨à¥à¤¹à¥à¤¸à¥
+ comment: à¤à¤¿à¤ªà¥à¤ªà¤£à¥
+ directions:
+ time: समय
+ query:
+ node: नà¥à¤¡
+ way: बाà¤à¥
+ relation: रिलà¥à¤¶à¤¨
+ redaction:
+ edit:
+ description: वरà¥à¤£à¤¨
+ new:
+ description: वरà¥à¤£à¤¨
+ show:
+ description: विवरण
+ user: 'सरà¥à¤à¤:'
+ confirm: निशà¥à¤à¤¿à¤¤ हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤ ?
...
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 158fc3140..389d3d8a6 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -703,6 +703,7 @@ oc:
reef: Estèu
ridge: Cresta
rock: Ròca
+ saddle: Sèla
sand: Sabla
scree: Esbudèl
scrub: Boissa
@@ -1107,12 +1108,13 @@ oc:
partners_title: Partenaris
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} a apondut un comentari sus vòstra entrada
- del jornal'
+ subject: '[OpenStreetMap] %{user} a postat un comentari sus un article de jornal'
hi: Bonjorn %{to_user},
+ footer: Tanben podètz legir lo comentari sus %{readurl}, lo comentar sus %{commenturl}
+ o respondre sus %{replyurl}
message_notification:
hi: Bonjorn %{to_user},
- footer_html: Podètz tanben legir lo messatge a %{readurl} e i podètz respondre
+ footer_html: Tanben podètz legir lo messatge a %{readurl} e i podètz respondre
a %{replyurl}
friend_notification:
subject: '[OpenStreetMap] %{user} vos a apondut coma amic'
@@ -1188,9 +1190,14 @@ oc:
La nòta se tròba prèp de %{place}.'
details: Mai de detalh sus la nòta pòt èsser obtengut a %{url}.
changeset_comment_notification:
+ hi: Bonjorn %{to_user},
greeting: Bonjorn,
commented:
- partial_changeset_with_comment: amb lo comentari '%{changeset_comment}'
+ subject_own: '[OpenStreetMap] %{commenter} a comentat un de vòstres ensembles
+ de cambiaments'
+ subject_other: '[OpenStreetMap] %{commenter} a comentat un ensemble de cambiaments
+ al qual vos interessatz'
+ partial_changeset_with_comment: amb lo comentari « %{changeset_comment}' »
partial_changeset_without_comment: sens comentari
message:
inbox:
@@ -1609,6 +1616,9 @@ oc:
github:
title: Connexion amb GitHub
alt: Connexion amb un Compte GitHub
+ wikipedia:
+ title: Se connectar amb Wikipèdia
+ alt: Se connectar amb un compte de Wikipèdia
yahoo:
title: Se connectar amb Yahoo
alt: Se connectar amb l'OpenID de Yahoo
@@ -2015,7 +2025,7 @@ oc:
key:
title: Legenda
tooltip: Legenda
- tooltip_disabled: La legenda es pas disponibla que pel jaç estandard
+ tooltip_disabled: La legenda es pas disponibla que per aqueste jaç
map:
zoom:
in: Zoom avant
@@ -2032,6 +2042,7 @@ oc:
header: Jaces de mapa
notes: Nòtas de la mapa
data: Donadas de mapa
+ gps: Traças GPS publicas
overlays: Autorizar las superposicions per reparar la mapa
title: Jaces
copyright: © Contributors d'OpenStreetMap
@@ -2110,6 +2121,12 @@ oc:
against_oneway_without_exit: Remontatz a contrasens sus %{name}
end_oneway_without_exit: Fin del sens unic a %{name}
roundabout_with_exit: A la rotonda, prene la sortida %{exit} sus %{name}
+ turn_left_with_exit: A la rotonda, viratz a esquèrra cap a %{name}
+ slight_left_with_exit: A la rotonda, viratz leugièrament a esquèrra cap a
+ %{name}
+ turn_right_with_exit: A la rotonda viratz a dreita cap a %{name}
+ slight_right_with_exit: A la rotonda viratz leugièrament a dreita cap a %{name}
+ continue_with_exit: A la rotonda, contunhatz tot dreit cap a %{name}
unnamed: via sens nom
courtesy: Itinerari peovesit per %{link}
time: Temps
@@ -2120,6 +2137,13 @@ oc:
nothing_found: Cap d'objècte pas trobat
error: 'Error en contactant %{server}: %{error}'
timeout: Relambi depassat en contactant %{server}
+ context:
+ directions_from: Direccions dempuèi aicÃ
+ directions_to: Direccions cap a aicÃ
+ add_note: Apondre una nòta aicÃ
+ show_address: Afichar lâadreça
+ query_features: Requèsta sus las foncionalitats
+ centre_map: Centrar la mapa aicÃ
redaction:
edit:
description: Descripcion
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 262137999..2c702d0a7 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -1000,7 +1000,6 @@ pl:
partners_ic: Imperial College London
partners_bytemark: Hosting Bytemark
partners_partners: partnerzy
- partners_url: http://wiki.openstreetmap.org/wiki/partners
osm_offline: Baza danych OpenStreetMap jest niedostÄpna na czas ważnych zadaÅ
administracyjnych, które sÄ
w tym momencie wykonywane.
osm_read_only: Baza danych OpenStreetMap jest w trybie tylko-do-odczytu na czas
@@ -1706,6 +1705,8 @@ pl:
require_moderator:
not_a_moderator: Musisz byÄ moderatorem, aby wykonaÄ tÄ
czynnoÅÄ.
setup_user_auth:
+ blocked_zero_hour: Masz pilnÄ
wiadomoÅÄ na stronie OpenStreetMap. Musisz przeczytaÄ
+ tÄ wiadomoÅÄ, zanim bÄdzie można zapisywaÄ zmiany.
blocked: Twój dostÄp do API jest zablokowany. Zaloguj siÄ do interfejsu sieciowego,
aby dowiedzieÄ siÄ wiÄcej.
need_to_see_terms: Twój dostÄp do API zostaÅ czasowo zawieszony. Zaloguj siÄ
@@ -2256,6 +2257,7 @@ pl:
helper:
time_future: Blokada wygasa za %{time}.
until_login: Aktywne do momentu zalogowania użytkownika.
+ time_future_and_until_login: KoÅczy siÄ %{time} i po zalogowaniu siÄ użytkownika.
time_past: ZakoÅczono %{time} temu.
blocks_on:
title: Blokady na użytkownika %{name}
@@ -2456,6 +2458,13 @@ pl:
nothing_found: Nie znaleziono obiektów
error: 'BÅÄ
d komunikacji z %{server}: %{error}'
timeout: Przekroczono czas oczekiwania z:%{server}
+ context:
+ directions_from: Nawiguj stÄ
d
+ directions_to: Nawiguj tutaj
+ add_note: Dodaj uwagÄ tutaj
+ show_address: Pokaż adres
+ query_features: WyÅwietl dane obiektu
+ centre_map: Wycentruj mapÄ tutaj
redaction:
edit:
description: Opis
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 0cf181d6b..9892de330 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -1713,6 +1713,8 @@ pt-BR:
require_moderator:
not_a_moderator: Você precisa ser um moderador para realizar essa ação.
setup_user_auth:
+ blocked_zero_hour: Há uma mensagem urgente para você no site do OpenStreetMap.
+ Você deve lê-la para poder voltar a salvar suas edições.
blocked: Seu acesso à API foi bloqueado. Acesse a interface web para mais detalhes.
need_to_see_terms: O seu acesso à API está temporariamente suspenso. Faça o
login na interface web para ler os Termos do Contribuidor. Você não precisa
@@ -2457,6 +2459,13 @@ pt-BR:
nothing_found: Nenhum elemento encontrado
error: 'Erro ao contatar %{server}: %{error}'
timeout: Tempo esgotado com %{server}
+ context:
+ directions_from: InÃcio da Rota
+ directions_to: Destino da Rota
+ add_note: Adicionar uma nota aqui
+ show_address: Mostrar Endereço
+ query_features: Consultar elementos
+ centre_map: Centralizar o mapa aqui
redaction:
edit:
description: Descrição
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index b84733ed2..5ffe46fea 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -32,6 +32,7 @@
# Author: Komzpa
# Author: Lockal
# Author: Macofe
+# Author: Mavl
# Author: MaxSem
# Author: Mechano
# Author: Mixaill
@@ -52,6 +53,7 @@
# Author: Yuri Nazarov
# Author: Zverik
# Author: ÐлекÑÐ°Ð½Ð´Ñ Ð¡Ð¸Ð³Ð°ÑÑв
+# Author: ÐÐ»Ð°Ð´Ð¸Ð¼Ð¸Ñ Ð
# Author: ÐмиÑÑий
# Author: Сrower
---
@@ -146,7 +148,7 @@ ru:
closed: ÐакÑÑÑо
created_html: Создано %{time} назад
closed_html: ÐакÑÑÑо %{time} назад
- created_by_html: Создано %{time} назад полÑзовÑалем
+ created_by_html: Создано %{time} назад полÑзоваÑелем
%{user}
deleted_by_html: Удалено %{time} назад полÑзоваÑелем
%{user}
@@ -224,9 +226,9 @@ ru:
changeset: пакеÑа пÑавок
note: пÑимеÑание
redacted:
- redaction: РедакÑÐ¸Ñ %{id}
- message_html: ÐеÑÑÐ¸Ñ %{version} ÑÑого обÑекÑа вÑÑезана и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑобÑажена.
- СмоÑÑиÑе %{redaction_link} Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии.
+ redaction: ÐÑпÑавление %{id}
+ message_html: ÐеÑÑÐ¸Ñ %{version} ÑÑого обÑекÑа (%{type}) ÑкÑÑÑа и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
+ оÑобÑажена. ÐожалÑйÑÑа, ÑмоÑÑиÑе %{redaction_link} Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии.
type:
node: ÑоÑка
way: линиÑ
@@ -1369,6 +1371,7 @@ ru:
ÐÑмеÑка недалеко Ð¾Ñ %{place}.'
details: ÐодÑобнее о замеÑке %{url}.
changeset_comment_notification:
+ hi: ÐÑивеÑ, %{to_user},
greeting: ÐÑивеÑ,
commented:
subject_own: '[OpenStreetMap] %{commenter} пÑокомменÑиÑовал один из ваÑиÑ
@@ -1382,6 +1385,8 @@ ru:
partial_changeset_with_comment: Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑием '%{changeset_comment}'
partial_changeset_without_comment: без комменÑаÑиÑ
details: ÐополниÑелÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ пакеÑе пÑавок можно найÑи на %{url}.
+ unsubscribe: ЧÑÐ¾Ð±Ñ Ð¾ÑпиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ð¹ ÑÑого пакеÑа пÑавок поÑеÑиÑе %{url}
+ и нажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ "ÐÑпиÑаÑÑÑÑ".
message:
inbox:
title: ÐÑ
одÑÑие
@@ -1723,6 +1728,8 @@ ru:
require_moderator:
not_a_moderator: ЧÑÐ¾Ð±Ñ Ð²ÑполниÑÑ ÑÑо дейÑÑвие, нÑжно бÑÑÑ Ð¼Ð¾Ð´ÐµÑаÑоÑом.
setup_user_auth:
+ blocked_zero_hour: У Ð²Ð°Ñ ÐµÑÑÑ ÑÑоÑное ÑообÑение на ÑайÑе OpenStreetMap. Ðам
+ нÑжно пÑоÑиÑаÑÑ ÑообÑение, пÑежде Ñем Ð²Ñ ÑможеÑе ÑоÑ
ÑаниÑÑ Ð²Ð°Ñи изменениÑ.
blocked: ÐÐ°Ñ Ð´Ð¾ÑÑÑп к API заблокиÑован. ÐожалÑйÑÑа, войдиÑе ÑеÑез веб-инÑеÑÑейÑе,
ÑÑÐ¾Ð±Ñ ÑзнаÑÑ Ð¿Ð¾Ð´ÑобноÑÑи.
need_to_see_terms: ÐÐ°Ñ Ð´Ð¾ÑÑÑп к API вÑеменно пÑиоÑÑановлен. ÐожалÑйÑÑа войдиÑе
@@ -1739,8 +1746,7 @@ ru:
allow_write_prefs: изменÑÑÑ Ð²Ð°Ñи наÑÑÑойки на ÑайÑе
allow_write_diary: ÑоздаваÑÑ Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ¾Ð²Ñе запиÑи, комменÑаÑии, заводиÑÑ Ð´ÑÑзей
allow_write_api: изменÑÑÑ Ð´Ð°Ð½Ð½Ñе
- allow_read_gpx: ÑиÑаÑÑ Ð²Ð°Ñи ÑаÑÑнÑе
- GPS-ÑÑеки
+ allow_read_gpx: ÑиÑаÑÑ Ð²Ð°Ñи ÑаÑÑнÑе GPS-ÑÑеки
allow_write_gpx: пеÑедаваÑÑ GPS-ÑÑеки на ÑеÑвеÑ
allow_write_notes: изменÑÑÑ Ð·Ð°Ð¼ÐµÑки
grant_access: ÐÑедоÑÑавиÑÑ Ð´Ð¾ÑÑÑп
@@ -2009,16 +2015,16 @@ ru:
revoke:
administrator: ÐÑозваÑÑ Ð¿Ñава админиÑÑÑаÑоÑа
moderator: ÐÑозваÑÑ Ð¿Ñава модеÑаÑоÑа
- block_history: ÐкÑивнÑе Ðлоки
- moderator_history: ÑозданнÑе блокиÑовки
+ block_history: ÐкÑивнÑе блокиÑовки
+ moderator_history: СозданнÑе блокиÑовки
comments: ÐомменÑаÑии
- create_block: ÐлокиÑоваÑÑ ÑÑаÑÑника
- activate_user: акÑивиÑоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
- deactivate_user: деакÑивиÑоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
- confirm_user: подÑвеÑдиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
- hide_user: ÑкÑÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
- unhide_user: оÑобÑазиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
- delete_user: ÑдалиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
+ create_block: ÐлокиÑоваÑÑ ÑÑого полÑзоваÑелÑ
+ activate_user: ÐкÑивиÑоваÑÑ ÑÑого полÑзоваÑелÑ
+ deactivate_user: ÐеакÑивиÑоваÑÑ ÑÑого полÑзоваÑелÑ
+ confirm_user: ÐодÑвеÑдиÑÑ ÑÑого полÑзоваÑелÑ
+ hide_user: СкÑÑÑÑ ÑÑого полÑзоваÑелÑ
+ unhide_user: ÐÑобÑазиÑÑ ÑÑого полÑзоваÑелÑ
+ delete_user: УдалиÑÑ ÑÑого полÑзоваÑелÑ
confirm: ÐодÑвеÑдиÑÑ
friends_changesets: набоÑÑ Ð¿Ñавок дÑÑзей
friends_diaries: дневники дÑÑзей
@@ -2198,68 +2204,68 @@ ru:
пÑовеÑÑÑе, ÑÑо полÑзоваÑÐµÐ»Ñ Ð¸ ÑÐ¾Ð»Ñ ÑвлÑÑÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑми.
user_block:
model:
- non_moderator_update: ÐÑжно бÑÑÑ Ð¼Ð¾Ð´ÐµÑаÑоÑом, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¸Ð»Ð¸ измениÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование.
- non_moderator_revoke: ÐÑжно бÑÑÑ Ð¼Ð¾Ð´ÐµÑаÑоÑом, ÑÑÐ¾Ð±Ñ ÑнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование.
+ non_moderator_update: ÐÑжно бÑÑÑ Ð¼Ð¾Ð´ÐµÑаÑоÑом, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¸Ð»Ð¸ измениÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ.
+ non_moderator_revoke: ÐÑжно бÑÑÑ Ð¼Ð¾Ð´ÐµÑаÑоÑом, ÑÑÐ¾Ð±Ñ ÑнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ.
not_found:
- sorry: ÐзвиниÑе, блокиÑование полÑзоваÑÐµÐ»Ñ Ñ ID %{id} не найдено.
+ sorry: ÐзвиниÑе, блокиÑовка полÑзоваÑÐµÐ»Ñ Ñ ID %{id} не найдена.
back: ÐеÑнÑÑÑÑÑ Ðº индекÑÑ
new:
- title: Создание блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
- heading: Создание блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
- reason: ÐбÑÑÑниÑе, поÑÐµÐ¼Ñ %{name} бÑл заблокиÑован. ÐожалÑйÑÑа, бÑдÑÑе ÑеÑпимÑ
- и поÑÑÑпайÑе ÑазÑмно, пÑедоÑÑавлÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, как можно болÑÑе инÑоÑмаÑии
- о пÑиÑинаÑ
блокиÑованиÑ, помнÑ, ÑÑо ÑообÑение бÑÐ´ÐµÑ Ð²Ð¸Ð´Ð½Ð¾ вÑем. ÐомниÑе, ÑÑо
- не вÑе полÑзоваÑели понимаÑÑ Ð¶Ð°Ñгон, поÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзÑйÑеÑÑ Ð¿Ñи обÑÑÑнении дилеÑанÑÑким
- ÑзÑком.
+ title: Создание блокиÑовки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
+ heading: Создание блокиÑовки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
+ reason: ÐÑиÑина, по коÑоÑой блокиÑÑеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}. ÐожалÑйÑÑа, бÑдÑÑе
+ ÑÐ¿Ð¾ÐºÐ¾Ð¹Ð½Ñ Ð¸ ÑазÑÐ¼Ð½Ñ Ð½Ð°ÑколÑко ÑÑо возможно. ÐÑедоÑÑавÑÑе полÑзоваÑÐµÐ»Ñ ÐºÐ°Ðº можно
+ болÑÑе инÑоÑмаÑии о пÑиÑинаÑ
блокиÑовки, помнÑ, ÑÑо ÑообÑение бÑÐ´ÐµÑ Ð²Ð¸Ð´Ð½Ð¾
+ вÑем. ÐмейÑе в видÑ, ÑÑо не вÑе полÑзоваÑели понимаÑÑ Ð¶Ð°Ñгон ÑообÑеÑÑва, поÑÑомÑ
+ попÑобÑйÑе иÑполÑзоваÑÑ Ð´Ð¸Ð»ÐµÑанÑÑкие понÑÑиÑ.
period: Ðак долго, наÑÐ¸Ð½Ð°Ñ Ñ ÑÑого моменÑа, полÑзоваÑÐµÐ»Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñован
Ð¾Ñ API.
- submit: СоздаÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование
+ submit: СоздаÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ
tried_contacting: Я ÑвÑзÑвалÑÑ Ñ Ð¿Ð¾Ð»ÑзоваÑелем и пÑоÑил его оÑÑановиÑÑÑÑ.
tried_waiting: Я дал доÑÑаÑоÑно вÑемени полÑзоваÑелÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½ оÑÑеагиÑовал
на Ñе ÑообÑениÑ.
- needs_view: ÐолÑзоваÑÐµÐ»Ñ Ð½ÐµÐ¾Ð±Ñ
одимо войÑи в ÑиÑÑÐµÐ¼Ñ Ð´Ð¾ Ñого, как ÑÑо блокиÑование
- бÑÐ´ÐµÑ Ð¾ÑиÑено
- back: ÐоказаÑÑ Ð²Ñе блокиÑованиÑ
+ needs_view: ÐолÑзоваÑÐµÐ»Ñ Ð½ÐµÐ¾Ð±Ñ
одимо войÑи в ÑиÑÑÐµÐ¼Ñ Ð´Ð¾ Ñого, как ÑÑа блокиÑовка
+ бÑÐ´ÐµÑ ÑнÑÑа
+ back: ÐоказаÑÑ Ð²Ñе блокиÑовки
edit:
- title: ÐÑавка блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
- heading: ÐÑавка блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}
+ title: ÐÑавка блокиÑовки полÑзоваÑÐµÐ»Ñ %{name}
+ heading: ÐÑавка блокиÑовки полÑзоваÑÐµÐ»Ñ %{name}
reason: ÐбÑÑÑниÑе, поÑÐµÐ¼Ñ %{name} бÑл заблокиÑован. ÐожалÑйÑÑа, бÑдÑÑе ÑеÑпимÑ
и поÑÑÑпайÑе ÑазÑмно, пÑедоÑÑавлÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, как можно болÑÑе инÑоÑмаÑии
о ÑиÑÑаÑии. ÐомниÑе, ÑÑо не вÑе полÑзоваÑели понимаÑÑ Ð¶Ð°Ñгон, поÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзÑйÑеÑÑ
пÑи обÑÑÑнении дилеÑанÑÑким ÑзÑком.
period: Ðа какой ÑÑок, наÑÐ¸Ð½Ð°Ñ Ñ ÑÑого моменÑа, заблокиÑоваÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾Ñ
API.
- submit: ÐбновиÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование
+ submit: ÐбновиÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ
show: ÐÑоÑмоÑÑеÑÑ ÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ
- back: ÐÑоÑмоÑÑеÑÑ Ð²Ñе блокиÑованиÑ
- needs_view: ÐозволиÑÑ Ð»Ð¸ полÑзоваÑÐµÐ»Ñ Ð²Ñ
одиÑÑ Ð² ÑиÑÑемÑ, пÑежде, Ñем блокиÑование
- бÑÐ´ÐµÑ ÑнÑÑо?
+ back: ÐÑоÑмоÑÑеÑÑ Ð²Ñе блокиÑовки
+ needs_view: ÐозволиÑÑ Ð»Ð¸ полÑзоваÑÐµÐ»Ñ Ð²Ñ
одиÑÑ Ð² ÑиÑÑемÑ, пÑежде, Ñем блокиÑовка
+ бÑÐ´ÐµÑ ÑнÑÑа?
filter:
- block_expired: ÐлокиÑование Ñже законÑилоÑÑ Ð¸ не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑедакÑиÑовано.
- block_period: ÐÑÐµÐ¼Ñ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð²ÑбÑано из знаÑений, ÑвзвоÑаÑиваÑÑегоÑÑ
- ÑпиÑка.
+ block_expired: ÐлокиÑовка Ñже законÑилаÑÑ Ð¸ не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑедакÑиÑована.
+ block_period: ÐеÑиод блокиÑовки должен бÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из знаÑений, вÑбиÑаемÑÑ
из
+ вÑпадаÑÑего ÑпиÑка.
create:
try_contacting: ÐожалÑйÑÑа, пеÑед блокиÑовкой полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð¿ÑобÑйÑе ÑвÑзаÑÑÑÑ
Ñ Ð½Ð¸Ð¼ и даÑÑ ÐµÐ¼Ñ ÑазÑмное вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð¾ÑвеÑа.
- try_waiting: ÐожалÑйÑÑа, дайÑе полÑзоваÑÐµÐ»Ñ ÑазÑмное вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð¾ÑвеÑа, пеÑед
+ try_waiting: ÐожалÑйÑÑа, дайÑе полÑзоваÑÐµÐ»Ñ ÑазÑмное вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð¾ÑвеÑа пеÑед
Ñем, как блокиÑоваÑÑ ÐµÐ³Ð¾.
- flash: ÐаблокиÑован полÑзоваÑÐµÐ»Ñ %{name}.
+ flash: Создана блокиÑовка Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{name}.
update:
- only_creator_can_edit: ТолÑко модеÑаÑоÑ, коÑоÑÑй Ñоздал ÑÑо блокиÑование, можеÑ
- пÑавиÑÑ ÐµÐ³Ð¾.
- success: ÐлокиÑование обновлено.
+ only_creator_can_edit: ТолÑко модеÑаÑоÑ, коÑоÑÑй Ñоздал ÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ, можеÑ
+ пÑавиÑÑ ÐµÑ.
+ success: ÐлокиÑовка обновлена.
index:
- title: ÐлокиÑовки ÑÑаÑÑника
- heading: СпиÑок блокиÑований полÑзоваÑелÑ
- empty: ÐлокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÑÑ Ð½Ðµ бÑли ÑозданÑ.
+ title: ÐлокиÑовки полÑзоваÑелей
+ heading: СпиÑок блокиÑовок полÑзоваÑелей
+ empty: ÐлокиÑовки еÑÑ Ð½Ðµ бÑли ÑозданÑ.
revoke:
- title: СнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование Ð´Ð»Ñ %{block_on}
- heading: ÐÑмена блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{block_on}, коÑоÑое Ñоздал %{block_by}
- time_future: ÐÑо блокиÑование законÑиÑÑÑ %{time}.
- past: ÐÑо блокиÑование законÑилоÑÑ %{time} назад и Ñже не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñменено.
- confirm: ÐÑ ÑвеÑенÑ, ÑÑо Ñ
оÑиÑе ÑнÑÑÑ ÑÑо блокиÑование?
- revoke: СнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñование!
- flash: ÐÑо блокиÑование бÑло ÑнÑÑо.
+ title: СнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð´Ð»Ñ %{block_on}
+ heading: ÐÑмена блокиÑовки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ %{block_on}, коÑоÑÑÑ Ñоздал %{block_by}
+ time_future: ÐÑа блокиÑовка законÑиÑÑÑ ÑеÑез %{time}.
+ past: ÐÑа блокиÑовка законÑилаÑÑ %{time} назад и Ñже не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñменена.
+ confirm: ÐÑ ÑвеÑенÑ, ÑÑо Ñ
оÑиÑе ÑнÑÑÑ ÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ?
+ revoke: СнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ!
+ flash: ÐÑа блокиÑовка бÑла ÑнÑÑа.
period:
one: 1 ÑаÑ
other: '%{count} ÑаÑ.'
@@ -2270,7 +2276,7 @@ ru:
confirm: ÐÑ ÑвеÑенÑ?
display_name: ÐаблокиÑованнÑй полÑзоваÑелÑ
creator_name: ÐвÑоÑ
- reason: ÐÑиÑина блокиÑованиÑ
+ reason: ÐÑиÑина блокиÑовки
status: СоÑÑоÑние
revoker_name: РазблокиÑовал
not_revoked: (не ÑазблокиÑован)
@@ -2278,21 +2284,23 @@ ru:
next: СледÑÑÑÐ°Ñ â
previous: â ÐÑедÑдÑÑаÑ
helper:
- time_future: ÐаканÑиваеÑÑÑ Ð² %{time}.
+ time_future: ÐаканÑиваеÑÑÑ ÑеÑез %{time}.
until_login: ÐкÑивно до ÑеÑ
поÑ, пока полÑзоваÑÐµÐ»Ñ Ð½Ðµ войдÑÑ Ð² ÑиÑÑемÑ.
+ time_future_and_until_login: ÐаканÑиваеÑÑÑ ÑеÑез %{time} и поÑле Ñого, как полÑзоваÑелÑ
+ воÑел в ÑиÑÑемÑ.
time_past: ÐаконÑилоÑÑ %{time} назад.
blocks_on:
- title: ÐлокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ %{name}
- heading: СпиÑок блокиÑований полÑзоваÑÐµÐ»Ñ %{name}
+ title: ÐлокиÑовки Ð´Ð»Ñ %{name}
+ heading: СпиÑок блокиÑовок полÑзоваÑÐµÐ»Ñ %{name}
empty: ' %{name} ни ÑÐ°Ð·Ñ Ð½Ðµ бÑл заблокиÑован.'
blocks_by:
- title: ÐлокиÑованиÑ, коÑоÑÑе Ñделал
- heading: СпиÑок блокиÑований, коÑоÑÑе Ñделал
+ title: ÐлокиÑовки, коÑоÑÑе Ñоздал %{name}
+ heading: СпиÑок блокиÑовок, коÑоÑÑе Ñоздал %{name}
empty: '%{name} еÑÑ Ð½Ðµ делал никакиÑ
блокиÑований.'
show:
title: '%{block_on}, наложил блокиÑовкÑ: %{block_by}'
heading: '%{block_on}, наложил блокиÑовкÑ: %{block_by}'
- time_future: ÐаканÑиваеÑÑÑ %{time}
+ time_future: ÐаканÑиваеÑÑÑ ÑеÑез %{time}
time_past: ÐаконÑилаÑÑ %{time} назад
created: Создано
ago: '%{time} назад'
@@ -2383,6 +2391,7 @@ ru:
header: Слои каÑÑÑ
notes: ÐамеÑки
data: ÐÑоÑмоÑÑ Ð´Ð°Ð½Ð½ÑÑ
каÑÑÑ
+ gps: ÐбÑедоÑÑÑпнÑе GPS-ÑÑеки
overlays: ÐополниÑелÑнÑе Ñлои Ð´Ð»Ñ ÑÑÑÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¸ÑпÑавноÑÑей каÑÑÑ
title: Слои
copyright: © УÑаÑÑники OpenStreetMap
@@ -2439,7 +2448,7 @@ ru:
no_place: Ð ÑожалениÑ, данное меÑÑо не найдено.
instructions:
continue_without_exit: ÐÑодолжиÑе по %{name}
- slight_right_without_exit: Слегка напÑаво на %{name}
+ slight_right_without_exit: ÐлавнÑй повоÑÐ¾Ñ Ð½Ð°Ð¿Ñаво на %{name}
offramp_right_without_exit: ÐÑполÑзÑйÑе ÑÑезд впÑаво на %{name}
onramp_right_without_exit: ÐовеÑниÑе напÑаво на ÑÑезде на %{name}
endofroad_right_without_exit: РконÑе доÑоги повеÑниÑе напÑаво на %{name}
@@ -2455,7 +2464,7 @@ ru:
endofroad_left_without_exit: РконÑе доÑоги повеÑниÑе налево на %{name}
merge_left_without_exit: ÐеÑеÑÑÑойÑеÑÑ Ð½Ð°Ð»ÐµÐ²Ð¾ на %{name}
fork_left_without_exit: Ðа Ñазвилке повеÑниÑе налево на %{name}
- slight_left_without_exit: Слегка влево на %{name}
+ slight_left_without_exit: ÐлавнÑй повоÑÐ¾Ñ Ð½Ð°Ð»ÐµÐ²Ð¾ на %{name}
via_point_without_exit: (ÑеÑез ÑоÑкÑ)
follow_without_exit: СледÑйÑе %{name}
roundabout_without_exit: Ðа ÑазвÑзке ÑвеÑниÑе к %{name}
@@ -2467,7 +2476,9 @@ ru:
end_oneway_without_exit: ÐÐ¾Ð½ÐµÑ Ð¾Ð´Ð½Ð¾ÑÑоÑоннего Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° %{name}
roundabout_with_exit: Ðа ÑазвÑзке вÑбеÑиÑе вÑÑ
од %{exit} на %{name}
turn_left_with_exit: Ðа кÑÑговой ÑазвÑзке повеÑниÑе налево на %{name}
+ slight_left_with_exit: Ðа кÑÑговой ÑазвÑзке плавнÑй повоÑÐ¾Ñ Ð½Ð°Ð»ÐµÐ²Ð¾ на %{name}
turn_right_with_exit: Ðа кÑÑговой ÑазвÑзке повеÑниÑе напÑаво на %{name}
+ slight_right_with_exit: Ðа кÑÑговой ÑазвÑзке плавнÑй повоÑÐ¾Ñ Ð½Ð°Ð¿Ñаво на %{name}
continue_with_exit: Ðа кÑÑговой ÑазвÑзке пÑодолжайÑе движение пÑÑмо на %{name}
unnamed: без имени
courtesy: ÐаÑÑÑÑÑ Ð¿ÑедоÑÑавлен %{link}
@@ -2479,6 +2490,13 @@ ru:
nothing_found: ÐбÑекÑов поблизоÑÑи неÑ
error: 'ÐÑибка ÑвÑзи Ñ %{server}: %{error}'
timeout: Тайм-аÑÑ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº %{server}
+ context:
+ directions_from: ÐаÑÑÑÑÑ Ð¾ÑÑÑда
+ directions_to: ÐаÑÑÑÑÑ ÑÑда
+ add_note: ÐобавиÑÑ Ð·Ð°Ð¼ÐµÑÐºÑ ÑÑда
+ show_address: ÐоказаÑÑ Ð°Ð´ÑеÑ
+ query_features: ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± обÑекÑаÑ
+ centre_map: ЦенÑÑиÑоваÑÑ ÐºÐ°ÑÑÑ
redaction:
edit:
description: ÐпиÑание
@@ -2499,16 +2517,16 @@ ru:
heading: ÐÑобÑажение иÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Â«%{title}»
title: ÐÑобÑажение иÑпÑавлениÑ
user: 'Создано:'
- edit: РедакÑиÑоваÑÑ ÑÑо иÑпÑавление
+ edit: ÐÑавиÑÑ ÑÑо иÑпÑавление
destroy: УдалиÑÑ ÑÑо иÑпÑавление
confirm: ÐÑ ÑвеÑенÑ?
create:
- flash: РедакÑÐ¸Ñ Ñоздана.
+ flash: ÐÑпÑавление Ñоздано.
update:
flash: ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑ
ÑаненÑ.
destroy:
- not_empty: РедакÑÐ¸Ñ Ð½Ðµ пÑÑÑа. ÐожалÑйÑÑа, оÑкаÑиÑе вÑе веÑÑии, пÑинадлежаÑие
- к ÑÑой ÑедакÑии пеÑед Ñдалением.
- flash: РедакÑÐ¸Ñ ÑниÑÑожена.
- error: ÐÑоизоÑла оÑибка пÑи ÑниÑÑожении ÑÑой ÑедакÑии.
+ not_empty: ÐÑпÑавление не пÑÑÑо. ÐожалÑйÑÑа, оÑмениÑе ÑкÑÑÑие вÑеÑ
веÑÑий обÑекÑов,
+ пÑинадлежаÑиÑ
к ÑÑÐ¾Ð¼Ñ Ð¸ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑед Ñдалением.
+ flash: ÐÑпÑавление ÑниÑÑожено.
+ error: ÐÑоизоÑла оÑибка пÑи ÑниÑÑожении ÑÑого иÑпÑавлениÑ.
...
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 735effe7d..d3c751e7e 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -919,7 +919,6 @@ sk:
partners_ic: Imperial College v Londýne
partners_bytemark: Bytemark Hosting
partners_partners: partneri
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ Äo potrebná údržba
databázy naÄalej prebieha.
osm_read_only: OpenStreetMap databáza je teraz len v móde ÄÃtania (bez možnosti
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 352e3b940..16322debc 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -188,6 +188,9 @@ sl:
way: pot
relation: zveza
start_rjs:
+ feature_warning: Nalaganje %{num_features}-ih znaÄilnosti, kar lahko upoÄasni
+ brskalnik ali ga naredi neodzivnega. Ali ste prepriÄani, da želite prikazati
+ te podatke?
load_data: Naloži podatke
loading: Nalaganje ...
tag_details:
@@ -195,7 +198,8 @@ sl:
wiki_link:
key: Wiki stran z opisom oznake %{key}
tag: Wiki stran z opisom oznake %{key}=%{value}
- wikipedia_link: '%{page} Älanek na Wikipediji'
+ wikidata_link: Element %{page} na strani Wikidata
+ wikipedia_link: Älanek %{page} na Wikipediji
telephone_link: PokliÄi %{phone_number}
note:
title: 'Opomba: %{id}'
@@ -235,7 +239,7 @@ sl:
saved_at: Shranjen
user: Uporabnik
comment: Komentar
- area: PodroÄje
+ area: ObmoÄje
list:
title: Paketi sprememb
title_user: Paketi sprememb uporabnika %{user}
@@ -349,9 +353,9 @@ sl:
Data Commons Open Database License (ODbL).
too_large:
advice: 'Äe zgornji izvoz spodleti, uporabite enega od spodnjih virov:'
- body: 'To podroÄje je preveliko za izvoz v OpenStreetMap XML. Prosimo, da
- se približate ali izberete manjÅ¡e obmoÄje ali pa da uporabite enega od naslednjih
- virov za obsežen prenos podatkov:'
+ body: 'To podroÄje je preveliko za izvoz v XML OpenStreetMap. Prosimo, da
+ se približate ali izberete manjÅ¡e podroÄje ali pa da uporabite enega od
+ naslednjih virov za obsežen prenos podatkov:'
planet:
title: Planet OSM
description: Redno posodabljane kopije celotne podatkovne zbirke OpenStreetMap
@@ -450,6 +454,7 @@ sl:
ferry_terminal: Trajekt
fire_hydrant: Hidrant
fire_station: Gasilska postaja
+ food_court: Prehrambeni prostor
fountain: Vodomet
fuel: Bencinska Ärpalka
gambling: Igre na sreÄo
@@ -504,12 +509,13 @@ sl:
veterinary: Veterinarska klinika
village_hall: VaÅ¡ko srediÅ¡Äe
waste_basket: Koš za odpadke
+ waste_disposal: Zabojnik za odpadke
youth_centre: Mladinski center
boundary:
administrative: Upravna meja
census: Popisna meja
national_park: Nacionalni Park
- protected_area: Zavarovano obmoÄje
+ protected_area: Zavarovano podroÄje
bridge:
aqueduct: Akvadukt
suspension: ViseÄi most
@@ -532,6 +538,7 @@ sl:
emergency:
ambulance_station: Reševalna postaja
defibrillator: Defibrilator
+ landing_site: Mesto za pristanek v sili
phone: Klic v sili
highway:
abandoned: OpuÅ¡Äena cesta
@@ -569,6 +576,7 @@ sl:
tertiary: Lokalna cesta
tertiary_link: Terciarna cesta
track: Kolovoz
+ traffic_signals: Prometna signalizacija
trail: Sled
trunk: Hitra cesta
trunk_link: PrikljuÄek na hitro cesto
@@ -586,6 +594,7 @@ sl:
city_gate: Mestna vrata
citywalls: Mestno obzidje
fort: Trdnjava
+ heritage: Kulturna dediÅ¡Äina
house: Hiša
icon: Ikona
manor: GraÅ¡Äina
@@ -608,28 +617,29 @@ sl:
brownfield: GradbiÅ¡Äe
cemetery: PokopaliÅ¡Äe
commercial: Poslovna cona
- conservation: ZaÅ¡tiÄeno podroÄje
+ conservation: ZaÅ¡Äiteno podroÄje
construction: GradbiÅ¡Äe
farm: Kmetija
farmland: Kmetijsko zemljiÅ¡Äe
farmyard: Vrt
forest: Gozd
garages: Garaže
- grass: Travnik
+ grass: Trata
greenfield: Pripravljeno za gradbiÅ¡Äe
industrial: Industrijsko podoÄje
landfill: SmetiÅ¡Äe
meadow: Travnik
- military: VojaÅ¡ko obmoÄje
+ military: VojaÅ¡ko podroÄje
mine: Minsko polje
orchard: Sadovnjak
- quarry: Dnevni kop
+ quarry: Kamnolom
railway: Železnica
- recreation_ground: Rekreacijsko obmoÄje
+ recreation_ground: Rekreacijsko podroÄje
reservoir: Zbiralnik
- residential: Stanovanjska cona
+ reservoir_watershed: Vodno zajetje
+ residential: Stanovanjsko podroÄje
retail: Trgovine
- road: ObmoÄje ceste
+ road: PodroÄje ceste
village_green: Zelenica
vineyard: Vinograd
"yes": Raba tal
@@ -638,11 +648,12 @@ sl:
bird_hide: PtiÄja opazovalnica
club: Klub
common: Javno zemljiÅ¡Äe
- fishing: Ribolovno obmoÄje
+ dog_park: Pasji park
+ fishing: Ribolovno podroÄje
fitness_centre: Fitnes center
fitness_station: Fitnes center
garden: Vrt
- golf_course: IgriÅ¡Äe za Golf
+ golf_course: IgriÅ¡Äe za golf
horse_riding: Jahanje
ice_rink: DrsaliÅ¡Äe
marina: Marina
@@ -651,7 +662,8 @@ sl:
park: Park
pitch: Å portno igriÅ¡Äe
playground: OtroÅ¡ko igriÅ¡Äe
- recreation_ground: Rekreacijsko obmoÄje
+ recreation_ground: Rekreacijsko podroÄje
+ resort: LetoviÅ¡Äe
sauna: Savna
slipway: Rampa
sports_centre: Å portni center
@@ -676,7 +688,7 @@ sl:
beach: Obala
cape: Rt
cave_entrance: Vhod v jamo
- cliff: Klif
+ cliff: PeÄina
crater: Krater
dune: PeÅ¡Äina
fell: Planina
@@ -684,6 +696,7 @@ sl:
forest: Gozd
geyser: Gejzir
glacier: Ledenik
+ grassland: Pašnik
heath: Ravnina
hill: Hrib
island: Otok
@@ -725,6 +738,7 @@ sl:
"yes": Pisarne
place:
allotments: VrtiÄki
+ block: Blok
airport: LetaliÅ¡Äe
city: Mesto
country: Država
@@ -743,11 +757,11 @@ sl:
postcode: Poštna številka
region: Regija
sea: Morje
- state: 'Država (ZDA):'
+ state: 'Zvezna država (ZDA):'
subdivision: Pododdelek
suburb: Predmestje
town: Mesto
- unincorporated_area: NikogarÅ¡nje obmoÄje
+ unincorporated_area: NikogarÅ¡nje podroÄje
village: Vas
"yes": Kraj
railway:
@@ -840,7 +854,7 @@ sl:
salon: Lepotilni salon
second_hand: Trgovina z rabljeno opremo
shoes: Trgovina s Äevlji
- shopping_centre: Nakupovalno srediÅ¡Äe
+ shopping_centre: Nakupovalni center
sports: Å portna trgovina
stationery: Papirnica
supermarket: Supermarket
@@ -939,7 +953,7 @@ sl:
vi, brezplaÄen za uporabo z odprto licenco.
intro_2_create_account: Ustvarite uporabniÅ¡ki raÄun
partners_html: Gostovanje podpira %{ucl}, %{ic} in %{bytemark}, ter ostali %{partners}.
- partners_ucl: UCL VR Center
+ partners_ucl: Center UCL VR
partners_ic: Imperial College v Londonu
partners_bytemark: Bytemark Hosting
partners_partners: partnerji
@@ -1008,9 +1022,11 @@ sl:
node_html: VozliÅ¡Äe je toÄka na zemljevidu, kot npr. restavracija
ali drevo.
way_html: Pot je Ärta ali podroÄje, kot je npr. cesta, potok,
- jezero ali stavba.
+ jezero ali zgradba.
tag_html: Oznaka je podatek o vozliÅ¡Äu ali poti, kot je npr.
ime restavracija ali omejitev hitrosti na cesti.
+ rules:
+ title: Pravila!
questions:
title: Imate kakšno vprašanja?
paragraph_1_html: |-
@@ -1044,7 +1060,10 @@ sl:
description: ZaÄnite s tem hitrim vodiÄem, ki zajema osnove OpenStreetMap.
beginners_guide:
url: http://wiki.openstreetmap.org/wiki/Sl:Beginners%27_guide
+ title: Vodnik za zaÄetnike
+ description: Vodnik za zaÄetnike, ki ga vzdržuje skupnost.
help:
+ url: https://help.openstreetmap.org/
description: Zastavite vpraÅ¡anje ali poiÅ¡Äete odgovore v OSM zbirki vpraÅ¡anj
in odgovorov.
wiki:
@@ -1156,6 +1175,7 @@ sl:
ki ste jo vi komentirali. Opomba je v bližini %{place}.'
details: VeÄ podrobnosti o opombi lahko najdete na %{url}.
changeset_comment_notification:
+ hi: Pozdravljeni, %{to_user},
greeting: Pozdravljeni,
commented:
subject_own: '[OpenStreetMap] %{commenter} je komentiral enega izmed vaših
@@ -1312,7 +1332,7 @@ sl:
- Mestna železnica
- tramvaj
cable:
- - Kabinska žiÄnica
+ - Nihalka
- sedežnica
runway:
- Vzletno-pristajalna steza
@@ -1323,15 +1343,15 @@ sl:
admin: Upravna razmejitev
forest: Gozd
wood: Pragozd
- golf: IgriÅ¡Äe za Golf
+ golf: IgriÅ¡Äe za golf
park: Park
resident: Naselje
common:
- Travniki
- travnik
- retail: Trgovsko obmoÄje
+ retail: Trgovsko podroÄje
industrial: Industrijsko podroÄje
- commercial: Poslovno obmoÄje
+ commercial: Poslovno podroÄje
heathland: GrmiÄevje
lake:
- Jezero
@@ -1601,9 +1621,10 @@ sl:
remember: 'Zapomni si me:'
lost password link: Ste pozabili geslo?
login_button: Prijava
- register now: Registriraj se
+ register now: Registrirajte se
with username: 'Že imate OpenStreetMap raÄun? Prosim, prijavite se s svojim
uporabniškim imenom in geslom:'
+ with external: 'Lahko pa uporabite prijavo tretje osebe:'
new to osm: Ste novi na OpenStreetMap?
to make changes: Äe želite spreminjati podatke na OpenStreetMap, morate imeti
raÄun.
@@ -1679,6 +1700,7 @@ sl:
kasneje v nastavitvah.
password: 'Geslo:'
confirm password: 'Potrdite geslo:'
+ use external auth: Lahko pa uporabite prijavo tretje osebe
continue: Registracija
terms accepted: Hvala za sprejem novih pogojev prispevanja!
terms declined: Žal nam je, da ste se odloÄili, da ne sprejmete novih "contributor
@@ -1708,6 +1730,7 @@ sl:
heading: Uporabnik %{user} ne obstaja
body: Oprostite, uporabnika z imenom %{user} ni. Prosimo, preverite Ärkovanje
in povezavo, ki ste jo kliknili.
+ deleted: izbrisano
view:
my diary: Moj dnevnik
new diary entry: nov vnos v dnevnik
@@ -1904,6 +1927,15 @@ sl:
auth_failure:
connection_failed: Povezava do storitve za preverjanje pristnosti ni uspela
invalid_credentials: Neveljavne poverilnice za preverjanje pristnosti
+ no_authorization_code: Ni pooblastitvene kode
+ unknown_signature_algorithm: Neznan algoritem podpisa
+ invalid_scope: Neveljaven obseg
+ auth_association:
+ heading: VaÅ¡ ID Å¡e ni povezan z raÄunom OpenStreetMap.
+ option_1: Äe ste novi v OpenStreetMapu, prosimo, ustvarite nov raÄun z uporabo
+ spodnjega obrazca.
+ option_2: Äe že imate raÄun, se lahko v njega prijavite s svojim uporabniÅ¡kim
+ imenom in geslom in ga v nastavitvah povežete s svojim ID-jem.
user_role:
filter:
not_an_administrator: Samo skrbniki lahko upravljajo vlogo uporabnika, vi pa
@@ -1979,7 +2011,7 @@ sl:
heading: Preklic blokade za %{block_on} od %{block_by}
time_future: Ta blokada se bo konÄala v %{time}.
past: Ta blokada se je konÄala pred %{time} in se ne more biti veÄ preklicati.
- confirm: Ste prepriÄani, da želite preklicati blokado?
+ confirm: Ali ste prepriÄani, da želite preklicati blokado?
revoke: PrekliÄi!
flash: Ta blokada je bila preklicana.
period:
@@ -2004,6 +2036,7 @@ sl:
helper:
time_future: KonÄa v %{time}.
until_login: Aktivna dokler uporabnik se prijavi.
+ time_future_and_until_login: KonÄa se Äez %{time} in ko se uporabnik prijavi.
time_past: Je konÄala %{time} nazaj.
blocks_on:
title: Blokade uporabnika %{name}
@@ -2018,6 +2051,8 @@ sl:
heading: '%{block_on} je blokiral %{block_by}'
time_future: KonÄa v %{time}
time_past: Je konÄala %{time} nazaj
+ created: Ustvarjeno
+ ago: '%{time} nazaj'
status: Stanje
show: Prikaži
edit: Uredi
@@ -2080,6 +2115,9 @@ sl:
center_marker: Centriraj zemljevid na oznako
paste_html: Prilepi HTML za vdelavo v spletno mesto
view_larger_map: Prikaži veÄji zemljevid
+ only_standard_layer: Samo standardno plast je mogoÄe izvoziti kot sliko
+ embed:
+ report_problem: Prijavi težavo
key:
title: KljuÄ zemljevida
tooltip: KljuÄ zemljevida
@@ -2156,14 +2194,57 @@ sl:
no_route: Ni mogoÄe najti poti med tema dvema položajema.
no_place: Žal tega kraja ni bilo mogoÄe najti.
instructions:
+ continue_without_exit: Nadaljujte po %{name}
+ slight_right_without_exit: Rahlo desno na %{name}
+ offramp_right_without_exit: Zapeljite na prikljuÄek na desni in nato na %{name}
+ onramp_right_without_exit: Na prikljuÄku zavijte desno na %{name}
+ endofroad_right_without_exit: Na koncu ceste zavijte desno na %{name}
+ merge_right_without_exit: Zapeljite rahlo desno na %{name}
+ fork_right_without_exit: Na razcepu zavijte desno na %{name}
+ turn_right_without_exit: Zavijte desno na %{name}
+ sharp_right_without_exit: Ostro desno na %{name}
+ uturn_without_exit: Polkrožno obrnite po %{name}
+ sharp_left_without_exit: Ostro levo na %{name}
+ turn_left_without_exit: Zavijte levo na %{name}
+ offramp_left_without_exit: Zapeljite na prikljuÄek na levi in nato na %{name}
+ onramp_left_without_exit: Na prikljuÄku zavijte levo na %{name}
+ endofroad_left_without_exit: Na koncu ceste zavijete levo na %{name}
+ merge_left_without_exit: Zapeljite rahlo levo na %{name}
+ fork_left_without_exit: Na razcepu zavijte levo na %{name}
+ slight_left_without_exit: Rahlo levo na %{name}
+ via_point_without_exit: (prehodna toÄka)
+ follow_without_exit: Sledite %{name}
+ roundabout_without_exit: V krožiÅ¡Äu uporabite %{name}
+ leave_roundabout_without_exit: Zapustite krožiÅ¡Äe - %{name}
+ stay_roundabout_without_exit: Ostanite v krožiÅ¡Äu - %{name}
+ start_without_exit: ZaÄnite na koncu %{name}
+ destination_without_exit: Pojdite do cilja
+ against_oneway_without_exit: Pojdite po enosmerni cesti na %{name}
+ end_oneway_without_exit: Konec enosmerne ceste na %{name}
+ roundabout_with_exit: V krožiÅ¡Äu uporabite %{exit}. izhod, da zapeljete na
+ %{name}
+ turn_left_with_exit: V krožiÅ¡Äu zavijte levo na %{name}
+ slight_left_with_exit: V krožiÅ¡Äu rahlo levo na %{name}
+ turn_right_with_exit: V krožiÅ¡Äu zavijete desno na %{name}
+ slight_right_with_exit: V krožiÅ¡Äu rahlo desno na %{name}
+ continue_with_exit: Na krožiÅ¡Äu nadaljujte naravnost na %{name}
unnamed: neimenovano
- courtesy: Navodila je ponudil %{link}
+ courtesy: Navodila prispeva %{link}
time: Äas
query:
node: VozliÅ¡Äe
way: Pot
relation: Zveza
nothing_found: ZnaÄilnosti ni bilo mogoÄe najti
+ error: 'Napaka pri povezovanju s strežnikom %{server}: %{error}'
+ timeout: Äasovna omejitev povezovanja s strežnikom %{server}
+ context:
+ directions_from: Navodila za pot od tu
+ directions_to: Navodila za pot do tu
+ add_note: Tu dodaj opombo
+ show_address: Prikaži naslov
+ query_features: PoiÅ¡Äi znaÄilnosti
+ centre_map: Premakni na sredino
redaction:
edit:
description: Opis
@@ -2192,8 +2273,8 @@ sl:
update:
flash: Spremembe shranjene.
destroy:
- not_empty: Redakcija ni prazna. Prosim od-revidirajte vse razliÄice, ki pripadajo
- tej redakciji preden jo uniÄite.
+ not_empty: Redakcija ni prazna. Prosim odrevidirajte vse razliÄice, ki pripadajo
+ tej redakciji, preden jo uniÄite.
flash: Redakcija uniÄena.
- error: PriÅ¡lo je do napake, ob uniÄevanju te redakcije.
+ error: PriÅ¡lo je do napake ob uniÄevanju te redakcije.
...
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 4ab28ea6d..57ecd45ad 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -987,7 +987,6 @@ sv:
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
databasunderhåll pågår.
osm_read_only: OpenStreetMap-databasen är skrivskyddad just nu, då nödvändigt
@@ -1366,6 +1365,7 @@ sv:
på. Noteringen är nära %{place}.'
details: Mer detaljer om anteckningen finns på %{url}.
changeset_comment_notification:
+ hi: Hej %{to_user},
greeting: Hej,
commented:
subject_own: '[OpenStreetMap] %{commenter} har kommenterat på en av dina ändringsset'
@@ -1378,6 +1378,8 @@ sv:
partial_changeset_with_comment: med kommentar '%{changeset_comment}'
partial_changeset_without_comment: utan kommentar
details: Mer detaljer om ändringssetet finns på %{url}.
+ unsubscribe: För att avsluta prenumerationen från uppdatering i denna ändringsgrupp,
+ besök %{url} och klicka på "Avprenumerera".
message:
inbox:
title: Inkorg
@@ -2445,6 +2447,8 @@ sv:
nothing_found: Inga sökresultat hittades
error: 'Problem med att kontakta %{server}: %{error}'
timeout: Timeout vid kontakt med %{server}
+ context:
+ show_address: Visa adress
redaction:
edit:
description: Beskrivning
diff --git a/config/locales/te.yml b/config/locales/te.yml
index 01b684276..bfad7e408 100644
--- a/config/locales/te.yml
+++ b/config/locales/te.yml
@@ -95,6 +95,9 @@ te:
discussion: à°à°°à±à°
node:
title: 'బిà°à°¦à±à°µà±: %{name}'
+ way:
+ title: 'దారి: %{name}'
+ history_title: 'దారి à°à°°à°¿à°¤à±à°°: %{name}'
relation:
title: 'à°¸à°à°¬à°à°§à°: %{name}'
history_title: 'à°¸à°à°¬à°à°§à°ªà± à°à°°à°¿à°¤à±à°°: %{name}'
@@ -415,6 +418,8 @@ te:
house: à°à°²à±à°²à±
houses: à°à°³à±à°³à±
island: à°¦à±à°µà°¿
+ postcode: తపాలా à°¸à°à°à±à°¤à°
+ region: à°ªà±à°°à°¾à°à°¤à°
sea: సమà±à°¦à±à°°à°
state: రాషà±à°à±à°°à°
subdivision: à°à°ªà°µà°¿à°à°¾à°à°
@@ -494,11 +499,17 @@ te:
title: à° à°ªà±à° à°à±à°°à°¿à°à°à°¿
legal_babble:
title_html: à°à°¾à°ªà±à°¹à°à±à°à±à°²à± మరియౠలà±à°¸à±à°¨à±à°¸à±
+ attribution_example:
+ title: à°à°ªà°¾à°¦à°¿à°à°ªà± à°à°¦à°¾à°¹à°°à°£
+ more_title_html: మరిà°à°¤ à°¤à±à°²à±à°¸à±à°à±à°µà°¡à°
infringement_title_html: à°à°¾à°ªà±à°¹à°à±à°à±à°² à°à°²à±à°²à°à°à°¨
+ trademarks_title_html: à°à±à°°à±à°¡à±à°®à°¾à°°à±à°à±à°²à±
welcome_page:
title: à°¸à±à°µà°¾à°à°¤à°!
whats_on_the_map:
title: à°ªà°à°à°²à± à°à°®à±à°à°¦à°¿
+ rules:
+ title: నియమాలà±!
questions:
title: à°¸à°à°¦à±à°¹à°¾à°²à±à°¨à±à°¨à°¾à°¯à°¾?
add_a_note:
@@ -532,6 +543,8 @@ te:
click_the_link: à°
ది à°®à±à°°à± à°
యితà±, మారà±à°ªà±à°¨à°¿ నిరà±à°§à°¾à°°à°¿à°à°à°¡à°¾à°¨à°¿à°à°¿ à° à°à±à°°à°¿à°à°¦à°¿ à°²à°à°à±à°¨à± à°¨à±à°à±à°à°à°¡à°¿.
note_comment_notification:
anonymous: à°
à°à±à°à°¾à°¤ వాడà±à°à°°à°¿
+ changeset_comment_notification:
+ hi: '%{to_user} à°à°¾à°°à±,'
message:
inbox:
my_inbox: నా à°à°¨à±âబాà°à±à°¸à±
@@ -869,16 +882,26 @@ te:
changesets:
show:
comment: à°µà±à°¯à°¾à°à±à°¯
+ subscribe: à°à°à°¦à°¾à°à±à°°à±
+ unsubscribe: à°à°à°¦à°¾à°µà°¿à°°à°®à°¿à°à°à±
+ hide_comment: దాà°à±
+ unhide_comment: à°à±à°ªà°¿à°à°à±
notes:
show:
hide: దాà°à±
comment_and_resolve: à°µà±à°¯à°¾à°à±à°¯à°¾à°¨à°¿à°à°à°¿ పరిషà±à°à°°à°¿à°à°à°à°¡à°¿
comment: à°µà±à°¯à°¾à°à±à°¯à°¾à°¨à°¿à°à°à°à°¡à°¿
directions:
+ directions: దిశలà±
distance: à°¦à±à°°à°
time: సమయà°
query:
relation: à°¸à°à°¬à°à°§à°
+ context:
+ directions_from: à°à°à±à°à°¡à°¿ à°¨à±à°à°¡à°¿ దిశలà±
+ directions_to: à°à°à±à°à°¡à°¿à°à°¿ దిశలà±
+ show_address: à°à°¿à°°à±à°¨à°¾à°®à°¾ à°à±à°ªà°¿à°à°à±
+ centre_map: à°à°à±à°à±à°¨à± à°ªà°à°¾à°¨à°¿à°à°¿ à°à±à°à°¦à±à°°à° à°à±à°¯à°¿
redaction:
edit:
description: వివరణ
diff --git a/config/locales/tl.yml b/config/locales/tl.yml
index eb6915e4b..d3ac510dd 100644
--- a/config/locales/tl.yml
+++ b/config/locales/tl.yml
@@ -778,7 +778,6 @@ tl:
partners_ic: Dalubhasaang Pang-imperyo Londres
partners_bytemark: Pagpapasinaya ng Bytemark
partners_partners: mga kawaksi
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nakapatay
habang isinasagawa ang mahalagang gawain ng pagpapanatili ng kalipunan ng dato.
osm_read_only: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nasa
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 9b50f41be..63d2b3a2b 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -3,6 +3,7 @@
# Export driver: phpyaml
# Author: Alerque
# Author: Alpkant
+# Author: Archaeodontosaurus
# Author: Captantrips
# Author: Emperyan
# Author: Erdemaslancan
@@ -1004,6 +1005,7 @@ tr:
alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek
title: Atıf örneÄi
contributors_title_html: Katkıcılarımız
+ infringement_title_html: Telif hakkı ihlali
welcome_page:
title: HoÅ geldiniz!
introduction_html: Dünyanın düzenlenebilir ve ücretsiz haritası OpenStreetMap'e
@@ -1071,6 +1073,8 @@ tr:
title: Forumlar
irc:
title: IRC
+ switch2osm:
+ title: switch2osm
wiki:
url: http://wiki.openstreetmap.org/
title: wiki.openstreetmap.org
@@ -1139,6 +1143,7 @@ tr:
subject_own: '[OpenStreetMap] notlarından birisini %{commenter} tarafından
yorumlandı'
changeset_comment_notification:
+ hi: Merhaba %{to_user},
greeting: Merhaba,
commented:
partial_changeset_without_comment: yorumsuz
@@ -1282,6 +1287,7 @@ tr:
private: Ãzel giriÅ
destination: Hedef noktası
construction: yapım aÅamasında yolu
+ toilets: Tuvaletler
richtext_area:
edit: Düzenle
preview: Ãn izle
@@ -1801,6 +1807,13 @@ tr:
comment: Yorum
edit_help: Haritayı sürükleyip ve düzenleme yapmak istediÄiniz konuma yakınlaÅtırdıktan
sonra buraya tıklayın.
+ context:
+ directions_from: Buradan yönlendir
+ directions_to: Buraya yönlendir
+ add_note: Burada bir not ekle
+ show_address: Adresi göster
+ query_features: Ãzellikleri göster
+ centre_map: Haritayı buraya ortala
redaction:
edit:
description: Açıklama
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 1bb10997a..772a0cfe3 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -1337,6 +1337,7 @@ uk:
бÑÐ»Ñ %{place}.'
details: ÐокладнÑÑе пÑо ноÑаÑÐºÑ %{url}.
changeset_comment_notification:
+ hi: ÐÑивÑÑ %{to_user},
greeting: ÐÑивÑÑ,
commented:
subject_own: '[OpenStreetMap] %{commenter} пÑокоменÑÑвав один з ваÑиÑ
набоÑÑв
@@ -1352,6 +1353,8 @@ uk:
details: |2-
ÐÑлÑÑе деÑалей пÑо змÑни, ÑÐºÑ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ñ Ð² %{url}.
+ unsubscribe: Щоб вÑдпиÑаÑиÑÑ Ð²Ñд Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð·Ð° Ñим набоÑом змÑн, пеÑейдÑÑÑ Ð·Ð°
+ поÑиланнÑм %{url} й наÑиÑнÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ âÐÑдпиÑаÑиÑÑâ.
message:
inbox:
title: ÐÑ
ÑднÑ
@@ -1684,6 +1687,8 @@ uk:
require_moderator:
not_a_moderator: Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи модеÑаÑоÑом Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÑÑÑ Ð´ÑÑ.
setup_user_auth:
+ blocked_zero_hour: У Ð²Ð°Ñ Ñ Ð½Ð°Ð³Ð°Ð»Ñне повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° веб-ÑайÑÑ OpenStreetMap.
+ Ðам поÑÑÑбно пÑоÑиÑаÑи повÑдомленнÑ, пеÑÑ Ð½Ñж ви зможеÑе збеÑегÑи ваÑÑ Ð·Ð¼Ñни.
blocked: ÐÐ°Ñ Ð´Ð¾ÑÑÑп до API заблоковано. ÐÑÐ´Ñ Ð»Ð°Ñка, ÑвÑйдÑÑÑ ÑеÑез веб-ÑнÑеÑÑейÑ,
Ñоб дÑзнаÑиÑÑ Ð¿Ð¾Ð´ÑобиÑÑ.
need_to_see_terms: ÐÐ°Ñ Ð´Ð¾ÑÑÑп до API ÑимÑаÑово пÑизÑпинено. ÐÑÐ´Ñ Ð»Ð°Ñка, ÑвÑйдÑÑÑ
@@ -2235,6 +2240,8 @@ uk:
helper:
time_future: Ðо закÑнÑÐµÐ½Ð½Ñ %{time}.
until_login: ÐкÑивне до ÑиÑ
пÑÑ, доки коÑиÑÑÑÐ²Ð°Ñ Ð½Ðµ ÑвÑйде в ÑиÑÑемÑ.
+ time_future_and_until_login: ÐакÑнÑÑÑÑÑÑÑ ÑеÑез %{time} Ñ Ð¿ÑÑÐ»Ñ Ð²Ñ
Ð¾Ð´Ñ ÐºÐ¾ÑиÑÑÑваÑа
+ в ÑиÑÑемÑ.
time_past: ÐакÑнÑилоÑÑ %{time} ÑомÑ.
blocks_on:
title: ÐлокÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %{name}
@@ -2440,6 +2447,13 @@ uk:
nothing_found: ÐбâÑкÑи не знайденÑ
error: 'Ðомилка звâÑÐ·ÐºÑ %{server}: %{error}'
timeout: СеÑÐ²ÐµÑ Ð½Ðµ вÑдповÑÐ´Ð°Ñ %{server}
+ context:
+ directions_from: ÐаÑÑÑÑÑ Ð·Ð²ÑдÑи
+ directions_to: ÐаÑÑÑÑÑ ÑÑди
+ add_note: ÐодаÑи ÑÑÑ Ð½Ð¾ÑаÑкÑ
+ show_address: ÐоказаÑи адÑеÑÑ
+ query_features: ÐÑÑимаÑи обâÑкÑи
+ centre_map: ЦенÑÑÑваÑи Ð¼Ð°Ð¿Ñ ÑÑÑ
redaction:
edit:
description: ÐпиÑ
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index b9281dc07..71d197d67 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -952,7 +952,6 @@ vi:
partners_ic: Äại há»c Hoà ng gia Luân Äôn
partners_bytemark: Bytemark Hosting
partners_partners: các công ty bảo trợ
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=vi
osm_offline: CÆ¡ sá» dữ liá»u OpenStreetMap Äang ngoại tuyến trong lúc Äang thá»±c
hiá»n những công viá»c bảo quản cÆ¡ sá» dữ liá»u cần thiết.
osm_read_only: CÆ¡ sá» dữ liá»u OpenStreetMap Äang bá» khóa không Äược sá»a Äá»i trong
@@ -1643,6 +1642,8 @@ vi:
require_moderator:
not_a_moderator: Chá» có các Äiá»u hà nh viên Äược phép thá»±c hiá»n tác vụ Äó.
setup_user_auth:
+ blocked_zero_hour: Bạn có tin nhắn má»i rất quan trá»ng tại trang Web OpenStreetMap.
+ Bạn phải Äá»c tin nhắn nà y trÆ°á»c khi Äược phép lÆ°u thêm thay Äá»i.
blocked: Bạn bá» chặn không Äược truy cáºp qua API. Vui lòng ÄÄng nháºp và o giao
diá»n Web Äá» biết chi tiết.
need_to_see_terms: Bạn tạm không có quyá»n truy cáºp API. Xin vui lòng ÄÄng nháºp
@@ -2184,6 +2185,7 @@ vi:
helper:
time_future: Hết hạn %{time}.
until_login: Có hiá»u lá»±c cho Äến khi ngÆ°á»i dùng ÄÄng nháºp.
+ time_future_and_until_login: Kết thúc %{time} nữa sau khi ngÆ°á»i dùng ÄÄng nháºp.
time_past: Äã hết hạn cách Äây %{time}.
blocks_on:
title: Các tác vụ cấm %{name}
@@ -2383,6 +2385,13 @@ vi:
nothing_found: Không tìm thấy yếu tỠnà o
error: 'Lá»i khi kết ná»i vá»i %{server}: %{error}'
timeout: Hết thá»i gian kết ná»i vá»i %{server}
+ context:
+ directions_from: Chá» ÄÆ°á»ng từ Äây
+ directions_to: Chá» ÄÆ°á»ng tá»i Äây
+ add_note: Thêm ghi chú tại Äây
+ show_address: Xem Äá»a chá»
+ query_features: ThÄm dò yếu tá»
+ centre_map: Táºp trung bản Äá» tại Äây
redaction:
edit:
description: Miêu tả
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 3378c085b..55fc55421 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -960,12 +960,11 @@ zh-CN:
intro_header: 欢è¿è®¿é® OpenStreetMapï¼
intro_text: OpenStreetMap æ¯ä¸ä¸ªä¸çå°å¾ï¼ç±åæ¨ä¸æ ·ç人们ææçï¼å¯ä¾æ®å¼æ¾è®¸å¯åè®®èªç±ä½¿ç¨ã
intro_2_create_account: å建ç¨æ·è´¦æ·
- partners_html: 主æºç±%{ucl}ã%{ic}ã%{bytemark}åå
¶ä»%{partners}ææ¯æã
+ partners_html: 主æºç±%{ucl}ã%{bytemark}å%{ic}ï¼ä»¥åå
¶ä»%{partners}ææ¯æã
partners_ucl: 伦æ¦å¤§å¦å¦é¢èæç°å®ä¸å¿
partners_ic: 伦æ¦å¸å½å¦é¢
partners_bytemark: Bytemark主æº
partners_partners: åä½ä¼ä¼´
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: ç±äºæ£å¨è¿è¡åºæ¬çæ°æ®åºç»´æ¤å·¥ä½ï¼OpenStreetMap æ°æ®åºç®åå¤äºè±æºç¶æã
osm_read_only: ç±äºæ£å¨è¿è¡åºæ¬çæ°æ®åºç»´æ¤å·¥ä½ï¼OpenStreetMap æ°æ®åºç®åå¤äºåªè¯»æ¨¡å¼ã
donate: éè¿ç»ç¡¬ä»¶å级åºé%{link}æ¯æ OpenStreetMapã
@@ -1539,6 +1538,7 @@ zh-CN:
require_moderator:
not_a_moderator: å¿
须为管çåæè½æ§è¡è¯¥æä½ã
setup_user_auth:
+ blocked_zero_hour: æ¨å¨OpenStreetMapç½ç«æä¸æ¡ç´§æ¥æ¶æ¯ãå¨æ¨å¯ä»¥ä¿åæ¨çç¼è¾ä¹åï¼æ¨éè¦é
读è¿æ¡æ¶æ¯ã
blocked: æ¨å¯¹ API ç访é®å·²ç»è¢«é»æ¡äºã请ç»å½å°ç½ç«ä»¥äºè§£æ´å¤ä¿¡æ¯ã
need_to_see_terms: æ¨å¯¹ API ç访é®å·²ææ¶ä¸æ¢ã请ç»å½å°ç½ç«ä»¥æ¥çè´¡ç®è
æ¡æ¬¾ãæ¨ä¸éè¦åæï¼ä½å¿
é¡»æ¥çå®ä»¬ã
oauth:
@@ -2019,6 +2019,7 @@ zh-CN:
helper:
time_future: ç»æäº %{time}ã
until_login: ç¨æ·ç»å½æ¶æ¿æ´»ã
+ time_future_and_until_login: ç»æäº%{time}ï¼å¹¶å¨ç¨æ·ç»å½ä¹åã
time_past: ç»æäº %{time} åã
blocks_on:
title: 对 %{name} çå°ç¦
@@ -2213,6 +2214,13 @@ zh-CN:
nothing_found: 没ææ¾å°ç¹å¾
error: è¿æ¥ %{server} æ¶åºéï¼%{error}
timeout: è¿æ¥ %{server} è¶
æ¶
+ context:
+ directions_from: ä»è¿éçæ示
+ directions_to: å°è¿éçæ示
+ add_note: å¨æ¤æ·»å 注é
+ show_address: æ¾ç¤ºå°å
+ query_features: æ¥è¯¢ç¹å¾
+ centre_map: ä¸å¿å°å¾å¨æ¤
redaction:
edit:
description: 说æ
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 29495539c..02de6645d 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -1559,6 +1559,7 @@ zh-TW:
require_moderator:
not_a_moderator: æ¨éè¦æ¯ç®¡ç人å¡ï¼æå¯å·è¡è©²åä½ã
setup_user_auth:
+ blocked_zero_hour: æ¨å¨OpenStreetMap網ç«æä¸åç·æ¥è¨æ¯ãå¨æ¨å²åæ¨ç編輯å
§å®¹åè«å
é±è®è©²è¨æ¯ã
blocked: æ¨å·²ç¶è¢«å°éä½¿ç¨ APIãè«ç»å
¥ç¶²é ä»é¢ä»¥ç解æ´å¤è³è¨ã
need_to_see_terms: æåå·²æ«æä¸æ¢æ¨ä½¿ç¨ API çæ¬éï¼è«ç»å
¥ç¶²é ä»é¢æ¥é±è²¢ç»è
æ¢æ¬¾ï¼æ¨ä¸éè¦åææéæ¢æ¬¾ï¼ä½å¿
é æ¥é±å®åã
oauth:
@@ -2031,6 +2032,7 @@ zh-TW:
helper:
time_future: æ¼ %{time} çµæã
until_login: çæç´è³éå使ç¨è
ç»å
¥çºæ¢ã
+ time_future_and_until_login: å¨ç¨æ¶å·²ç»å
¥å¾çµææ¼%{time}ã
time_past: æ¼ %{time} ä¹åçµæã
blocks_on:
title: å° %{name} çå°é
@@ -2224,6 +2226,13 @@ zh-TW:
nothing_found: æ¾ä¸å°åå¾µ
error: '%{server} é£ç·é¯èª¤ï¼%{error}'
timeout: '%{server} é£ç·é¾æ'
+ context:
+ directions_from: å¾é裡çè·¯ç·
+ directions_to: å°é裡çè·¯ç·
+ add_note: å¨æ¤æ·»å 註é
+ show_address: 顯示å°å
+ query_features: æ¥è©¢åå¾µ
+ centre_map: ä¸å¤®å°åå¨æ¤
redaction:
edit:
description: 說æ
diff --git a/db/migrate/20170222134109_add_user_indexes.rb b/db/migrate/20170222134109_add_user_indexes.rb
new file mode 100644
index 000000000..62330df9c
--- /dev/null
+++ b/db/migrate/20170222134109_add_user_indexes.rb
@@ -0,0 +1,6 @@
+class AddUserIndexes < ActiveRecord::Migration
+ def change
+ add_index :oauth_tokens, [:user_id]
+ add_index :client_applications, [:user_id]
+ end
+end
diff --git a/db/structure.sql b/db/structure.sql
index 63af3304d..020d5fb16 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -2,8 +2,8 @@
-- PostgreSQL database dump
--
--- Dumped from database version 9.5.4
--- Dumped by pg_dump version 9.5.4
+-- Dumped from database version 9.5.6
+-- Dumped by pg_dump version 9.5.6
SET statement_timeout = 0;
SET lock_timeout = 0;
@@ -1846,6 +1846,13 @@ CREATE UNIQUE INDEX index_changesets_subscribers_on_subscriber_id_and_changeset_
CREATE UNIQUE INDEX index_client_applications_on_key ON client_applications USING btree (key);
+--
+-- Name: index_client_applications_on_user_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_client_applications_on_user_id ON client_applications USING btree (user_id);
+
+
--
-- Name: index_diary_entry_subscriptions_on_diary_entry_id; Type: INDEX; Schema: public; Owner: -
--
@@ -1881,6 +1888,13 @@ CREATE UNIQUE INDEX index_oauth_nonces_on_nonce_and_timestamp ON oauth_nonces US
CREATE UNIQUE INDEX index_oauth_tokens_on_token ON oauth_tokens USING btree (token);
+--
+-- Name: index_oauth_tokens_on_user_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_oauth_tokens_on_user_id ON oauth_tokens USING btree (user_id);
+
+
--
-- Name: index_user_blocks_on_user_id; Type: INDEX; Schema: public; Owner: -
--
@@ -2599,6 +2613,8 @@ INSERT INTO schema_migrations (version) VALUES ('20161002153425');
INSERT INTO schema_migrations (version) VALUES ('20161011010929');
+INSERT INTO schema_migrations (version) VALUES ('20170222134109');
+
INSERT INTO schema_migrations (version) VALUES ('21');
INSERT INTO schema_migrations (version) VALUES ('22');
diff --git a/test/controllers/amf_controller_test.rb b/test/controllers/amf_controller_test.rb
index 6272f6fe2..605be4c8d 100644
--- a/test/controllers/amf_controller_test.rb
+++ b/test/controllers/amf_controller_test.rb
@@ -19,9 +19,9 @@ class AmfControllerTest < ActionController::TestCase
end
def test_getpresets
- [:public_user, :german_user].each do |id|
- user = users(id)
-
+ user_en_de = create(:user, :languages => %w(en de))
+ user_de = create(:user, :languages => %w(de))
+ [user_en_de, user_de].each do |user|
amf_content "getpresets", "/1", ["#{user.email}:test", ""]
post :amf_read
assert_response :success
@@ -460,8 +460,9 @@ class AmfControllerTest < ActionController::TestCase
assert_equal -1, result[0]
assert_match /must be logged in/, result[1]
- create(:user_block, :user => users(:blocked_user))
- amf_content "findgpx", "/1", [1, "blocked@openstreetmap.org:test"]
+ blocked_user = create(:user)
+ create(:user_block, :user => blocked_user)
+ amf_content "findgpx", "/1", [1, "#{blocked_user.email}:test"]
post :amf_read
assert_response :success
amf_parse_response
@@ -473,9 +474,10 @@ class AmfControllerTest < ActionController::TestCase
end
def test_findgpx_by_id
- trace = create(:trace, :visibility => "private", :user => users(:public_user))
+ user = create(:user)
+ trace = create(:trace, :visibility => "private", :user => user)
- amf_content "findgpx", "/1", [trace.id, "test@example.com:test"]
+ amf_content "findgpx", "/1", [trace.id, "#{user.email}:test"]
post :amf_read
assert_response :success
amf_parse_response
diff --git a/test/controllers/api_controller_test.rb b/test/controllers/api_controller_test.rb
index 540f303ed..1ad53145a 100644
--- a/test/controllers/api_controller_test.rb
+++ b/test/controllers/api_controller_test.rb
@@ -382,7 +382,7 @@ class ApiControllerTest < ActionController::TestCase
end
def test_permissions_basic_auth
- basic_authorization(users(:normal_user).email, "test")
+ basic_authorization(create(:user).email, "test")
get :permissions
assert_response :success
assert_select "osm > permissions", :count => 1 do
diff --git a/test/controllers/diary_entry_controller_test.rb b/test/controllers/diary_entry_controller_test.rb
index 268834019..49d56c4e4 100644
--- a/test/controllers/diary_entry_controller_test.rb
+++ b/test/controllers/diary_entry_controller_test.rb
@@ -1,8 +1,6 @@
require "test_helper"
class DiaryEntryControllerTest < ActionController::TestCase
- fixtures :users, :user_roles
-
include ActionView::Helpers::NumberHelper
def setup
@@ -111,7 +109,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
def test_new_form
# Now try again when logged in
- get :new, {}, { :user => users(:normal_user).id }
+ get :new, {}, { :user => create(:user) }
assert_response :success
assert_select "title", :text => /New Diary Entry/, :count => 1
assert_select "div.content-heading", :count => 1 do
@@ -138,7 +136,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
get :new, { :commit => "save",
:diary_entry => { :title => "New Title", :body => "This is a new body for the diary entry", :latitude => "1.1",
:longitude => "2.2", :language_code => "en" } },
- { :user => users(:normal_user).id }
+ { :user => create(:user).id }
end
assert_response :success
assert_template :edit
@@ -146,30 +144,32 @@ class DiaryEntryControllerTest < ActionController::TestCase
def test_new_no_body
# Now try creating a invalid diary entry with an empty body
+ user = create(:user)
assert_no_difference "DiaryEntry.count" do
post :new, { :commit => "save",
:diary_entry => { :title => "New Title", :body => "", :latitude => "1.1",
:longitude => "2.2", :language_code => "en" } },
- { :user => users(:normal_user).id }
+ { :user => user.id }
end
assert_response :success
assert_template :edit
- assert_nil UserPreference.where(:user_id => users(:normal_user).id, :k => "diary.default_language").first
+ assert_nil UserPreference.where(:user_id => user.id, :k => "diary.default_language").first
end
def test_new_post
# Now try creating a diary entry
+ user = create(:user)
assert_difference "DiaryEntry.count", 1 do
post :new, { :commit => "save",
:diary_entry => { :title => "New Title", :body => "This is a new body for the diary entry", :latitude => "1.1",
:longitude => "2.2", :language_code => "en" } },
- { :user => users(:normal_user).id }
+ { :user => user.id }
end
assert_response :redirect
- assert_redirected_to :action => :list, :display_name => users(:normal_user).display_name
+ assert_redirected_to :action => :list, :display_name => user.display_name
entry = DiaryEntry.order(:id).last
- assert_equal users(:normal_user).id, entry.user_id
+ assert_equal user.id, entry.user_id
assert_equal "New Title", entry.title
assert_equal "This is a new body for the diary entry", entry.body
assert_equal "1.1".to_f, entry.latitude
@@ -179,23 +179,24 @@ class DiaryEntryControllerTest < ActionController::TestCase
# checks if user was subscribed
assert_equal 1, entry.subscribers.length
- assert_equal "en", UserPreference.where(:user_id => users(:normal_user).id, :k => "diary.default_language").first.v
+ assert_equal "en", UserPreference.where(:user_id => user.id, :k => "diary.default_language").first.v
end
def test_new_german
create(:language, :code => "de")
+ user = create(:user)
# Now try creating a diary entry in a different language
assert_difference "DiaryEntry.count", 1 do
post :new, { :commit => "save",
:diary_entry => { :title => "New Title", :body => "This is a new body for the diary entry", :latitude => "1.1",
:longitude => "2.2", :language_code => "de" } },
- { :user => users(:normal_user).id }
+ { :user => user.id }
end
assert_response :redirect
- assert_redirected_to :action => :list, :display_name => users(:normal_user).display_name
+ assert_redirected_to :action => :list, :display_name => user.display_name
entry = DiaryEntry.order(:id).last
- assert_equal users(:normal_user).id, entry.user_id
+ assert_equal user.id, entry.user_id
assert_equal "New Title", entry.title
assert_equal "This is a new body for the diary entry", entry.body
assert_equal "1.1".to_f, entry.latitude
@@ -205,10 +206,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
# checks if user was subscribed
assert_equal 1, entry.subscribers.length
- assert_equal "de", UserPreference.where(:user_id => users(:normal_user).id, :k => "diary.default_language").first.v
+ assert_equal "de", UserPreference.where(:user_id => user.id, :k => "diary.default_language").first.v
end
def test_new_spammy
+ user = create(:user)
# Generate some spammy content
spammy_title = "Spam Spam Spam Spam Spam"
spammy_body = 1.upto(50).map { |n| "http://example.com/spam#{n}" }.join(" ")
@@ -217,34 +219,37 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_difference "DiaryEntry.count", 1 do
post :new, { :commit => "save",
:diary_entry => { :title => spammy_title, :body => spammy_body, :language_code => "en" } },
- { :user => users(:normal_user).id }
+ { :user => user.id }
end
assert_response :redirect
- assert_redirected_to :action => :list, :display_name => users(:normal_user).display_name
+ assert_redirected_to :action => :list, :display_name => user.display_name
entry = DiaryEntry.order(:id).last
- assert_equal users(:normal_user).id, entry.user_id
+ assert_equal user.id, entry.user_id
assert_equal spammy_title, entry.title
assert_equal spammy_body, entry.body
assert_equal "en", entry.language_code
- assert_equal "suspended", User.find(users(:normal_user).id).status
+ assert_equal "suspended", User.find(user.id).status
# Follow the redirect
- get :list, { :display_name => users(:normal_user).display_name }, { :user => users(:normal_user).id }
+ get :list, { :display_name => user.display_name }, { :user => user }
assert_response :redirect
assert_redirected_to :controller => :user, :action => :suspended
end
def test_edit
- entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+
+ entry = create(:diary_entry, :user => user)
# Make sure that you are redirected to the login page when you are
# not logged in, without and with the id of the entry you want to edit
get :edit, :display_name => entry.user.display_name, :id => entry.id
assert_response :redirect
- assert_redirected_to :controller => :user, :action => :login, :referer => "/user/#{entry.user.display_name}/diary/#{entry.id}/edit"
+ assert_redirected_to :controller => :user, :action => :login, :referer => "/user/#{URI.encode(entry.user.display_name)}/diary/#{entry.id}/edit"
# Verify that you get a not found error, when you pass a bogus id
- get :edit, { :display_name => entry.user.display_name, :id => 9999 }, { :user => entry.user.id }
+ get :edit, { :display_name => entry.user.display_name, :id => 9999 }, { :user => entry.user }
assert_response :not_found
assert_select "div.content-heading", :count => 1 do
assert_select "h2", :text => "No entry with the id: 9999", :count => 1
@@ -252,20 +257,20 @@ class DiaryEntryControllerTest < ActionController::TestCase
# Verify that you get redirected to view if you are not the user
# that created the entry
- get :edit, { :display_name => entry.user.display_name, :id => entry.id }, { :user => users(:public_user).id }
+ get :edit, { :display_name => entry.user.display_name, :id => entry.id }, { :user => other_user }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => entry.user.display_name, :id => entry.id
# Now pass the id, and check that you can edit it, when using the same
# user as the person who created the entry
- get :edit, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user.id }
+ get :edit, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user }
assert_response :success
assert_select "title", :text => /Edit diary entry/, :count => 1
assert_select "div.content-heading", :count => 1 do
assert_select "h1", :text => /Edit diary entry/, :count => 1
end
assert_select "div#content", :count => 1 do
- assert_select "form[action='/user/#{entry.user.display_name}/diary/#{entry.id}/edit'][method=post]", :count => 1 do
+ assert_select "form[action='/user/#{URI.encode(entry.user.display_name)}/diary/#{entry.id}/edit'][method=post]", :count => 1 do
assert_select "input#diary_entry_title[name='diary_entry[title]'][value='#{entry.title}']", :count => 1
assert_select "textarea#diary_entry_body[name='diary_entry[body]']", :text => entry.body, :count => 1
assert_select "select#diary_entry_language_code", :count => 1
@@ -292,7 +297,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_redirected_to :action => :view, :display_name => entry.user.display_name, :id => entry.id
# Now check that the new data is rendered, when logged in
- get :view, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user.id }
+ get :view, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user }
assert_response :success
assert_template "diary_entry/view"
assert_select "title", :text => /Users' diaries | /, :count => 1
@@ -307,16 +312,16 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_select "abbr[class='geo'][title='#{number_with_precision(new_latitude, :precision => 4)}; #{number_with_precision(new_longitude, :precision => 4)}']", :count => 1
# As we're not logged in, check that you cannot edit
# print @response.body
- assert_select "a[href='/user/#{entry.user.display_name}/diary/#{entry.id}/edit']", :text => "Edit this entry", :count => 1
+ assert_select "a[href='/user/#{URI.encode(entry.user.display_name)}/diary/#{entry.id}/edit']", :text => "Edit this entry", :count => 1
end
# and when not logged in as the user who wrote the entry
- get :view, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user.id }
+ get :view, { :display_name => entry.user.display_name, :id => entry.id }, { :user => entry.user }
assert_response :success
assert_template "diary_entry/view"
assert_select "title", :text => /Users' diaries | /, :count => 1
assert_select "div.content-heading", :count => 1 do
- assert_select "h2", :text => /#{users(:normal_user).display_name}'s diary/, :count => 1
+ assert_select "h2", :text => /#{entry.user.display_name}'s diary/, :count => 1
end
assert_select "div#content", :count => 1 do
assert_select "div.post_heading", :text => /#{new_title}/, :count => 1
@@ -326,39 +331,42 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_select "abbr[class=geo][title='#{number_with_precision(new_latitude, :precision => 4)}; #{number_with_precision(new_longitude, :precision => 4)}']", :count => 1
# As we're not logged in, check that you cannot edit
assert_select "li[class='hidden show_if_user_#{entry.user.id}']", :count => 1 do
- assert_select "a[href='/user/#{entry.user.display_name}/diary/#{entry.id}/edit']", :text => "Edit this entry", :count => 1
+ assert_select "a[href='/user/#{URI.encode(entry.user.display_name)}/diary/#{entry.id}/edit']", :text => "Edit this entry", :count => 1
end
end
end
def test_edit_i18n
- diary_entry = create(:diary_entry, :language_code => "en")
- get :edit, { :display_name => users(:normal_user).display_name, :id => diary_entry.id }, { :user => users(:normal_user).id }
+ user = create(:user)
+ diary_entry = create(:diary_entry, :language_code => "en", :user => user)
+ get :edit, { :display_name => user.display_name, :id => diary_entry.id }, { :user => user }
assert_response :success
assert_select "span[class=translation_missing]", false, "Missing translation in edit diary entry"
end
def test_comment
- entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+ entry = create(:diary_entry, :user => user)
# Make sure that you are denied when you are not logged in
post :comment, :display_name => entry.user.display_name, :id => entry.id
assert_response :forbidden
# Verify that you get a not found error, when you pass a bogus id
- post :comment, { :display_name => entry.user.display_name, :id => 9999 }, { :user => users(:public_user).id }
+ post :comment, { :display_name => entry.user.display_name, :id => 9999 }, { :user => other_user }
assert_response :not_found
assert_select "div.content-heading", :count => 1 do
assert_select "h2", :text => "No entry with the id: 9999", :count => 1
end
- post :subscribe, { :id => entry.id, :display_name => entry.user.display_name }, { :user => users(:normal_user).id }
+ post :subscribe, { :id => entry.id, :display_name => entry.user.display_name }, { :user => user }
# Now try an invalid comment with an empty body
assert_no_difference "ActionMailer::Base.deliveries.size" do
assert_no_difference "DiaryComment.count" do
assert_no_difference "entry.subscribers.count" do
- post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "" } }, { :user => users(:public_user).id }
+ post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "" } }, { :user => other_user }
end
end
end
@@ -369,21 +377,21 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_difference "ActionMailer::Base.deliveries.size", entry.subscribers.count do
assert_difference "DiaryComment.count", 1 do
assert_difference "entry.subscribers.count", 1 do
- post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "New comment" } }, { :user => users(:public_user).id }
+ post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "New comment" } }, { :user => other_user }
end
end
end
assert_response :redirect
assert_redirected_to :action => :view, :display_name => entry.user.display_name, :id => entry.id
email = ActionMailer::Base.deliveries.first
- assert_equal [users(:normal_user).email], email.to
- assert_equal "[OpenStreetMap] #{users(:public_user).display_name} commented on a diary entry", email.subject
+ assert_equal [user.email], email.to
+ assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject
assert_match /New comment/, email.text_part.decoded
assert_match /New comment/, email.html_part.decoded
ActionMailer::Base.deliveries.clear
comment = DiaryComment.order(:id).last
assert_equal entry.id, comment.diary_entry_id
- assert_equal users(:public_user).id, comment.user_id
+ assert_equal other_user.id, comment.user_id
assert_equal "New comment", comment.body
# Now view the diary entry, and check the new comment is present
@@ -391,16 +399,19 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_response :success
assert_select ".diary-comment", :count => 1 do
assert_select "#comment#{comment.id}", :count => 1 do
- assert_select "a[href='/user/#{users(:public_user).display_name}']", :text => users(:public_user).display_name, :count => 1
+ assert_select "a[href='/user/#{URI.encode(other_user.display_name)}']", :text => other_user.display_name, :count => 1
end
assert_select ".richtext", :text => /New comment/, :count => 1
end
end
def test_comment_spammy
+ user = create(:user)
+ other_user = create(:user)
+
# Find the entry to comment on
- entry = create(:diary_entry, :user => users(:normal_user))
- post :subscribe, { :id => entry.id, :display_name => entry.user.display_name }, { :user => users(:normal_user).id }
+ entry = create(:diary_entry, :user => user)
+ post :subscribe, { :id => entry.id, :display_name => entry.user.display_name }, { :user => user }
# Generate some spammy content
spammy_text = 1.upto(50).map { |n| "http://example.com/spam#{n}" }.join(" ")
@@ -408,25 +419,25 @@ class DiaryEntryControllerTest < ActionController::TestCase
# Try creating a spammy comment
assert_difference "ActionMailer::Base.deliveries.size", 1 do
assert_difference "DiaryComment.count", 1 do
- post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => spammy_text } }, { :user => users(:public_user).id }
+ post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => spammy_text } }, { :user => other_user }
end
end
assert_response :redirect
assert_redirected_to :action => :view, :display_name => entry.user.display_name, :id => entry.id
email = ActionMailer::Base.deliveries.first
- assert_equal [users(:normal_user).email], email.to
- assert_equal "[OpenStreetMap] #{users(:public_user).display_name} commented on a diary entry", email.subject
+ assert_equal [user.email], email.to
+ assert_equal "[OpenStreetMap] #{other_user.display_name} commented on a diary entry", email.subject
assert_match %r{http://example.com/spam}, email.text_part.decoded
assert_match %r{http://example.com/spam}, email.html_part.decoded
ActionMailer::Base.deliveries.clear
comment = DiaryComment.order(:id).last
assert_equal entry.id, comment.diary_entry_id
- assert_equal users(:public_user).id, comment.user_id
+ assert_equal other_user.id, comment.user_id
assert_equal spammy_text, comment.body
- assert_equal "suspended", User.find(users(:public_user).id).status
+ assert_equal "suspended", User.find(other_user.id).status
# Follow the redirect
- get :list, { :display_name => users(:normal_user).display_name }, { :user => users(:public_user).id }
+ get :list, { :display_name => user.display_name }, { :user => other_user }
assert_response :redirect
assert_redirected_to :controller => :user, :action => :suspended
@@ -439,7 +450,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
def test_list_all
diary_entry = create(:diary_entry)
geo_entry = create(:diary_entry, :latitude => 51.50763, :longitude => -0.10781)
- public_entry = create(:diary_entry, :user => users(:public_user))
+ public_entry = create(:diary_entry, :user => create(:user))
# Try a list of all diary entries
get :list
@@ -447,12 +458,15 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
def test_list_user
- diary_entry = create(:diary_entry, :user => users(:normal_user))
- geo_entry = create(:diary_entry, :user => users(:normal_user), :latitude => 51.50763, :longitude => -0.10781)
- _other_entry = create(:diary_entry, :user => users(:public_user))
+ user = create(:user)
+ other_user = create(:user)
+
+ diary_entry = create(:diary_entry, :user => user)
+ geo_entry = create(:diary_entry, :user => user, :latitude => 51.50763, :longitude => -0.10781)
+ _other_entry = create(:diary_entry, :user => other_user)
# Try a list of diary entries for a valid user
- get :list, :display_name => users(:normal_user).display_name
+ get :list, :display_name => user.display_name
check_diary_list diary_entry, geo_entry
# Try a list of diary entries for an invalid user
@@ -462,9 +476,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
def test_list_friends
- friend = create(:friend, :befriender => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+ friend = create(:friend, :befriender => user)
diary_entry = create(:diary_entry, :user => friend.befriendee)
- _other_entry = create(:diary_entry, :user => users(:second_public_user))
+ _other_entry = create(:diary_entry, :user => other_user)
# Try a list of diary entries for your friends when not logged in
get :list, :friends => true
@@ -472,14 +488,17 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/friends"
# Try a list of diary entries for your friends when logged in
- get :list, { :friends => true }, { :user => users(:normal_user).id }
+ get :list, { :friends => true }, { :user => user }
check_diary_list diary_entry
- get :list, { :friends => true }, { :user => users(:public_user).id }
+ get :list, { :friends => true }, { :user => other_user }
check_diary_list
end
def test_list_nearby
- diary_entry = create(:diary_entry, :user => users(:public_user))
+ user = create(:user, :home_lat => 12, :home_lon => 12)
+ nearby_user = create(:user, :home_lat => 11.9, :home_lon => 12.1)
+
+ diary_entry = create(:diary_entry, :user => user)
# Try a list of diary entries for nearby users when not logged in
get :list, :nearby => true
@@ -487,9 +506,9 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/nearby"
# Try a list of diary entries for nearby users when logged in
- get :list, { :nearby => true }, { :user => users(:german_user).id }
+ get :list, { :nearby => true }, { :user => nearby_user }
check_diary_list diary_entry
- get :list, { :nearby => true }, { :user => users(:public_user).id }
+ get :list, { :nearby => true }, { :user => user }
check_diary_list
end
@@ -556,11 +575,13 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
def test_rss_user
- create(:diary_entry, :user => users(:normal_user))
- create(:diary_entry, :user => users(:normal_user))
- create(:diary_entry, :user => users(:public_user))
+ user = create(:user)
+ other_user = create(:user)
+ create(:diary_entry, :user => user)
+ create(:diary_entry, :user => user)
+ create(:diary_entry, :user => other_user)
- get :rss, :display_name => users(:normal_user).display_name, :format => :rss
+ get :rss, :display_name => user.display_name, :format => :rss
assert_response :success, "Should be able to get a specific users diary RSS"
assert_select "rss>channel>item", :count => 2 # , "Diary entries should be filtered by user"
end
@@ -571,11 +592,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_response :not_found, "Should not be able to get a nonexisting users diary RSS"
# Try a suspended user
- get :rss, :display_name => users(:suspended_user).display_name, :format => :rss
+ get :rss, :display_name => create(:user, :suspended).display_name, :format => :rss
assert_response :not_found, "Should not be able to get a suspended users diary RSS"
# Try a deleted user
- get :rss, :display_name => users(:deleted_user).display_name, :format => :rss
+ get :rss, :display_name => create(:user, :deleted).display_name, :format => :rss
assert_response :not_found, "Should not be able to get a deleted users diary RSS"
end
@@ -587,37 +608,42 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
def test_view
+ user = create(:user)
+ suspended_user = create(:user, :suspended)
+ deleted_user = create(:user, :deleted)
+
# Try a normal entry that should work
- diary_entry = create(:diary_entry, :user => users(:normal_user))
- get :view, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ diary_entry = create(:diary_entry, :user => user)
+ get :view, :display_name => user.display_name, :id => diary_entry.id
assert_response :success
assert_template :view
# Try a deleted entry
- diary_entry_deleted = create(:diary_entry, :user => users(:normal_user), :visible => false)
- get :view, :display_name => users(:normal_user).display_name, :id => diary_entry_deleted.id
+ diary_entry_deleted = create(:diary_entry, :user => user, :visible => false)
+ get :view, :display_name => user.display_name, :id => diary_entry_deleted.id
assert_response :not_found
# Try an entry by a suspended user
- diary_entry_suspended = create(:diary_entry, :user => users(:suspended_user))
- get :view, :display_name => users(:suspended_user).display_name, :id => diary_entry_suspended.id
+ diary_entry_suspended = create(:diary_entry, :user => suspended_user)
+ get :view, :display_name => suspended_user.display_name, :id => diary_entry_suspended.id
assert_response :not_found
# Try an entry by a deleted user
- diary_entry_deleted = create(:diary_entry, :user => users(:deleted_user))
- get :view, :display_name => users(:deleted_user).display_name, :id => diary_entry_deleted.id
+ diary_entry_deleted = create(:diary_entry, :user => deleted_user)
+ get :view, :display_name => deleted_user.display_name, :id => diary_entry_deleted.id
assert_response :not_found
end
def test_view_hidden_comments
# Get a diary entry that has hidden comments
- diary_entry = create(:diary_entry)
+ user = create(:user)
+ diary_entry = create(:diary_entry, :user => user)
visible_comment = create(:diary_comment, :diary_entry => diary_entry)
- suspended_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => users(:suspended_user))
- deleted_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => users(:deleted_user))
+ suspended_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => create(:user, :suspended))
+ deleted_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => create(:user, :deleted))
hidden_comment = create(:diary_comment, :diary_entry => diary_entry, :visible => false)
- get :view, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ get :view, :display_name => user.display_name, :id => diary_entry.id
assert_response :success
assert_template :view
assert_select "div.comments" do
@@ -629,49 +655,57 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
def test_hide
+ user = create(:user)
+
# Try without logging in
- diary_entry = create(:diary_entry)
- post :hide, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ diary_entry = create(:diary_entry, :user => user)
+ post :hide, :display_name => user.display_name, :id => diary_entry.id
assert_response :forbidden
assert_equal true, DiaryEntry.find(diary_entry.id).visible
# Now try as a normal user
- post :hide, { :display_name => users(:normal_user).display_name, :id => diary_entry.id }, { :user => users(:normal_user).id }
+ post :hide, { :display_name => user.display_name, :id => diary_entry.id }, { :user => user }
assert_response :redirect
- assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ assert_redirected_to :action => :view, :display_name => user.display_name, :id => diary_entry.id
assert_equal true, DiaryEntry.find(diary_entry.id).visible
# Finally try as an administrator
- post :hide, { :display_name => users(:normal_user).display_name, :id => diary_entry.id }, { :user => users(:administrator_user).id }
+ post :hide, { :display_name => user.display_name, :id => diary_entry.id }, { :user => create(:administrator_user) }
assert_response :redirect
- assert_redirected_to :action => :list, :display_name => users(:normal_user).display_name
+ assert_redirected_to :action => :list, :display_name => user.display_name
assert_equal false, DiaryEntry.find(diary_entry.id).visible
end
def test_hidecomment
- diary_entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ administrator_user = create(:administrator_user)
+ diary_entry = create(:diary_entry, :user => user)
diary_comment = create(:diary_comment, :diary_entry => diary_entry)
# Try without logging in
- post :hidecomment, :display_name => users(:normal_user).display_name, :id => diary_entry.id, :comment => diary_comment.id
+ post :hidecomment, :display_name => user.display_name, :id => diary_entry.id, :comment => diary_comment.id
assert_response :forbidden
assert_equal true, DiaryComment.find(diary_comment.id).visible
# Now try as a normal user
- post :hidecomment, { :display_name => users(:normal_user).display_name, :id => diary_entry.id, :comment => diary_comment.id }, { :user => users(:normal_user).id }
+ post :hidecomment, { :display_name => user.display_name, :id => diary_entry.id, :comment => diary_comment.id }, { :user => user }
assert_response :redirect
- assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ assert_redirected_to :action => :view, :display_name => user.display_name, :id => diary_entry.id
assert_equal true, DiaryComment.find(diary_comment.id).visible
# Finally try as an administrator
- post :hidecomment, { :display_name => users(:normal_user).display_name, :id => diary_entry.id, :comment => diary_comment.id }, { :user => users(:administrator_user).id }
+ post :hidecomment, { :display_name => user.display_name, :id => diary_entry.id, :comment => diary_comment.id }, { :user => administrator_user }
assert_response :redirect
- assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name, :id => diary_entry.id
+ assert_redirected_to :action => :view, :display_name => user.display_name, :id => diary_entry.id
assert_equal false, DiaryComment.find(diary_comment.id).visible
end
def test_comments
+ user = create(:user)
+ other_user = create(:user)
+ suspended_user = create(:user, :suspended)
+ deleted_user = create(:user, :deleted)
# Test a user with no comments
- get :comments, :display_name => users(:normal_user).display_name
+ get :comments, :display_name => user.display_name
assert_response :success
assert_template :comments
assert_select "table.messages" do
@@ -679,9 +713,9 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
# Test a user with a comment
- create(:diary_comment, :user => users(:public_user))
+ create(:diary_comment, :user => other_user)
- get :comments, :display_name => users(:public_user).display_name
+ get :comments, :display_name => other_user.display_name
assert_response :success
assert_template :comments
assert_select "table.messages" do
@@ -689,25 +723,30 @@ class DiaryEntryControllerTest < ActionController::TestCase
end
# Test a suspended user
- get :comments, :display_name => users(:suspended_user).display_name
+ get :comments, :display_name => suspended_user.display_name
assert_response :not_found
# Test a deleted user
- get :comments, :display_name => users(:deleted_user).display_name
+ get :comments, :display_name => deleted_user.display_name
assert_response :not_found
end
def test_subscribe_success
- diary_entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+ diary_entry = create(:diary_entry, :user => user)
assert_difference "diary_entry.subscribers.count", 1 do
- post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
end
assert_response :redirect
end
def test_subscribe_fail
- diary_entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+
+ diary_entry = create(:diary_entry, :user => user)
# not signed in
assert_no_difference "diary_entry.subscribers.count" do
@@ -716,28 +755,34 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_response :forbidden
# bad diary id
- post :subscribe, { :id => 999111, :display_name => "username" }, { :user => users(:public_user).id }
+ post :subscribe, { :id => 999111, :display_name => "username" }, { :user => other_user }
assert_response :not_found
# trying to subscribe when already subscribed
- post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
assert_no_difference "diary_entry.subscribers.count" do
- post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
end
end
def test_unsubscribe_success
- diary_entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+
+ diary_entry = create(:diary_entry, :user => user)
- post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :subscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
assert_difference "diary_entry.subscribers.count", -1 do
- post :unsubscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :unsubscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
end
assert_response :redirect
end
def test_unsubscribe_fail
- diary_entry = create(:diary_entry, :user => users(:normal_user))
+ user = create(:user)
+ other_user = create(:user)
+
+ diary_entry = create(:diary_entry, :user => user)
# not signed in
assert_no_difference "diary_entry.subscribers.count" do
@@ -746,12 +791,12 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_response :forbidden
# bad diary id
- post :unsubscribe, { :id => 999111, :display_name => "username" }, { :user => users(:public_user).id }
+ post :unsubscribe, { :id => 999111, :display_name => "username" }, { :user => other_user }
assert_response :not_found
# trying to unsubscribe when not subscribed
assert_no_difference "diary_entry.subscribers.count" do
- post :unsubscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => users(:public_user).id }
+ post :unsubscribe, { :id => diary_entry.id, :display_name => diary_entry.user.display_name }, { :user => other_user }
end
end
@@ -764,7 +809,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
assert_select "div.diary_post", entries.count
entries.each do |entry|
- assert_select "a[href=?]", "/user/#{entry.user.display_name}/diary/#{entry.id}"
+ assert_select "a[href=?]", "/user/#{URI.encode(entry.user.display_name)}/diary/#{entry.id}"
end
end
end
diff --git a/test/controllers/notes_controller_test.rb b/test/controllers/notes_controller_test.rb
index ab63bbca2..a16ff3477 100644
--- a/test/controllers/notes_controller_test.rb
+++ b/test/controllers/notes_controller_test.rb
@@ -1,8 +1,6 @@
require "test_helper"
class NotesControllerTest < ActionController::TestCase
- fixtures :users, :user_roles
-
def setup
# Stub nominatim response for note locations
stub_request(:get, %r{^http://nominatim\.openstreetmap\.org/reverse\?})
@@ -250,9 +248,13 @@ class NotesControllerTest < ActionController::TestCase
assert_nil js["properties"]["comments"].last["user"]
# Ensure that emails are sent to users
+ first_user = create(:user)
+ second_user = create(:user)
+ third_user = create(:user)
+
note_with_comments_by_users = create(:note) do |note|
- create(:note_comment, :note => note, :author => users(:normal_user))
- create(:note_comment, :note => note, :author => users(:second_public_user))
+ create(:note_comment, :note => note, :author => first_user)
+ create(:note_comment, :note => note, :author => second_user)
end
assert_difference "NoteComment.count", 1 do
assert_difference "ActionMailer::Base.deliveries.size", 2 do
@@ -270,12 +272,12 @@ class NotesControllerTest < ActionController::TestCase
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_nil js["properties"]["comments"].last["user"]
- email = ActionMailer::Base.deliveries.find { |e| e.to.first == "test@openstreetmap.org" }
+ email = ActionMailer::Base.deliveries.find { |e| e.to.first == first_user.email }
assert_not_nil email
assert_equal 1, email.to.length
assert_equal "[OpenStreetMap] An anonymous user has commented on one of your notes", email.subject
- email = ActionMailer::Base.deliveries.find { |e| e.to.first == "public@OpenStreetMap.org" }
+ email = ActionMailer::Base.deliveries.find { |e| e.to.first == second_user.email }
assert_not_nil email
assert_equal 1, email.to.length
assert_equal "[OpenStreetMap] An anonymous user has commented on a note you are interested in", email.subject
@@ -294,7 +296,7 @@ class NotesControllerTest < ActionController::TestCase
ActionMailer::Base.deliveries.clear
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(third_user.email, "test")
assert_difference "NoteComment.count", 1 do
assert_difference "ActionMailer::Base.deliveries.size", 2 do
@@ -310,18 +312,18 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 4, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal third_user.display_name, js["properties"]["comments"].last["user"]
- email = ActionMailer::Base.deliveries.find { |e| e.to.first == "test@openstreetmap.org" }
+ email = ActionMailer::Base.deliveries.find { |e| e.to.first == first_user.email }
assert_not_nil email
assert_equal 1, email.to.length
- assert_equal "[OpenStreetMap] test2 has commented on one of your notes", email.subject
- assert_equal "test@openstreetmap.org", email.to.first
+ assert_equal "[OpenStreetMap] #{third_user.display_name} has commented on one of your notes", email.subject
+ assert_equal first_user.email, email.to.first
- email = ActionMailer::Base.deliveries.find { |e| e.to.first == "public@OpenStreetMap.org" }
+ email = ActionMailer::Base.deliveries.find { |e| e.to.first == second_user.email }
assert_not_nil email
assert_equal 1, email.to.length
- assert_equal "[OpenStreetMap] test2 has commented on a note you are interested in", email.subject
+ assert_equal "[OpenStreetMap] #{third_user.display_name} has commented on a note you are interested in", email.subject
get :show, :id => note_with_comments_by_users.id, :format => "json"
assert_response :success
@@ -333,7 +335,7 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 4, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal third_user.display_name, js["properties"]["comments"].last["user"]
ActionMailer::Base.deliveries.clear
end
@@ -378,11 +380,12 @@ class NotesControllerTest < ActionController::TestCase
def test_close_success
open_note_with_comment = create(:note_with_comments)
+ user = create(:user)
post :close, :id => open_note_with_comment.id, :text => "This is a close comment", :format => "json"
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(user.email, "test")
post :close, :id => open_note_with_comment.id, :text => "This is a close comment", :format => "json"
assert_response :success
@@ -394,7 +397,7 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 2, js["properties"]["comments"].count
assert_equal "closed", js["properties"]["comments"].last["action"]
assert_equal "This is a close comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal user.display_name, js["properties"]["comments"].last["user"]
get :show, :id => open_note_with_comment.id, :format => "json"
assert_response :success
@@ -406,14 +409,14 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 2, js["properties"]["comments"].count
assert_equal "closed", js["properties"]["comments"].last["action"]
assert_equal "This is a close comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal user.display_name, js["properties"]["comments"].last["user"]
end
def test_close_fail
post :close
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(create(:user).email, "test")
post :close
assert_response :bad_request
@@ -434,11 +437,12 @@ class NotesControllerTest < ActionController::TestCase
def test_reopen_success
closed_note_with_comment = create(:note_with_comments, :status => "closed", :closed_at => Time.now)
+ user = create(:user)
post :reopen, :id => closed_note_with_comment.id, :text => "This is a reopen comment", :format => "json"
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(user.email, "test")
post :reopen, :id => closed_note_with_comment.id, :text => "This is a reopen comment", :format => "json"
assert_response :success
@@ -450,7 +454,7 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 2, js["properties"]["comments"].count
assert_equal "reopened", js["properties"]["comments"].last["action"]
assert_equal "This is a reopen comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal user.display_name, js["properties"]["comments"].last["user"]
get :show, :id => closed_note_with_comment.id, :format => "json"
assert_response :success
@@ -462,7 +466,7 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 2, js["properties"]["comments"].count
assert_equal "reopened", js["properties"]["comments"].last["action"]
assert_equal "This is a reopen comment", js["properties"]["comments"].last["text"]
- assert_equal "test2", js["properties"]["comments"].last["user"]
+ assert_equal user.display_name, js["properties"]["comments"].last["user"]
end
def test_reopen_fail
@@ -471,7 +475,7 @@ class NotesControllerTest < ActionController::TestCase
post :reopen, :id => hidden_note_with_comment.id
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(create(:user).email, "test")
post :reopen, :id => 12345
assert_response :not_found
@@ -584,16 +588,18 @@ class NotesControllerTest < ActionController::TestCase
def test_destroy_success
open_note_with_comment = create(:note_with_comments)
+ user = create(:user)
+ moderator_user = create(:moderator_user)
delete :destroy, :id => open_note_with_comment.id, :text => "This is a hide comment", :format => "json"
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(user.email, "test")
delete :destroy, :id => open_note_with_comment.id, :text => "This is a hide comment", :format => "json"
assert_response :forbidden
- basic_authorization(users(:moderator_user).email, "test")
+ basic_authorization(moderator_user.email, "test")
delete :destroy, :id => open_note_with_comment.id, :text => "This is a hide comment", :format => "json"
assert_response :success
@@ -605,22 +611,25 @@ class NotesControllerTest < ActionController::TestCase
assert_equal 2, js["properties"]["comments"].count
assert_equal "hidden", js["properties"]["comments"].last["action"]
assert_equal "This is a hide comment", js["properties"]["comments"].last["text"]
- assert_equal "moderator", js["properties"]["comments"].last["user"]
+ assert_equal moderator_user.display_name, js["properties"]["comments"].last["user"]
get :show, :id => open_note_with_comment.id, :format => "json"
assert_response :gone
end
def test_destroy_fail
+ user = create(:user)
+ moderator_user = create(:moderator_user)
+
delete :destroy, :id => 12345, :format => "json"
assert_response :unauthorized
- basic_authorization(users(:public_user).email, "test")
+ basic_authorization(user.email, "test")
delete :destroy, :id => 12345, :format => "json"
assert_response :forbidden
- basic_authorization(users(:moderator_user).email, "test")
+ basic_authorization(moderator_user.email, "test")
delete :destroy, :id => 12345, :format => "json"
assert_response :not_found
@@ -939,35 +948,39 @@ class NotesControllerTest < ActionController::TestCase
end
def test_mine_success
+ first_user = create(:user)
+ second_user = create(:user)
+ moderator_user = create(:moderator_user)
+
create(:note) do |note|
- create(:note_comment, :note => note, :author => users(:normal_user))
+ create(:note_comment, :note => note, :author => first_user)
end
create(:note) do |note|
- create(:note_comment, :note => note, :author => users(:second_public_user))
+ create(:note_comment, :note => note, :author => second_user)
end
create(:note, :status => "hidden") do |note|
- create(:note_comment, :note => note, :author => users(:second_public_user))
+ create(:note_comment, :note => note, :author => second_user)
end
# Note that the table rows include a header row
- get :mine, :display_name => "test"
+ get :mine, :display_name => first_user.display_name
assert_response :success
assert_select "table.note_list tr", :count => 2
- get :mine, :display_name => "pulibc_test2"
+ get :mine, :display_name => second_user.display_name
assert_response :success
assert_select "table.note_list tr", :count => 2
get :mine, :display_name => "non-existent"
assert_response :not_found
- session[:user] = users(:moderator_user).id
+ session[:user] = moderator_user.id
- get :mine, :display_name => "test"
+ get :mine, :display_name => first_user.display_name
assert_response :success
assert_select "table.note_list tr", :count => 2
- get :mine, :display_name => "pulibc_test2"
+ get :mine, :display_name => second_user.display_name
assert_response :success
assert_select "table.note_list tr", :count => 3
diff --git a/test/controllers/site_controller_test.rb b/test/controllers/site_controller_test.rb
index e1eeac294..37f457523 100644
--- a/test/controllers/site_controller_test.rb
+++ b/test/controllers/site_controller_test.rb
@@ -172,7 +172,7 @@ class SiteControllerTest < ActionController::TestCase
# Test the right editor gets used when the user hasn't set a preference
def test_edit_without_preference
- get :edit, nil, :user => users(:public_user).id
+ get :edit, nil, :user => users(:public_user)
assert_response :success
assert_template "edit"
assert_template :partial => "_#{DEFAULT_EDITOR}", :count => 1
@@ -184,7 +184,7 @@ class SiteControllerTest < ActionController::TestCase
user.preferred_editor = "id"
user.save!
- get :edit, nil, :user => user.id
+ get :edit, nil, :user => user
assert_response :success
assert_template "edit"
assert_template :partial => "_id", :count => 1
@@ -193,7 +193,7 @@ class SiteControllerTest < ActionController::TestCase
user.preferred_editor = "potlatch2"
user.save!
- get :edit, nil, :user => user.id
+ get :edit, nil, :user => user
assert_response :success
assert_template "edit"
assert_template :partial => "_potlatch2", :count => 1
@@ -202,7 +202,7 @@ class SiteControllerTest < ActionController::TestCase
user.preferred_editor = "potlatch"
user.save!
- get :edit, nil, :user => user.id
+ get :edit, nil, :user => user
assert_response :success
assert_template "edit"
assert_template :partial => "_potlatch", :count => 1
@@ -211,29 +211,29 @@ class SiteControllerTest < ActionController::TestCase
user.preferred_editor = "remote"
user.save!
- get :edit, nil, :user => user.id
+ get :edit, nil, :user => user
assert_response :success
assert_template "index"
end
# Test the right editor gets used when the URL has an override
def test_edit_with_override
- get :edit, { :editor => "id" }, { :user => users(:public_user).id }
+ get :edit, { :editor => "id" }, { :user => users(:public_user) }
assert_response :success
assert_template "edit"
assert_template :partial => "_id", :count => 1
- get :edit, { :editor => "potlatch2" }, { :user => users(:public_user).id }
+ get :edit, { :editor => "potlatch2" }, { :user => users(:public_user) }
assert_response :success
assert_template "edit"
assert_template :partial => "_potlatch2", :count => 1
- get :edit, { :editor => "potlatch" }, { :user => users(:public_user).id }
+ get :edit, { :editor => "potlatch" }, { :user => users(:public_user) }
assert_response :success
assert_template "edit"
assert_template :partial => "_potlatch", :count => 1
- get :edit, { :editor => "remote" }, { :user => users(:public_user).id }
+ get :edit, { :editor => "remote" }, { :user => users(:public_user) }
assert_response :success
assert_template "index"
end
@@ -243,7 +243,7 @@ class SiteControllerTest < ActionController::TestCase
user = users(:public_user)
node = current_nodes(:visible_node)
- get :edit, { :node => node.id }, { :user => user.id }
+ get :edit, { :node => node.id }, { :user => user }
assert_response :success
assert_template "edit"
assert_equal 1.0, assigns(:lat)
@@ -256,7 +256,7 @@ class SiteControllerTest < ActionController::TestCase
user = users(:public_user)
way = current_ways(:visible_way)
- get :edit, { :way => way.id }, { :user => user.id }
+ get :edit, { :way => way.id }, { :user => user }
assert_response :success
assert_template "edit"
assert_equal 3.0, assigns(:lat)
@@ -271,7 +271,7 @@ class SiteControllerTest < ActionController::TestCase
n.comments.create(:author_id => user.id)
end
- get :edit, { :note => note.id }, { :user => user.id }
+ get :edit, { :note => note.id }, { :user => user }
assert_response :success
assert_template "edit"
assert_equal 1.0, assigns(:lat)
@@ -284,7 +284,7 @@ class SiteControllerTest < ActionController::TestCase
user = users(:public_user)
gpx = create(:trace, :latitude => 1, :longitude => 1)
- get :edit, { :gpx => gpx.id }, { :user => user.id }
+ get :edit, { :gpx => gpx.id }, { :user => user }
assert_response :success
assert_template "edit"
assert_equal 1.0, assigns(:lat)
@@ -317,7 +317,7 @@ class SiteControllerTest < ActionController::TestCase
assert_response :redirect
assert_redirected_to :controller => :user, :action => :login, :referer => "/welcome"
- get :welcome, nil, :user => users(:public_user).id
+ get :welcome, nil, :user => users(:public_user)
assert_response :success
assert_template "welcome"
end
@@ -377,7 +377,7 @@ class SiteControllerTest < ActionController::TestCase
# Test the id frame
def test_id
- get :id, nil, :user => users(:public_user).id
+ get :id, nil, :user => users(:public_user)
assert_response :success
assert_template "id"
assert_template :layout => false
diff --git a/test/controllers/trace_controller_test.rb b/test/controllers/trace_controller_test.rb
index f27129b42..9ef79d1fa 100644
--- a/test/controllers/trace_controller_test.rb
+++ b/test/controllers/trace_controller_test.rb
@@ -194,11 +194,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_list [trace_a]
# Should see more when we are logged in
- get :list, {}, { :user => users(:public_user).id }
+ get :list, {}, { :user => users(:public_user) }
check_trace_list [trace_d, trace_c, trace_b, trace_a]
# Again, we should see more when we are logged in
- get :list, { :tag => "London" }, { :user => users(:public_user).id }
+ get :list, { :tag => "London" }, { :user => users(:public_user) }
check_trace_list [trace_c, trace_a]
end
@@ -216,11 +216,11 @@ class TraceControllerTest < ActionController::TestCase
assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine"
# Now try when logged in
- get :mine, {}, { :user => users(:public_user).id }
+ get :mine, {}, { :user => users(:public_user) }
assert_redirected_to :controller => "trace", :action => "list", :display_name => users(:public_user).display_name
# Fetch the actual list
- get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id }
+ get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user) }
check_trace_list [trace_b]
end
@@ -241,15 +241,15 @@ class TraceControllerTest < ActionController::TestCase
check_trace_list [trace_b]
# Should still see only public ones when authenticated as another user
- get :list, { :display_name => users(:public_user).display_name }, { :user => users(:normal_user).id }
+ get :list, { :display_name => users(:public_user).display_name }, { :user => users(:normal_user) }
check_trace_list [trace_b]
# Should see all traces when authenticated as the target user
- get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id }
+ get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user) }
check_trace_list [trace_c, trace_b]
# Should only see traces with the correct tag when a tag is specified
- get :list, { :display_name => users(:public_user).display_name, :tag => "London" }, { :user => users(:public_user).id }
+ get :list, { :display_name => users(:public_user).display_name, :tag => "London" }, { :user => users(:public_user) }
check_trace_list [trace_c]
# Should get an error if the user does not exist
@@ -286,11 +286,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_view public_trace_file
# Now with some other user, which should work since the trace is public
- get :view, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ get :view, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
check_trace_view public_trace_file
# And finally we should be able to do it with the owner of the trace
- get :view, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ get :view, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
check_trace_view public_trace_file
end
@@ -304,12 +304,12 @@ class TraceControllerTest < ActionController::TestCase
assert_redirected_to :action => :list
# Now with some other user, which should not work since the trace is anon
- get :view, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user).id }
+ get :view, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user) }
assert_response :redirect
assert_redirected_to :action => :list
# And finally we should be able to do it with the owner of the trace
- get :view, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
+ get :view, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user) }
check_trace_view anon_trace_file
end
@@ -323,12 +323,12 @@ class TraceControllerTest < ActionController::TestCase
assert_redirected_to :action => :list
# Now with some other user
- get :view, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ get :view, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :redirect
assert_redirected_to :action => :list
# And finally we should not be able to view a deleted trace
- get :view, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ get :view, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :redirect
assert_redirected_to :action => :list
end
@@ -342,11 +342,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data public_trace_file
# Now with some other user, which should work since the trace is public
- get :data, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ get :data, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
check_trace_data public_trace_file
# And finally we should be able to do it with the owner of the trace
- get :data, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ get :data, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
check_trace_data public_trace_file
end
@@ -376,11 +376,11 @@ class TraceControllerTest < ActionController::TestCase
assert_response :not_found
# Now with some other user, which shouldn't work since the trace is anon
- get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user).id }
+ get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user) }
assert_response :not_found
# And finally we should be able to do it with the owner of the trace
- get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
+ get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user) }
check_trace_data anon_trace_file
end
@@ -393,11 +393,11 @@ class TraceControllerTest < ActionController::TestCase
assert_response :not_found
# Now with a trace that has never existed
- get :data, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ get :data, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :not_found
# Now with a trace that has been deleted
- get :data, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ get :data, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :not_found
end
@@ -410,11 +410,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_picture public_trace_file
# Now with some other user, which should work since the trace is public
- get :picture, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ get :picture, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
check_trace_picture public_trace_file
# And finally we should be able to do it with the owner of the trace
- get :picture, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ get :picture, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
check_trace_picture public_trace_file
end
@@ -427,11 +427,11 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden
# Now with some other user, which shouldn't work since the trace is anon
- get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user).id }
+ get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user) }
assert_response :forbidden
# And finally we should be able to do it with the owner of the trace
- get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
+ get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user) }
check_trace_picture anon_trace_file
end
@@ -442,12 +442,12 @@ class TraceControllerTest < ActionController::TestCase
assert_response :not_found
# Now with some other user, which should work since the trace is public
- get :picture, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ get :picture, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :not_found
# And finally we should not be able to do it with a deleted trace
deleted_trace_file = create(:trace, :deleted)
- get :picture, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ get :picture, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :not_found
end
@@ -460,11 +460,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_icon public_trace_file
# Now with some other user, which should work since the trace is public
- get :icon, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ get :icon, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
check_trace_icon public_trace_file
# And finally we should be able to do it with the owner of the trace
- get :icon, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ get :icon, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
check_trace_icon public_trace_file
end
@@ -477,11 +477,11 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden
# Now with some other user, which shouldn't work since the trace is anon
- get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user).id }
+ get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:normal_user) }
assert_response :forbidden
# And finally we should be able to do it with the owner of the trace
- get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
+ get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user) }
check_trace_icon anon_trace_file
end
@@ -492,12 +492,12 @@ class TraceControllerTest < ActionController::TestCase
assert_response :not_found
# Now with some other user
- get :icon, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ get :icon, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :not_found
# And finally we should not be able to do it with a deleted trace
deleted_trace_file = create(:trace, :deleted)
- get :icon, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ get :icon, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :not_found
end
@@ -510,20 +510,20 @@ class TraceControllerTest < ActionController::TestCase
# Now authenticated as a user with gps.trace.visibility set
create(:user_preference, :user => users(:public_user), :k => "gps.trace.visibility", :v => "identifiable")
- get :create, {}, { :user => users(:public_user).id }
+ get :create, {}, { :user => users(:public_user) }
assert_response :success
assert_template :create
assert_select "select#trace_visibility option[value=identifiable][selected]", 1
# Now authenticated as a user with gps.trace.public set
create(:user_preference, :user => users(:second_public_user), :k => "gps.trace.public", :v => "default")
- get :create, {}, { :user => users(:second_public_user).id }
+ get :create, {}, { :user => users(:second_public_user) }
assert_response :success
assert_template :create
assert_select "select#trace_visibility option[value=public][selected]", 1
# Now authenticated as a user with no preferences
- get :create, {}, { :user => users(:normal_user).id }
+ get :create, {}, { :user => users(:normal_user) }
assert_response :success
assert_template :create
assert_select "select#trace_visibility option[value=private][selected]", 1
@@ -542,7 +542,7 @@ class TraceControllerTest < ActionController::TestCase
# Now authenticated
create(:user_preference, :user => users(:public_user), :k => "gps.trace.visibility", :v => "identifiable")
assert_not_equal "trackable", users(:public_user).preferences.where(:k => "gps.trace.visibility").first.v
- post :create, { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }, { :user => users(:public_user).id }
+ post :create, { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }, { :user => users(:public_user) }
assert_response :redirect
assert_redirected_to :action => :list, :display_name => users(:public_user).display_name
assert_match /file has been uploaded/, flash[:notice]
@@ -557,7 +557,7 @@ class TraceControllerTest < ActionController::TestCase
assert_equal "trackable", users(:public_user).preferences.where(:k => "gps.trace.visibility").first.v
end
- # Test fetching the edit page for a trace
+ # Test fetching the edit page for a trace using GET
def test_edit_get
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
deleted_trace_file = create(:trace, :deleted, :user => users(:public_user))
@@ -568,26 +568,53 @@ class TraceControllerTest < ActionController::TestCase
assert_redirected_to :controller => :user, :action => :login, :referer => trace_edit_path(:display_name => users(:normal_user).display_name, :id => public_trace_file.id)
# Now with some other user, which should fail
- get :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ get :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
assert_response :forbidden
# Now with a trace which doesn't exist
- get :edit, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ get :edit, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :not_found
# Now with a trace which has been deleted
- get :edit, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ get :edit, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :not_found
# Finally with a trace that we are allowed to edit
- get :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ get :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
+ assert_response :success
+ end
+
+ # Test fetching the edit page for a trace using POST
+ def test_edit_post_no_details
+ public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
+ deleted_trace_file = create(:trace, :deleted, :user => users(:public_user))
+
+ # First with no auth
+ post :edit, :display_name => users(:normal_user).display_name, :id => public_trace_file.id
+ assert_response :forbidden
+
+ # Now with some other user, which should fail
+ post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
+ assert_response :forbidden
+
+ # Now with a trace which doesn't exist
+ post :edit, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
+ assert_response :not_found
+
+ # Now with a trace which has been deleted
+ post :edit, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
+ assert_response :not_found
+
+ # Finally with a trace that we are allowed to edit
+ post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
assert_response :success
end
# Test saving edits to a trace
- def test_edit_post
+ def test_edit_post_with_details
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
deleted_trace_file = create(:trace, :deleted, :user => users(:public_user))
+
# New details
new_details = { :description => "Changed description", :tagstring => "new_tag", :visibility => "private" }
@@ -596,19 +623,19 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden
# Now with some other user, which should fail
- post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id, :trace => new_details }, { :user => users(:public_user).id }
+ post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id, :trace => new_details }, { :user => users(:public_user) }
assert_response :forbidden
# Now with a trace which doesn't exist
- post :edit, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id, :trace => new_details }
+ post :edit, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user), :trace => new_details }
assert_response :not_found
# Now with a trace which has been deleted
- post :edit, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id, :trace => new_details }, { :user => users(:public_user).id }
+ post :edit, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id, :trace => new_details }, { :user => users(:public_user) }
assert_response :not_found
# Finally with a trace that we are allowed to edit
- post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id, :trace => new_details }, { :user => users(:normal_user).id }
+ post :edit, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id, :trace => new_details }, { :user => users(:normal_user) }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
trace = Trace.find(public_trace_file.id)
@@ -627,19 +654,19 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden
# Now with some other user, which should fail
- post :delete, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user).id }
+ post :delete, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:public_user) }
assert_response :forbidden
# Now with a trace which doesn't exist
- post :delete, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user).id }
+ post :delete, { :display_name => users(:public_user).display_name, :id => 0 }, { :user => users(:public_user) }
assert_response :not_found
# Now with a trace has already been deleted
- post :delete, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user).id }
+ post :delete, { :display_name => users(:public_user).display_name, :id => deleted_trace_file.id }, { :user => users(:public_user) }
assert_response :not_found
# Finally with a trace that we are allowed to delete
- post :delete, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user).id }
+ post :delete, { :display_name => users(:normal_user).display_name, :id => public_trace_file.id }, { :user => users(:normal_user) }
assert_response :redirect
assert_redirected_to :action => :list, :display_name => users(:normal_user).display_name
trace = Trace.find(public_trace_file.id)
diff --git a/test/controllers/user_controller_test.rb b/test/controllers/user_controller_test.rb
index 027618631..87fb99a6f 100644
--- a/test/controllers/user_controller_test.rb
+++ b/test/controllers/user_controller_test.rb
@@ -768,7 +768,7 @@ class UserControllerTest < ActionController::TestCase
assert_redirected_to :controller => :user, :action => "login", :referer => "/user/test/account"
# Make sure that you are blocked when not logged in as the right user
- get :account, { :display_name => user.display_name }, { :user => users(:public_user).id }
+ get :account, { :display_name => user.display_name }, { :user => users(:public_user) }
assert_response :forbidden
# Make sure we get the page when we are logged in as the right user
@@ -778,7 +778,7 @@ class UserControllerTest < ActionController::TestCase
# Updating the description should work
user.description = "new description"
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -787,7 +787,7 @@ class UserControllerTest < ActionController::TestCase
# Changing to a invalid editor should fail
user.preferred_editor = "unknown"
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select ".notice", false
@@ -796,7 +796,7 @@ class UserControllerTest < ActionController::TestCase
# Changing to a valid editor should work
user.preferred_editor = "potlatch2"
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -805,7 +805,7 @@ class UserControllerTest < ActionController::TestCase
# Changing to the default editor should work
user.preferred_editor = "default"
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -814,7 +814,7 @@ class UserControllerTest < ActionController::TestCase
# Changing to an uploaded image should work
image = Rack::Test::UploadedFile.new("test/gpx/fixtures/a.gif", "image/gif")
- post :account, { :display_name => user.display_name, :image_action => "new", :user => user.attributes.merge(:image => image) }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :image_action => "new", :user => user.attributes.merge(:image => image) }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -822,7 +822,7 @@ class UserControllerTest < ActionController::TestCase
assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked][value=?]", "keep"
# Changing to a gravatar image should work
- post :account, { :display_name => user.display_name, :image_action => "gravatar", :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :image_action => "gravatar", :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -830,7 +830,7 @@ class UserControllerTest < ActionController::TestCase
assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked][value=?]", "gravatar"
# Removing the image should work
- post :account, { :display_name => user.display_name, :image_action => "delete", :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :image_action => "delete", :user => user.attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -838,13 +838,13 @@ class UserControllerTest < ActionController::TestCase
assert_select "form#accountForm > fieldset > div.form-row.accountImage input[name=image_action][checked]", false
# Adding external authentication should redirect to the auth provider
- post :account, { :display_name => user.display_name, :user => user.attributes.merge(:auth_provider => "openid", :auth_uid => "gmail.com") }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes.merge(:auth_provider => "openid", :auth_uid => "gmail.com") }, { :user => user }
assert_response :redirect
assert_redirected_to auth_path(:provider => "openid", :openid_url => "https://www.google.com/accounts/o8/id", :origin => "/user/#{user.display_name}/account")
# Changing name to one that exists should fail
new_attributes = user.attributes.dup.merge(:display_name => users(:public_user).display_name)
- post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select ".notice", false
@@ -853,7 +853,7 @@ class UserControllerTest < ActionController::TestCase
# Changing name to one that exists should fail, regardless of case
new_attributes = user.attributes.dup.merge(:display_name => users(:public_user).display_name.upcase)
- post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select ".notice", false
@@ -862,7 +862,7 @@ class UserControllerTest < ActionController::TestCase
# Changing name to one that doesn't exist should work
new_attributes = user.attributes.dup.merge(:display_name => "new tester")
- post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => new_attributes }, { :user => user }
assert_response :success
assert_template :account
assert_select "div#errorExplanation", false
@@ -875,7 +875,7 @@ class UserControllerTest < ActionController::TestCase
# Changing email to one that exists should fail
user.new_email = users(:public_user).email
assert_no_difference "ActionMailer::Base.deliveries.size" do
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
end
assert_response :success
assert_template :account
@@ -886,7 +886,7 @@ class UserControllerTest < ActionController::TestCase
# Changing email to one that exists should fail, regardless of case
user.new_email = users(:public_user).email.upcase
assert_no_difference "ActionMailer::Base.deliveries.size" do
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
end
assert_response :success
assert_template :account
@@ -897,7 +897,7 @@ class UserControllerTest < ActionController::TestCase
# Changing email to one that doesn't exist should work
user.new_email = "new_tester@example.com"
assert_difference "ActionMailer::Base.deliveries.size", 1 do
- post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user.id }
+ post :account, { :display_name => user.display_name, :user => user.attributes }, { :user => user }
end
assert_response :success
assert_template :account
@@ -1045,6 +1045,7 @@ class UserControllerTest < ActionController::TestCase
def test_api_details
create(:message, :read, :recipient => users(:normal_user))
+ create(:message, :sender => users(:normal_user))
# check that nothing is returned when not logged in
get :api_details
@@ -1137,7 +1138,7 @@ class UserControllerTest < ActionController::TestCase
assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# When logged in a GET should get a confirmation page
- get :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+ get :make_friend, { :display_name => friend.display_name }, { :user => user }
assert_response :success
assert_template :make_friend
assert_select "form" do
@@ -1148,7 +1149,7 @@ class UserControllerTest < ActionController::TestCase
# When logged in a POST should add the friendship
assert_difference "ActionMailer::Base.deliveries.size", 1 do
- post :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+ post :make_friend, { :display_name => friend.display_name }, { :user => user }
end
assert_redirected_to user_path(:display_name => friend.display_name)
assert_match /is now your friend/, flash[:notice]
@@ -1160,7 +1161,7 @@ class UserControllerTest < ActionController::TestCase
# A second POST should report that the friendship already exists
assert_no_difference "ActionMailer::Base.deliveries.size" do
- post :make_friend, { :display_name => friend.display_name }, { :user => user.id }
+ post :make_friend, { :display_name => friend.display_name }, { :user => user }
end
assert_redirected_to user_path(:display_name => friend.display_name)
assert_match /You are already friends with/, flash[:warning]
@@ -1176,7 +1177,7 @@ class UserControllerTest < ActionController::TestCase
assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# The GET should preserve any referer
- get :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+ get :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
assert_response :success
assert_template :make_friend
assert_select "form" do
@@ -1187,7 +1188,7 @@ class UserControllerTest < ActionController::TestCase
# When logged in a POST should add the friendship and refer us
assert_difference "ActionMailer::Base.deliveries.size", 1 do
- post :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+ post :make_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
end
assert_redirected_to "/test"
assert_match /is now your friend/, flash[:notice]
@@ -1200,7 +1201,7 @@ class UserControllerTest < ActionController::TestCase
def test_make_friend_unkown_user
# Should error when a bogus user is specified
- get :make_friend, { :display_name => "No Such User" }, { :user => users(:normal_user).id }
+ get :make_friend, { :display_name => "No Such User" }, { :user => users(:normal_user) }
assert_response :not_found
assert_template :no_such_user
end
@@ -1224,7 +1225,7 @@ class UserControllerTest < ActionController::TestCase
assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# When logged in a GET should get a confirmation page
- get :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+ get :remove_friend, { :display_name => friend.display_name }, { :user => user }
assert_response :success
assert_template :remove_friend
assert_select "form" do
@@ -1234,13 +1235,13 @@ class UserControllerTest < ActionController::TestCase
assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# When logged in a POST should remove the friendship
- post :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+ post :remove_friend, { :display_name => friend.display_name }, { :user => user }
assert_redirected_to user_path(:display_name => friend.display_name)
assert_match /was removed from your friends/, flash[:notice]
assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# A second POST should report that the friendship does not exist
- post :remove_friend, { :display_name => friend.display_name }, { :user => user.id }
+ post :remove_friend, { :display_name => friend.display_name }, { :user => user }
assert_redirected_to user_path(:display_name => friend.display_name)
assert_match /is not one of your friends/, flash[:error]
assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
@@ -1256,7 +1257,7 @@ class UserControllerTest < ActionController::TestCase
assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# The GET should preserve any referer
- get :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+ get :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
assert_response :success
assert_template :remove_friend
assert_select "form" do
@@ -1266,7 +1267,7 @@ class UserControllerTest < ActionController::TestCase
assert Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
# When logged in a POST should remove the friendship and refer
- post :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user.id }
+ post :remove_friend, { :display_name => friend.display_name, :referer => "/test" }, { :user => user }
assert_redirected_to "/test"
assert_match /was removed from your friends/, flash[:notice]
assert_nil Friend.where(:user_id => user.id, :friend_user_id => friend.id).first
@@ -1274,7 +1275,7 @@ class UserControllerTest < ActionController::TestCase
def test_remove_friend_unkown_user
# Should error when a bogus user is specified
- get :remove_friend, { :display_name => "No Such User" }, { :user => users(:normal_user).id }
+ get :remove_friend, { :display_name => "No Such User" }, { :user => users(:normal_user) }
assert_response :not_found
assert_template :no_such_user
end
@@ -1286,12 +1287,12 @@ class UserControllerTest < ActionController::TestCase
assert_redirected_to :action => :login, :referer => set_status_user_path(:status => "suspended")
# Now try as a normal user
- get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user).id }
+ get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user) }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
# Finally try as an administrator
- get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user).id }
+ get :set_status, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user) }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
assert_equal "suspended", User.find(users(:normal_user).id).status
@@ -1304,12 +1305,12 @@ class UserControllerTest < ActionController::TestCase
assert_redirected_to :action => :login, :referer => delete_user_path(:status => "suspended")
# Now try as a normal user
- get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user).id }
+ get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:normal_user) }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
# Finally try as an administrator
- get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user).id }
+ get :delete, { :display_name => users(:normal_user).display_name, :status => "suspended" }, { :user => users(:administrator_user) }
assert_response :redirect
assert_redirected_to :action => :view, :display_name => users(:normal_user).display_name
diff --git a/test/factories/changeset_comments.rb b/test/factories/changeset_comments.rb
index 5fb262184..d12c1b653 100644
--- a/test/factories/changeset_comments.rb
+++ b/test/factories/changeset_comments.rb
@@ -6,7 +6,6 @@ FactoryGirl.define do
# FIXME: needs changeset factory
changeset_id 3
- # FIXME: needs user factory
- author_id 1
+ association :author, :factory => :user
end
end
diff --git a/test/factories/diary_comments.rb b/test/factories/diary_comments.rb
index 810bd2f7a..2d54f273e 100644
--- a/test/factories/diary_comments.rb
+++ b/test/factories/diary_comments.rb
@@ -3,8 +3,6 @@ FactoryGirl.define do
sequence(:body) { |n| "This is diary comment #{n}" }
diary_entry
-
- # Fixme requires User Factory
- user_id 1
+ user
end
end
diff --git a/test/factories/diary_entries.rb b/test/factories/diary_entries.rb
index d00a97dc5..666a37ee8 100644
--- a/test/factories/diary_entries.rb
+++ b/test/factories/diary_entries.rb
@@ -3,7 +3,6 @@ FactoryGirl.define do
sequence(:title) { |n| "Diary entry #{n}" }
sequence(:body) { |n| "This is diary entry #{n}" }
- # Fixme requires User Factory
- user_id 1
+ user
end
end
diff --git a/test/factories/friends.rb b/test/factories/friends.rb
index 46b14a39d..749846edb 100644
--- a/test/factories/friends.rb
+++ b/test/factories/friends.rb
@@ -1,7 +1,6 @@
FactoryGirl.define do
factory :friend do
- # Fixme requires User Factory
- user_id 1
- friend_user_id 2
+ association :befriender, :factory => :user
+ association :befriendee, :factory => :user
end
end
diff --git a/test/factories/messages.rb b/test/factories/messages.rb
index 75e65cdbf..9d9c30a48 100644
--- a/test/factories/messages.rb
+++ b/test/factories/messages.rb
@@ -4,11 +4,8 @@ FactoryGirl.define do
sequence(:body) { |n| "Body text for message #{n}" }
sent_on Time.now
- # FIXME: needs user factory
- from_user_id 1
-
- # FIXME: needs user factory
- to_user_id 2
+ association :sender, :factory => :user
+ association :recipient, :factory => :user
trait :unread do
message_read false
diff --git a/test/factories/traces.rb b/test/factories/traces.rb
index 66f810468..76fd90590 100644
--- a/test/factories/traces.rb
+++ b/test/factories/traces.rb
@@ -3,8 +3,7 @@ FactoryGirl.define do
sequence(:name) { |n| "Trace #{n}.gpx" }
sequence(:description) { |n| "This is trace #{n}" }
- # Fixme requires User Factory
- user_id 1
+ user
timestamp Time.now
inserted true
diff --git a/test/factories/user.rb b/test/factories/user.rb
index 9ec4e2030..802fedd91 100644
--- a/test/factories/user.rb
+++ b/test/factories/user.rb
@@ -4,6 +4,12 @@ FactoryGirl.define do
sequence(:display_name) { |n| "User #{n}" }
pass_crypt Digest::MD5.hexdigest("test")
+ # These attributes are not the defaults, but in most tests we want
+ # a 'normal' user who can log in without being redirected etc.
+ status "active"
+ terms_seen true
+ data_public true
+
trait :with_home_location do
home_lat { rand(-90.0...90.0) }
home_lon { rand(-180.0...180.0) }
diff --git a/test/factories/user_blocks.rb b/test/factories/user_blocks.rb
index b73e599b8..8f7edaf6e 100644
--- a/test/factories/user_blocks.rb
+++ b/test/factories/user_blocks.rb
@@ -3,11 +3,8 @@ FactoryGirl.define do
sequence(:reason) { |n| "User Block #{n}" }
ends_at Time.now + 1.day
- # FIXME: requires User factory
- user_id 13
-
- # FIXME: requires User factory
- creator_id 15
+ user
+ association :creator, :factory => :moderator_user
trait :needs_view do
needs_view true
diff --git a/test/factories/user_preferences.rb b/test/factories/user_preferences.rb
index 552cfcd75..e6f0d6b87 100644
--- a/test/factories/user_preferences.rb
+++ b/test/factories/user_preferences.rb
@@ -3,7 +3,6 @@ FactoryGirl.define do
sequence(:k) { |n| "Key #{n}" }
sequence(:v) { |n| "Value #{n}" }
- # FIXME: needs user factory
- user_id 1
+ user
end
end
diff --git a/test/helpers/user_blocks_helper_test.rb b/test/helpers/user_blocks_helper_test.rb
new file mode 100644
index 000000000..16f83ec89
--- /dev/null
+++ b/test/helpers/user_blocks_helper_test.rb
@@ -0,0 +1,16 @@
+require "test_helper"
+
+class UserBlocksHelperTest < ActionView::TestCase
+ include ApplicationHelper
+
+ def test_block_status
+ block = create(:user_block, :needs_view, :ends_at => Time.now.getutc)
+ assert_equal "Active until the user logs in.", block_status(block)
+
+ block = create(:user_block, :needs_view, :ends_at => Time.now.getutc + 1.hour)
+ assert_match %r{^Ends in about 1 hour and after the user has logged in\.$}, block_status(block)
+
+ block = create(:user_block, :ends_at => Time.now.getutc + 1.hour)
+ assert_match %r{^Ends in about 1 hour\.$}, block_status(block)
+ end
+end
diff --git a/test/models/diary_comment_test.rb b/test/models/diary_comment_test.rb
index 162cfa833..c40d5eb03 100644
--- a/test/models/diary_comment_test.rb
+++ b/test/models/diary_comment_test.rb
@@ -1,8 +1,6 @@
require "test_helper"
class DiaryCommentTest < ActiveSupport::TestCase
- fixtures :users
-
def setup
# Create the default language for diary entries
create(:language, :code => "en")
diff --git a/test/models/diary_entry_test.rb b/test/models/diary_entry_test.rb
index 6c9a75443..76e8bbbe0 100644
--- a/test/models/diary_entry_test.rb
+++ b/test/models/diary_entry_test.rb
@@ -1,8 +1,6 @@
require "test_helper"
class DiaryEntryTest < ActiveSupport::TestCase
- fixtures :users
-
def setup
# Create the default language for diary entries
create(:language, :code => "en")
diff --git a/test/models/user_preference_test.rb b/test/models/user_preference_test.rb
index c61bd607d..6f09d21c4 100644
--- a/test/models/user_preference_test.rb
+++ b/test/models/user_preference_test.rb
@@ -7,7 +7,7 @@ class UserPreferenceTest < ActiveSupport::TestCase
def test_add_duplicate_preference
up = create(:user_preference)
new_up = UserPreference.new
- new_up.user = users(:normal_user)
+ new_up.user = up.user
new_up.k = up.k
new_up.v = "some other value"
assert_not_equal new_up.v, up.v
diff --git a/vendor/assets/leaflet/leaflet.contextmenu.css b/vendor/assets/leaflet/leaflet.contextmenu.css
new file mode 100644
index 000000000..0b5e2defc
--- /dev/null
+++ b/vendor/assets/leaflet/leaflet.contextmenu.css
@@ -0,0 +1,54 @@
+.leaflet-contextmenu {
+ display: none;
+ box-shadow: 0 1px 7px rgba(0,0,0,0.4);
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ padding: 4px 0;
+ background-color: #fff;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item {
+ display: block;
+ color: #222;
+ font-size: 12px;
+ line-height: 20px;
+ text-decoration: none;
+ padding: 0 12px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ cursor: default;
+ outline: none;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item-disabled {
+ opacity: 0.5;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item.over {
+ background-color: #f4f4f4;
+ border-top: 1px solid #f0f0f0;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item-disabled.over {
+ background-color: inherit;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+}
+
+.leaflet-contextmenu-icon {
+ margin: 2px 8px 0 0;
+ width: 16px;
+ height: 16px;
+ float: left;
+ border: 0;
+}
+
+.leaflet-contextmenu-separator {
+ border-bottom: 1px solid #ccc;
+ margin: 5px 0;
+}
diff --git a/vendor/assets/leaflet/leaflet.contextmenu.js b/vendor/assets/leaflet/leaflet.contextmenu.js
new file mode 100644
index 000000000..a9b011d95
--- /dev/null
+++ b/vendor/assets/leaflet/leaflet.contextmenu.js
@@ -0,0 +1,580 @@
+/*
+ Leaflet.contextmenu, a context menu for Leaflet.
+ (c) 2015, Adam Ratcliffe, GeoSmart Maps Limited
+
+ @preserve
+*/
+
+(function(factory) {
+ // Packaging/modules magic dance
+ var L;
+ if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['leaflet'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ // Node/CommonJS
+ L = require('leaflet');
+ module.exports = factory(L);
+ } else {
+ // Browser globals
+ if (typeof window.L === 'undefined') {
+ throw new Error('Leaflet must be loaded first');
+ }
+ factory(window.L);
+ }
+})(function(L) {
+L.Map.mergeOptions({
+ contextmenuItems: []
+});
+
+L.Map.ContextMenu = L.Handler.extend({
+ _touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart',
+
+ statics: {
+ BASE_CLS: 'leaflet-contextmenu'
+ },
+
+ initialize: function (map) {
+ L.Handler.prototype.initialize.call(this, map);
+
+ this._items = [];
+ this._visible = false;
+
+ var container = this._container = L.DomUtil.create('div', L.Map.ContextMenu.BASE_CLS, map._container);
+ container.style.zIndex = 10000;
+ container.style.position = 'absolute';
+
+ if (map.options.contextmenuWidth) {
+ container.style.width = map.options.contextmenuWidth + 'px';
+ }
+
+ this._createItems();
+
+ L.DomEvent
+ .on(container, 'click', L.DomEvent.stop)
+ .on(container, 'mousedown', L.DomEvent.stop)
+ .on(container, 'dblclick', L.DomEvent.stop)
+ .on(container, 'contextmenu', L.DomEvent.stop);
+ },
+
+ addHooks: function () {
+ var container = this._map.getContainer();
+
+ L.DomEvent
+ .on(container, 'mouseleave', this._hide, this)
+ .on(document, 'keydown', this._onKeyDown, this);
+
+ if (L.Browser.touch) {
+ L.DomEvent.on(document, this._touchstart, this._hide, this);
+ }
+
+ this._map.on({
+ contextmenu: this._show,
+ mousedown: this._hide,
+ movestart: this._hide,
+ zoomstart: this._hide
+ }, this);
+ },
+
+ removeHooks: function () {
+ var container = this._map.getContainer();
+
+ L.DomEvent
+ .off(container, 'mouseleave', this._hide, this)
+ .off(document, 'keydown', this._onKeyDown, this);
+
+ if (L.Browser.touch) {
+ L.DomEvent.off(document, this._touchstart, this._hide, this);
+ }
+
+ this._map.off({
+ contextmenu: this._show,
+ mousedown: this._hide,
+ movestart: this._hide,
+ zoomstart: this._hide
+ }, this);
+ },
+
+ showAt: function (point, data) {
+ if (point instanceof L.LatLng) {
+ point = this._map.latLngToContainerPoint(point);
+ }
+ this._showAtPoint(point, data);
+ },
+
+ hide: function () {
+ this._hide();
+ },
+
+ addItem: function (options) {
+ return this.insertItem(options);
+ },
+
+ insertItem: function (options, index) {
+ index = index !== undefined ? index: this._items.length;
+
+ var item = this._createItem(this._container, options, index);
+
+ this._items.push(item);
+
+ this._sizeChanged = true;
+
+ this._map.fire('contextmenu.additem', {
+ contextmenu: this,
+ el: item.el,
+ index: index
+ });
+
+ return item.el;
+ },
+
+ removeItem: function (item) {
+ var container = this._container;
+
+ if (!isNaN(item)) {
+ item = container.children[item];
+ }
+
+ if (item) {
+ this._removeItem(L.Util.stamp(item));
+
+ this._sizeChanged = true;
+
+ this._map.fire('contextmenu.removeitem', {
+ contextmenu: this,
+ el: item
+ });
+ }
+ },
+
+ removeAllItems: function () {
+ var item;
+
+ while (this._container.children.length) {
+ item = this._container.children[0];
+ this._removeItem(L.Util.stamp(item));
+ }
+ },
+
+ hideAllItems: function () {
+ var item, i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+ item.el.style.display = 'none';
+ }
+ },
+
+ showAllItems: function () {
+ var item, i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+ item.el.style.display = '';
+ }
+ },
+
+ setDisabled: function (item, disabled) {
+ var container = this._container,
+ itemCls = L.Map.ContextMenu.BASE_CLS + '-item';
+
+ if (!isNaN(item)) {
+ item = container.children[item];
+ }
+
+ if (item && L.DomUtil.hasClass(item, itemCls)) {
+ if (disabled) {
+ L.DomUtil.addClass(item, itemCls + '-disabled');
+ this._map.fire('contextmenu.disableitem', {
+ contextmenu: this,
+ el: item
+ });
+ } else {
+ L.DomUtil.removeClass(item, itemCls + '-disabled');
+ this._map.fire('contextmenu.enableitem', {
+ contextmenu: this,
+ el: item
+ });
+ }
+ }
+ },
+
+ isVisible: function () {
+ return this._visible;
+ },
+
+ _createItems: function () {
+ var itemOptions = this._map.options.contextmenuItems,
+ item,
+ i, l;
+
+ for (i = 0, l = itemOptions.length; i < l; i++) {
+ this._items.push(this._createItem(this._container, itemOptions[i]));
+ }
+ },
+
+ _createItem: function (container, options, index) {
+ if (options.separator || options === '-') {
+ return this._createSeparator(container, index);
+ }
+
+ var itemCls = L.Map.ContextMenu.BASE_CLS + '-item',
+ cls = options.disabled ? (itemCls + ' ' + itemCls + '-disabled') : itemCls,
+ el = this._insertElementAt('a', cls, container, index),
+ callback = this._createEventHandler(el, options.callback, options.context, options.hideOnSelect),
+ icon = this._getIcon(options),
+ iconCls = this._getIconCls(options),
+ html = '';
+
+ if (icon) {
+ html = '';
+ } else if (iconCls) {
+ html = '';
+ }
+
+ el.innerHTML = html + options.text;
+ el.href = '#';
+
+ L.DomEvent
+ .on(el, 'mouseover', this._onItemMouseOver, this)
+ .on(el, 'mouseout', this._onItemMouseOut, this)
+ .on(el, 'mousedown', L.DomEvent.stopPropagation)
+ .on(el, 'click', callback);
+
+ if (L.Browser.touch) {
+ L.DomEvent.on(el, this._touchstart, L.DomEvent.stopPropagation);
+ }
+
+ // Devices without a mouse fire "mouseover" on tap, but never âmouseout"
+ if (!L.Browser.pointer) {
+ L.DomEvent.on(el, 'click', this._onItemMouseOut, this);
+ }
+
+ return {
+ id: L.Util.stamp(el),
+ el: el,
+ callback: callback
+ };
+ },
+
+ _removeItem: function (id) {
+ var item,
+ el,
+ i, l, callback;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+
+ if (item.id === id) {
+ el = item.el;
+ callback = item.callback;
+
+ if (callback) {
+ L.DomEvent
+ .off(el, 'mouseover', this._onItemMouseOver, this)
+ .off(el, 'mouseover', this._onItemMouseOut, this)
+ .off(el, 'mousedown', L.DomEvent.stopPropagation)
+ .off(el, 'click', callback);
+
+ if (L.Browser.touch) {
+ L.DomEvent.off(el, this._touchstart, L.DomEvent.stopPropagation);
+ }
+
+ if (!L.Browser.pointer) {
+ L.DomEvent.on(el, 'click', this._onItemMouseOut, this);
+ }
+ }
+
+ this._container.removeChild(el);
+ this._items.splice(i, 1);
+
+ return item;
+ }
+ }
+ return null;
+ },
+
+ _createSeparator: function (container, index) {
+ var el = this._insertElementAt('div', L.Map.ContextMenu.BASE_CLS + '-separator', container, index);
+
+ return {
+ id: L.Util.stamp(el),
+ el: el
+ };
+ },
+
+ _createEventHandler: function (el, func, context, hideOnSelect) {
+ var me = this,
+ map = this._map,
+ disabledCls = L.Map.ContextMenu.BASE_CLS + '-item-disabled',
+ hideOnSelect = (hideOnSelect !== undefined) ? hideOnSelect : true;
+
+ return function (e) {
+ if (L.DomUtil.hasClass(el, disabledCls)) {
+ return;
+ }
+
+ if (hideOnSelect) {
+ me._hide();
+ }
+
+ if (func) {
+ func.call(context || map, me._showLocation);
+ }
+
+ me._map.fire('contextmenu:select', {
+ contextmenu: me,
+ el: el
+ });
+ };
+ },
+
+ _insertElementAt: function (tagName, className, container, index) {
+ var refEl,
+ el = document.createElement(tagName);
+
+ el.className = className;
+
+ if (index !== undefined) {
+ refEl = container.children[index];
+ }
+
+ if (refEl) {
+ container.insertBefore(el, refEl);
+ } else {
+ container.appendChild(el);
+ }
+
+ return el;
+ },
+
+ _show: function (e) {
+ this._showAtPoint(e.containerPoint, e);
+ },
+
+ _showAtPoint: function (pt, data) {
+ if (this._items.length) {
+ var map = this._map,
+ layerPoint = map.containerPointToLayerPoint(pt),
+ latlng = map.layerPointToLatLng(layerPoint),
+ event = L.extend(data || {}, {contextmenu: this});
+
+ this._showLocation = {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: pt
+ };
+
+ if (data && data.relatedTarget){
+ this._showLocation.relatedTarget = data.relatedTarget;
+ }
+
+ this._setPosition(pt);
+
+ if (!this._visible) {
+ this._container.style.display = 'block';
+ this._visible = true;
+ }
+
+ this._map.fire('contextmenu.show', event);
+ }
+ },
+
+ _hide: function () {
+ if (this._visible) {
+ this._visible = false;
+ this._container.style.display = 'none';
+ this._map.fire('contextmenu.hide', {contextmenu: this});
+ }
+ },
+
+ _getIcon: function (options) {
+ return L.Browser.retina && options.retinaIcon || options.icon;
+ },
+
+ _getIconCls: function (options) {
+ return L.Browser.retina && options.retinaIconCls || options.iconCls;
+ },
+
+ _setPosition: function (pt) {
+ var mapSize = this._map.getSize(),
+ container = this._container,
+ containerSize = this._getElementSize(container),
+ anchor;
+
+ if (this._map.options.contextmenuAnchor) {
+ anchor = L.point(this._map.options.contextmenuAnchor);
+ pt = pt.add(anchor);
+ }
+
+ container._leaflet_pos = pt;
+
+ if (pt.x + containerSize.x > mapSize.x) {
+ container.style.left = 'auto';
+ container.style.right = Math.min(Math.max(mapSize.x - pt.x, 0), mapSize.x - containerSize.x - 1) + 'px';
+ } else {
+ container.style.left = Math.max(pt.x, 0) + 'px';
+ container.style.right = 'auto';
+ }
+
+ if (pt.y + containerSize.y > mapSize.y) {
+ container.style.top = 'auto';
+ container.style.bottom = Math.min(Math.max(mapSize.y - pt.y, 0), mapSize.y - containerSize.y - 1) + 'px';
+ } else {
+ container.style.top = Math.max(pt.y, 0) + 'px';
+ container.style.bottom = 'auto';
+ }
+ },
+
+ _getElementSize: function (el) {
+ var size = this._size,
+ initialDisplay = el.style.display;
+
+ if (!size || this._sizeChanged) {
+ size = {};
+
+ el.style.left = '-999999px';
+ el.style.right = 'auto';
+ el.style.display = 'block';
+
+ size.x = el.offsetWidth;
+ size.y = el.offsetHeight;
+
+ el.style.left = 'auto';
+ el.style.display = initialDisplay;
+
+ this._sizeChanged = false;
+ }
+
+ return size;
+ },
+
+ _onKeyDown: function (e) {
+ var key = e.keyCode;
+
+ // If ESC pressed and context menu is visible hide it
+ if (key === 27) {
+ this._hide();
+ }
+ },
+
+ _onItemMouseOver: function (e) {
+ L.DomUtil.addClass(e.target || e.srcElement, 'over');
+ },
+
+ _onItemMouseOut: function (e) {
+ L.DomUtil.removeClass(e.target || e.srcElement, 'over');
+ }
+});
+
+L.Map.addInitHook('addHandler', 'contextmenu', L.Map.ContextMenu);
+L.Mixin.ContextMenu = {
+ bindContextMenu: function (options) {
+ L.setOptions(this, options);
+ this._initContextMenu();
+
+ return this;
+ },
+
+ unbindContextMenu: function (){
+ this.off('contextmenu', this._showContextMenu, this);
+
+ return this;
+ },
+
+ addContextMenuItem: function (item) {
+ this.options.contextmenuItems.push(item);
+ },
+
+ removeContextMenuItemWithIndex: function (index) {
+ var items = [];
+ for (var i = 0; i < this.options.contextmenuItems.length; i++) {
+ if (this.options.contextmenuItems[i].index == index){
+ items.push(i);
+ }
+ }
+ var elem = items.pop();
+ while (elem !== undefined) {
+ this.options.contextmenuItems.splice(elem,1);
+ elem = items.pop();
+ }
+ },
+
+ replaceContextMenuItem: function (item) {
+ this.removeContextMenuItemWithIndex(item.index);
+ this.addContextMenuItem(item);
+ },
+
+ _initContextMenu: function () {
+ this._items = [];
+
+ this.on('contextmenu', this._showContextMenu, this);
+ },
+
+ _showContextMenu: function (e) {
+ var itemOptions,
+ data, pt, i, l;
+
+ if (this._map.contextmenu) {
+ data = L.extend({relatedTarget: this}, e);
+
+ pt = this._map.mouseEventToContainerPoint(e.originalEvent);
+
+ if (!this.options.contextmenuInheritItems) {
+ this._map.contextmenu.hideAllItems();
+ }
+
+ for (i = 0, l = this.options.contextmenuItems.length; i < l; i++) {
+ itemOptions = this.options.contextmenuItems[i];
+ this._items.push(this._map.contextmenu.insertItem(itemOptions, itemOptions.index));
+ }
+
+ this._map.once('contextmenu.hide', this._hideContextMenu, this);
+
+ this._map.contextmenu.showAt(pt, data);
+ }
+ },
+
+ _hideContextMenu: function () {
+ var i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ this._map.contextmenu.removeItem(this._items[i]);
+ }
+ this._items.length = 0;
+
+ if (!this.options.contextmenuInheritItems) {
+ this._map.contextmenu.showAllItems();
+ }
+ }
+};
+
+var classes = [L.Marker, L.Path],
+ defaultOptions = {
+ contextmenu: false,
+ contextmenuItems: [],
+ contextmenuInheritItems: true
+ },
+ cls, i, l;
+
+for (i = 0, l = classes.length; i < l; i++) {
+ cls = classes[i];
+
+ // L.Class should probably provide an empty options hash, as it does not test
+ // for it here and add if needed
+ if (!cls.prototype.options) {
+ cls.prototype.options = defaultOptions;
+ } else {
+ cls.mergeOptions(defaultOptions);
+ }
+
+ cls.addInitHook(function () {
+ if (this.options.contextmenu) {
+ this._initContextMenu();
+ }
+ });
+
+ cls.include(L.Mixin.ContextMenu);
+}
+return L.Map.ContextMenu;
+});